Browse Source

Merge branch '4.0.x'

Closes gh-48822 in 4.1.x
Closes gh-48824
pull/48829/head
Andy Wilkinson 3 weeks ago
parent
commit
9ab0d28ceb
  1. 19
      buildSrc/src/main/java/org/springframework/boot/build/autoconfigure/CheckAutoConfigurationClasses.java
  2. 6
      module/spring-boot-gson/build.gradle
  3. 6
      module/spring-boot-jackson/build.gradle
  4. 6
      module/spring-boot-jackson2/build.gradle
  5. 6
      module/spring-boot-jsonb/build.gradle
  6. 1
      module/spring-boot-micrometer-metrics/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
  7. 7
      module/spring-boot-resttestclient/build.gradle

19
buildSrc/src/main/java/org/springframework/boot/build/autoconfigure/CheckAutoConfigurationClasses.java

@ -37,6 +37,7 @@ import org.gradle.api.file.DirectoryProperty; @@ -37,6 +37,7 @@ import org.gradle.api.file.DirectoryProperty;
import org.gradle.api.file.FileCollection;
import org.gradle.api.provider.SetProperty;
import org.gradle.api.tasks.Classpath;
import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.OutputDirectory;
import org.gradle.api.tasks.TaskAction;
import org.gradle.api.tasks.VerificationException;
@ -113,16 +114,20 @@ public abstract class CheckAutoConfigurationClasses extends AutoConfigurationImp @@ -113,16 +114,20 @@ public abstract class CheckAutoConfigurationClasses extends AutoConfigurationImp
@OutputDirectory
public abstract DirectoryProperty getOutputDirectory();
@Input
public abstract SetProperty<String> getOmittedFromImports();
@TaskAction
void execute() {
Map<String, List<String>> problems = new TreeMap<>();
Set<String> optionalOnlyClassNames = new HashSet<>(this.optionalDependencyClassNames.get());
Set<String> requiredClassNames = this.requiredDependencyClassNames.get();
optionalOnlyClassNames.removeAll(requiredClassNames);
List<String> imports = loadImports();
classFiles().forEach((classFile) -> {
AutoConfigurationClass autoConfigurationClass = AutoConfigurationClass.of(classFile);
if (autoConfigurationClass != null) {
check(autoConfigurationClass, optionalOnlyClassNames, requiredClassNames, problems);
check(autoConfigurationClass, optionalOnlyClassNames, requiredClassNames, imports, problems);
}
});
File outputFile = getOutputDirectory().file("failure-report.txt").get().getAsFile();
@ -153,11 +158,21 @@ public abstract class CheckAutoConfigurationClasses extends AutoConfigurationImp @@ -153,11 +158,21 @@ public abstract class CheckAutoConfigurationClasses extends AutoConfigurationImp
}
private void check(AutoConfigurationClass autoConfigurationClass, Set<String> optionalOnlyClassNames,
Set<String> requiredClassNames, Map<String, List<String>> problems) {
Set<String> requiredClassNames, List<String> imports, Map<String, List<String>> problems) {
if (!autoConfigurationClass.name().endsWith("AutoConfiguration")) {
problems.computeIfAbsent(autoConfigurationClass.name(), (name) -> new ArrayList<>())
.add("Name of a class annotated with @AutoConfiguration should end with AutoConfiguration");
}
if (!getOmittedFromImports().getOrElse(Collections.emptySet()).contains(autoConfigurationClass.name())
&& !imports.contains(autoConfigurationClass.name())) {
problems.computeIfAbsent(autoConfigurationClass.name(), (name) -> new ArrayList<>())
.add("Class is not registered in AutoConfiguration.imports");
}
if (getOmittedFromImports().getOrElse(requiredClassNames).contains(autoConfigurationClass.name())
&& imports.contains(autoConfigurationClass.name())) {
problems.computeIfAbsent(autoConfigurationClass.name(), (name) -> new ArrayList<>())
.add("Class should not be registered in AutoConfiguration.imports");
}
autoConfigurationClass.before().forEach((before) -> {
if (optionalOnlyClassNames.contains(before)) {
problems.computeIfAbsent(autoConfigurationClass.name(), (name) -> new ArrayList<>())

6
module/spring-boot-gson/build.gradle

@ -40,3 +40,9 @@ dependencies { @@ -40,3 +40,9 @@ dependencies {
tasks.named("compileTestJava") {
options.nullability.checking = "tests"
}
tasks.named("checkAutoConfigurationClasses") {
omittedFromImports = [
"org.springframework.boot.gson.autoconfigure.GsonTesterTestAutoConfiguration"
]
}

6
module/spring-boot-jackson/build.gradle

@ -44,3 +44,9 @@ dependencies { @@ -44,3 +44,9 @@ dependencies {
tasks.named("compileTestJava") {
options.nullability.checking = "tests"
}
tasks.named("checkAutoConfigurationClasses") {
omittedFromImports = [
"org.springframework.boot.jackson.autoconfigure.JacksonTesterTestAutoConfiguration"
]
}

6
module/spring-boot-jackson2/build.gradle

@ -50,3 +50,9 @@ dependencies { @@ -50,3 +50,9 @@ dependencies {
tasks.named("compileTestJava") {
options.nullability.checking = "tests"
}
tasks.named("checkAutoConfigurationClasses") {
omittedFromImports = [
"org.springframework.boot.jackson2.autoconfigure.Jackson2TesterTestAutoConfiguration"
]
}

6
module/spring-boot-jsonb/build.gradle

@ -41,3 +41,9 @@ dependencies { @@ -41,3 +41,9 @@ dependencies {
tasks.named("compileTestJava") {
options.nullability.checking = "tests"
}
tasks.named("checkAutoConfigurationClasses") {
omittedFromImports = [
"org.springframework.boot.jsonb.autoconfigure.JsonbTesterTestAutoConfiguration"
]
}

1
module/spring-boot-micrometer-metrics/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

@ -22,6 +22,7 @@ org.springframework.boot.micrometer.metrics.autoconfigure.export.statsd.StatsdMe @@ -22,6 +22,7 @@ org.springframework.boot.micrometer.metrics.autoconfigure.export.statsd.StatsdMe
org.springframework.boot.micrometer.metrics.autoconfigure.jvm.JvmMetricsAutoConfiguration
org.springframework.boot.micrometer.metrics.autoconfigure.logging.log4j2.Log4J2MetricsAutoConfiguration
org.springframework.boot.micrometer.metrics.autoconfigure.logging.logback.LogbackMetricsAutoConfiguration
org.springframework.boot.micrometer.metrics.autoconfigure.ssl.SslMetricsAutoConfiguration
org.springframework.boot.micrometer.metrics.autoconfigure.startup.StartupTimeMetricsListenerAutoConfiguration
org.springframework.boot.micrometer.metrics.autoconfigure.system.SystemMetricsAutoConfiguration
org.springframework.boot.micrometer.metrics.autoconfigure.task.TaskExecutorMetricsAutoConfiguration

7
module/spring-boot-resttestclient/build.gradle

@ -47,3 +47,10 @@ dependencies { @@ -47,3 +47,10 @@ dependencies {
tasks.named("compileTestJava") {
options.nullability.checking = "tests"
}
tasks.named("checkAutoConfigurationClasses") {
omittedFromImports = [
"org.springframework.boot.resttestclient.autoconfigure.RestTestClientAutoConfiguration",
"org.springframework.boot.resttestclient.autoconfigure.TestRestTemplateAutoConfiguration"
]
}

Loading…
Cancel
Save