Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -467,6 +467,9 @@ private void addModuleInfoEntires(ModuleInfo moduleInfo, Map<String, List<String
for (String requireName : moduleInfo.requiresStatic) {
moduleVisitor.visitRequire(requireName, Opcodes.ACC_STATIC_PHASE, null);
}
for (String requireName : moduleInfo.requiresStaticTransitive) {
moduleVisitor.visitRequire(requireName, Opcodes.ACC_STATIC_PHASE | Opcodes.ACC_TRANSITIVE, null);
}
for (String usesName : moduleInfo.uses) {
moduleVisitor.visitUse(usesName.replace('.', '/'));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ public class ModuleInfo extends ModuleSpec {
final Set<String> requires = new LinkedHashSet<>();
final Set<String> requiresTransitive = new LinkedHashSet<>();
final Set<String> requiresStatic = new LinkedHashSet<>();
final Set<String> requiresStaticTransitive = new LinkedHashSet<>();
final Set<String> ignoreServiceProviders = new LinkedHashSet<>();
final Set<String> uses = new LinkedHashSet<>();

Expand Down Expand Up @@ -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
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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");
}
}

}
Expand All @@ -441,13 +445,15 @@ 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 {
module(${libs.springBootAutoconfigure}, "spring.boot.autoconfigure") {
requires("spring.context")
requiresTransitive("spring.boot")
requiresStatic("com.google.gson")
requiresStaticTransitive("org.jspecify")
}
}
"""
Expand Down