aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java13
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java22
2 files changed, 35 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java
index 787d460f82..1524016978 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java
@@ -28,6 +28,7 @@ import com.google.devtools.build.lib.packages.NativeProvider;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.syntax.SkylarkList;
import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
import java.util.ArrayList;
import java.util.LinkedList;
@@ -222,6 +223,18 @@ public final class JavaInfo extends NativeInfo {
.getJavaCompilationArgs().getCompileTimeJars());
}
+ @SkylarkCallable(
+ name = "source_jars",
+ doc = "Returns a list of jar files containing all the uncompiled source files (including "
+ + "those generated by annotations) from the target itself, i.e. NOT including the sources of "
+ + "the transitive dependencies",
+ structField = true
+ )
+ public SkylarkList<Artifact> getSourceJars() {
+ return SkylarkList.createImmutable(
+ providers.getProvider(JavaSourceJarsProvider.class).getSourceJars());
+ }
+
@Override
public boolean equals(Object otherObject) {
if (this == otherObject) {
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 1164d0316a..fe486d6bf0 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
@@ -636,6 +636,28 @@ public class JavaSkylarkApiTest extends BuildViewTestCase {
}
@Test
+ public void javaInfoSourceJarsExposed() throws Exception {
+ scratch.file(
+ "foo/extension.bzl",
+ "result = provider()",
+ "def _impl(ctx):",
+ " return [result(source_jars = ctx.attr.dep[JavaInfo].source_jars)]",
+ "my_rule = rule(_impl, attrs = { 'dep' : attr.label() })");
+ scratch.file(
+ "foo/BUILD",
+ "load(':extension.bzl', 'my_rule')",
+ "java_library(name = 'my_java_lib', srcs = ['java/A.java'])",
+ "my_rule(name = 'my_skylark_rule', dep = ':my_java_lib')");
+ assertNoEvents();
+ ConfiguredTarget myRuleTarget = getConfiguredTarget("//foo:my_skylark_rule");
+ Info info = myRuleTarget.get(
+ new SkylarkKey(Label.parseAbsolute("//foo:extension.bzl"), "result"));
+ @SuppressWarnings("unchecked") SkylarkList<Artifact> sourceJars =
+ (SkylarkList<Artifact>) (info.getValue("source_jars"));
+ assertThat(prettyJarNames(sourceJars)).containsExactly("foo/libmy_java_lib-src.jar");
+ }
+
+ @Test
public void strictDepsEnabled() throws Exception {
scratch.file(
"foo/custom_library.bzl",