Skip to content

Commit 83b3d76

Browse files
authored
Merge pull request #48635 from radcortez/fix-47963
Automatically ignore mapping paths shared by build time and runtime config
2 parents 32f9c05 + 386d38a commit 83b3d76

File tree

7 files changed

+88
-4
lines changed

7 files changed

+88
-4
lines changed

core/deployment/src/main/java/io/quarkus/deployment/configuration/BuildTimeConfigurationReader.java

Lines changed: 47 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ private static List<Class<?>> collectConfigRoots(ClassLoader classLoader) throws
128128
final List<ConfigClass> buildTimeRunTimeMappings;
129129
final List<ConfigClass> runTimeMappings;
130130
final List<ConfigClass> buildTimeVisibleMappings;
131+
final Set<String> mappingsIgnorePaths;
131132

132133
final Set<String> deprecatedProperties;
133134
final Set<String> deprecatedRuntimeProperties;
@@ -256,6 +257,28 @@ private BuildTimeConfigurationReader(ClassLoader classLoader, final List<Class<?
256257
buildTimeVisibleMappings.addAll(buildTimeMappings);
257258
buildTimeVisibleMappings.addAll(buildTimeRunTimeMappings);
258259

260+
mappingsIgnorePaths = new HashSet<>();
261+
for (ConfigClass buildTimeMapping : buildTimeMappings) {
262+
// Already ignored all the quarkus namespace in QuarkusConfigBuilderCustomizer
263+
if (buildTimeMapping.getPrefix().equals("quarkus") || buildTimeMapping.getPrefix().startsWith("quarkus.")) {
264+
continue;
265+
}
266+
267+
for (ConfigClass staticMapping : buildTimeRunTimeMappings) {
268+
if (buildTimeMapping.getPrefix().equals(staticMapping.getPrefix())) {
269+
mappingsIgnorePaths.add(buildTimeMapping.getPrefix() + ".**");
270+
break;
271+
}
272+
}
273+
274+
for (ConfigClass runtimeMapping : runTimeMappings) {
275+
if (buildTimeMapping.getPrefix().equals(runtimeMapping.getPrefix())) {
276+
mappingsIgnorePaths.add(buildTimeMapping.getPrefix() + ".**");
277+
break;
278+
}
279+
}
280+
}
281+
259282
deprecatedProperties = getDeprecatedProperties(allRoots);
260283
deprecatedRuntimeProperties = getDeprecatedProperties(runTimeRoots);
261284

@@ -422,6 +445,9 @@ public SmallRyeConfig initConfiguration(LaunchMode launchMode, Properties buildS
422445
for (ConfigClass mapping : getBuildTimeVisibleMappings()) {
423446
builder.withMapping(mapping);
424447
}
448+
for (String mappingsIgnorePath : mappingsIgnorePaths) {
449+
builder.withMappingIgnore(mappingsIgnorePath);
450+
}
425451

426452
builder.withInterceptors(buildConfigTracker);
427453
builder.withInterceptors(ConfigCompatibility.FrontEnd.instance(), ConfigCompatibility.BackEnd.instance());
@@ -672,7 +698,7 @@ public void accept(final ConfigSource buildSystem) {
672698

673699
// ConfigMappings
674700
for (ConfigClass mapping : buildTimeVisibleMappings) {
675-
objectsByClass.put(mapping.getKlass(), config.getConfigMapping(mapping.getKlass(), mapping.getPrefix()));
701+
objectsByClass.put(mapping.getType(), config.getConfigMapping(mapping.getType(), mapping.getPrefix()));
676702
}
677703

678704
Set<PropertyName> buildTimeNames = mappingsToNames(buildTimeMappings).keySet();
@@ -725,6 +751,7 @@ public void accept(final ConfigSource buildSystem) {
725751
.setBuildTimeMappings(buildTimeMappings)
726752
.setBuildTimeRunTimeMappings(buildTimeRunTimeMappings)
727753
.setRunTimeMappings(runTimeMappings)
754+
.setMappingsIgnorePaths(mappingsIgnorePaths)
728755
.setUnknownBuildProperties(unknownBuildProperties)
729756
.setDeprecatedRuntimeProperties(deprecatedRuntimeProperties)
730757
.setBuildConfigTracker(buildConfigTracker)
@@ -1319,6 +1346,7 @@ public static final class ReadResult {
13191346
final List<ConfigClass> buildTimeRunTimeMappings;
13201347
final List<ConfigClass> runTimeMappings;
13211348
final List<ConfigClass> allMappings;
1349+
final Set<String> mappingsIgnorePaths;
13221350
final Map<Class<?>, ConfigClass> allMappingsByClass;
13231351

13241352
final Set<String> unknownBuildProperties;
@@ -1343,6 +1371,7 @@ public ReadResult(final Builder builder) {
13431371
this.buildTimeMappings = builder.getBuildTimeMappings();
13441372
this.buildTimeRunTimeMappings = builder.getBuildTimeRunTimeMappings();
13451373
this.runTimeMappings = builder.getRunTimeMappings();
1374+
this.mappingsIgnorePaths = builder.getMappingsIgnorePaths();
13461375
this.allMappings = new ArrayList<>(mappingsToMap(builder).values());
13471376
this.allMappingsByClass = mappingsToMap(builder);
13481377

@@ -1363,13 +1392,13 @@ private static Map<Class<?>, RootDefinition> rootsToMap(Builder builder) {
13631392
private static Map<Class<?>, ConfigClass> mappingsToMap(Builder builder) {
13641393
Map<Class<?>, ConfigClass> map = new HashMap<>();
13651394
for (ConfigClass mapping : builder.getBuildTimeMappings()) {
1366-
map.put(mapping.getKlass(), mapping);
1395+
map.put(mapping.getType(), mapping);
13671396
}
13681397
for (ConfigClass mapping : builder.getBuildTimeRunTimeMappings()) {
1369-
map.put(mapping.getKlass(), mapping);
1398+
map.put(mapping.getType(), mapping);
13701399
}
13711400
for (ConfigClass mapping : builder.getRunTimeMappings()) {
1372-
map.put(mapping.getKlass(), mapping);
1401+
map.put(mapping.getType(), mapping);
13731402
}
13741403
return map;
13751404
}
@@ -1426,6 +1455,10 @@ public List<ConfigClass> getRunTimeMappings() {
14261455
return runTimeMappings;
14271456
}
14281457

1458+
public Set<String> getMappingsIgnorePaths() {
1459+
return mappingsIgnorePaths;
1460+
}
1461+
14291462
public List<ConfigClass> getAllMappings() {
14301463
return allMappings;
14311464
}
@@ -1467,6 +1500,7 @@ static class Builder {
14671500
private List<ConfigClass> buildTimeMappings;
14681501
private List<ConfigClass> buildTimeRunTimeMappings;
14691502
private List<ConfigClass> runTimeMappings;
1503+
private Set<String> mappingsIgnorePaths;
14701504
private Set<String> unknownBuildProperties;
14711505
private Set<String> deprecatedRuntimeProperties;
14721506
private ConfigTrackingInterceptor buildConfigTracker;
@@ -1579,6 +1613,15 @@ Builder setRunTimeMappings(final List<ConfigClass> runTimeMappings) {
15791613
return this;
15801614
}
15811615

1616+
Set<String> getMappingsIgnorePaths() {
1617+
return mappingsIgnorePaths;
1618+
}
1619+
1620+
Builder setMappingsIgnorePaths(final Set<String> mappingsIgnorePaths) {
1621+
this.mappingsIgnorePaths = mappingsIgnorePaths;
1622+
return this;
1623+
}
1624+
15821625
Set<String> getUnknownBuildProperties() {
15831626
return unknownBuildProperties;
15841627
}

core/deployment/src/main/java/io/quarkus/deployment/steps/ConfigGenerationBuildStep.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,7 @@ void generateBuilders(
301301
staticSafeServices(secretKeyHandlerFactories),
302302
Set.of(),
303303
staticMappings,
304+
configItem.getReadResult().getMappingsIgnorePaths(),
304305
staticCustomizers,
305306
staticInitConfigBuilders.stream().map(StaticInitConfigBuilderBuildItem::getBuilderClassName).collect(toSet()));
306307
reflectiveClass.produce(ReflectiveClassBuildItem.builder(CONFIG_STATIC_NAME).build());
@@ -328,6 +329,7 @@ void generateBuilders(
328329
secretKeyHandlerFactories,
329330
staticMappings,
330331
runTimeMappings,
332+
configItem.getReadResult().getMappingsIgnorePaths(),
331333
runtimeCustomizers,
332334
runTimeConfigBuilders.stream().map(RunTimeConfigBuilderBuildItem::getBuilderClassName).collect(toSet()));
333335
reflectiveClass.produce(ReflectiveClassBuildItem.builder(CONFIG_RUNTIME_NAME).build());
@@ -593,6 +595,9 @@ private static String getPathWithoutExtension(Path path) {
593595
private static final MethodDescriptor WITH_MAPPING_INSTANCE = MethodDescriptor.ofMethod(AbstractConfigBuilder.class,
594596
"withMappingInstance",
595597
void.class, SmallRyeConfigBuilder.class, ConfigClass.class);
598+
private static final MethodDescriptor WITH_MAPPING_IGNORE = MethodDescriptor.ofMethod(AbstractConfigBuilder.class,
599+
"withMappingIgnore",
600+
void.class, SmallRyeConfigBuilder.class, String.class);
596601
private static final MethodDescriptor WITH_CUSTOMIZER = MethodDescriptor.ofMethod(AbstractConfigBuilder.class,
597602
"withCustomizer",
598603
void.class, SmallRyeConfigBuilder.class, SmallRyeConfigBuilderCustomizer.class);
@@ -667,6 +672,7 @@ private static void generateConfigBuilder(
667672
Set<String> secretKeyHandlerFactories,
668673
Set<ConfigClass> mappingsInstances,
669674
Set<ConfigClass> mappings,
675+
Set<String> mappingsIgnorePaths,
670676
Set<String> configCustomizers,
671677
Set<String> configBuilders) {
672678

@@ -753,6 +759,10 @@ private static void generateConfigBuilder(
753759
method.invokeStaticMethod(WITH_MAPPING, configBuilder, method.readStaticField(sharedFields.get(mapping)));
754760
}
755761

762+
for (String path : mappingsIgnorePaths) {
763+
method.invokeStaticMethod(WITH_MAPPING_IGNORE, configBuilder, method.load(path));
764+
}
765+
756766
clinit.returnVoid();
757767
method.returnVoid();
758768
}

core/runtime/src/main/java/io/quarkus/runtime/configuration/AbstractConfigBuilder.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,10 @@ protected static void withMappingInstance(SmallRyeConfigBuilder builder, ConfigC
8787
builder.getMappingsBuilder().mappingInstance(mapping, config.getConfigMapping(mapping.getType(), mapping.getPrefix()));
8888
}
8989

90+
protected static void withMappingIgnore(SmallRyeConfigBuilder builder, String path) {
91+
builder.withMappingIgnore(path);
92+
}
93+
9094
protected static void withBuilder(SmallRyeConfigBuilder builder, ConfigBuilder configBuilder) {
9195
builder.withCustomizers(new SmallRyeConfigBuilderCustomizer() {
9296
@Override
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package io.quarkus.extest.deployment;
2+
3+
import io.quarkus.runtime.annotations.ConfigPhase;
4+
import io.quarkus.runtime.annotations.ConfigRoot;
5+
import io.smallrye.config.ConfigMapping;
6+
7+
@ConfigMapping(prefix = "ignore.build-time.config")
8+
@ConfigRoot(phase = ConfigPhase.BUILD_TIME)
9+
public interface IgnoreSharedBuildTimeConfig {
10+
/** Docs */
11+
String buildTime();
12+
}

integration-tests/test-extension/extension/deployment/src/main/java/io/quarkus/extest/deployment/TestProcessor.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ public final class TestProcessor {
8484
TestConfigRoot configRoot;
8585
TestBuildTimeConfig buildTimeConfig;
8686
TestBuildAndRunTimeConfig buildAndRunTimeConfig;
87+
IgnoreSharedBuildTimeConfig ignoreSharedBuildTimeConfig;
8788

8889
/**
8990
* Register an extension capability and feature
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package io.quarkus.extest.runtime.config;
2+
3+
import io.quarkus.runtime.annotations.ConfigPhase;
4+
import io.quarkus.runtime.annotations.ConfigRoot;
5+
import io.smallrye.config.ConfigMapping;
6+
7+
@ConfigMapping(prefix = "ignore.build-time.config")
8+
@ConfigRoot(phase = ConfigPhase.RUN_TIME)
9+
public interface IgnoreSharedRuntimeConfig {
10+
/** Docs */
11+
String runtime();
12+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
ignore.build-time.config.build-time=value
2+
ignore.build-time.config.runtime=value

0 commit comments

Comments
 (0)