Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make DistributionStatisticConfig extensible #3854

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

mauhiz
Copy link

@mauhiz mauhiz commented May 22, 2023

Fixes #3848

@@ -497,7 +525,7 @@ private void validate(DistributionStatisticConfig distributionStatisticConfig) {
}
}

private static void rejectConfig(String msg) {
protected static void rejectConfig(String msg) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

DoNotCallSuggester: Methods that always throw an exception should be annotated with @DonotCall to prevent calls at compilation time vs. at runtime (note that adding @DonotCall will break any existing callers of this API).


Suggested change
protected static void rejectConfig(String msg) {
@DoNotCall("Always throws io.micrometer.core.instrument.config.InvalidConfigurationException") protected static void rejectConfig(String msg) {

ℹ️ Expand to see all @sonatype-lift commands

You can reply with the following commands. For example, reply with @sonatype-lift ignoreall to leave out all findings.

Command Usage
@sonatype-lift ignore Leave out the above finding from this PR
@sonatype-lift ignoreall Leave out all the existing findings from this PR
@sonatype-lift exclude <file|issue|path|tool> Exclude specified file|issue|path|tool from Lift findings by updating your config.toml file

Note: When talking to LiftBot, you need to refresh the page to see its response.
Click here to add LiftBot to another repo.

@sonatype-lift
Copy link
Contributor

sonatype-lift bot commented May 22, 2023

🛠 Lift Auto-fix

Some of the Lift findings in this PR can be automatically fixed. You can download and apply these changes in your local project directory of your branch to review the suggestions before committing.1

# Download the patch
curl https://lift.sonatype.com/api/patch/github.com/micrometer-metrics/micrometer/3854.diff -o lift-autofixes.diff

# Apply the patch with git
git apply lift-autofixes.diff

# Review the changes
git diff

Want it all in a single command? Open a terminal in your project's directory and copy and paste the following command:

curl https://lift.sonatype.com/api/patch/github.com/micrometer-metrics/micrometer/3854.diff | git apply

Once you're satisfied, commit and push your changes in your project.

Footnotes

  1. You can preview the patch by opening the patch URL in the browser.

@jonatan-ivanov
Copy link
Member

Let's discuss this on the issue first before we would talk about what is needed to implement it.

public DistributionStatisticConfig() {
}

public DistributionStatisticConfig(DistributionStatisticConfig original) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure I getting why this is needed, should not this be the concern of merge instead?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I thought it's the only way that that the subclass's constructor can copy all fields to a subclass instance, when merging

config = new DistributionStatisticConfig();
}

protected Builder(DistributionStatisticConfig config) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure I get this either a Builder should create an instance of DistributionStatisticConfig, not receive one.

return new SubBuilder(new SubDistributionStatisticConfig());
}

public static class SubBuilder extends Builder {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this why you need to receive a DistributionStatisticConfig in DistributionStatisticConfig.Builder?

I don't think SubDistributionStatisticConfig.Builder should extend DistributionStatisticConfig.Builder.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. Which way would you recommend?

@mauhiz
Copy link
Author

mauhiz commented May 25, 2023

@jonatan-ivanov thank you for the comments. This PoC was meant to (1) convey what I want to do and (2) show that it's doable without breaking binary compatibility.
To be honest though, it doesn't seem pretty as-is (with casts..) so I do welcome better ideas.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

DistributionStatisticConfig should be extensible
2 participants