From 062163b52f4c6c70a7146cb4c449912ec8ee1701 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Fri, 27 Sep 2019 22:18:04 -0700 Subject: [PATCH] Fix package tangle with configuration properties Fix a package tangle that was introduced when we added cache bypass to `SpringIterableConfigurationPropertySource`. Ideally we should have been able to depend on `env` from `context` but unfortunately the `EnvironmentPostProcessor` interface references `SpringApplication` which needs to use the Binder. The `isImmutable` method has now been moved to `OriginLookup` which removes the immediate tangle. Closes gh-18393 --- .../SpringIterableConfigurationPropertySource.java | 6 +++--- .../boot/env/OriginTrackedMapPropertySource.java | 8 ++------ .../org/springframework/boot/origin/OriginLookup.java | 10 ++++++++++ 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/source/SpringIterableConfigurationPropertySource.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/source/SpringIterableConfigurationPropertySource.java index f0b3adf195..6411fd26c4 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/source/SpringIterableConfigurationPropertySource.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/source/SpringIterableConfigurationPropertySource.java @@ -25,7 +25,7 @@ import java.util.List; import java.util.Set; import java.util.stream.Stream; -import org.springframework.boot.env.OriginTrackedMapPropertySource; +import org.springframework.boot.origin.OriginLookup; import org.springframework.core.env.EnumerablePropertySource; import org.springframework.core.env.MapPropertySource; import org.springframework.core.env.PropertySource; @@ -236,8 +236,8 @@ class SpringIterableConfigurationPropertySource extends SpringConfigurationPrope } private static boolean isImmutable(EnumerablePropertySource source) { - if (source instanceof OriginTrackedMapPropertySource) { - return ((OriginTrackedMapPropertySource) source).isImmutable(); + if (source instanceof OriginLookup) { + return ((OriginLookup) source).isImmutable(); } if (StandardEnvironment.SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME.equals(source.getName())) { return source.getSource() == System.getenv(); diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/env/OriginTrackedMapPropertySource.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/env/OriginTrackedMapPropertySource.java index b4c762c327..7e1d5c11c8 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/env/OriginTrackedMapPropertySource.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/env/OriginTrackedMapPropertySource.java @@ -22,7 +22,6 @@ import org.springframework.boot.origin.Origin; import org.springframework.boot.origin.OriginLookup; import org.springframework.boot.origin.OriginTrackedValue; import org.springframework.core.env.MapPropertySource; -import org.springframework.core.env.PropertySource; /** * {@link OriginLookup} backed by a {@link Map} containing {@link OriginTrackedValue @@ -52,6 +51,7 @@ public final class OriginTrackedMapPropertySource extends MapPropertySource impl * @param name the property source name * @param source the underlying map source * @param immutable if the underlying source is immutable and guaranteed not to change + * @since 2.2.0 */ @SuppressWarnings({ "unchecked", "rawtypes" }) public OriginTrackedMapPropertySource(String name, Map source, boolean immutable) { @@ -77,11 +77,7 @@ public final class OriginTrackedMapPropertySource extends MapPropertySource impl return null; } - /** - * Return {@code true} if this {@link PropertySource} is immutable and has contents - * that will never change. - * @return if the property source is read only - */ + @Override public boolean isImmutable() { return this.immutable; } diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/origin/OriginLookup.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/origin/OriginLookup.java index 4a71734af6..b798fa640b 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/origin/OriginLookup.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/origin/OriginLookup.java @@ -35,6 +35,16 @@ public interface OriginLookup { */ Origin getOrigin(K key); + /** + * Return {@code true} if this lookup is immutable and has contents that will never + * change. + * @return if the lookup is immutable + * @since 2.2.0 + */ + default boolean isImmutable() { + return false; + } + /** * Attempt to lookup the origin from the given source. If the source is not a * {@link OriginLookup} or if an exception occurs during lookup then {@code null} is