diff options
author | 2016-02-08 14:21:14 +0000 | |
---|---|---|
committer | 2016-02-09 12:16:43 +0000 | |
commit | 552e3e40658e689881d44d69ed8ffcd6c45ae995 (patch) | |
tree | a13e7006228d25ef9e338a550686c96b90f15d90 /src | |
parent | 2d47eaa13fbb23c38247dad27df8ea8625430ce6 (diff) |
Expose JavaRuleOutputJarsProvider to Skylark and utilize it in ide info aspect.
--
MOS_MIGRATED_REVID=114104006
Diffstat (limited to 'src')
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): |