aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Dmitry Lomov <dslomov@google.com>2016-02-08 14:21:14 +0000
committerGravatar Dmitry Lomov <dslomov@google.com>2016-02-09 12:16:43 +0000
commit552e3e40658e689881d44d69ed8ffcd6c45ae995 (patch)
treea13e7006228d25ef9e338a550686c96b90f15d90 /src
parent2d47eaa13fbb23c38247dad27df8ea8625430ce6 (diff)
Expose JavaRuleOutputJarsProvider to Skylark and utilize it in ide info aspect.
-- MOS_MIGRATED_REVID=114104006
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java34
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiProvider.java9
-rw-r--r--src/test/java/com/google/devtools/build/lib/ideinfo/IntelliJSkylarkAspectTest.java9
-rw-r--r--src/test/java/com/google/devtools/build/lib/ideinfo/intellij_info.bzl31
4 files changed, 75 insertions, 8 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java
index c8e0532f17..e83ad194a6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java
@@ -18,6 +18,8 @@ import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.util.Preconditions;
import javax.annotation.Nullable;
@@ -26,6 +28,7 @@ import javax.annotation.Nullable;
* Provides information about jar files produced by a Java rule.
*/
@Immutable
+@SkylarkModule(name = "JavaOutputJars", doc = "Information about outputs of a Java rule")
public final class JavaRuleOutputJarsProvider implements TransitiveInfoProvider {
public static final JavaRuleOutputJarsProvider EMPTY =
@@ -34,6 +37,10 @@ public final class JavaRuleOutputJarsProvider implements TransitiveInfoProvider
/**
* A collection of artifacts associated with a jar output.
*/
+ @SkylarkModule(
+ name = "JavaOutput",
+ doc = "Java classes jar, together with their associated source and interface archives"
+ )
public static class OutputJar {
@Nullable private final Artifact classJar;
@Nullable private final Artifact iJar;
@@ -47,16 +54,34 @@ public final class JavaRuleOutputJarsProvider implements TransitiveInfoProvider
}
@Nullable
+ @SkylarkCallable(
+ name = "class_jar",
+ doc = "A classes jar file",
+ allowReturnNones = true,
+ structField = true
+ )
public Artifact getClassJar() {
return classJar;
}
@Nullable
+ @SkylarkCallable(
+ name = "ijar",
+ doc = "A interface jar file",
+ allowReturnNones = true,
+ structField = true
+ )
public Artifact getIJar() {
return iJar;
}
@Nullable
+ @SkylarkCallable(
+ name = "source_jar",
+ doc = "A sources archive file",
+ allowReturnNones = true,
+ structField = true
+ )
public Artifact getSrcJar() {
return srcJar;
}
@@ -71,11 +96,18 @@ public final class JavaRuleOutputJarsProvider implements TransitiveInfoProvider
this.jdeps = jdeps;
}
+ @SkylarkCallable(name = "jars", doc = "A list of jars the rule outputs.", structField = true)
public Iterable<OutputJar> getOutputJars() {
return outputJars;
}
@Nullable
+ @SkylarkCallable(
+ name = "jdeps",
+ doc = "The jdeps file for rule outputs.",
+ structField = true,
+ allowReturnNones = true
+ )
public Artifact getJdeps() {
return jdeps;
}
@@ -85,7 +117,7 @@ public final class JavaRuleOutputJarsProvider implements TransitiveInfoProvider
}
/**
- * Builderassociated.
+ * Builder for {@link JavaRuleOutputJarsProvider}.
*/
public static class Builder {
ImmutableList.Builder<OutputJar> outputJars = ImmutableList.builder();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiProvider.java
index 6b21ebe1c6..b1c3e7b489 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiProvider.java
@@ -69,4 +69,13 @@ public final class JavaSkylarkApiProvider extends SkylarkApiProvider {
JavaSourceJarsProvider sourceJars = getInfo().getProvider(JavaSourceJarsProvider.class);
return sourceJars.getTransitiveSourceJars();
}
+
+ @SkylarkCallable(
+ name = "outputs",
+ doc = "Returns information about outputs of this Java rule",
+ structField = true
+ )
+ public JavaRuleOutputJarsProvider getOutputJars() {
+ return getInfo().getProvider(JavaRuleOutputJarsProvider.class);
+ }
}
diff --git a/src/test/java/com/google/devtools/build/lib/ideinfo/IntelliJSkylarkAspectTest.java b/src/test/java/com/google/devtools/build/lib/ideinfo/IntelliJSkylarkAspectTest.java
index fc965e0ef5..0ff44826b3 100644
--- a/src/test/java/com/google/devtools/build/lib/ideinfo/IntelliJSkylarkAspectTest.java
+++ b/src/test/java/com/google/devtools/build/lib/ideinfo/IntelliJSkylarkAspectTest.java
@@ -14,6 +14,7 @@
package com.google.devtools.build.lib.ideinfo;
+import static com.google.common.collect.Iterables.transform;
import static com.google.common.truth.Truth.assertThat;
import com.google.common.collect.ImmutableList;
@@ -83,6 +84,13 @@ public class IntelliJSkylarkAspectTest extends AndroidStudioInfoAspectTestBase {
assertThat(ruleIdeInfo.getDependenciesCount()).isEqualTo(0);
assertThat(relativePathsForSourcesOf(ruleIdeInfo))
.containsExactly("com/google/example/simple/Simple.java");
+ assertThat(
+ transform(ruleIdeInfo.getJavaRuleIdeInfo().getJarsList(), LIBRARY_ARTIFACT_TO_STRING))
+ .containsExactly(
+ jarString(
+ "com/google/example", "libsimple.jar", "libsimple-ijar.jar", "libsimple-src.jar"));
+ assertThat(ruleIdeInfo.getJavaRuleIdeInfo().getJdeps().getRelativePath())
+ .isEqualTo("com/google/example/libsimple.jdeps");
}
@Test
@@ -118,6 +126,7 @@ public class IntelliJSkylarkAspectTest extends AndroidStudioInfoAspectTestBase {
.containsExactly("//com/google/example:complex");
}
+ @Override
protected Map<String, RuleIdeInfo> buildRuleIdeInfo(String target) throws Exception {
AnalysisResult analysisResult = update(
ImmutableList.of(target),
diff --git a/src/test/java/com/google/devtools/build/lib/ideinfo/intellij_info.bzl b/src/test/java/com/google/devtools/build/lib/ideinfo/intellij_info.bzl
index feb37fef59..90ca5055b2 100644
--- a/src/test/java/com/google/devtools/build/lib/ideinfo/intellij_info.bzl
+++ b/src/test/java/com/google/devtools/build/lib/ideinfo/intellij_info.bzl
@@ -45,20 +45,37 @@ def is_java_rule(target, ctx):
return ctx.rule.kind != "android_sdk";
def artifact_location(file):
+ if file == None:
+ return None
return struct(
root_path = file.root.path, # todo(dslomov): this gives path relative to execution root
relative_path = file.short_path,
is_source = file.is_source,
)
+def library_artifact(java_output):
+ if java_output == None:
+ return None
+ return struct(
+ jar = artifact_location(java_output.class_jar),
+ interface_jar = artifact_location(java_output.ijar),
+ source_jar = artifact_location(java_output.source_jar),
+ )
+
def java_rule_ide_info(target, ctx):
- if hasattr(ctx.rule.attr, "srcs"):
- sources = [artifact_location(file)
- for src in ctx.rule.attr.srcs
- for file in src.files]
- else:
- sources = []
- return struct(sources = sources) # todo(dslomov): more fields
+ if hasattr(ctx.rule.attr, "srcs"):
+ sources = [artifact_location(file)
+ for src in ctx.rule.attr.srcs
+ for file in src.files]
+ else:
+ sources = []
+ jars = [library_artifact(output) for output in target.java.outputs.jars]
+ jdeps = artifact_location(target.java.outputs.jdeps)
+
+ return struct(sources = sources,
+ jars = jars,
+ jdeps = jdeps,
+ ) # todo(dslomov): more fields
def _aspect_impl(target, ctx):