|
|
|
|
@ -1,5 +1,5 @@
@@ -1,5 +1,5 @@
|
|
|
|
|
/* |
|
|
|
|
* Copyright 2002-2019 the original author or authors. |
|
|
|
|
* Copyright 2002-2020 the original author or authors. |
|
|
|
|
* |
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
|
|
|
* you may not use this file except in compliance with the License. |
|
|
|
|
@ -34,6 +34,7 @@ import java.util.List;
@@ -34,6 +34,7 @@ import java.util.List;
|
|
|
|
|
import java.util.Map; |
|
|
|
|
import java.util.Set; |
|
|
|
|
import java.util.StringJoiner; |
|
|
|
|
import java.util.function.Predicate; |
|
|
|
|
|
|
|
|
|
import org.apache.commons.logging.Log; |
|
|
|
|
import org.apache.commons.logging.LogFactory; |
|
|
|
|
@ -110,6 +111,9 @@ class ConfigurationClassParser {
@@ -110,6 +111,9 @@ class ConfigurationClassParser {
|
|
|
|
|
|
|
|
|
|
private static final PropertySourceFactory DEFAULT_PROPERTY_SOURCE_FACTORY = new DefaultPropertySourceFactory(); |
|
|
|
|
|
|
|
|
|
private static final Predicate<String> DEFAULT_CANDIDATE_FILTER = className -> |
|
|
|
|
(className.startsWith("java.lang.annotation.") || className.startsWith("org.springframework.stereotype.")); |
|
|
|
|
|
|
|
|
|
private static final Comparator<DeferredImportSelectorHolder> DEFERRED_IMPORT_COMPARATOR = |
|
|
|
|
(o1, o2) -> AnnotationAwareOrderComparator.INSTANCE.compare(o1.getImportSelector(), o2.getImportSelector()); |
|
|
|
|
|
|
|
|
|
@ -191,15 +195,15 @@ class ConfigurationClassParser {
@@ -191,15 +195,15 @@ class ConfigurationClassParser {
|
|
|
|
|
protected final void parse(@Nullable String className, String beanName) throws IOException { |
|
|
|
|
Assert.notNull(className, "No bean class name for configuration class bean definition"); |
|
|
|
|
MetadataReader reader = this.metadataReaderFactory.getMetadataReader(className); |
|
|
|
|
processConfigurationClass(new ConfigurationClass(reader, beanName)); |
|
|
|
|
processConfigurationClass(new ConfigurationClass(reader, beanName), DEFAULT_CANDIDATE_FILTER); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
protected final void parse(Class<?> clazz, String beanName) throws IOException { |
|
|
|
|
processConfigurationClass(new ConfigurationClass(clazz, beanName)); |
|
|
|
|
processConfigurationClass(new ConfigurationClass(clazz, beanName), DEFAULT_CANDIDATE_FILTER); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
protected final void parse(AnnotationMetadata metadata, String beanName) throws IOException { |
|
|
|
|
processConfigurationClass(new ConfigurationClass(metadata, beanName)); |
|
|
|
|
processConfigurationClass(new ConfigurationClass(metadata, beanName), DEFAULT_CANDIDATE_FILTER); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
@ -217,7 +221,7 @@ class ConfigurationClassParser {
@@ -217,7 +221,7 @@ class ConfigurationClassParser {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected void processConfigurationClass(ConfigurationClass configClass) throws IOException { |
|
|
|
|
protected void processConfigurationClass(ConfigurationClass configClass, Predicate<String> filter) throws IOException { |
|
|
|
|
if (this.conditionEvaluator.shouldSkip(configClass.getMetadata(), ConfigurationPhase.PARSE_CONFIGURATION)) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
@ -240,9 +244,9 @@ class ConfigurationClassParser {
@@ -240,9 +244,9 @@ class ConfigurationClassParser {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Recursively process the configuration class and its superclass hierarchy.
|
|
|
|
|
SourceClass sourceClass = asSourceClass(configClass); |
|
|
|
|
SourceClass sourceClass = asSourceClass(configClass, filter); |
|
|
|
|
do { |
|
|
|
|
sourceClass = doProcessConfigurationClass(configClass, sourceClass); |
|
|
|
|
sourceClass = doProcessConfigurationClass(configClass, sourceClass, filter); |
|
|
|
|
} |
|
|
|
|
while (sourceClass != null); |
|
|
|
|
|
|
|
|
|
@ -258,12 +262,13 @@ class ConfigurationClassParser {
@@ -258,12 +262,13 @@ class ConfigurationClassParser {
|
|
|
|
|
* @return the superclass, or {@code null} if none found or previously processed |
|
|
|
|
*/ |
|
|
|
|
@Nullable |
|
|
|
|
protected final SourceClass doProcessConfigurationClass(ConfigurationClass configClass, SourceClass sourceClass) |
|
|
|
|
protected final SourceClass doProcessConfigurationClass( |
|
|
|
|
ConfigurationClass configClass, SourceClass sourceClass, Predicate<String> filter) |
|
|
|
|
throws IOException { |
|
|
|
|
|
|
|
|
|
if (configClass.getMetadata().isAnnotated(Component.class.getName())) { |
|
|
|
|
// Recursively process any member (nested) classes first
|
|
|
|
|
processMemberClasses(configClass, sourceClass); |
|
|
|
|
processMemberClasses(configClass, sourceClass, filter); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Process any @PropertySource annotations
|
|
|
|
|
@ -302,7 +307,7 @@ class ConfigurationClassParser {
@@ -302,7 +307,7 @@ class ConfigurationClassParser {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Process any @Import annotations
|
|
|
|
|
processImports(configClass, sourceClass, getImports(sourceClass), true); |
|
|
|
|
processImports(configClass, sourceClass, getImports(sourceClass), filter, true); |
|
|
|
|
|
|
|
|
|
// Process any @ImportResource annotations
|
|
|
|
|
AnnotationAttributes importResource = |
|
|
|
|
@ -343,7 +348,9 @@ class ConfigurationClassParser {
@@ -343,7 +348,9 @@ class ConfigurationClassParser {
|
|
|
|
|
/** |
|
|
|
|
* Register member (nested) classes that happen to be configuration classes themselves. |
|
|
|
|
*/ |
|
|
|
|
private void processMemberClasses(ConfigurationClass configClass, SourceClass sourceClass) throws IOException { |
|
|
|
|
private void processMemberClasses(ConfigurationClass configClass, SourceClass sourceClass, |
|
|
|
|
Predicate<String> filter) throws IOException { |
|
|
|
|
|
|
|
|
|
Collection<SourceClass> memberClasses = sourceClass.getMemberClasses(); |
|
|
|
|
if (!memberClasses.isEmpty()) { |
|
|
|
|
List<SourceClass> candidates = new ArrayList<>(memberClasses.size()); |
|
|
|
|
@ -361,7 +368,7 @@ class ConfigurationClassParser {
@@ -361,7 +368,7 @@ class ConfigurationClassParser {
|
|
|
|
|
else { |
|
|
|
|
this.importStack.push(configClass); |
|
|
|
|
try { |
|
|
|
|
processConfigurationClass(candidate.asConfigClass(configClass)); |
|
|
|
|
processConfigurationClass(candidate.asConfigClass(configClass), filter); |
|
|
|
|
} |
|
|
|
|
finally { |
|
|
|
|
this.importStack.pop(); |
|
|
|
|
@ -543,7 +550,8 @@ class ConfigurationClassParser {
@@ -543,7 +550,8 @@ class ConfigurationClassParser {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void processImports(ConfigurationClass configClass, SourceClass currentSourceClass, |
|
|
|
|
Collection<SourceClass> importCandidates, boolean checkForCircularImports) { |
|
|
|
|
Collection<SourceClass> importCandidates, Predicate<String> candidateFilter, |
|
|
|
|
boolean checkForCircularImports) { |
|
|
|
|
|
|
|
|
|
if (importCandidates.isEmpty()) { |
|
|
|
|
return; |
|
|
|
|
@ -561,13 +569,17 @@ class ConfigurationClassParser {
@@ -561,13 +569,17 @@ class ConfigurationClassParser {
|
|
|
|
|
Class<?> candidateClass = candidate.loadClass(); |
|
|
|
|
ImportSelector selector = ParserStrategyUtils.instantiateClass(candidateClass, ImportSelector.class, |
|
|
|
|
this.environment, this.resourceLoader, this.registry); |
|
|
|
|
Predicate<String> selectorFilter = selector.getCandidateFilter(); |
|
|
|
|
if (selectorFilter != null) { |
|
|
|
|
candidateFilter = candidateFilter.or(selectorFilter); |
|
|
|
|
} |
|
|
|
|
if (selector instanceof DeferredImportSelector) { |
|
|
|
|
this.deferredImportSelectorHandler.handle(configClass, (DeferredImportSelector) selector); |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
String[] importClassNames = selector.selectImports(currentSourceClass.getMetadata()); |
|
|
|
|
Collection<SourceClass> importSourceClasses = asSourceClasses(importClassNames); |
|
|
|
|
processImports(configClass, currentSourceClass, importSourceClasses, false); |
|
|
|
|
Collection<SourceClass> importSourceClasses = asSourceClasses(importClassNames, candidateFilter); |
|
|
|
|
processImports(configClass, currentSourceClass, importSourceClasses, candidateFilter, false); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
else if (candidate.isAssignable(ImportBeanDefinitionRegistrar.class)) { |
|
|
|
|
@ -584,7 +596,7 @@ class ConfigurationClassParser {
@@ -584,7 +596,7 @@ class ConfigurationClassParser {
|
|
|
|
|
// process it as an @Configuration class
|
|
|
|
|
this.importStack.registerImport( |
|
|
|
|
currentSourceClass.getMetadata(), candidate.getMetadata().getClassName()); |
|
|
|
|
processConfigurationClass(candidate.asConfigClass(configClass)); |
|
|
|
|
processConfigurationClass(candidate.asConfigClass(configClass), candidateFilter); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
@ -624,19 +636,19 @@ class ConfigurationClassParser {
@@ -624,19 +636,19 @@ class ConfigurationClassParser {
|
|
|
|
|
/** |
|
|
|
|
* Factory method to obtain a {@link SourceClass} from a {@link ConfigurationClass}. |
|
|
|
|
*/ |
|
|
|
|
private SourceClass asSourceClass(ConfigurationClass configurationClass) throws IOException { |
|
|
|
|
private SourceClass asSourceClass(ConfigurationClass configurationClass, Predicate<String> filter) throws IOException { |
|
|
|
|
AnnotationMetadata metadata = configurationClass.getMetadata(); |
|
|
|
|
if (metadata instanceof StandardAnnotationMetadata) { |
|
|
|
|
return asSourceClass(((StandardAnnotationMetadata) metadata).getIntrospectedClass()); |
|
|
|
|
return asSourceClass(((StandardAnnotationMetadata) metadata).getIntrospectedClass(), filter); |
|
|
|
|
} |
|
|
|
|
return asSourceClass(metadata.getClassName()); |
|
|
|
|
return asSourceClass(metadata.getClassName(), filter); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Factory method to obtain a {@link SourceClass} from a {@link Class}. |
|
|
|
|
*/ |
|
|
|
|
SourceClass asSourceClass(@Nullable Class<?> classType) throws IOException { |
|
|
|
|
if (classType == null || classType.getName().startsWith("java.lang.annotation.")) { |
|
|
|
|
SourceClass asSourceClass(@Nullable Class<?> classType, Predicate<String> filter) throws IOException { |
|
|
|
|
if (classType == null || filter.test(classType.getName())) { |
|
|
|
|
return this.objectSourceClass; |
|
|
|
|
} |
|
|
|
|
try { |
|
|
|
|
@ -649,17 +661,17 @@ class ConfigurationClassParser {
@@ -649,17 +661,17 @@ class ConfigurationClassParser {
|
|
|
|
|
} |
|
|
|
|
catch (Throwable ex) { |
|
|
|
|
// Enforce ASM via class name resolution
|
|
|
|
|
return asSourceClass(classType.getName()); |
|
|
|
|
return asSourceClass(classType.getName(), filter); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Factory method to obtain {@link SourceClass SourceClasss} from class names. |
|
|
|
|
*/ |
|
|
|
|
private Collection<SourceClass> asSourceClasses(String... classNames) throws IOException { |
|
|
|
|
private Collection<SourceClass> asSourceClasses(String[] classNames, Predicate<String> filter) throws IOException { |
|
|
|
|
List<SourceClass> annotatedClasses = new ArrayList<>(classNames.length); |
|
|
|
|
for (String className : classNames) { |
|
|
|
|
annotatedClasses.add(asSourceClass(className)); |
|
|
|
|
annotatedClasses.add(asSourceClass(className, filter)); |
|
|
|
|
} |
|
|
|
|
return annotatedClasses; |
|
|
|
|
} |
|
|
|
|
@ -667,23 +679,20 @@ class ConfigurationClassParser {
@@ -667,23 +679,20 @@ class ConfigurationClassParser {
|
|
|
|
|
/** |
|
|
|
|
* Factory method to obtain a {@link SourceClass} from a class name. |
|
|
|
|
*/ |
|
|
|
|
SourceClass asSourceClass(@Nullable String className) throws IOException { |
|
|
|
|
if (className == null || className.startsWith("java.lang.annotation.")) { |
|
|
|
|
SourceClass asSourceClass(@Nullable String className, Predicate<String> filter) throws IOException { |
|
|
|
|
if (className == null || filter.test(className)) { |
|
|
|
|
return this.objectSourceClass; |
|
|
|
|
} |
|
|
|
|
if (className.startsWith("java")) { |
|
|
|
|
// Never use ASM for core java types
|
|
|
|
|
try { |
|
|
|
|
return new SourceClass(ClassUtils.forName(className, |
|
|
|
|
this.resourceLoader.getClassLoader())); |
|
|
|
|
return new SourceClass(ClassUtils.forName(className, this.resourceLoader.getClassLoader())); |
|
|
|
|
} |
|
|
|
|
catch (ClassNotFoundException ex) { |
|
|
|
|
throw new NestedIOException( |
|
|
|
|
"Failed to load class [" + className + "]", ex); |
|
|
|
|
throw new NestedIOException("Failed to load class [" + className + "]", ex); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return new SourceClass( |
|
|
|
|
this.metadataReaderFactory.getMetadataReader(className)); |
|
|
|
|
return new SourceClass(this.metadataReaderFactory.getMetadataReader(className)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -748,8 +757,7 @@ class ConfigurationClassParser {
@@ -748,8 +757,7 @@ class ConfigurationClassParser {
|
|
|
|
|
* @param importSelector the selector to handle |
|
|
|
|
*/ |
|
|
|
|
public void handle(ConfigurationClass configClass, DeferredImportSelector importSelector) { |
|
|
|
|
DeferredImportSelectorHolder holder = new DeferredImportSelectorHolder( |
|
|
|
|
configClass, importSelector); |
|
|
|
|
DeferredImportSelectorHolder holder = new DeferredImportSelectorHolder(configClass, importSelector); |
|
|
|
|
if (this.deferredImportSelectors == null) { |
|
|
|
|
DeferredImportSelectorGroupingHandler handler = new DeferredImportSelectorGroupingHandler(); |
|
|
|
|
handler.register(holder); |
|
|
|
|
@ -775,7 +783,6 @@ class ConfigurationClassParser {
@@ -775,7 +783,6 @@ class ConfigurationClassParser {
|
|
|
|
|
this.deferredImportSelectors = new ArrayList<>(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -786,8 +793,7 @@ class ConfigurationClassParser {
@@ -786,8 +793,7 @@ class ConfigurationClassParser {
|
|
|
|
|
private final Map<AnnotationMetadata, ConfigurationClass> configurationClasses = new HashMap<>(); |
|
|
|
|
|
|
|
|
|
public void register(DeferredImportSelectorHolder deferredImport) { |
|
|
|
|
Class<? extends Group> group = deferredImport.getImportSelector() |
|
|
|
|
.getImportGroup(); |
|
|
|
|
Class<? extends Group> group = deferredImport.getImportSelector().getImportGroup(); |
|
|
|
|
DeferredImportSelectorGrouping grouping = this.groupings.computeIfAbsent( |
|
|
|
|
(group != null ? group : deferredImport), |
|
|
|
|
key -> new DeferredImportSelectorGrouping(createGroup(group))); |
|
|
|
|
@ -798,12 +804,13 @@ class ConfigurationClassParser {
@@ -798,12 +804,13 @@ class ConfigurationClassParser {
|
|
|
|
|
|
|
|
|
|
public void processGroupImports() { |
|
|
|
|
for (DeferredImportSelectorGrouping grouping : this.groupings.values()) { |
|
|
|
|
Predicate<String> candidateFilter = grouping.getCandidateFilter(); |
|
|
|
|
grouping.getImports().forEach(entry -> { |
|
|
|
|
ConfigurationClass configurationClass = this.configurationClasses.get( |
|
|
|
|
entry.getMetadata()); |
|
|
|
|
ConfigurationClass configurationClass = this.configurationClasses.get(entry.getMetadata()); |
|
|
|
|
try { |
|
|
|
|
processImports(configurationClass, asSourceClass(configurationClass), |
|
|
|
|
asSourceClasses(entry.getImportClassName()), false); |
|
|
|
|
processImports(configurationClass, asSourceClass(configurationClass, candidateFilter), |
|
|
|
|
Collections.singleton(asSourceClass(entry.getImportClassName(), candidateFilter)), |
|
|
|
|
candidateFilter, false); |
|
|
|
|
} |
|
|
|
|
catch (BeanDefinitionStoreException ex) { |
|
|
|
|
throw ex; |
|
|
|
|
@ -818,15 +825,12 @@ class ConfigurationClassParser {
@@ -818,15 +825,12 @@ class ConfigurationClassParser {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private Group createGroup(@Nullable Class<? extends Group> type) { |
|
|
|
|
Class<? extends Group> effectiveType = (type != null ? type |
|
|
|
|
: DefaultDeferredImportSelectorGroup.class); |
|
|
|
|
Group group = ParserStrategyUtils.instantiateClass(effectiveType, Group.class, |
|
|
|
|
Class<? extends Group> effectiveType = (type != null ? type : DefaultDeferredImportSelectorGroup.class); |
|
|
|
|
return ParserStrategyUtils.instantiateClass(effectiveType, Group.class, |
|
|
|
|
ConfigurationClassParser.this.environment, |
|
|
|
|
ConfigurationClassParser.this.resourceLoader, |
|
|
|
|
ConfigurationClassParser.this.registry); |
|
|
|
|
return group; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -861,6 +865,10 @@ class ConfigurationClassParser {
@@ -861,6 +865,10 @@ class ConfigurationClassParser {
|
|
|
|
|
this.group = group; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public Group getGroup() { |
|
|
|
|
return this.group; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void add(DeferredImportSelectorHolder deferredImport) { |
|
|
|
|
this.deferredImports.add(deferredImport); |
|
|
|
|
} |
|
|
|
|
@ -876,6 +884,17 @@ class ConfigurationClassParser {
@@ -876,6 +884,17 @@ class ConfigurationClassParser {
|
|
|
|
|
} |
|
|
|
|
return this.group.selectImports(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public Predicate<String> getCandidateFilter() { |
|
|
|
|
Predicate<String> mergedFilter = DEFAULT_CANDIDATE_FILTER; |
|
|
|
|
for (DeferredImportSelectorHolder deferredImport : this.deferredImports) { |
|
|
|
|
Predicate<String> selectorFilter = deferredImport.getImportSelector().getCandidateFilter(); |
|
|
|
|
if (selectorFilter != null) { |
|
|
|
|
mergedFilter = mergedFilter.or(selectorFilter); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return mergedFilter; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -957,7 +976,7 @@ class ConfigurationClassParser {
@@ -957,7 +976,7 @@ class ConfigurationClassParser {
|
|
|
|
|
Class<?>[] declaredClasses = sourceClass.getDeclaredClasses(); |
|
|
|
|
List<SourceClass> members = new ArrayList<>(declaredClasses.length); |
|
|
|
|
for (Class<?> declaredClass : declaredClasses) { |
|
|
|
|
members.add(asSourceClass(declaredClass)); |
|
|
|
|
members.add(asSourceClass(declaredClass, DEFAULT_CANDIDATE_FILTER)); |
|
|
|
|
} |
|
|
|
|
return members; |
|
|
|
|
} |
|
|
|
|
@ -974,7 +993,7 @@ class ConfigurationClassParser {
@@ -974,7 +993,7 @@ class ConfigurationClassParser {
|
|
|
|
|
List<SourceClass> members = new ArrayList<>(memberClassNames.length); |
|
|
|
|
for (String memberClassName : memberClassNames) { |
|
|
|
|
try { |
|
|
|
|
members.add(asSourceClass(memberClassName)); |
|
|
|
|
members.add(asSourceClass(memberClassName, DEFAULT_CANDIDATE_FILTER)); |
|
|
|
|
} |
|
|
|
|
catch (IOException ex) { |
|
|
|
|
// Let's skip it if it's not resolvable - we're just looking for candidates
|
|
|
|
|
@ -989,9 +1008,10 @@ class ConfigurationClassParser {
@@ -989,9 +1008,10 @@ class ConfigurationClassParser {
|
|
|
|
|
|
|
|
|
|
public SourceClass getSuperClass() throws IOException { |
|
|
|
|
if (this.source instanceof Class) { |
|
|
|
|
return asSourceClass(((Class<?>) this.source).getSuperclass()); |
|
|
|
|
return asSourceClass(((Class<?>) this.source).getSuperclass(), DEFAULT_CANDIDATE_FILTER); |
|
|
|
|
} |
|
|
|
|
return asSourceClass(((MetadataReader) this.source).getClassMetadata().getSuperClassName()); |
|
|
|
|
return asSourceClass( |
|
|
|
|
((MetadataReader) this.source).getClassMetadata().getSuperClassName(), DEFAULT_CANDIDATE_FILTER); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public Set<SourceClass> getInterfaces() throws IOException { |
|
|
|
|
@ -999,12 +1019,12 @@ class ConfigurationClassParser {
@@ -999,12 +1019,12 @@ class ConfigurationClassParser {
|
|
|
|
|
if (this.source instanceof Class) { |
|
|
|
|
Class<?> sourceClass = (Class<?>) this.source; |
|
|
|
|
for (Class<?> ifcClass : sourceClass.getInterfaces()) { |
|
|
|
|
result.add(asSourceClass(ifcClass)); |
|
|
|
|
result.add(asSourceClass(ifcClass, DEFAULT_CANDIDATE_FILTER)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
for (String className : this.metadata.getInterfaceNames()) { |
|
|
|
|
result.add(asSourceClass(className)); |
|
|
|
|
result.add(asSourceClass(className, DEFAULT_CANDIDATE_FILTER)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return result; |
|
|
|
|
@ -1018,7 +1038,7 @@ class ConfigurationClassParser {
@@ -1018,7 +1038,7 @@ class ConfigurationClassParser {
|
|
|
|
|
Class<?> annType = ann.annotationType(); |
|
|
|
|
if (!annType.getName().startsWith("java")) { |
|
|
|
|
try { |
|
|
|
|
result.add(asSourceClass(annType)); |
|
|
|
|
result.add(asSourceClass(annType, DEFAULT_CANDIDATE_FILTER)); |
|
|
|
|
} |
|
|
|
|
catch (Throwable ex) { |
|
|
|
|
// An annotation not present on the classpath is being ignored
|
|
|
|
|
@ -1060,7 +1080,7 @@ class ConfigurationClassParser {
@@ -1060,7 +1080,7 @@ class ConfigurationClassParser {
|
|
|
|
|
if (this.source instanceof Class) { |
|
|
|
|
try { |
|
|
|
|
Class<?> clazz = ClassUtils.forName(className, ((Class<?>) this.source).getClassLoader()); |
|
|
|
|
return asSourceClass(clazz); |
|
|
|
|
return asSourceClass(clazz, DEFAULT_CANDIDATE_FILTER); |
|
|
|
|
} |
|
|
|
|
catch (ClassNotFoundException ex) { |
|
|
|
|
// Ignore -> fall back to ASM next, except for core java types.
|
|
|
|
|
@ -1070,7 +1090,7 @@ class ConfigurationClassParser {
@@ -1070,7 +1090,7 @@ class ConfigurationClassParser {
|
|
|
|
|
return new SourceClass(metadataReaderFactory.getMetadataReader(className)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return asSourceClass(className); |
|
|
|
|
return asSourceClass(className, DEFAULT_CANDIDATE_FILTER); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|