From 1de1ec6752405963ecded7cb42d8cff05c1afd2f Mon Sep 17 00:00:00 2001 From: Jendrik Johannes Date: Mon, 31 Mar 2025 08:59:42 +0200 Subject: [PATCH] Add 'requiresStaticTransitive(...)' to module patch DSL --- CHANGELOG.md | 3 +++ .../moduleinfo/ExtraJavaModuleInfoTransform.java | 3 +++ .../org/gradlex/javamodule/moduleinfo/ModuleInfo.java | 8 ++++++++ .../moduleinfo/test/AbstractFunctionalTest.groovy | 6 ++++++ 4 files changed, 20 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index dd29be9..5d59051 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Extra Java Module Info Gradle Plugin - Changelog +## Version 1.12 +* [New] [#174](https://github.com/gradlex-org/extra-java-module-info/pull/174) - Add 'requiresStaticTransitive(...)' to module patch DSL + ## Version 1.11 * [New] [#134](https://github.com/gradlex-org/extra-java-module-info/pull/134) - Add 'disable(...)' and 'enable(...)' options to control when the plugin is active * [New] [#161](https://github.com/gradlex-org/extra-java-module-info/pull/161) - Add 'skipLocalJars' option diff --git a/src/main/java/org/gradlex/javamodule/moduleinfo/ExtraJavaModuleInfoTransform.java b/src/main/java/org/gradlex/javamodule/moduleinfo/ExtraJavaModuleInfoTransform.java index 96fac44..f079002 100644 --- a/src/main/java/org/gradlex/javamodule/moduleinfo/ExtraJavaModuleInfoTransform.java +++ b/src/main/java/org/gradlex/javamodule/moduleinfo/ExtraJavaModuleInfoTransform.java @@ -467,6 +467,9 @@ private void addModuleInfoEntires(ModuleInfo moduleInfo, Map requires = new LinkedHashSet<>(); final Set requiresTransitive = new LinkedHashSet<>(); final Set requiresStatic = new LinkedHashSet<>(); + final Set requiresStaticTransitive = new LinkedHashSet<>(); final Set ignoreServiceProviders = new LinkedHashSet<>(); final Set uses = new LinkedHashSet<>(); @@ -98,6 +99,13 @@ public void requiresStatic(String requiresStatic) { addOrThrow(this.requiresStatic, requiresStatic); } + /** + * @param requiresStaticTransitive corresponds to the directive in a 'module-info.java' file + */ + public void requiresStaticTransitive(String requiresStaticTransitive) { + addOrThrow(this.requiresStaticTransitive, requiresStaticTransitive); + } + /** * @param uses corresponds to the directive in a 'module-info.java' file */ diff --git a/src/test/groovy/org/gradlex/javamodule/moduleinfo/test/AbstractFunctionalTest.groovy b/src/test/groovy/org/gradlex/javamodule/moduleinfo/test/AbstractFunctionalTest.groovy index 1353d99..ce1ac53 100644 --- a/src/test/groovy/org/gradlex/javamodule/moduleinfo/test/AbstractFunctionalTest.groovy +++ b/src/test/groovy/org/gradlex/javamodule/moduleinfo/test/AbstractFunctionalTest.groovy @@ -429,6 +429,10 @@ abstract class AbstractFunctionalTest extends Specification { if (!index.get("spring.context").modifiers().isEmpty()) { throw new AssertionError("spring.boot must not have any modifiers"); } + if (!index.get("org.jspecify").modifiers().contains(Requires.Modifier.STATIC) + && !index.get("org.jspecify").modifiers().contains(Requires.Modifier.TRANSITIVE)) { + throw new AssertionError("org.jspecify must be declared as static and transitive"); + } } } @@ -441,6 +445,7 @@ abstract class AbstractFunctionalTest extends Specification { buildFile << """ dependencies { implementation("org.springframework.boot:spring-boot-autoconfigure:2.4.2") + implementation("org.jspecify:jspecify:1.0.0") } extraJavaModuleInfo { @@ -448,6 +453,7 @@ abstract class AbstractFunctionalTest extends Specification { requires("spring.context") requiresTransitive("spring.boot") requiresStatic("com.google.gson") + requiresStaticTransitive("org.jspecify") } } """