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

Optimize SystemEnvironmentPropertyMapper #21523

Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ private String convertName(ConfigurationPropertyName name, int numberOfElements)
StringBuilder result = new StringBuilder();
for (int i = 0; i < numberOfElements; i++) {
if (result.length() > 0) {
result.append("_");
result.append('_');
}
result.append(name.getElement(i, Form.UNIFORM).toUpperCase(Locale.ENGLISH));
}
Expand All @@ -69,7 +69,7 @@ private String convertLegacyName(ConfigurationPropertyName name) {
StringBuilder result = new StringBuilder();
for (int i = 0; i < name.getNumberOfElements(); i++) {
if (result.length() > 0) {
result.append("_");
result.append('_');
}
result.append(convertLegacyNameElement(name.getElement(i, Form.ORIGINAL)));
}
Expand Down Expand Up @@ -116,13 +116,24 @@ private boolean isLegacyAncestorOf(ConfigurationPropertyName name, Configuration
if (!hasDashedEntries(name)) {
return false;
}
StringBuilder legacyCompatibleName = buildLegacyCompatibleName(name);
try {
return ConfigurationPropertyName.of(legacyCompatibleName).isAncestorOf(candidate);
}
catch (Exception ex) {
Copy link
Member

Choose a reason for hiding this comment

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

Can you share what that extra catch block is supposed to cover?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

The removal of isValid here might lead to exceptions if the name can't be constructed.

Copy link
Member

Choose a reason for hiding this comment

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

I'd argue that legacyCompatibleName is a bit misleading then. It makes me wonder looking at the code why a catch block is necessary. Thoughts?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I didn't change anything in that regards. I think the name was chosen to reflect the "legacy" format and isValid() was added to be sure that no incompatible output breaks the code here. This PR just sticks to that behaviour of not breaking anything with a potentially invalid name.
Having that said, I too had a hard time seeing how an invalid name can be produced from a valid name, but didn't want to change the intention of the code.

Copy link
Member

Choose a reason for hiding this comment

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

Alright, thanks for the feedback. Flagging for team attention to see what the rest of the team thinks.

return false;
}
}

private StringBuilder buildLegacyCompatibleName(ConfigurationPropertyName name) {
StringBuilder legacyCompatibleName = new StringBuilder();
for (int i = 0; i < name.getNumberOfElements(); i++) {
legacyCompatibleName.append((i != 0) ? "." : "");
if (i != 0) {
legacyCompatibleName.append('.');
}
legacyCompatibleName.append(name.getElement(i, Form.DASHED).replace('-', '.'));
}
return ConfigurationPropertyName.isValid(legacyCompatibleName)
&& ConfigurationPropertyName.of(legacyCompatibleName).isAncestorOf(candidate);
return legacyCompatibleName;
}

boolean hasDashedEntries(ConfigurationPropertyName name) {
Expand Down