From e58d21458f49a081f78ea169659d5d0048c48715 Mon Sep 17 00:00:00 2001 From: Roberto Cortez Date: Tue, 14 Jan 2025 23:44:36 +0000 Subject: [PATCH] Avoid ambiguous names when matching unknown configuration --- .../BuildTimeConfigurationReader.java | 6 ---- .../RunTimeConfigurationGenerator.java | 32 ++++++++++--------- 2 files changed, 17 insertions(+), 21 deletions(-) diff --git a/core/deployment/src/main/java/io/quarkus/deployment/configuration/BuildTimeConfigurationReader.java b/core/deployment/src/main/java/io/quarkus/deployment/configuration/BuildTimeConfigurationReader.java index c0e5181dfa2fc..1d3af46be5a0a 100644 --- a/core/deployment/src/main/java/io/quarkus/deployment/configuration/BuildTimeConfigurationReader.java +++ b/core/deployment/src/main/java/io/quarkus/deployment/configuration/BuildTimeConfigurationReader.java @@ -1274,7 +1274,6 @@ public static final class ReadResult { final List runTimeMappings; final List allMappings; final Map, ConfigClass> allMappingsByClass; - final Map allMappingsNames; final Set unknownBuildProperties; final Set deprecatedRuntimeProperties; @@ -1300,7 +1299,6 @@ public ReadResult(final Builder builder) { this.runTimeMappings = builder.getRunTimeMappings(); this.allMappings = new ArrayList<>(mappingsToMap(builder).values()); this.allMappingsByClass = mappingsToMap(builder); - this.allMappingsNames = ReadOperation.mappingsToNames(allMappings); this.unknownBuildProperties = builder.getUnknownBuildProperties(); this.deprecatedRuntimeProperties = builder.deprecatedRuntimeProperties; @@ -1390,10 +1388,6 @@ public Map, ConfigClass> getAllMappingsByClass() { return allMappingsByClass; } - public Map getAllMappingsNames() { - return allMappingsNames; - } - public Set getUnknownBuildProperties() { return unknownBuildProperties; } diff --git a/core/deployment/src/main/java/io/quarkus/deployment/configuration/RunTimeConfigurationGenerator.java b/core/deployment/src/main/java/io/quarkus/deployment/configuration/RunTimeConfigurationGenerator.java index 15b092b40d967..5c7089a68ec5e 100644 --- a/core/deployment/src/main/java/io/quarkus/deployment/configuration/RunTimeConfigurationGenerator.java +++ b/core/deployment/src/main/java/io/quarkus/deployment/configuration/RunTimeConfigurationGenerator.java @@ -64,9 +64,9 @@ import io.quarkus.runtime.configuration.NameIterator; import io.quarkus.runtime.configuration.PropertiesUtil; import io.quarkus.runtime.configuration.QuarkusConfigFactory; +import io.smallrye.config.ConfigMappings; import io.smallrye.config.ConfigMappings.ConfigClass; import io.smallrye.config.Converters; -import io.smallrye.config.PropertyName; import io.smallrye.config.SmallRyeConfig; import io.smallrye.config.SmallRyeConfigBuilder; @@ -1183,24 +1183,26 @@ private FieldDescriptor getOrCreateConverterInstance(Field field, ConverterType } private void generateIsMapped() { - Map names = buildTimeConfigResult.getAllMappingsNames(); ConfigPatternMap patterns = new ConfigPatternMap<>(); - for (Map.Entry entry : names.entrySet()) { - NameIterator name = new NameIterator(entry.getValue()); - ConfigPatternMap current = patterns; - while (name.hasNext()) { - String segment = name.getNextSegment(); - ConfigPatternMap child = current.getChild(segment); - if (child == null) { - child = new ConfigPatternMap<>(); - current.addChild(segment, child); + List configMappings = buildTimeConfigResult.getAllMappings(); + for (ConfigClass configMapping : configMappings) { + Set names = ConfigMappings.getProperties(configMapping).keySet(); + for (String name : names) { + NameIterator ni = new NameIterator(name); + ConfigPatternMap current = patterns; + while (ni.hasNext()) { + String segment = ni.getNextSegment(); + ConfigPatternMap child = current.getChild(segment); + if (child == null) { + child = new ConfigPatternMap<>(); + current.addChild(segment, child); + } + current = child; + ni.next(); } - current = child; - name.next(); + current.setMatched(true); } - current.setMatched(true); } - generateIsMapped("isMapped", patterns); }