Skip to content

Commit a9290d8

Browse files
philwebbcbeams
authored andcommitted
Backport "Polish @imports search code"
Issue: SPR-9925 Backport-Commit: 4cdf46f Conflicts: spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java
1 parent 1f52f09 commit a9290d8

File tree

1 file changed

+10
-18
lines changed

1 file changed

+10
-18
lines changed

org.springframework.context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
package org.springframework.context.annotation;
1818

19+
import static org.springframework.context.annotation.MetadataUtils.attributesFor;
20+
1921
import java.io.IOException;
2022
import java.util.Arrays;
2123
import java.util.Collections;
@@ -24,7 +26,6 @@
2426
import java.util.HashSet;
2527
import java.util.Iterator;
2628
import java.util.LinkedHashSet;
27-
import java.util.LinkedList;
2829
import java.util.Map;
2930
import java.util.Set;
3031
import java.util.Stack;
@@ -51,8 +52,6 @@
5152
import org.springframework.core.type.filter.AssignableTypeFilter;
5253
import org.springframework.util.StringUtils;
5354

54-
import static org.springframework.context.annotation.MetadataUtils.*;
55-
5655
/**
5756
* Parses a {@link Configuration} class definition, populating a collection of
5857
* {@link ConfigurationClass} objects (parsing a single Configuration class may result in
@@ -73,8 +72,6 @@
7372
*/
7473
class ConfigurationClassParser {
7574

76-
private static final String[] EMPTY_IMPORTS = {};
77-
7875
private final MetadataReaderFactory metadataReaderFactory;
7976

8077
private final ProblemReporter problemReporter;
@@ -223,7 +220,10 @@ protected AnnotationMetadata doProcessConfigurationClass(
223220
}
224221

225222
// process any @Import annotations
226-
processImport(configClass, getImports(metadata.getClassName()), true);
223+
Set<String> imports = getImports(metadata.getClassName(), null, new HashSet<String>());
224+
if (imports != null && !imports.isEmpty()) {
225+
processImport(configClass, imports.toArray(new String[imports.size()]), true);
226+
}
227227

228228
// process any @ImportResource annotations
229229
if (metadata.isAnnotated(ImportResource.class.getName())) {
@@ -285,31 +285,23 @@ else if (superclass.startsWith("java")) {
285285
* @return a set of all {@link Import#value() import values} or {@code null}
286286
* @throws IOException if there is any problem reading metadata from the named class
287287
*/
288-
private String[] getImports(String className) throws IOException {
289-
LinkedList<String> imports = new LinkedList<String>();
290-
collectImports(className, imports, new HashSet<String>());
291-
if(imports == null || imports.isEmpty()) {
292-
return EMPTY_IMPORTS;
293-
}
294-
LinkedHashSet<String> uniqueImports = new LinkedHashSet<String>(imports);
295-
return uniqueImports.toArray(new String[uniqueImports.size()]);
296-
}
297-
298-
private void collectImports(String className, LinkedList<String> imports,
288+
private Set<String> getImports(String className, Set<String> imports,
299289
Set<String> visited) throws IOException {
300290
if (visited.add(className)) {
301291
AnnotationMetadata metadata = metadataReaderFactory.getMetadataReader(className).getAnnotationMetadata();
302292
for (String annotationType : metadata.getAnnotationTypes()) {
303-
collectImports(annotationType, imports, visited);
293+
imports = getImports(annotationType, imports, visited);
304294
}
305295
Map<String, Object> attributes = metadata.getAnnotationAttributes(Import.class.getName(), true);
306296
if (attributes != null) {
307297
String[] value = (String[]) attributes.get("value");
308298
if (value != null && value.length > 0) {
299+
imports = (imports == null ? new LinkedHashSet<String>() : imports);
309300
imports.addAll(Arrays.asList(value));
310301
}
311302
}
312303
}
304+
return imports;
313305
}
314306

315307
private void processImport(ConfigurationClass configClass, String[] classesToImport, boolean checkForCircularImports) throws IOException {

0 commit comments

Comments
 (0)