Polish contribution

Closes gh-13904
pull/13923/head
Stephane Nicoll 6 years ago
parent df6feb3e2a
commit f780179777

@ -23,20 +23,20 @@ import java.util.Map;
import java.util.Set;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
import org.springframework.core.type.filter.AnnotationTypeFilter;
import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;
/**
* Utility class to scan for a {@link SpringBootConfiguration} or custom annotation.
* Utility class to find a class annotated with a particular annotation in a hierarchy.
*
* @author Phillip Webb
* @author Artsiom Yudovin
* @author Stephane Nicoll
* @since 2.1.0
*/
public final class SpringBootConfigurationFinder {
public final class AnnotatedClassFinder {
private static final Map<String, Class<?>> cache = Collections
.synchronizedMap(new Cache(40));
@ -44,28 +44,35 @@ public final class SpringBootConfigurationFinder {
private final ClassPathScanningCandidateComponentProvider scanner;
/**
* Default constructor initializing finder to scan for a {@link SpringBootConfiguration} annotation.
* Create a new instance with the {@code annotationType} to find.
* @param annotationType the annotation to find
*/
public SpringBootConfigurationFinder() {
this(SpringBootConfiguration.class);
}
/**
* Customiable constructor allow to provide the custom annotation to scan for.
* @param annotationType Annotation to scan for.
*/
public SpringBootConfigurationFinder(Class<? extends Annotation> annotationType) {
public AnnotatedClassFinder(Class<? extends Annotation> annotationType) {
Assert.notNull(annotationType, "AnnotationType must not be null");
this.scanner = new ClassPathScanningCandidateComponentProvider(false);
this.scanner.addIncludeFilter(
new AnnotationTypeFilter(annotationType));
this.scanner.addIncludeFilter(new AnnotationTypeFilter(annotationType));
this.scanner.setResourcePattern("*.class");
}
/**
* Find the first {@link Class} that is annotated with the target annotation, starting
* from the package defined by the given {@code source} up to the root.
* @param source the source class to use to initiate the search
* @return the first {@link Class} annotated with the target annotation within the
* hierarchy defined by the given {@code source} or {@code null} if none is found.
*/
public Class<?> findFromClass(Class<?> source) {
Assert.notNull(source, "Source must not be null");
return findFromPackage(ClassUtils.getPackageName(source));
}
/**
* Find the first {@link Class} that is annotated with the target annotation, starting
* from the package defined by the given {@code source} up to the root.
* @param source the source package to use to initiate the search
* @return the first {@link Class} annotated with the target annotation within the
* hierarchy defined by the given {@code source} or {@code null} if none is found.
*/
public Class<?> findFromPackage(String source) {
Assert.notNull(source, "Source must not be null");
Class<?> configuration = cache.get(source);

@ -238,7 +238,7 @@ public class SpringBootTestContextBootstrapper extends DefaultTestContextBootstr
if (containsNonTestComponent(classes) || mergedConfig.hasLocations()) {
return classes;
}
Class<?> found = new SpringBootConfigurationFinder()
Class<?> found = new AnnotatedClassFinder(SpringBootConfiguration.class)
.findFromClass(mergedConfig.getTestClass());
Assert.state(found != null,
"Unable to find a @SpringBootConfiguration, you need to use "

@ -20,22 +20,24 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.test.context.example.ExampleConfig;
import org.springframework.boot.test.context.example.scan.Example;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests for {@link SpringBootConfigurationFinder}.
* Tests for {@link AnnotatedClassFinder}.
*
* @author Phillip Webb
*/
public class SpringBootConfigurationFinderTests {
public class AnnotatedClassFinderTests {
@Rule
public ExpectedException thrown = ExpectedException.none();
private SpringBootConfigurationFinder finder = new SpringBootConfigurationFinder();
private AnnotatedClassFinder finder = new AnnotatedClassFinder(
SpringBootConfiguration.class);
@Test
public void findFromClassWhenSourceIsNullShouldThrowException() {

@ -17,10 +17,10 @@
package org.springframework.boot.test.context.example;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.test.context.SpringBootConfigurationFinderTests;
import org.springframework.boot.test.context.AnnotatedClassFinderTests;
/**
* Example config used in {@link SpringBootConfigurationFinderTests}.
* Example config used in {@link AnnotatedClassFinderTests}.
*
* @author Phillip Webb
*/

@ -16,10 +16,10 @@
package org.springframework.boot.test.context.example.scan;
import org.springframework.boot.test.context.SpringBootConfigurationFinderTests;
import org.springframework.boot.test.context.AnnotatedClassFinderTests;
/**
* Example class used in {@link SpringBootConfigurationFinderTests}.
* Example class used in {@link AnnotatedClassFinderTests}.
*
* @author Phillip Webb
*/

@ -17,11 +17,11 @@
package org.springframework.boot.test.context.example.scan.sub;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.test.context.SpringBootConfigurationFinderTests;
import org.springframework.boot.test.context.AnnotatedClassFinderTests;
/**
* Example config used in {@link SpringBootConfigurationFinderTests}. Should not be found
* since scanner should only search upwards.
* Example config used in {@link AnnotatedClassFinderTests}. Should not be found since
* scanner should only search upwards.
*
* @author Phillip Webb
*/

Loading…
Cancel
Save