Skip to content

Commit b73a24c

Browse files
authored
Add 'requiresStaticTransitive(...)' to module patch DSL (#174)
1 parent 99214c9 commit b73a24c

File tree

4 files changed

+20
-0
lines changed

4 files changed

+20
-0
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# Extra Java Module Info Gradle Plugin - Changelog
22

3+
## Version 1.12
4+
* [New] [#174](https://github.com/gradlex-org/extra-java-module-info/pull/174) - Add 'requiresStaticTransitive(...)' to module patch DSL
5+
36
## Version 1.11
47
* [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
58
* [New] [#161](https://github.com/gradlex-org/extra-java-module-info/pull/161) - Add 'skipLocalJars' option

src/main/java/org/gradlex/javamodule/moduleinfo/ExtraJavaModuleInfoTransform.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -467,6 +467,9 @@ private void addModuleInfoEntires(ModuleInfo moduleInfo, Map<String, List<String
467467
for (String requireName : moduleInfo.requiresStatic) {
468468
moduleVisitor.visitRequire(requireName, Opcodes.ACC_STATIC_PHASE, null);
469469
}
470+
for (String requireName : moduleInfo.requiresStaticTransitive) {
471+
moduleVisitor.visitRequire(requireName, Opcodes.ACC_STATIC_PHASE | Opcodes.ACC_TRANSITIVE, null);
472+
}
470473
for (String usesName : moduleInfo.uses) {
471474
moduleVisitor.visitUse(usesName.replace('.', '/'));
472475
}

src/main/java/org/gradlex/javamodule/moduleinfo/ModuleInfo.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public class ModuleInfo extends ModuleSpec {
3838
final Set<String> requires = new LinkedHashSet<>();
3939
final Set<String> requiresTransitive = new LinkedHashSet<>();
4040
final Set<String> requiresStatic = new LinkedHashSet<>();
41+
final Set<String> requiresStaticTransitive = new LinkedHashSet<>();
4142
final Set<String> ignoreServiceProviders = new LinkedHashSet<>();
4243
final Set<String> uses = new LinkedHashSet<>();
4344

@@ -98,6 +99,13 @@ public void requiresStatic(String requiresStatic) {
9899
addOrThrow(this.requiresStatic, requiresStatic);
99100
}
100101

102+
/**
103+
* @param requiresStaticTransitive corresponds to the directive in a 'module-info.java' file
104+
*/
105+
public void requiresStaticTransitive(String requiresStaticTransitive) {
106+
addOrThrow(this.requiresStaticTransitive, requiresStaticTransitive);
107+
}
108+
101109
/**
102110
* @param uses corresponds to the directive in a 'module-info.java' file
103111
*/

src/test/groovy/org/gradlex/javamodule/moduleinfo/test/AbstractFunctionalTest.groovy

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,10 @@ abstract class AbstractFunctionalTest extends Specification {
429429
if (!index.get("spring.context").modifiers().isEmpty()) {
430430
throw new AssertionError("spring.boot must not have any modifiers");
431431
}
432+
if (!index.get("org.jspecify").modifiers().contains(Requires.Modifier.STATIC)
433+
&& !index.get("org.jspecify").modifiers().contains(Requires.Modifier.TRANSITIVE)) {
434+
throw new AssertionError("org.jspecify must be declared as static and transitive");
435+
}
432436
}
433437
434438
}
@@ -441,13 +445,15 @@ abstract class AbstractFunctionalTest extends Specification {
441445
buildFile << """
442446
dependencies {
443447
implementation("org.springframework.boot:spring-boot-autoconfigure:2.4.2")
448+
implementation("org.jspecify:jspecify:1.0.0")
444449
}
445450
446451
extraJavaModuleInfo {
447452
module(${libs.springBootAutoconfigure}, "spring.boot.autoconfigure") {
448453
requires("spring.context")
449454
requiresTransitive("spring.boot")
450455
requiresStatic("com.google.gson")
456+
requiresStaticTransitive("org.jspecify")
451457
}
452458
}
453459
"""

0 commit comments

Comments
 (0)