diff --git a/config/src/main/java/com/typesafe/config/Optional.java b/config/src/main/java/com/typesafe/config/Optional.java index 4645ed5fb..5498b8f41 100644 --- a/config/src/main/java/com/typesafe/config/Optional.java +++ b/config/src/main/java/com/typesafe/config/Optional.java @@ -1,6 +1,7 @@ package com.typesafe.config; import java.lang.annotation.Documented; +import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -8,6 +9,7 @@ * Allows an config property to be {@code null}. */ @Documented +@Inherited @Retention(RetentionPolicy.RUNTIME) public @interface Optional { diff --git a/config/src/main/java/com/typesafe/config/impl/ConfigBeanImpl.java b/config/src/main/java/com/typesafe/config/impl/ConfigBeanImpl.java index 2b9cf5c60..89e43b2fc 100644 --- a/config/src/main/java/com/typesafe/config/impl/ConfigBeanImpl.java +++ b/config/src/main/java/com/typesafe/config/impl/ConfigBeanImpl.java @@ -284,8 +284,11 @@ private static boolean hasAtLeastOneBeanProperty(Class clazz) { } private static boolean isOptionalProperty(Class beanClass, PropertyDescriptor beanProp) { + if (beanProp.getReadMethod().getAnnotationsByType(Optional.class).length > 0) { + return true; + } Field field = getField(beanClass, beanProp.getName()); - return field != null ? field.getAnnotationsByType(Optional.class).length > 0 : beanProp.getReadMethod().getAnnotationsByType(Optional.class).length > 0; + return field != null && field.getAnnotationsByType(Optional.class).length > 0; } private static Field getField(Class beanClass, String fieldName) {