diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/EnableAutoConfigurationImportSelector.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/EnableAutoConfigurationImportSelector.java index 2a9c3165d5..88173e63c1 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/EnableAutoConfigurationImportSelector.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/EnableAutoConfigurationImportSelector.java @@ -80,6 +80,8 @@ class EnableAutoConfigurationImportSelector implements DeferredImportSelector, excluded.addAll(Arrays.asList(attributes.getStringArray("excludeName"))); factories.removeAll(excluded); ConditionEvaluationReport.get(this.beanFactory).recordExclusions(excluded); + ConditionEvaluationReport.get(this.beanFactory).recordEvaluationCandidates( + factories); // Sort factories = new AutoConfigurationSorter(this.resourceLoader) diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/ConditionEvaluationReport.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/ConditionEvaluationReport.java index f128ece223..2165b1fd3b 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/ConditionEvaluationReport.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/condition/ConditionEvaluationReport.java @@ -19,6 +19,7 @@ package org.springframework.boot.autoconfigure.condition; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; @@ -58,6 +59,8 @@ public class ConditionEvaluationReport { private List exclusions = Collections.emptyList(); + private Set unconditionalClasses = new HashSet(); + /** * Private constructor. * @see #get(ConfigurableListableBeanFactory) @@ -76,6 +79,7 @@ public class ConditionEvaluationReport { Assert.notNull(source, "Source must not be null"); Assert.notNull(condition, "Condition must not be null"); Assert.notNull(outcome, "Outcome must not be null"); + this.unconditionalClasses.remove(source); if (!this.outcomes.containsKey(source)) { this.outcomes.put(source, new ConditionAndOutcomes()); } @@ -92,6 +96,16 @@ public class ConditionEvaluationReport { this.exclusions = new ArrayList(exclusions); } + /** + * Records the names of the classes that are candidates for condition evaluation + * @param evaluationCandidates the names of the classes whose conditions will be + * evaluated + */ + public void recordEvaluationCandidates(List evaluationCandidates) { + Assert.notNull(evaluationCandidates, "evaluationCandidates must not be null"); + this.unconditionalClasses = new HashSet(evaluationCandidates); + } + /** * Returns condition outcomes from this report, grouped by the source. * @return the condition outcomes @@ -127,6 +141,14 @@ public class ConditionEvaluationReport { return Collections.unmodifiableList(this.exclusions); } + /** + * Returns the name of the classes that were evaluated but were not conditional. + * @return the names of the unconditional classes + */ + public Set getUnconditionalClasses() { + return Collections.unmodifiableSet(this.unconditionalClasses); + } + /** * The parent report (from a parent BeanFactory if there is one). * @return the parent report (or null if there isn't one) diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/logging/AutoConfigurationReportLoggingInitializer.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/logging/AutoConfigurationReportLoggingInitializer.java index 2f647ce0dd..96eef88c1d 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/logging/AutoConfigurationReportLoggingInitializer.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/logging/AutoConfigurationReportLoggingInitializer.java @@ -151,6 +151,17 @@ public class AutoConfigurationReportLoggingInitializer implements } } message.append("\n\n"); + message.append("Unconditional classes:\n"); + message.append("----------------------\n"); + if (report.getUnconditionalClasses().isEmpty()) { + message.append("\n None\n"); + } + else { + for (String unconditionalClass : report.getUnconditionalClasses()) { + message.append("\n " + unconditionalClass + "\n"); + } + } + message.append("\n\n"); return message; }