aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/java
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2017-09-27 15:30:39 -0400
committerGravatar John Cater <jcater@google.com>2017-09-28 08:54:52 -0400
commite398b25f822f36cf00164b47343effbc00b8c50c (patch)
tree93e75597f4e9a3472cd27c9036f931bbd28b7cb3 /src/main/java/com/google/devtools/build/lib/rules/java
parent42ac567ed7e68659cfd1f986fba87a6977092f6a (diff)
Expose JavaRuleOutputJarsProvider in java_common.provider, when available.
I'm not attempting to fix b/65618333 here, just handling one case currently breaking users (JavaInfo created via java_common.compile). My temporary workaround attempt to expose this information in the soy custom rule failed (unknown commit) -- to fix users we really need java_common changes. RELNOTES: Expose output jars and jdeps in java_common.provider, when available. PiperOrigin-RevId: 170236096
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaLibraryHelper.java16
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaSkylarkCommon.java22
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java3
6 files changed, 42 insertions, 17 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 cdcdc8081d..761da14936 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
@@ -259,6 +259,16 @@ public final class JavaInfo extends NativeInfo {
providers.getProvider(JavaSourceJarsProvider.class).getSourceJars());
}
+ @SkylarkCallable(
+ name = "outputs",
+ doc = "Returns information about outputs of this Java target.",
+ structField = true,
+ allowReturnNones = true
+ )
+ public JavaRuleOutputJarsProvider getOutputJars() {
+ return getProvider(JavaRuleOutputJarsProvider.class);
+ }
+
@Override
public boolean equals(Object otherObject) {
if (this == otherObject) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibraryHelper.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibraryHelper.java
index 8b43e9491c..99f00edfc3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibraryHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibraryHelper.java
@@ -27,6 +27,7 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.rules.java.JavaConfiguration.JavaClasspathMode;
+import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider.OutputJar;
import com.google.devtools.build.lib.util.Preconditions;
import java.util.ArrayList;
import java.util.Arrays;
@@ -154,12 +155,16 @@ public final class JavaLibraryHelper {
return this;
}
- /** Creates the compile actions. */
+ /**
+ * Creates the compile actions. Also fills in the {@link JavaRuleOutputJarsProvider.Builder} with
+ * the corresponding compilation outputs.
+ */
public JavaCompilationArtifacts build(
JavaSemantics semantics,
JavaToolchainProvider javaToolchainProvider,
NestedSet<Artifact> hostJavabase,
- Iterable<Artifact> jacocoInstrumental) {
+ Iterable<Artifact> jacocoInstrumental,
+ JavaRuleOutputJarsProvider.Builder outputJarsBuilder) {
Preconditions.checkState(output != null, "must have an output file; use setOutput()");
JavaTargetAttributes.Builder attributes = new JavaTargetAttributes.Builder(semantics);
attributes.addSourceJars(sourceJars);
@@ -189,9 +194,14 @@ public final class JavaLibraryHelper {
Artifact outputDepsProto = helper.createOutputDepsProtoArtifact(output, artifactsBuilder);
helper.createCompileAction(
output, null /* manifestProtoOutput */, null /* gensrcOutputJar */, outputDepsProto);
- helper.createCompileTimeJarAction(output, artifactsBuilder);
+ Artifact iJar = helper.createCompileTimeJarAction(output, artifactsBuilder);
+
artifactsBuilder.addRuntimeJar(output);
+ outputJarsBuilder
+ .addOutputJar(new OutputJar(output, iJar, sourceJars))
+ .setJdeps(outputDepsProto);
+
return artifactsBuilder.build();
}
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 5483d9ae6c..9d4c8ad915 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
@@ -173,6 +173,11 @@ public final class JavaRuleOutputJarsProvider implements TransitiveInfoProvider
return this;
}
+ public Builder addOutputJars(Iterable<OutputJar> outputJars) {
+ this.outputJars.addAll(outputJars);
+ return this;
+ }
+
public Builder addOutputJar(OutputJar outputJar) {
outputJars.add(outputJar);
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 d520a6fdef..1c87c48911 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
@@ -428,19 +428,17 @@ public class JavaSkylarkCommon {
NestedSet<Artifact> hostJavabaseArtifacts =
hostJavabaseProvider == null
- ? NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER)
+ ? NestedSetBuilder.emptySet(Order.STABLE_ORDER)
: hostJavabaseProvider.getMiddlemanArtifact();
JavaToolchainProvider javaToolchainProvider = getJavaToolchainProvider(javaToolchain);
+ JavaRuleOutputJarsProvider.Builder outputJarsBuilder = JavaRuleOutputJarsProvider.builder();
JavaCompilationArtifacts artifacts =
helper.build(
javaSemantics,
javaToolchainProvider,
hostJavabaseArtifacts,
- SkylarkList.createImmutable(ImmutableList.<Artifact>of()));
- JavaRuleOutputJarsProvider javaRuleOutputJarsProvider =
- JavaRuleOutputJarsProvider.builder().addOutputJar(
- new JavaRuleOutputJarsProvider.OutputJar(outputJar, /* ijar */ null, sourceJars))
- .build();
+ SkylarkList.createImmutable(ImmutableList.of()),
+ outputJarsBuilder);
JavaCompilationArgsProvider javaCompilationArgsProvider =
helper.buildCompilationArgsProvider(artifacts, true);
Runfiles runfiles =
@@ -458,12 +456,12 @@ public class JavaSkylarkCommon {
));
return JavaInfo.Builder.create()
- .addProvider(JavaCompilationArgsProvider.class, javaCompilationArgsProvider)
- .addProvider(JavaSourceJarsProvider.class, createJavaSourceJarsProvider(sourceJars))
- .addProvider(JavaRuleOutputJarsProvider.class, javaRuleOutputJarsProvider)
- .addProvider(JavaRunfilesProvider.class, new JavaRunfilesProvider(runfiles))
- .addProvider(JavaPluginInfoProvider.class, transitivePluginsProvider)
- .build();
+ .addProvider(JavaCompilationArgsProvider.class, javaCompilationArgsProvider)
+ .addProvider(JavaSourceJarsProvider.class, createJavaSourceJarsProvider(sourceJars))
+ .addProvider(JavaRuleOutputJarsProvider.class, outputJarsBuilder.build())
+ .addProvider(JavaRunfilesProvider.class, new JavaRunfilesProvider(runfiles))
+ .addProvider(JavaPluginInfoProvider.class, transitivePluginsProvider)
+ .build();
}
private static Artifact buildIjar(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java
index 9b09be1b1a..cc6cc166a3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java
@@ -267,7 +267,8 @@ public class JavaLiteProtoAspect extends NativeAspectClass implements Configured
javaSemantics,
JavaCompilationHelper.getJavaToolchainProvider(ruleContext),
JavaHelper.getHostJavabaseInputs(ruleContext),
- JavaCompilationHelper.getInstrumentationJars(ruleContext));
+ JavaCompilationHelper.getInstrumentationJars(ruleContext),
+ JavaRuleOutputJarsProvider.builder());
return helper.buildCompilationArgsProvider(artifacts, true /* isReportedAsStrict */);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java
index 91e4b3b734..90df082037 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java
@@ -305,7 +305,8 @@ public class JavaProtoAspect extends NativeAspectClass implements ConfiguredAspe
javaSemantics,
JavaCompilationHelper.getJavaToolchainProvider(ruleContext),
JavaHelper.getHostJavabaseInputs(ruleContext),
- JavaCompilationHelper.getInstrumentationJars(ruleContext)),
+ JavaCompilationHelper.getInstrumentationJars(ruleContext),
+ JavaRuleOutputJarsProvider.builder()),
true /* isReportedAsStrict */);
}