Skip to content

Commit 4c6c472

Browse files
committed
handle OriginTrackedMapPropertySource which might be automagically created by Spring
1 parent 0c163aa commit 4c6c472

File tree

10 files changed

+46
-14
lines changed

10 files changed

+46
-14
lines changed

modules/spring-properties-order-by-configurations/src/main/java/org/framefork/spring/context/propertiesOrderByConfigurations/ConfigurationsAnalyzer.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package org.framefork.spring.context.propertiesOrderByConfigurations;
22

33
import org.framefork.spring.context.propertiesOrderByConfigurations.SpringConfigurationUtils.PropertySourceResource;
4-
import org.slf4j.Logger;
5-
import org.slf4j.LoggerFactory;
64
import org.springframework.beans.factory.config.BeanDefinition;
75
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
86
import org.springframework.boot.autoconfigure.AutoConfiguration;
@@ -28,8 +26,6 @@
2826
class ConfigurationsAnalyzer
2927
{
3028

31-
private static final Logger log = LoggerFactory.getLogger(ConfigurationsAnalyzer.class);
32-
3329
private final List<ConfigurationClass> configurations;
3430
private final List<ConfigurationClass> sortedConfigurationClasses;
3531

@@ -130,7 +126,6 @@ private Map<ConfigurationClass, DependencyNode> collectDependencyGraph()
130126
for (Class<?> directImport : configurationClass.directImports()) {
131127
ConfigurationClass importedConfigurationClass = configurationClassTypes.get(directImport);
132128
if (importedConfigurationClass == null) {
133-
log.debug("No ConfigurationClass found for {} - it was probably disabled", directImport.getName());
134129
continue;
135130
}
136131
dependencyNode.addChild(

modules/spring-properties-order-by-configurations/src/main/java/org/framefork/spring/context/propertiesOrderByConfigurations/SpringConfigurationUtils.java

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
import org.springframework.beans.factory.annotation.AnnotatedBeanDefinition;
44
import org.springframework.beans.factory.config.BeanDefinition;
55
import org.springframework.beans.factory.support.AbstractBeanDefinition;
6+
import org.springframework.boot.env.OriginTrackedMapPropertySource;
7+
import org.springframework.boot.origin.OriginProvider;
8+
import org.springframework.boot.origin.TextResourceOrigin;
69
import org.springframework.context.annotation.Import;
710
import org.springframework.context.annotation.PropertySources;
811
import org.springframework.core.annotation.AnnotationAttributes;
@@ -49,11 +52,33 @@ static List<PropertySource<?>> getPropertySources(final MutablePropertySources p
4952
return result;
5053
}
5154

52-
static List<ResourcePropertySource> getResourcePropertySources(final List<PropertySource<?>> propertySources)
55+
static List<PropertySource<?>> getResourcePropertySources(final List<PropertySource<?>> propertySources)
5356
{
5457
return propertySources.stream()
55-
.filter(ResourcePropertySource.class::isInstance)
56-
.map(ResourcePropertySource.class::cast)
58+
.filter(source -> {
59+
if (source instanceof ResourcePropertySource) {
60+
return true;
61+
}
62+
63+
if (source instanceof OriginTrackedMapPropertySource originTrackedSource) {
64+
for (var value : originTrackedSource.getSource().values()) {
65+
if (value instanceof OriginProvider originProvider) {
66+
var origin = originProvider.getOrigin();
67+
if (origin instanceof TextResourceOrigin textResourceOrigin) {
68+
String filename = textResourceOrigin.getResource().getFilename();
69+
if (filename != null && filename.endsWith(".properties")) {
70+
return true;
71+
}
72+
}
73+
break;
74+
}
75+
}
76+
77+
return true;
78+
}
79+
80+
return false;
81+
})
5782
.toList();
5883
}
5984

modules/spring-properties-order-by-configurations/src/test/java/org/framefork/spring/context/propertiesOrderByConfigurations/ConfigurationsAnalyzerTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ public void sorting()
6565
"class path resource [config61.properties]",
6666
"class path resource [config72.properties]",
6767
"class path resource [config71.properties]",
68+
"class path resource [application.properties]",
6869
"class path resource [config1.properties]",
6970
"class path resource [config3.properties]"
7071
);
@@ -109,6 +110,7 @@ public static class AppConfiguration7
109110

110111
@Configuration
111112
@Import({CoreConfiguration1.class})
113+
@PropertySource("classpath:application.properties")
112114
public static class AppConfiguration4
113115
{
114116

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
testing.property=1
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
testing.property=7

testing/spring-boot-3-2/src/test/java/org/framefork/testing/AppTest.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.junit.jupiter.api.Test;
55
import org.springframework.beans.factory.annotation.Autowired;
66
import org.springframework.boot.SpringBootVersion;
7+
import org.springframework.boot.env.OriginTrackedMapPropertySource;
78
import org.springframework.boot.test.context.SpringBootTest;
89
import org.springframework.core.env.ConfigurableEnvironment;
910
import org.springframework.core.env.PropertySource;
@@ -37,14 +38,15 @@ public void configsResolution()
3738
{
3839
var sources = environment.getPropertySources();
3940
var resourceSources = sources.stream()
40-
.filter(ResourcePropertySource.class::isInstance)
41+
.filter(source -> source instanceof ResourcePropertySource || source instanceof OriginTrackedMapPropertySource)
4142
.map(PropertySource::getName)
4243
.toList();
4344

4445
assertThat(resourceSources).containsExactly(
4546
"class path resource [config5.properties]",
4647
"class path resource [config1.properties]",
47-
"class path resource [config3.properties]"
48+
"class path resource [config3.properties]",
49+
"Config resource 'class path resource [application.properties]' via location 'optional:classpath:/'"
4850
);
4951

5052
String testingProperty = environment.getProperty("testing.property");
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
testing.property=7

testing/spring-boot-3-3/src/test/java/org/framefork/testing/AppTest.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.junit.jupiter.api.Test;
55
import org.springframework.beans.factory.annotation.Autowired;
66
import org.springframework.boot.SpringBootVersion;
7+
import org.springframework.boot.env.OriginTrackedMapPropertySource;
78
import org.springframework.boot.test.context.SpringBootTest;
89
import org.springframework.core.env.ConfigurableEnvironment;
910
import org.springframework.core.env.PropertySource;
@@ -37,14 +38,15 @@ public void configsResolution()
3738
{
3839
var sources = environment.getPropertySources();
3940
var resourceSources = sources.stream()
40-
.filter(ResourcePropertySource.class::isInstance)
41+
.filter(source -> source instanceof ResourcePropertySource || source instanceof OriginTrackedMapPropertySource)
4142
.map(PropertySource::getName)
4243
.toList();
4344

4445
assertThat(resourceSources).containsExactly(
4546
"class path resource [config5.properties]",
4647
"class path resource [config1.properties]",
47-
"class path resource [config3.properties]"
48+
"class path resource [config3.properties]",
49+
"Config resource 'class path resource [application.properties]' via location 'optional:classpath:/'"
4850
);
4951

5052
String testingProperty = environment.getProperty("testing.property");
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
testing.property=7

testing/spring-boot-3-4/src/test/java/org/framefork/testing/AppTest.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.junit.jupiter.api.Test;
55
import org.springframework.beans.factory.annotation.Autowired;
66
import org.springframework.boot.SpringBootVersion;
7+
import org.springframework.boot.env.OriginTrackedMapPropertySource;
78
import org.springframework.boot.test.context.SpringBootTest;
89
import org.springframework.core.env.ConfigurableEnvironment;
910
import org.springframework.core.env.PropertySource;
@@ -37,14 +38,15 @@ public void configsResolution()
3738
{
3839
var sources = environment.getPropertySources();
3940
var resourceSources = sources.stream()
40-
.filter(ResourcePropertySource.class::isInstance)
41+
.filter(source -> source instanceof ResourcePropertySource || source instanceof OriginTrackedMapPropertySource)
4142
.map(PropertySource::getName)
4243
.toList();
4344

4445
assertThat(resourceSources).containsExactly(
4546
"class path resource [config5.properties]",
4647
"class path resource [config1.properties]",
47-
"class path resource [config3.properties]"
48+
"class path resource [config3.properties]",
49+
"Config resource 'class path resource [application.properties]' via location 'optional:classpath:/'"
4850
);
4951

5052
String testingProperty = environment.getProperty("testing.property");

0 commit comments

Comments
 (0)