Merge pull request #21523 from dreis2211

* pr/21523:
  Polish 'Optimize SystemEnvironmentPropertyMapper'
  Optimize SystemEnvironmentPropertyMapper
  Call append only when necessary
  Use chars rather than strings

Closes gh-21523
pull/21793/head
Phillip Webb 5 years ago
commit bbb57428cb

@ -510,6 +510,18 @@ public final class ConfigurationPropertyName implements Comparable<Configuration
return of(name, false);
}
/**
* Return a {@link ConfigurationPropertyName} for the specified string or {@code null}
* if the name is not valid.
* @param name the source name
* @return a {@link ConfigurationPropertyName} instance
* @throws InvalidConfigurationPropertyNameException if the name is not valid
* @since 2.3.1
*/
public static ConfigurationPropertyName ofIfValid(CharSequence name) {
return of(name, true);
}
/**
* Return a {@link ConfigurationPropertyName} for the specified string.
* @param name the source name

@ -58,7 +58,7 @@ final class SystemEnvironmentPropertyMapper implements PropertyMapper {
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));
}
@ -69,7 +69,7 @@ final class SystemEnvironmentPropertyMapper implements PropertyMapper {
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)));
}
@ -116,13 +116,19 @@ final class SystemEnvironmentPropertyMapper implements PropertyMapper {
if (!hasDashedEntries(name)) {
return false;
}
ConfigurationPropertyName legacyCompatibleName = buildLegacyCompatibleName(name);
return legacyCompatibleName != null && legacyCompatibleName.isAncestorOf(candidate);
}
private ConfigurationPropertyName 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 ConfigurationPropertyName.ofIfValid(legacyCompatibleName);
}
boolean hasDashedEntries(ConfigurationPropertyName name) {

@ -210,6 +210,18 @@ class ConfigurationPropertyNameTests {
assertThat(name.append("foo").toString()).isEqualTo("foo");
}
@Test
void ofIfValidWhenNameIsValidReturnsName() {
ConfigurationPropertyName name = ConfigurationPropertyName.ofIfValid("spring.bo-ot");
assertThat(name).hasToString("spring.bo-ot");
}
@Test
void ofIfValidWhenNameIsNotValidReturnsNull() {
ConfigurationPropertyName name = ConfigurationPropertyName.ofIfValid("spring.bo!oot");
assertThat(name).isNull();
}
@Test
void adaptWhenNameIsNullShouldThrowException() {
assertThatIllegalArgumentException().isThrownBy(() -> ConfigurationPropertyName.adapt(null, '.'))

Loading…
Cancel
Save