@@ -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