From 79c222da787ac219d0944ac41ef9e319eb5defcf Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Wed, 2 May 2018 16:04:02 +0200 Subject: [PATCH 1/2] Allow to provide manual metadata for keys that are not unique Closes gh-12193 --- .../metadata/ConfigurationMetadata.java | 4 ++ ...ationMetadataAnnotationProcessorTests.java | 14 +++++++ .../specific/SimpleConflictingProperties.java | 40 +++++++++++++++++++ 3 files changed, 58 insertions(+) create mode 100644 spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationsample/specific/SimpleConflictingProperties.java diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/metadata/ConfigurationMetadata.java b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/metadata/ConfigurationMetadata.java index b9bc0e22ad1..75d03f4f594 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/metadata/ConfigurationMetadata.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/metadata/ConfigurationMetadata.java @@ -150,6 +150,10 @@ public class ConfigurationMetadata { return null; } candidates.removeIf((itemMetadata) -> !itemMetadata.hasSameType(metadata)); + if (candidates.size() > 1 && metadata.getType() != null) { + candidates.removeIf((itemMetadata) -> + !metadata.getType().equals(itemMetadata.getType())); + } if (candidates.size() == 1) { return candidates.get(0); } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessorTests.java b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessorTests.java index 44aaa8402c8..36b42bcccf4 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessorTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationprocessor/ConfigurationMetadataAnnotationProcessorTests.java @@ -80,6 +80,7 @@ import org.springframework.boot.configurationsample.specific.InnerClassPropertie import org.springframework.boot.configurationsample.specific.InnerClassRootConfig; import org.springframework.boot.configurationsample.specific.InvalidAccessorProperties; import org.springframework.boot.configurationsample.specific.InvalidDoubleRegistrationProperties; +import org.springframework.boot.configurationsample.specific.SimpleConflictingProperties; import org.springframework.boot.configurationsample.specific.SimplePojo; import org.springframework.boot.configurationsample.specific.StaticAccessor; import org.springframework.boot.configurationsample.specific.WildcardConfig; @@ -758,6 +759,19 @@ public class ConfigurationMetadataAnnotationProcessorTests { assertThat(metadata.getItems()).hasSize(4); } + @Test + public void mergeExistingPropertyWithSeveralCandidates() throws Exception { + ItemMetadata property = ItemMetadata.newProperty("simple", "flag", + Boolean.class.getName(), null, null, null, true, null); + writeAdditionalMetadata(property); + ConfigurationMetadata metadata = compile(SimpleProperties.class, + SimpleConflictingProperties.class); + assertThat(metadata.getItems()).hasSize(6); + assertThat(metadata).has(Metadata.withProperty("simple.flag", Boolean.class) + .fromSource(SimpleProperties.class).withDescription("A simple flag.") + .withDeprecation(null, null).withDefaultValue(true)); + } + @Test public void mergeExistingPropertyDescription() throws Exception { ItemMetadata property = ItemMetadata.newProperty("simple", "comparator", null, diff --git a/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationsample/specific/SimpleConflictingProperties.java b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationsample/specific/SimpleConflictingProperties.java new file mode 100644 index 00000000000..d44fefce697 --- /dev/null +++ b/spring-boot-project/spring-boot-tools/spring-boot-configuration-processor/src/test/java/org/springframework/boot/configurationsample/specific/SimpleConflictingProperties.java @@ -0,0 +1,40 @@ +/* + * Copyright 2012-2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.configurationsample.specific; + +import org.springframework.boot.configurationsample.ConfigurationProperties; +import org.springframework.boot.configurationsample.simple.SimpleProperties; + +/** + * Properties that conflict with {@link SimpleProperties}. + * + * @author Stephane Nicoll + */ +@ConfigurationProperties("simple") +public class SimpleConflictingProperties { + + private String flag = "hello"; + + public String getFlag() { + return this.flag; + } + + public void setFlag(String flag) { + this.flag = flag; + } + +} From d6244889f5752835db16578810983b5798ac34fb Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Wed, 2 May 2018 16:07:38 +0200 Subject: [PATCH 2/2] Add default value for "spring.flyway.locations" See gh-12193 --- .../META-INF/additional-spring-configuration-metadata.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-boot-project/spring-boot-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json index bbcf623be11..5da488a05fc 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -1209,6 +1209,13 @@ "level": "error" } }, + { + "name": "spring.flyway.locations", + "type": "java.util.List", + "defaultValue": [ + "classpath:db/migration" + ] + }, { "name": "spring.flyway.sql-migration-suffix", "deprecation": {