|
|
@ -537,6 +537,7 @@ class ConfigurationClassParser { |
|
|
|
return new SourceClass(classType); |
|
|
|
return new SourceClass(classType); |
|
|
|
} |
|
|
|
} |
|
|
|
catch (Throwable ex) { |
|
|
|
catch (Throwable ex) { |
|
|
|
|
|
|
|
// Enforce ASM via class name resolution
|
|
|
|
return asSourceClass(classType.getName()); |
|
|
|
return asSourceClass(classType.getName()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -693,10 +694,14 @@ class ConfigurationClassParser { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public Collection<SourceClass> getMemberClasses() throws IOException { |
|
|
|
public Collection<SourceClass> getMemberClasses() throws IOException { |
|
|
|
List<SourceClass> members = new ArrayList<SourceClass>(); |
|
|
|
Object sourceToProcess = this.source; |
|
|
|
if (this.source instanceof Class<?>) { |
|
|
|
|
|
|
|
Class<?> sourceClass = (Class<?>) this.source; |
|
|
|
if (sourceToProcess instanceof Class<?>) { |
|
|
|
for (Class<?> declaredClass : sourceClass.getDeclaredClasses()) { |
|
|
|
Class<?> sourceClass = (Class<?>) sourceToProcess; |
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
Class<?>[] declaredClasses = sourceClass.getDeclaredClasses(); |
|
|
|
|
|
|
|
List<SourceClass> members = new ArrayList<SourceClass>(declaredClasses.length); |
|
|
|
|
|
|
|
for (Class<?> declaredClass : declaredClasses) { |
|
|
|
try { |
|
|
|
try { |
|
|
|
members.add(asSourceClass(declaredClass)); |
|
|
|
members.add(asSourceClass(declaredClass)); |
|
|
|
} |
|
|
|
} |
|
|
@ -704,10 +709,20 @@ class ConfigurationClassParser { |
|
|
|
// ignore
|
|
|
|
// ignore
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return members; |
|
|
|
} |
|
|
|
} |
|
|
|
else { |
|
|
|
catch (NoClassDefFoundError err) { |
|
|
|
MetadataReader sourceReader = (MetadataReader) source; |
|
|
|
// getDeclaredClasses() failed because of non-resolvable dependencies
|
|
|
|
for (String memberClassName : sourceReader.getClassMetadata().getMemberClassNames()) { |
|
|
|
// -> fall back to ASM below
|
|
|
|
|
|
|
|
sourceToProcess = metadataReaderFactory.getMetadataReader(sourceClass.getName()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ASM-based resolution - safe for non-resolvable classes as well
|
|
|
|
|
|
|
|
MetadataReader sourceReader = (MetadataReader) sourceToProcess; |
|
|
|
|
|
|
|
String[] memberClassNames = sourceReader.getClassMetadata().getMemberClassNames(); |
|
|
|
|
|
|
|
List<SourceClass> members = new ArrayList<SourceClass>(memberClassNames.length); |
|
|
|
|
|
|
|
for (String memberClassName : memberClassNames) { |
|
|
|
try { |
|
|
|
try { |
|
|
|
members.add(asSourceClass(memberClassName)); |
|
|
|
members.add(asSourceClass(memberClassName)); |
|
|
|
} |
|
|
|
} |
|
|
@ -715,7 +730,6 @@ class ConfigurationClassParser { |
|
|
|
// ignore
|
|
|
|
// ignore
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return members; |
|
|
|
return members; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|