Skip to content

Commit

Permalink
Allow certain @ConfigProperties fields to be ignored
Browse files Browse the repository at this point in the history
Resolves: quarkusio#9762
  • Loading branch information
geoand committed Jun 4, 2020
1 parent 4c82851 commit 8f5dbec
Show file tree
Hide file tree
Showing 6 changed files with 47 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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 '"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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());
}
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;

Expand All @@ -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<Integer> 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<Integer> 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<Integer> getAge() {
return dummyProperties.nested.ages;
}

Set<Integer> getHeights() {
return dummyProperties.getSupernested().heights;
}
}

@ConfigProperties(prefix = "dummy")
Expand Down Expand Up @@ -109,6 +100,8 @@ public void setSupernested(NestedSuperDummyProperties supernested) {
public static class NestedSuperDummyProperties {

public Set<Integer> heights;
@ConfigIgnore
public Integer ignored;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;

Expand Down Expand Up @@ -47,6 +49,7 @@ public void testConfiguredValues() {
assertTrue(dummyProperties.getOptionalInt().isPresent());
assertEquals(100, dummyProperties.getOptionalInt().get());
assertFalse(dummyProperties.getOptionalString().isPresent());
assertNull(dummyProperties.ignored);
}

@Singleton
Expand All @@ -67,6 +70,8 @@ public static class DummyProperties {
private List<Integer> numbers;
private Optional<Integer> optionalInt;
private Optional<String> optionalString;
@ConfigIgnore
public String ignored;

public String getName() {
return name;
Expand Down
Original file line number Diff line number Diff line change
@@ -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 {

}
Original file line number Diff line number Diff line change
Expand Up @@ -77,4 +77,5 @@ public String getName(String name) {

public abstract String getName(String name);
}

}

0 comments on commit 8f5dbec

Please sign in to comment.