@@ -537,6 +537,7 @@ public SourceClass asSourceClass(Class<?> classType) throws IOException, ClassNo
537537			return  new  SourceClass (classType );
538538		}
539539		catch  (Throwable  ex ) {
540+ 			// Enforce ASM via class name resolution 
540541			return  asSourceClass (classType .getName ());
541542		}
542543	}
@@ -693,27 +694,40 @@ public ConfigurationClass asConfigClass(ConfigurationClass importedBy) throws IO
693694		}
694695
695696		public  Collection <SourceClass > getMemberClasses () throws  IOException  {
696- 			List <SourceClass > members  = new  ArrayList <SourceClass >();
697- 			if  (this .source  instanceof  Class <?>) {
698- 				Class <?> sourceClass  = (Class <?>) this .source ;
699- 				for  (Class <?> declaredClass  : sourceClass .getDeclaredClasses ()) {
700- 					try  {
701- 						members .add (asSourceClass (declaredClass ));
702- 					}
703- 					catch  (ClassNotFoundException  ex ) {
704- 						// ignore 
697+ 			Object  sourceToProcess  = this .source ;
698+ 
699+ 			if  (sourceToProcess  instanceof  Class <?>) {
700+ 				Class <?> sourceClass  = (Class <?>) sourceToProcess ;
701+ 				try  {
702+ 					Class <?>[] declaredClasses  = sourceClass .getDeclaredClasses ();
703+ 					List <SourceClass > members  = new  ArrayList <SourceClass >(declaredClasses .length );
704+ 					for  (Class <?> declaredClass  : declaredClasses ) {
705+ 						try  {
706+ 							members .add (asSourceClass (declaredClass ));
707+ 						}
708+ 						catch  (ClassNotFoundException  ex ) {
709+ 							// ignore 
710+ 						}
705711					}
712+ 					return  members ;
713+ 				}
714+ 				catch  (NoClassDefFoundError  err ) {
715+ 					// getDeclaredClasses() failed because of non-resolvable dependencies 
716+ 					// -> fall back to ASM below 
717+ 					sourceToProcess  = metadataReaderFactory .getMetadataReader (sourceClass .getName ());
706718				}
707719			}
708- 			else  {
709- 				MetadataReader  sourceReader  = (MetadataReader ) source ;
710- 				for  (String  memberClassName  : sourceReader .getClassMetadata ().getMemberClassNames ()) {
711- 					try  {
712- 						members .add (asSourceClass (memberClassName ));
713- 					}
714- 					catch  (ClassNotFoundException  ex ) {
715- 						// ignore 
716- 					}
720+ 
721+ 			// ASM-based resolution - safe for non-resolvable classes as well 
722+ 			MetadataReader  sourceReader  = (MetadataReader ) sourceToProcess ;
723+ 			String [] memberClassNames  = sourceReader .getClassMetadata ().getMemberClassNames ();
724+ 			List <SourceClass > members  = new  ArrayList <SourceClass >(memberClassNames .length );
725+ 			for  (String  memberClassName  : memberClassNames ) {
726+ 				try  {
727+ 					members .add (asSourceClass (memberClassName ));
728+ 				}
729+ 				catch  (ClassNotFoundException  ex ) {
730+ 					// ignore 
717731				}
718732			}
719733			return  members ;
0 commit comments