Skip to content

Commit cf41692

Browse files
Stefan Reekjjohannes
authored andcommitted
- Added support for 'uses' directives in generated the module-info.java
- Added a unit test for the uses directive based on the jcache api
1 parent 71104d9 commit cf41692

File tree

3 files changed

+54
-0
lines changed

3 files changed

+54
-0
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,9 @@ private byte[] addModuleInfo(ModuleInfo moduleInfo, Map<String, List<String>> pr
331331
for (String requireName : moduleInfo.requiresStatic) {
332332
moduleVisitor.visitRequire(requireName, Opcodes.ACC_STATIC_PHASE, null);
333333
}
334+
for (String usesName : moduleInfo.uses) {
335+
moduleVisitor.visitUse(usesName.replace('.', '/'));
336+
}
334337
for (Map.Entry<String, List<String>> entry : providers.entrySet()) {
335338
String name = entry.getKey();
336339
List<String> implementations = entry.getValue();

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public class ModuleInfo extends ModuleSpec {
3232
final Set<String> requiresTransitive = new LinkedHashSet<>();
3333
final Set<String> requiresStatic = new LinkedHashSet<>();
3434
final Set<String> ignoreServiceProviders = new LinkedHashSet<>();
35+
final Set<String> uses = new LinkedHashSet<>();
3536

3637
boolean exportAllPackages;
3738
boolean requireAllDefinedDependencies;
@@ -69,6 +70,13 @@ public void requiresStatic(String requiresStatic) {
6970
addOrThrow(this.requiresStatic, requiresStatic);
7071
}
7172

73+
/**
74+
* @param uses corresponds to the directive in a 'module-info.java' file
75+
*/
76+
public void uses(String uses) {
77+
addOrThrow(this.uses, uses);
78+
}
79+
7280
/**
7381
* @param ignoreServiceProvider do not transfer service provider to the 'module-info.class'
7482
*/

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

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,49 @@ abstract class AbstractFunctionalTest extends Specification {
385385
run().task(':run').outcome == TaskOutcome.SUCCESS
386386
}
387387

388+
def "can add 'uses' directives to legacy libraries"() {
389+
given:
390+
file("src/main/java/org/gradle/sample/app/Main.java") << """
391+
package org.gradle.sample.app;
392+
393+
import javax.cache.Caching;
394+
import javax.cache.CacheManager;
395+
396+
public class Main {
397+
398+
public static void main(String[] args) {
399+
CacheManager manager = Caching.getCachingProvider().getCacheManager();
400+
System.out.println(manager.getClass());
401+
}
402+
403+
}
404+
"""
405+
file("src/main/java/module-info.java") << """
406+
module org.gradle.sample.app {
407+
requires cache.api;
408+
}
409+
"""
410+
buildFile << """
411+
dependencies {
412+
implementation("javax.cache:cache-api:1.1.1")
413+
runtimeOnly("com.github.ben-manes.caffeine:caffeine:3.1.2")
414+
runtimeOnly("com.github.ben-manes.caffeine:jcache:3.1.2")
415+
}
416+
417+
extraJavaModuleInfo {
418+
module("javax.cache:cache-api", "cache.api") {
419+
failOnMissingModuleInfo.set(false)
420+
exportAllPackages()
421+
requireAllDefinedDependencies()
422+
uses("javax.cache.spi.CachingProvider")
423+
}
424+
}
425+
"""
426+
427+
expect:
428+
run().task(':run').outcome == TaskOutcome.SUCCESS
429+
}
430+
388431
def "can merge several jars into one module"() {
389432
given:
390433
file("src/main/java/org/gradle/sample/app/Main.java") << """

0 commit comments

Comments
 (0)