diff --git a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java index 586683a8c09..8451afd9240 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2015 the original author or authors. + * Copyright 2002-2016 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. @@ -18,10 +18,12 @@ package org.springframework.context.annotation; import java.io.FileNotFoundException; import java.io.IOException; +import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Comparator; +import java.util.Deque; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; @@ -30,7 +32,6 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.Stack; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -625,7 +626,7 @@ class ConfigurationClassParser { @SuppressWarnings("serial") - private static class ImportStack extends Stack implements ImportRegistry { + private static class ImportStack extends ArrayDeque implements ImportRegistry { private final MultiValueMap imports = new LinkedMultiValueMap(); @@ -650,23 +651,6 @@ class ConfigurationClassParser { return (!CollectionUtils.isEmpty(list) ? list.get(list.size() - 1) : null); } - /** - * Simplified contains() implementation that tests to see if any {@link ConfigurationClass} - * exists within this stack that has the same name as elem. Elem must be of - * type ConfigurationClass. - */ - @Override - public boolean contains(Object elem) { - ConfigurationClass configClass = (ConfigurationClass) elem; - Comparator comparator = new Comparator() { - @Override - public int compare(ConfigurationClass first, ConfigurationClass second) { - return (first.getMetadata().getClassName().equals(second.getMetadata().getClassName()) ? 0 : 1); - } - }; - return (Collections.binarySearch(this, configClass, comparator) != -1); - } - /** * Given a stack containing (in order) *
    @@ -886,7 +870,7 @@ class ConfigurationClassParser { */ private static class CircularImportProblem extends Problem { - public CircularImportProblem(ConfigurationClass attemptedImport, Stack importStack) { + public CircularImportProblem(ConfigurationClass attemptedImport, Deque importStack) { super(String.format("A circular @Import has been detected: " + "Illegal attempt by @Configuration class '%s' to import class '%s' as '%s' is " + "already present in the current import stack %s", importStack.peek().getSimpleName(),