From c3382049652998e766544aba6abde55330c74e1f Mon Sep 17 00:00:00 2001 From: chang-chao Date: Fri, 26 Oct 2018 00:40:08 +0900 Subject: [PATCH 1/3] Take aliases into consideration when checking descendants --- .../AliasedConfigurationPropertySource.java | 18 +++++++++---- .../ConfigurationPropertyNameAliases.java | 5 ++++ ...iasedConfigurationPropertySourceTests.java | 26 ++++++++++++++++--- 3 files changed, 41 insertions(+), 8 deletions(-) diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/source/AliasedConfigurationPropertySource.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/source/AliasedConfigurationPropertySource.java index ea9496881b06..9253b3ae15b9 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/source/AliasedConfigurationPropertySource.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/source/AliasedConfigurationPropertySource.java @@ -16,6 +16,8 @@ package org.springframework.boot.context.properties.source; +import java.util.Set; + import org.springframework.util.Assert; /** @@ -58,11 +60,17 @@ public ConfigurationPropertyState containsDescendantOf( if (result != ConfigurationPropertyState.ABSENT) { return result; } - for (ConfigurationPropertyName alias : getAliases().getAliases(name)) { - ConfigurationPropertyState aliasResult = this.source - .containsDescendantOf(alias); - if (aliasResult != ConfigurationPropertyState.ABSENT) { - return aliasResult; + Set aliasNames = getAliases().getAllNames(); + for (ConfigurationPropertyName configurationPropertyName : aliasNames) { + boolean descendantPresentInAlias = aliases + .getAliases(configurationPropertyName).stream() + .filter(name::isAncestorOf).findFirst().isPresent(); + if (descendantPresentInAlias) { + ConfigurationProperty configurationProperty = this.getSource() + .getConfigurationProperty(configurationPropertyName); + if (configurationProperty != null) { + return ConfigurationPropertyState.PRESENT; + } } } return ConfigurationPropertyState.ABSENT; diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/source/ConfigurationPropertyNameAliases.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/source/ConfigurationPropertyNameAliases.java index f668bae35f3d..fea19fe72d2c 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/source/ConfigurationPropertyNameAliases.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/source/ConfigurationPropertyNameAliases.java @@ -20,6 +20,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Set; import org.springframework.util.Assert; import org.springframework.util.LinkedMultiValueMap; @@ -74,4 +75,8 @@ public ConfigurationPropertyName getNameForAlias(ConfigurationPropertyName alias .findFirst().orElse(null); } + public Set getAllNames() { + return aliases.keySet(); + } + } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/properties/source/AliasedConfigurationPropertySourceTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/properties/source/AliasedConfigurationPropertySourceTests.java index ca9e4e34e53c..bc4017017606 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/properties/source/AliasedConfigurationPropertySourceTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/properties/source/AliasedConfigurationPropertySourceTests.java @@ -16,14 +16,15 @@ package org.springframework.boot.context.properties.source; -import org.junit.Test; -import org.mockito.Answers; - import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.withSettings; +import org.junit.Test; +import org.mockito.Answers; +import org.springframework.boot.origin.Origin; + /** * Tests for {@link AliasedConfigurationPropertySource}. * @@ -111,6 +112,25 @@ public void containsDescendantOfWhenAnyIsPresentShouldReturnPresent() { .isEqualTo(ConfigurationPropertyState.PRESENT); } + @Test + public void containsDescendantOfWhenPresentInAliasShouldReturnPresent() { + ConfigurationPropertyName name = ConfigurationPropertyName.of("baz"); + ConfigurationPropertySource source = mock(ConfigurationPropertySource.class, + withSettings().defaultAnswer(Answers.CALLS_REAL_METHODS)); + given(source.containsDescendantOf(name)) + .willReturn(ConfigurationPropertyState.ABSENT); + + ConfigurationPropertyName barFoo = ConfigurationPropertyName.of("bar.foo"); + + given(source.getConfigurationProperty(barFoo)).willReturn( + new ConfigurationProperty(barFoo, "barFooValue", mock(Origin.class))); + + ConfigurationPropertySource aliased = source + .withAliases(new ConfigurationPropertyNameAliases("bar.foo", "baz.foo")); + assertThat(aliased.containsDescendantOf(name)) + .isEqualTo(ConfigurationPropertyState.PRESENT); + } + private Object getValue(ConfigurationPropertySource source, String name) { ConfigurationProperty property = source .getConfigurationProperty(ConfigurationPropertyName.of(name)); From 4ab88597b00b32d408b7f3c4f9d57932df76ead2 Mon Sep 17 00:00:00 2001 From: "chao.chang" Date: Fri, 26 Oct 2018 10:40:07 +0900 Subject: [PATCH 2/3] Fix checkstyle errors. --- .../source/AliasedConfigurationPropertySource.java | 2 +- .../source/ConfigurationPropertyNameAliases.java | 2 +- .../source/AliasedConfigurationPropertySourceTests.java | 9 +++++---- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/source/AliasedConfigurationPropertySource.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/source/AliasedConfigurationPropertySource.java index 9253b3ae15b9..b70da401ce36 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/source/AliasedConfigurationPropertySource.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/source/AliasedConfigurationPropertySource.java @@ -62,7 +62,7 @@ public ConfigurationPropertyState containsDescendantOf( } Set aliasNames = getAliases().getAllNames(); for (ConfigurationPropertyName configurationPropertyName : aliasNames) { - boolean descendantPresentInAlias = aliases + boolean descendantPresentInAlias = this.aliases .getAliases(configurationPropertyName).stream() .filter(name::isAncestorOf).findFirst().isPresent(); if (descendantPresentInAlias) { diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/source/ConfigurationPropertyNameAliases.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/source/ConfigurationPropertyNameAliases.java index fea19fe72d2c..36b33f74e48c 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/source/ConfigurationPropertyNameAliases.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/source/ConfigurationPropertyNameAliases.java @@ -76,7 +76,7 @@ public ConfigurationPropertyName getNameForAlias(ConfigurationPropertyName alias } public Set getAllNames() { - return aliases.keySet(); + return this.aliases.keySet(); } } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/properties/source/AliasedConfigurationPropertySourceTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/properties/source/AliasedConfigurationPropertySourceTests.java index bc4017017606..23b8583db8d6 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/properties/source/AliasedConfigurationPropertySourceTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/properties/source/AliasedConfigurationPropertySourceTests.java @@ -16,15 +16,16 @@ package org.springframework.boot.context.properties.source; +import org.junit.Test; +import org.mockito.Answers; + +import org.springframework.boot.origin.Origin; + import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.withSettings; -import org.junit.Test; -import org.mockito.Answers; -import org.springframework.boot.origin.Origin; - /** * Tests for {@link AliasedConfigurationPropertySource}. * From 9f46cdc6c0cc81b78b9a5b6927e4e9754fe5e664 Mon Sep 17 00:00:00 2001 From: "chao.chang" Date: Fri, 26 Oct 2018 11:15:39 +0900 Subject: [PATCH 3/3] Fix test case. --- .../source/AliasedConfigurationPropertySource.java | 2 +- .../source/AliasedConfigurationPropertySourceTests.java | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/source/AliasedConfigurationPropertySource.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/source/AliasedConfigurationPropertySource.java index b70da401ce36..6b2eefa708ac 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/source/AliasedConfigurationPropertySource.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/source/AliasedConfigurationPropertySource.java @@ -60,7 +60,7 @@ public ConfigurationPropertyState containsDescendantOf( if (result != ConfigurationPropertyState.ABSENT) { return result; } - Set aliasNames = getAliases().getAllNames(); + Set aliasNames = this.aliases.getAllNames(); for (ConfigurationPropertyName configurationPropertyName : aliasNames) { boolean descendantPresentInAlias = this.aliases .getAliases(configurationPropertyName).stream() diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/properties/source/AliasedConfigurationPropertySourceTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/properties/source/AliasedConfigurationPropertySourceTests.java index 23b8583db8d6..fd1a7af93e8c 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/properties/source/AliasedConfigurationPropertySourceTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/properties/source/AliasedConfigurationPropertySourceTests.java @@ -107,8 +107,11 @@ public void containsDescendantOfWhenAnyIsPresentShouldReturnPresent() { .willReturn(ConfigurationPropertyState.ABSENT); given(source.containsDescendantOf(ConfigurationPropertyName.of("bar"))) .willReturn(ConfigurationPropertyState.PRESENT); + ConfigurationPropertyName barBar = ConfigurationPropertyName.of("bar.bar"); + given(source.getConfigurationProperty(barBar)).willReturn( + new ConfigurationProperty(barBar, "barBarValue", mock(Origin.class))); ConfigurationPropertySource aliased = source - .withAliases(new ConfigurationPropertyNameAliases("foo", "bar")); + .withAliases(new ConfigurationPropertyNameAliases("bar.bar", "foo.foo")); assertThat(aliased.containsDescendantOf(name)) .isEqualTo(ConfigurationPropertyState.PRESENT); }