From 6f24103fe802ffee036da69416decbc1ae0b458e Mon Sep 17 00:00:00 2001 From: Oliver Drotbohm Date: Tue, 28 Jan 2025 23:47:52 +0100 Subject: [PATCH] GH-1043 - Fix module identifier lookup in ApplicationModuleSource. Before this commit, ApplicationModuleSource inspected all package-info.java contained in given packages, including the sub-packages of those. That caused identifiers explicitly defined in an @ApplicationModule on a package-info.java in nested packages picked up for top-level packages. This is now fixed by only considering the files in the top-level packages. --- .../modulith/core/ApplicationModuleSource.java | 2 +- .../core/ApplicationModuleSourceUnitTests.java | 14 ++++++++++++++ .../gh1042/module/nested/package-info.java | 2 ++ .../reproducers/gh764/nested/package-info.java | 2 -- 4 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 spring-modulith-core/src/test/java/reproducers/gh1042/module/nested/package-info.java delete mode 100644 spring-modulith-core/src/test/java/reproducers/gh764/nested/package-info.java diff --git a/spring-modulith-core/src/main/java/org/springframework/modulith/core/ApplicationModuleSource.java b/spring-modulith-core/src/main/java/org/springframework/modulith/core/ApplicationModuleSource.java index 630a904f..0b56ef9b 100644 --- a/spring-modulith-core/src/main/java/org/springframework/modulith/core/ApplicationModuleSource.java +++ b/spring-modulith-core/src/main/java/org/springframework/modulith/core/ApplicationModuleSource.java @@ -79,7 +79,7 @@ public class ApplicationModuleSource { .flatMap(ANNOTATION_IDENTIFIER_SOURCE::withNestedPackages) .map(it -> { - var id = ANNOTATION_IDENTIFIER_SOURCE.lookupIdentifier(it) + var id = ANNOTATION_IDENTIFIER_SOURCE.lookupIdentifier(it.toSingle()) .orElseGet(() -> ApplicationModuleIdentifier.of( fullyQualifiedModuleNames ? it.getName() : rootPackage.getTrailingName(it))); diff --git a/spring-modulith-core/src/test/java/org/springframework/modulith/core/ApplicationModuleSourceUnitTests.java b/spring-modulith-core/src/test/java/org/springframework/modulith/core/ApplicationModuleSourceUnitTests.java index 965731df..b14c6772 100644 --- a/spring-modulith-core/src/test/java/org/springframework/modulith/core/ApplicationModuleSourceUnitTests.java +++ b/spring-modulith-core/src/test/java/org/springframework/modulith/core/ApplicationModuleSourceUnitTests.java @@ -42,4 +42,18 @@ class ApplicationModuleSourceUnitTests { .extracting(ApplicationModuleIdentifier::toString) .contains("ninvalid", "customId", "invalid", "ni", "ni.nested.b.first", "secondCustomized", "ni.nested"); } + + @Test // GH-1042 + void doesNotPickUpIdFromNestedPackages() { + + var pkg = TestUtils.getPackage("reproducers.gh1042"); + + var sources = ApplicationModuleSource.from(pkg, ApplicationModuleDetectionStrategy.directSubPackage(), false); + + assertThat(sources) + .extracting(ApplicationModuleSource::getIdentifier) + .extracting(ApplicationModuleIdentifier::toString) + .contains("module", // picked from package name not from annotation in nested package + "gh-1042-nested"); // from annotation in nested package + } } diff --git a/spring-modulith-core/src/test/java/reproducers/gh1042/module/nested/package-info.java b/spring-modulith-core/src/test/java/reproducers/gh1042/module/nested/package-info.java new file mode 100644 index 00000000..4c2add08 --- /dev/null +++ b/spring-modulith-core/src/test/java/reproducers/gh1042/module/nested/package-info.java @@ -0,0 +1,2 @@ +@org.springframework.modulith.ApplicationModule(id = "gh-1042-nested", displayName = "Nested") +package reproducers.gh1042.module.nested; diff --git a/spring-modulith-core/src/test/java/reproducers/gh764/nested/package-info.java b/spring-modulith-core/src/test/java/reproducers/gh764/nested/package-info.java deleted file mode 100644 index 2528e11c..00000000 --- a/spring-modulith-core/src/test/java/reproducers/gh764/nested/package-info.java +++ /dev/null @@ -1,2 +0,0 @@ -@org.springframework.modulith.ApplicationModule(displayName = "Nested") -package reproducers.gh764.nested;