diff --git a/implementation/src/main/java/io/smallrye/config/ConfigMappingContext.java b/implementation/src/main/java/io/smallrye/config/ConfigMappingContext.java index ec6012d34..cb4bf9ee9 100644 --- a/implementation/src/main/java/io/smallrye/config/ConfigMappingContext.java +++ b/implementation/src/main/java/io/smallrye/config/ConfigMappingContext.java @@ -146,8 +146,10 @@ void reportUnknown(final List ignoredPaths) { found.putRootValue(Boolean.TRUE); ignoreRecursively(found); } else { - found = ignoredProperties.findOrAdd(ignoredPath); - found.putRootValue(Boolean.TRUE); + if (!ignoredProperties.hasRootValue(ignoredPath)) { + found = ignoredProperties.findOrAdd(ignoredPath); + found.putRootValue(Boolean.TRUE); + } } } @@ -164,7 +166,7 @@ void reportUnknown(final List ignoredPaths) { if (!ignoredProperties.hasRootValue(name)) { ConfigValue configValue = config.getConfigValue(name); // TODO - https://github.com/quarkusio/quarkus/issues/38479 - if (configValue.getSourceName().equals(EnvConfigSource.NAME)) { + if (configValue.getSourceName().startsWith(EnvConfigSource.NAME)) { continue; } problems.add(new Problem( diff --git a/implementation/src/test/java/io/smallrye/config/ConfigMappingInterfaceTest.java b/implementation/src/test/java/io/smallrye/config/ConfigMappingInterfaceTest.java index a5419d6bf..622d5704f 100644 --- a/implementation/src/test/java/io/smallrye/config/ConfigMappingInterfaceTest.java +++ b/implementation/src/test/java/io/smallrye/config/ConfigMappingInterfaceTest.java @@ -2538,4 +2538,35 @@ interface Datasource { String name(); } } + + @Test + void ignorePathsRecursive() { + SmallRyeConfig config = new SmallRyeConfigBuilder() + .withMappingIgnore("ignore.**") + .withMappingIgnore("ignore.nested.nested.ignore") + .withSources(config( + "ignore.ignore", "ignore", + "ignore.nested.something", "ignore", + "ignore.nested.nested.ignore", "ignore")) + .withMapping(IgnorePathsRecursive.class) + .build(); + + assertNotNull(config.getConfigMapping(IgnorePathsRecursive.class)); + + config = new SmallRyeConfigBuilder() + .withMappingIgnore("ignore.nested.nested.ignore") + .withMappingIgnore("ignore.**") + .withSources(config( + "ignore.ignore", "ignore", + "ignore.nested.something", "ignore", + "ignore.nested.nested.ignore", "ignore")) + .withMapping(IgnorePathsRecursive.class) + .build(); + + assertNotNull(config.getConfigMapping(IgnorePathsRecursive.class)); + } + + @ConfigMapping(prefix = "ignore") + interface IgnorePathsRecursive { + } }