Re-resolve ContextLoader in logWarningForIgnoredDefaultConfig()

Ideally, we should be able to reuse the ContextLoader that was resolved
in buildDefaultMergedContextConfiguration(); however, since we have
been informed that some implementations of resolveContextLoader()
mutate the state of the supplied ContextConfigurationAttributes to
detect default configuration classes, we need to invoke
resolveContextLoader() on the completeDefaultConfigAttributesList as
well in order not to break custom TestContextBootstrappers that exhibit
such side effects.

Closes gh-36390
This commit is contained in:
Sam Brannen
2026-03-05 15:28:19 +01:00
parent bbe733def7
commit c2d0d292bd
@@ -277,7 +277,7 @@ public abstract class AbstractTestContextBootstrapper implements TestContextBoot
}
MergedContextConfiguration mergedConfig = buildMergedContextConfiguration(
testClass, defaultConfigAttributesList, contextLoader, null, cacheAwareContextLoaderDelegate, false);
logWarningForIgnoredDefaultConfig(mergedConfig, contextLoader, cacheAwareContextLoaderDelegate);
logWarningForIgnoredDefaultConfig(mergedConfig, cacheAwareContextLoaderDelegate);
return mergedConfig;
}
@@ -288,12 +288,20 @@ public abstract class AbstractTestContextBootstrapper implements TestContextBoot
* being ignored.
*/
private void logWarningForIgnoredDefaultConfig(MergedContextConfiguration mergedConfig,
ContextLoader contextLoader, CacheAwareContextLoaderDelegate cacheAwareContextLoaderDelegate) {
CacheAwareContextLoaderDelegate cacheAwareContextLoaderDelegate) {
if (logger.isWarnEnabled()) {
Class<?> testClass = mergedConfig.getTestClass();
List<ContextConfigurationAttributes> completeDefaultConfigAttributesList =
ContextLoaderUtils.resolveDefaultContextConfigurationAttributes(testClass);
// Ideally, we should be able to reuse the ContextLoader that was resolved
// in buildDefaultMergedContextConfiguration(); however, since we have been
// informed that some implementations of resolveContextLoader() mutate the
// state of the supplied ContextConfigurationAttributes to detect default
// configuration classes, we need to invoke resolveContextLoader() on the
// completeDefaultConfigAttributesList as well in order not to break such
// custom TestContextBootstrappers.
ContextLoader contextLoader = resolveContextLoader(testClass, completeDefaultConfigAttributesList);
MergedContextConfiguration completeMergedConfig = buildMergedContextConfiguration(
testClass, completeDefaultConfigAttributesList, contextLoader, null,
cacheAwareContextLoaderDelegate, false);