@@ -303,15 +303,7 @@ protected final SourceClass doProcessConfigurationClass(ConfigurationClass confi
303303 }
304304
305305 // Process default methods on interfaces
306- for (SourceClass ifc : sourceClass .getInterfaces ()) {
307- beanMethods = ifc .getMetadata ().getAnnotatedMethods (Bean .class .getName ());
308- for (MethodMetadata methodMetadata : beanMethods ) {
309- if (!methodMetadata .isAbstract ()) {
310- // A default method or other concrete method on a Java 8+ interface...
311- configClass .addBeanMethod (new BeanMethod (methodMetadata , configClass ));
312- }
313- }
314- }
306+ processInterfaces (configClass , sourceClass );
315307
316308 // Process superclass, if any
317309 if (sourceClass .getMetadata ().hasSuperClass ()) {
@@ -329,8 +321,6 @@ protected final SourceClass doProcessConfigurationClass(ConfigurationClass confi
329321
330322 /**
331323 * Register member (nested) classes that happen to be configuration classes themselves.
332- * @param sourceClass the source class to process
333- * @throws IOException if there is any problem reading metadata from a member class
334324 */
335325 private void processMemberClasses (ConfigurationClass configClass , SourceClass sourceClass ) throws IOException {
336326 for (SourceClass memberClass : sourceClass .getMemberClasses ()) {
@@ -352,6 +342,22 @@ private void processMemberClasses(ConfigurationClass configClass, SourceClass so
352342 }
353343 }
354344
345+ /**
346+ * Register default methods on interfaces implemented by the configuration class.
347+ */
348+ private void processInterfaces (ConfigurationClass configClass , SourceClass sourceClass ) throws IOException {
349+ for (SourceClass ifc : sourceClass .getInterfaces ()) {
350+ Set <MethodMetadata > beanMethods = ifc .getMetadata ().getAnnotatedMethods (Bean .class .getName ());
351+ for (MethodMetadata methodMetadata : beanMethods ) {
352+ if (!methodMetadata .isAbstract ()) {
353+ // A default method or other concrete method on a Java 8+ interface...
354+ configClass .addBeanMethod (new BeanMethod (methodMetadata , configClass ));
355+ }
356+ }
357+ processInterfaces (configClass , ifc );
358+ }
359+ }
360+
355361 /**
356362 * Process the given <code>@PropertySource</code> annotation metadata.
357363 * @param propertySource metadata for the <code>@PropertySource</code> annotation found
0 commit comments