diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/AbstractEndpointCondition.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/AbstractEndpointCondition.java index 2f23401875..1747da82b6 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/AbstractEndpointCondition.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/condition/AbstractEndpointCondition.java @@ -101,7 +101,7 @@ abstract class AbstractEndpointCondition extends SpringBootCondition { } protected AnnotationAttributes getEndpointAttributes(Class type) { - MergedAnnotations annotations = MergedAnnotations.from(type, SearchStrategy.EXHAUSTIVE); + MergedAnnotations annotations = MergedAnnotations.from(type, SearchStrategy.TYPE_HIERARCHY); MergedAnnotation endpoint = annotations.get(Endpoint.class); if (endpoint.isPresent()) { return endpoint.asAnnotationAttributes(); diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation/EndpointDiscoverer.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation/EndpointDiscoverer.java index 6ff1fc967f..037ac5734e 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation/EndpointDiscoverer.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/annotation/EndpointDiscoverer.java @@ -403,8 +403,8 @@ public abstract class EndpointDiscoverer, O exten private Set extensions = new LinkedHashSet<>(); EndpointBean(String beanName, Object bean) { - MergedAnnotation annotation = MergedAnnotations.from(bean.getClass(), SearchStrategy.EXHAUSTIVE) - .get(Endpoint.class); + MergedAnnotation annotation = MergedAnnotations + .from(bean.getClass(), SearchStrategy.TYPE_HIERARCHY).get(Endpoint.class); String id = annotation.getString("id"); Assert.state(StringUtils.hasText(id), () -> "No @Endpoint id attribute specified for " + bean.getClass().getName()); @@ -470,7 +470,7 @@ public abstract class EndpointDiscoverer, O exten .get(EndpointExtension.class); Class endpointType = extensionAnnotation.getClass("endpoint"); MergedAnnotation endpointAnnotation = MergedAnnotations - .from(endpointType, SearchStrategy.EXHAUSTIVE).get(Endpoint.class); + .from(endpointType, SearchStrategy.TYPE_HIERARCHY).get(Endpoint.class); Assert.state(endpointAnnotation.isPresent(), () -> "Extension " + endpointType.getName() + " does not specify an endpoint"); this.endpointId = EndpointId.of(endpointAnnotation.getString("id")); diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/test/WebEndpointTestInvocationContextProvider.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/test/WebEndpointTestInvocationContextProvider.java index cb62ec73ca..020bb8a1cc 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/test/WebEndpointTestInvocationContextProvider.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/web/test/WebEndpointTestInvocationContextProvider.java @@ -153,7 +153,7 @@ class WebEndpointTestInvocationContextProvider implements TestTemplateInvocation } private boolean isConfiguration(Class candidate) { - return MergedAnnotations.from(candidate, SearchStrategy.EXHAUSTIVE).isPresent(Configuration.class); + return MergedAnnotations.from(candidate, SearchStrategy.TYPE_HIERARCHY).isPresent(Configuration.class); } @Override diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/BeanTypeRegistry.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/BeanTypeRegistry.java index 3fee90585c..915b60be24 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/BeanTypeRegistry.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/BeanTypeRegistry.java @@ -117,7 +117,7 @@ final class BeanTypeRegistry implements SmartInitializingSingleton { updateTypesIfNecessary(); return this.beanTypes.entrySet().stream() .filter((entry) -> entry.getValue() != null && MergedAnnotations - .from(entry.getValue().resolve(), MergedAnnotations.SearchStrategy.EXHAUSTIVE) + .from(entry.getValue().resolve(), MergedAnnotations.SearchStrategy.TYPE_HIERARCHY) .isPresent(annotation)) .map(Map.Entry::getKey).collect(Collectors.toCollection(LinkedHashSet::new)); } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/OnBeanCondition.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/OnBeanCondition.java index 84dbaad269..6dd403ac24 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/OnBeanCondition.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/OnBeanCondition.java @@ -566,7 +566,7 @@ class OnBeanCondition extends FilteringSpringBootCondition implements Configurat } private boolean isBeanMethod(Method method) { - return method != null && MergedAnnotations.from(method, MergedAnnotations.SearchStrategy.EXHAUSTIVE) + return method != null && MergedAnnotations.from(method, MergedAnnotations.SearchStrategy.TYPE_HIERARCHY) .isPresent(Bean.class); } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/DefaultJerseyApplicationPath.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/DefaultJerseyApplicationPath.java index 437e2a6fbf..bae786ae16 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/DefaultJerseyApplicationPath.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/DefaultJerseyApplicationPath.java @@ -53,7 +53,7 @@ public class DefaultJerseyApplicationPath implements JerseyApplicationPath { return this.applicationPath; } // Jersey doesn't like to be the default servlet, so map to /* as a fallback - return MergedAnnotations.from(this.config.getApplication().getClass(), SearchStrategy.EXHAUSTIVE) + return MergedAnnotations.from(this.config.getApplication().getClass(), SearchStrategy.TYPE_HIERARCHY) .get(ApplicationPath.class).getValue(MergedAnnotation.VALUE, String.class).orElse("/*"); } diff --git a/spring-boot-project/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/OverrideAutoConfigurationContextCustomizerFactory.java b/spring-boot-project/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/OverrideAutoConfigurationContextCustomizerFactory.java index bf68074418..30ffb63b7e 100644 --- a/spring-boot-project/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/OverrideAutoConfigurationContextCustomizerFactory.java +++ b/spring-boot-project/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/OverrideAutoConfigurationContextCustomizerFactory.java @@ -39,7 +39,7 @@ class OverrideAutoConfigurationContextCustomizerFactory implements ContextCustom @Override public ContextCustomizer createContextCustomizer(Class testClass, List configurationAttributes) { - boolean enabled = MergedAnnotations.from(testClass, SearchStrategy.EXHAUSTIVE) + boolean enabled = MergedAnnotations.from(testClass, SearchStrategy.TYPE_HIERARCHY) .get(OverrideAutoConfiguration.class).getValue("enabled", Boolean.class).orElse(true); return !enabled ? new DisableAutoConfigurationContextCustomizer() : null; } diff --git a/spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/context/ImportsContextCustomizerFactory.java b/spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/context/ImportsContextCustomizerFactory.java index 1259cebd4f..2cf04e1caa 100644 --- a/spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/context/ImportsContextCustomizerFactory.java +++ b/spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/context/ImportsContextCustomizerFactory.java @@ -41,7 +41,7 @@ class ImportsContextCustomizerFactory implements ContextCustomizerFactory { @Override public ContextCustomizer createContextCustomizer(Class testClass, List configAttributes) { - if (MergedAnnotations.from(testClass, SearchStrategy.EXHAUSTIVE).isPresent(Import.class)) { + if (MergedAnnotations.from(testClass, SearchStrategy.TYPE_HIERARCHY).isPresent(Import.class)) { assertHasNoBeanMethods(testClass); return new ImportsContextCustomizer(testClass); } diff --git a/spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/context/SpringBootContextLoader.java b/spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/context/SpringBootContextLoader.java index ab3e104687..ed385431a4 100644 --- a/spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/context/SpringBootContextLoader.java +++ b/spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/context/SpringBootContextLoader.java @@ -151,7 +151,7 @@ public class SpringBootContextLoader extends AbstractContextLoader { * @see SpringApplication#run(String...) */ protected String[] getArgs(MergedContextConfiguration config) { - return MergedAnnotations.from(config.getTestClass(), SearchStrategy.EXHAUSTIVE).get(SpringBootTest.class) + return MergedAnnotations.from(config.getTestClass(), SearchStrategy.TYPE_HIERARCHY).get(SpringBootTest.class) .getValue("args", String[].class).orElse(NO_ARGS); } @@ -215,7 +215,7 @@ public class SpringBootContextLoader extends AbstractContextLoader { } private boolean isEmbeddedWebEnvironment(MergedContextConfiguration config) { - return MergedAnnotations.from(config.getTestClass(), SearchStrategy.EXHAUSTIVE).get(SpringBootTest.class) + return MergedAnnotations.from(config.getTestClass(), SearchStrategy.TYPE_HIERARCHY).get(SpringBootTest.class) .getValue("webEnvironment", WebEnvironment.class).orElse(WebEnvironment.NONE).isEmbedded(); } diff --git a/spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/context/SpringBootTestContextBootstrapper.java b/spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/context/SpringBootTestContextBootstrapper.java index 4fc0c56c57..5f3dbf7179 100644 --- a/spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/context/SpringBootTestContextBootstrapper.java +++ b/spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/context/SpringBootTestContextBootstrapper.java @@ -196,7 +196,7 @@ public class SpringBootTestContextBootstrapper extends DefaultTestContextBootstr * @since 2.1.6 */ protected String determineResourceBasePath(MergedContextConfiguration configuration) { - return MergedAnnotations.from(configuration.getTestClass(), SearchStrategy.EXHAUSTIVE) + return MergedAnnotations.from(configuration.getTestClass(), SearchStrategy.TYPE_HIERARCHY) .get(WebAppConfiguration.class).getValue(MergedAnnotation.VALUE, String.class) .orElse("src/main/webapp"); } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/classpath/ModifiedClassPathClassLoader.java b/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/classpath/ModifiedClassPathClassLoader.java index 07d2ba5437..1da616901d 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/classpath/ModifiedClassPathClassLoader.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/classpath/ModifiedClassPathClassLoader.java @@ -161,7 +161,8 @@ final class ModifiedClassPathClassLoader extends URLClassLoader { } private static URL[] processUrls(URL[] urls, Class testClass) { - MergedAnnotations annotations = MergedAnnotations.from(testClass, MergedAnnotations.SearchStrategy.EXHAUSTIVE); + MergedAnnotations annotations = MergedAnnotations.from(testClass, + MergedAnnotations.SearchStrategy.TYPE_HIERARCHY); ClassPathEntryFilter filter = new ClassPathEntryFilter(annotations.get(ClassPathExclusions.class)); List processedUrls = new ArrayList<>(); List additionalUrls = getAdditionalUrls(annotations.get(ClassPathOverrides.class)); diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/BeanDefinitionLoader.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/BeanDefinitionLoader.java index 93c604afcc..487ae32618 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/BeanDefinitionLoader.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/BeanDefinitionLoader.java @@ -276,7 +276,7 @@ class BeanDefinitionLoader { private boolean isComponent(Class type) { // This has to be a bit of a guess. The only way to be sure that this type is // eligible is to make a bean definition out of it and try to instantiate it. - if (MergedAnnotations.from(type, SearchStrategy.EXHAUSTIVE).isPresent(Component.class)) { + if (MergedAnnotations.from(type, SearchStrategy.TYPE_HIERARCHY).isPresent(Component.class)) { return true; } // Nested anonymous classes are not eligible for registration, nor are groovy diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/ConfigurationPropertiesBeanDefinitionRegistrar.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/ConfigurationPropertiesBeanDefinitionRegistrar.java index 4244dcd0b1..fe02ecbe97 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/ConfigurationPropertiesBeanDefinitionRegistrar.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/ConfigurationPropertiesBeanDefinitionRegistrar.java @@ -48,8 +48,8 @@ final class ConfigurationPropertiesBeanDefinitionRegistrar { } static void register(BeanDefinitionRegistry registry, ConfigurableListableBeanFactory beanFactory, Class type) { - MergedAnnotation annotation = MergedAnnotations.from(type, SearchStrategy.EXHAUSTIVE) - .get(ConfigurationProperties.class); + MergedAnnotation annotation = MergedAnnotations + .from(type, SearchStrategy.TYPE_HIERARCHY).get(ConfigurationProperties.class); String name = getName(type, annotation); if (!containsBeanDefinition(beanFactory, name)) { registerBeanDefinition(registry, beanFactory, name, type, annotation); diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/ConfigurationPropertiesScanRegistrar.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/ConfigurationPropertiesScanRegistrar.java index 6f58ef3b13..d52cd0f920 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/ConfigurationPropertiesScanRegistrar.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/properties/ConfigurationPropertiesScanRegistrar.java @@ -110,7 +110,7 @@ class ConfigurationPropertiesScanRegistrar private void validateScanConfiguration(Class type) { MergedAnnotation component = MergedAnnotations - .from(type, MergedAnnotations.SearchStrategy.EXHAUSTIVE).get(Component.class); + .from(type, MergedAnnotations.SearchStrategy.TYPE_HIERARCHY).get(Component.class); if (component.isPresent()) { throw new InvalidConfigurationPropertiesException(type, component.getRoot().getType()); } diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/jackson/JsonComponentModule.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/jackson/JsonComponentModule.java index bcf6a43658..1d620a1f1a 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/jackson/JsonComponentModule.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/jackson/JsonComponentModule.java @@ -80,8 +80,8 @@ public class JsonComponentModule extends SimpleModule implements BeanFactoryAwar } private void addJsonBean(Object bean) { - MergedAnnotation annotation = MergedAnnotations.from(bean.getClass(), SearchStrategy.EXHAUSTIVE) - .get(JsonComponent.class); + MergedAnnotation annotation = MergedAnnotations + .from(bean.getClass(), SearchStrategy.TYPE_HIERARCHY).get(JsonComponent.class); Class[] types = annotation.getClassArray("type"); Scope scope = annotation.getEnum("scope", JsonComponent.Scope.class); addJsonBean(bean, types, scope); diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/reactive/error/DefaultErrorAttributes.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/reactive/error/DefaultErrorAttributes.java index f67aaf7e7f..df57aeef2d 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/reactive/error/DefaultErrorAttributes.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/reactive/error/DefaultErrorAttributes.java @@ -84,7 +84,7 @@ public class DefaultErrorAttributes implements ErrorAttributes { errorAttributes.put("path", request.path()); Throwable error = getError(request); MergedAnnotation responseStatusAnnotation = MergedAnnotations - .from(error.getClass(), SearchStrategy.EXHAUSTIVE).get(ResponseStatus.class); + .from(error.getClass(), SearchStrategy.TYPE_HIERARCHY).get(ResponseStatus.class); HttpStatus errorStatus = determineHttpStatus(error, responseStatusAnnotation); errorAttributes.put("status", errorStatus.value()); errorAttributes.put("error", errorStatus.getReasonPhrase()); diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/servlet/support/SpringBootServletInitializer.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/servlet/support/SpringBootServletInitializer.java index fb1fe082b2..d5b4689013 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/servlet/support/SpringBootServletInitializer.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/servlet/support/SpringBootServletInitializer.java @@ -119,7 +119,7 @@ public abstract class SpringBootServletInitializer implements WebApplicationInit builder.listeners(new WebEnvironmentPropertySourceInitializer(servletContext)); SpringApplication application = builder.build(); if (application.getAllSources().isEmpty() - && MergedAnnotations.from(getClass(), SearchStrategy.EXHAUSTIVE).isPresent(Configuration.class)) { + && MergedAnnotations.from(getClass(), SearchStrategy.TYPE_HIERARCHY).isPresent(Configuration.class)) { application.addPrimarySources(Collections.singleton(getClass())); } Assert.state(!application.getAllSources().isEmpty(),