diff --git a/extensions/arc/deployment/src/main/java/io/quarkus/arc/deployment/configproperties/ClassConfigPropertiesUtil.java b/extensions/arc/deployment/src/main/java/io/quarkus/arc/deployment/configproperties/ClassConfigPropertiesUtil.java index 7f0a8563d3678..601a2650d61ab 100644 --- a/extensions/arc/deployment/src/main/java/io/quarkus/arc/deployment/configproperties/ClassConfigPropertiesUtil.java +++ b/extensions/arc/deployment/src/main/java/io/quarkus/arc/deployment/configproperties/ClassConfigPropertiesUtil.java @@ -232,6 +232,9 @@ private static ResultHandle populateConfigObject(ClassLoader classLoader, ClassI if (Modifier.isStatic(field.flags())) { // nothing we need to do about static fields continue; } + if (field.hasAnnotation(DotNames.CONFIG_IGNORE)) { + continue; + } if (field.hasAnnotation(DotNames.CONFIG_PROPERTY)) { LOGGER.warn( "'@ConfigProperty' is ignored when added to a field of a class annotated with '@ConfigProperties'. Offending field is '" diff --git a/extensions/arc/deployment/src/main/java/io/quarkus/arc/deployment/configproperties/DotNames.java b/extensions/arc/deployment/src/main/java/io/quarkus/arc/deployment/configproperties/DotNames.java index 71a7a48dab26c..f2c543998c4b1 100644 --- a/extensions/arc/deployment/src/main/java/io/quarkus/arc/deployment/configproperties/DotNames.java +++ b/extensions/arc/deployment/src/main/java/io/quarkus/arc/deployment/configproperties/DotNames.java @@ -8,6 +8,7 @@ import org.eclipse.microprofile.config.inject.ConfigProperty; import org.jboss.jandex.DotName; +import io.quarkus.arc.config.ConfigIgnore; import io.quarkus.arc.config.ConfigPrefix; import io.quarkus.arc.config.ConfigProperties; @@ -25,5 +26,6 @@ private DotNames() { static final DotName ENUM = DotName.createSimple(Enum.class.getName()); static final DotName CONFIG_PROPERTIES = DotName.createSimple(ConfigProperties.class.getName()); static final DotName CONFIG_PREFIX = DotName.createSimple(ConfigPrefix.class.getName()); + static final DotName CONFIG_IGNORE = DotName.createSimple(ConfigIgnore.class.getName()); static final DotName CONFIG_PROPERTY = DotName.createSimple(ConfigProperty.class.getName()); } diff --git a/extensions/arc/deployment/src/test/java/io/quarkus/arc/test/configproperties/NestedClassAndSuperclassConfigPropertiesTest.java b/extensions/arc/deployment/src/test/java/io/quarkus/arc/test/configproperties/NestedClassAndSuperclassConfigPropertiesTest.java index 9e513050fb27c..3bb92c52c6b99 100644 --- a/extensions/arc/deployment/src/test/java/io/quarkus/arc/test/configproperties/NestedClassAndSuperclassConfigPropertiesTest.java +++ b/extensions/arc/deployment/src/test/java/io/quarkus/arc/test/configproperties/NestedClassAndSuperclassConfigPropertiesTest.java @@ -1,6 +1,7 @@ package io.quarkus.arc.test.configproperties; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.Set; @@ -14,6 +15,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; +import io.quarkus.arc.config.ConfigIgnore; import io.quarkus.arc.config.ConfigProperties; import io.quarkus.test.QuarkusUnitTest; @@ -32,38 +34,27 @@ public class NestedClassAndSuperclassConfigPropertiesTest { @Test public void testConfiguredValues() { - assertEquals("quarkus", dummyBean.getName()); - assertEquals("redhat", dummyBean.getLastname()); - assertEquals(4, dummyBean.getAge().size()); - assertTrue(dummyBean.getAge().contains(1)); - assertTrue(dummyBean.getAge().contains(2)); - assertTrue(dummyBean.getAge().contains(3)); - assertTrue(dummyBean.getAge().contains(4)); - assertEquals(2, dummyBean.getHeights().size()); - assertTrue(dummyBean.getHeights().contains(100)); - assertTrue(dummyBean.getHeights().contains(200)); + DummyProperties dummyProperties = dummyBean.dummyProperties; + + assertEquals("quarkus", dummyProperties.getName()); + assertEquals("redhat", dummyProperties.getLastname()); + Set ages = dummyProperties.nested.ages; + assertEquals(4, ages.size()); + assertTrue(ages.contains(1)); + assertTrue(ages.contains(2)); + assertTrue(ages.contains(3)); + assertTrue(ages.contains(4)); + Set heights = dummyProperties.getSupernested().heights; + assertEquals(2, heights.size()); + assertTrue(heights.contains(100)); + assertTrue(heights.contains(200)); + assertNull(dummyProperties.getSupernested().ignored); } @Singleton public static class DummyBean { @Inject DummyProperties dummyProperties; - - String getName() { - return dummyProperties.getName(); - } - - String getLastname() { - return dummyProperties.getLastname(); - } - - Set getAge() { - return dummyProperties.nested.ages; - } - - Set getHeights() { - return dummyProperties.getSupernested().heights; - } } @ConfigProperties(prefix = "dummy") @@ -109,6 +100,8 @@ public void setSupernested(NestedSuperDummyProperties supernested) { public static class NestedSuperDummyProperties { public Set heights; + @ConfigIgnore + public Integer ignored; } } } diff --git a/extensions/arc/deployment/src/test/java/io/quarkus/arc/test/configproperties/TypicalClassConfigPrefixTest.java b/extensions/arc/deployment/src/test/java/io/quarkus/arc/test/configproperties/TypicalClassConfigPrefixTest.java index 180741c9eae2f..89d96471c8e12 100644 --- a/extensions/arc/deployment/src/test/java/io/quarkus/arc/test/configproperties/TypicalClassConfigPrefixTest.java +++ b/extensions/arc/deployment/src/test/java/io/quarkus/arc/test/configproperties/TypicalClassConfigPrefixTest.java @@ -2,6 +2,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.Arrays; @@ -17,6 +18,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; +import io.quarkus.arc.config.ConfigIgnore; import io.quarkus.arc.config.ConfigPrefix; import io.quarkus.test.QuarkusUnitTest; @@ -47,6 +49,7 @@ public void testConfiguredValues() { assertTrue(dummyProperties.getOptionalInt().isPresent()); assertEquals(100, dummyProperties.getOptionalInt().get()); assertFalse(dummyProperties.getOptionalString().isPresent()); + assertNull(dummyProperties.ignored); } @Singleton @@ -67,6 +70,8 @@ public static class DummyProperties { private List numbers; private Optional optionalInt; private Optional optionalString; + @ConfigIgnore + public String ignored; public String getName() { return name; diff --git a/extensions/arc/runtime/src/main/java/io/quarkus/arc/config/ConfigIgnore.java b/extensions/arc/runtime/src/main/java/io/quarkus/arc/config/ConfigIgnore.java new file mode 100644 index 0000000000000..b73a65fdf5424 --- /dev/null +++ b/extensions/arc/runtime/src/main/java/io/quarkus/arc/config/ConfigIgnore.java @@ -0,0 +1,17 @@ +package io.quarkus.arc.config; + +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +/** + * When applied to a field of class annotated with {@link ConfigProperties}, that field will be ignored + * for the purposes of configuration + */ +@Target(FIELD) +@Retention(RUNTIME) +public @interface ConfigIgnore { + +} diff --git a/extensions/arc/runtime/src/main/java/io/quarkus/arc/config/ConfigProperties.java b/extensions/arc/runtime/src/main/java/io/quarkus/arc/config/ConfigProperties.java index 41fa7dbe29f74..6df0fcc1e725a 100644 --- a/extensions/arc/runtime/src/main/java/io/quarkus/arc/config/ConfigProperties.java +++ b/extensions/arc/runtime/src/main/java/io/quarkus/arc/config/ConfigProperties.java @@ -77,4 +77,5 @@ public String getName(String name) { public abstract String getName(String name); } + }