diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationArgs.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationArgs.java index a92f22de7c6762..5b45b576faccba 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationArgs.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationArgs.java @@ -117,6 +117,11 @@ public Builder addRuntimeJars(Iterable runtimeJars) { return this; } + public Builder addTransitiveRuntimeJars(NestedSet runtimeJars) { + this.runtimeJarsBuilder.addTransitive(runtimeJars); + return this; + } + public Builder addCompileTimeJar(Artifact compileTimeJar) { this.compileTimeJarsBuilder.add(compileTimeJar); return this; @@ -127,6 +132,11 @@ public Builder addCompileTimeJars(Iterable compileTimeJars) { return this; } + public Builder addTransitiveCompileTimeJars(NestedSet compileTimeJars) { + this.compileTimeJarsBuilder.addTransitive(compileTimeJars); + return this; + } + public Builder addInstrumentationMetadata(Artifact instrumentationMetadata) { this.instrumentationMetadataBuilder.add(instrumentationMetadata); return this; diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java index 774907a61e4d07..86267d4e953af7 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java @@ -34,6 +34,7 @@ import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.lib.syntax.SkylarkList; +import com.google.devtools.build.lib.syntax.SkylarkNestedSet; import java.util.List; /** A module that contains Skylark utilities for Java support. */ @@ -55,41 +56,40 @@ public ClassObjectConstructor getJavaProvider() { } @SkylarkCallable( - name = "create_provider", - documented = false, - parameters = { - @Param( - name = "compile_time_jars", - positional = false, - named = true, - type = SkylarkList.class, - generic1 = Artifact.class, - defaultValue = "[]" - ), - @Param( - name = "runtime_jars", - positional = false, - named = true, - type = SkylarkList.class, - generic1 = Artifact.class, - defaultValue = "[]" - ) - } + name = "create_provider", + documented = false, + parameters = { + @Param( + name = "compile_time_jars", + positional = false, + named = true, + type = SkylarkNestedSet.class, + generic1 = Artifact.class, + defaultValue = "[]" + ), + @Param( + name = "runtime_jars", + positional = false, + named = true, + type = SkylarkNestedSet.class, + generic1 = Artifact.class, + defaultValue = "[]" + ) + } ) - public JavaProvider create( - SkylarkList compileTimeJars, - SkylarkList runtimeJars) { - JavaCompilationArgs javaCompilationArgs = JavaCompilationArgs.builder() - .addCompileTimeJars(compileTimeJars) - .addRuntimeJars(runtimeJars) - .build(); - JavaCompilationArgs recursiveJavaCompilationArgs = JavaCompilationArgs.builder() - .addCompileTimeJars(compileTimeJars) - .addRuntimeJars(runtimeJars).build(); - JavaProvider javaProvider = JavaProvider.Builder.create().addProvider( - JavaCompilationArgsProvider.class, - JavaCompilationArgsProvider.create(javaCompilationArgs, recursiveJavaCompilationArgs)) - .build(); + public JavaProvider create(SkylarkNestedSet compileTimeJars, SkylarkNestedSet runtimeJars) { + JavaCompilationArgs javaCompilationArgs = + JavaCompilationArgs.builder() + .addTransitiveRuntimeJars(runtimeJars.getSet(Artifact.class)) + .addTransitiveCompileTimeJars(compileTimeJars.getSet(Artifact.class)) + .build(); + + JavaProvider javaProvider = + JavaProvider.Builder.create() + .addProvider( + JavaCompilationArgsProvider.class, + JavaCompilationArgsProvider.create(javaCompilationArgs, javaCompilationArgs)) + .build(); return javaProvider; } diff --git a/src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java b/src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java index c87a0f68ec9128..92f3ec0c47fb3f 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java @@ -158,8 +158,8 @@ public void constructJavaProvider() throws Exception { "foo/extension.bzl", "def _impl(ctx):", " my_provider = java_common.create_provider(", - " compile_time_jars = ctx.files.compile_time_jars,", - " runtime_jars = ctx.files.runtime_jars)", + " compile_time_jars = depset(ctx.files.compile_time_jars),", + " runtime_jars = depset(ctx.files.runtime_jars))", " return [my_provider]", "my_rule = rule(_impl, ", " attrs = { ", @@ -196,8 +196,8 @@ public void constructJavaProviderWithAnotherJavaProvider() throws Exception { " transitive_provider = java_common.merge(", " [dep[java_common.provider] for dep in ctx.attr.deps])", " my_provider = java_common.create_provider(", - " compile_time_jars = ctx.files.compile_time_jars,", - " runtime_jars = ctx.files.runtime_jars)", + " compile_time_jars = depset(ctx.files.compile_time_jars),", + " runtime_jars = depset(ctx.files.runtime_jars))", " return [java_common.merge([my_provider, transitive_provider])]", "my_rule = rule(_impl, ", " attrs = { ", @@ -236,8 +236,8 @@ public void constructJavaProviderJavaLibrary() throws Exception { "foo/extension.bzl", "def _impl(ctx):", " my_provider = java_common.create_provider(", - " compile_time_jars = ctx.files.compile_time_jars,", - " runtime_jars = ctx.files.runtime_jars)", + " compile_time_jars = depset(ctx.files.compile_time_jars),", + " runtime_jars = depset(ctx.files.runtime_jars))", " return [my_provider]", "my_rule = rule(_impl, ", " attrs = { ",