From 33038d3e1ef7c8111ab6ecce72949abb02bd328d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Nicoll?= Date: Wed, 8 Oct 2025 13:59:08 +0200 Subject: [PATCH] Exclude shaded JSON packages from architecture checks Closes gh-47207 --- .../boot/build/architecture/ArchitectureRules.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/buildSrc/src/main/java/org/springframework/boot/build/architecture/ArchitectureRules.java b/buildSrc/src/main/java/org/springframework/boot/build/architecture/ArchitectureRules.java index 9487c293dd4..47bcd305464 100644 --- a/buildSrc/src/main/java/org/springframework/boot/build/architecture/ArchitectureRules.java +++ b/buildSrc/src/main/java/org/springframework/boot/build/architecture/ArchitectureRules.java @@ -82,6 +82,11 @@ final class ArchitectureRules { private static final String TEST_AUTOCONFIGURATION_ANNOTATION = "org.springframework.boot.test.autoconfigure.TestAutoConfiguration"; + private static final Predicate NULL_MARKED_PACKAGE_FILTER = (candidate) -> !List + .of("org.springframework.boot.cli.json", "org.springframework.boot.configurationmetadata.json", + "org.springframework.boot.configurationprocessor.json") + .contains(candidate.getName()); + private ArchitectureRules() { } @@ -258,7 +263,9 @@ final class ArchitectureRules { } static ArchRule packagesShouldBeAnnotatedWithNullMarked() { - return ArchRuleDefinition.all(packages()).should(beAnnotatedWithNullMarked()).allowEmptyShould(true); + return ArchRuleDefinition.all(packages(NULL_MARKED_PACKAGE_FILTER)) + .should(beAnnotatedWithNullMarked()) + .allowEmptyShould(true); } private static ArchCondition notSpecifyOnlyATypeThatIsTheSameAsTheMethodReturnType() { @@ -504,11 +511,11 @@ final class ArchitectureRules { return string + " should be used instead"; } - static ClassesTransformer packages() { + static ClassesTransformer packages(Predicate filter) { return new AbstractClassesTransformer<>("packages") { @Override public Iterable doTransform(JavaClasses collection) { - return collection.stream().map(JavaClass::getPackage).collect(Collectors.toSet()); + return collection.stream().map(JavaClass::getPackage).filter(filter).collect(Collectors.toSet()); } }; }