@@ -537,6 +537,7 @@ public SourceClass asSourceClass(Class<?> classType) throws IOException, ClassNo
537
537
return new SourceClass (classType );
538
538
}
539
539
catch (Throwable ex ) {
540
+ // Enforce ASM via class name resolution
540
541
return asSourceClass (classType .getName ());
541
542
}
542
543
}
@@ -693,27 +694,40 @@ public ConfigurationClass asConfigClass(ConfigurationClass importedBy) throws IO
693
694
}
694
695
695
696
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
+ }
705
711
}
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 ());
706
718
}
707
719
}
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
717
731
}
718
732
}
719
733
return members ;
0 commit comments