Skip to content

Commit

Permalink
Merge branch '2.7.x' into 3.0.x
Browse files Browse the repository at this point in the history
Closes gh-36208
  • Loading branch information
philwebb committed Jul 4, 2023
2 parents f1d87b3 + b7ad85c commit ab7e4da
Show file tree
Hide file tree
Showing 2 changed files with 103 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2012-2022 the original author or authors.
* Copyright 2012-2023 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.
Expand Down Expand Up @@ -43,6 +43,9 @@
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.core.annotation.MergedAnnotation;
import org.springframework.core.annotation.MergedAnnotations;
import org.springframework.core.annotation.MergedAnnotations.SearchStrategy;
import org.springframework.core.annotation.Order;
import org.springframework.core.style.ToStringCreator;
import org.springframework.core.type.AnnotationMetadata;
Expand Down Expand Up @@ -251,7 +254,9 @@ private void collectClassAnnotations(Class<?> classType, Set<Annotation> annotat

private void collectElementAnnotations(AnnotatedElement element, Set<Annotation> annotations,
Set<Class<?>> seen) {
for (Annotation annotation : element.getDeclaredAnnotations()) {
for (MergedAnnotation<Annotation> mergedAnnotation : MergedAnnotations.from(element,
SearchStrategy.DIRECT)) {
Annotation annotation = mergedAnnotation.synthesize();
if (!isIgnoredAnnotation(annotation)) {
annotations.add(annotation);
collectClassAnnotations(annotation.annotationType(), annotations, seen);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.ImportSelector;
import org.springframework.core.annotation.AliasFor;
import org.springframework.core.type.AnnotationMetadata;

import static org.assertj.core.api.Assertions.assertThat;
Expand All @@ -41,6 +42,7 @@
* Tests for {@link ImportsContextCustomizer}.
*
* @author Andy Wilkinson
* @author Laurent Martelli
*/
class ImportsContextCustomizerTests {

Expand Down Expand Up @@ -80,6 +82,30 @@ void customizersForTestClassesWithDifferentJUnitAnnotationsAreEqual() {
.isEqualTo(new ImportsContextCustomizer(SecondJUnitAnnotatedTestClass.class));
}

@Test
void customizersForClassesWithDifferentImportsAreNotEqual() {
assertThat(new ImportsContextCustomizer(FirstAnnotatedTestClass.class))
.isNotEqualTo(new ImportsContextCustomizer(SecondAnnotatedTestClass.class));
}

@Test
void customizersForClassesWithDifferentMetaImportsAreNotEqual() {
assertThat(new ImportsContextCustomizer(FirstMetaAnnotatedTestClass.class))
.isNotEqualTo(new ImportsContextCustomizer(SecondMetaAnnotatedTestClass.class));
}

@Test
void customizersForClassesWithDifferentAliasedImportsAreNotEqual() {
assertThat(new ImportsContextCustomizer(FirstAliasAnnotatedTestClass.class))
.isNotEqualTo(new ImportsContextCustomizer(SecondAliasAnnotatedTestClass.class));
}

@Test
void importsCanBeScatteredOnMultipleAnnotations() {
assertThat(new ImportsContextCustomizer(SingleImportAnnotationTestClass.class))
.isEqualTo(new ImportsContextCustomizer(MultipleImportAnnotationTestClass.class));
}

@Import(TestImportSelector.class)
@Indicator1
static class FirstImportSelectorAnnotatedClass {
Expand Down Expand Up @@ -152,6 +178,17 @@ static class SecondJUnitAnnotatedTestClass {

}

@Import({ FirstImportedClass.class, SecondImportedClass.class })
static class SingleImportAnnotationTestClass {

}

@FirstMetaImport
@Import(SecondImportedClass.class)
static class MultipleImportAnnotationTestClass {

}

@Retention(RetentionPolicy.RUNTIME)
@interface Indicator1 {

Expand All @@ -162,6 +199,65 @@ static class SecondJUnitAnnotatedTestClass {

}

@Retention(RetentionPolicy.RUNTIME)
@Import(AliasFor.class)
public @interface AliasedImport {

@AliasFor(annotation = Import.class)
Class<?>[] value();

}

@Retention(RetentionPolicy.RUNTIME)
@Import(FirstImportedClass.class)
public @interface FirstMetaImport {

}

@Retention(RetentionPolicy.RUNTIME)
@Import(SecondImportedClass.class)
public @interface SecondMetaImport {

}

static class FirstImportedClass {

}

static class SecondImportedClass {

}

@AliasedImport(FirstImportedClass.class)
static class FirstAliasAnnotatedTestClass {

}

@AliasedImport(SecondImportedClass.class)
static class SecondAliasAnnotatedTestClass {

}

@FirstMetaImport
static class FirstMetaAnnotatedTestClass {

}

@SecondMetaImport
static class SecondMetaAnnotatedTestClass {

}

@Import(FirstImportedClass.class)
static class FirstAnnotatedTestClass {

}

@Import(SecondImportedClass.class)
static class SecondAnnotatedTestClass {

}

static class TestImportSelector implements ImportSelector {

@Override
Expand Down

0 comments on commit ab7e4da

Please sign in to comment.