aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2016-02-04 18:00:33 +0000
committerGravatar David Chen <dzc@google.com>2016-02-04 18:15:55 +0000
commitea16e10b71da3797c22ec8fbe30970dae90e597c (patch)
treee6c0c2781be95396e7ff3d4dec038357740c0a08 /src/main/java/com/google/devtools/build/lib/rules
parent8eccb7f834a262b81e92140d9c3b968dc90d2c47 (diff)
Add jdeps support to AndroidStudioInfoAspect.
This can be used for classpath reduction on the IDE side. -- MOS_MIGRATED_REVID=113861117
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java20
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java20
5 files changed, 44 insertions, 10 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
index 7fc94d99ff..1cff635270 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java
@@ -136,6 +136,7 @@ public class AndroidCommon {
private Artifact resourceClassJar;
private Artifact resourceIJar;
private Artifact resourceSourceJar;
+ private Artifact outputDepsProto;
private Artifact manifestProtoOutput;
private AndroidIdlHelper idlHelper;
@@ -530,7 +531,7 @@ public class AndroidCommon {
srcJar = ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_LIBRARY_SOURCE_JAR);
helper.createSourceJarAction(srcJar, genSourceJar);
- Artifact outputDepsProto = helper.createOutputDepsProtoArtifact(classJar, javaArtifactsBuilder);
+ outputDepsProto = helper.createOutputDepsProtoArtifact(classJar, javaArtifactsBuilder);
helper.createCompileActionWithInstrumentation(classJar, manifestProtoOutput, genSourceJar,
outputDepsProto, javaArtifactsBuilder);
@@ -575,7 +576,8 @@ public class AndroidCommon {
idlHelper.addTransitiveInfoProviders(builder, classJar, manifestProtoOutput);
JavaRuleOutputJarsProvider.Builder outputJarsBuilder = JavaRuleOutputJarsProvider.builder()
- .addOutputJar(classJar, iJar, srcJar);
+ .addOutputJar(classJar, iJar, srcJar)
+ .setJdeps(outputDepsProto);
if (resourceClassJar != null && resourceIJar != null && resourceSourceJar != null) {
outputJarsBuilder.addOutputJar(resourceClassJar, resourceIJar, resourceSourceJar);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java
index 67ba2c3dff..c1d456b478 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java
@@ -315,7 +315,9 @@ public class JavaBinary implements RuleConfiguredTargetFactory {
return builder
.setFilesToBuild(filesToBuild)
.add(JavaRuleOutputJarsProvider.class, JavaRuleOutputJarsProvider.builder()
- .addOutputJar(classJar, null /* iJar */, srcJar).build())
+ .addOutputJar(classJar, null /* iJar */, srcJar)
+ .setJdeps(outputDepsProto)
+ .build())
.add(RunfilesProvider.class, runfilesProvider)
.setRunfilesSupport(runfilesSupport, executable)
.add(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java
index 633a57b02e..69e4963b37 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java
@@ -14,6 +14,7 @@
package com.google.devtools.build.lib.rules.java;
+import com.google.common.collect.ImmutableBiMap;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.actions.Artifact;
@@ -68,9 +69,10 @@ public class JavaImport implements RuleConfiguredTargetFactory {
// No need for javac options - no compilation happening here.
JavaCompilationHelper helper = new JavaCompilationHelper(ruleContext, semantics,
ImmutableList.<String>of(), new JavaTargetAttributes.Builder(semantics));
- ImmutableMap.Builder<Artifact, Artifact> compilationToRuntimeJarMap = ImmutableMap.builder();
+ ImmutableBiMap.Builder<Artifact, Artifact> compilationToRuntimeJarMapBuilder =
+ ImmutableBiMap.builder();
ImmutableList<Artifact> interfaceJars =
- processWithIjar(jars, helper, compilationToRuntimeJarMap);
+ processWithIjar(jars, helper, compilationToRuntimeJarMapBuilder);
common.setJavaCompilationArtifacts(collectJavaArtifacts(jars, interfaceJars));
@@ -114,6 +116,8 @@ public class JavaImport implements RuleConfiguredTargetFactory {
NestedSetBuilder<Artifact> filesBuilder = NestedSetBuilder.stableOrder();
filesBuilder.addAll(jars);
+ ImmutableBiMap<Artifact, Artifact> compilationToRuntimeJarMap =
+ compilationToRuntimeJarMapBuilder.build();
semantics.addProviders(
ruleContext,
common,
@@ -122,7 +126,7 @@ public class JavaImport implements RuleConfiguredTargetFactory {
srcJar /* srcJar */,
null /* genJar */,
null /* gensrcJar */,
- compilationToRuntimeJarMap.build(),
+ compilationToRuntimeJarMap,
helper,
filesBuilder,
ruleBuilder);
@@ -134,11 +138,21 @@ public class JavaImport implements RuleConfiguredTargetFactory {
.setSourceJarsForJarFiles(srcJars)
.build();
+ JavaRuleOutputJarsProvider.Builder ruleOutputJarsProvider =
+ JavaRuleOutputJarsProvider.builder();
+ for (Artifact jar : jars) {
+ ruleOutputJarsProvider.addOutputJar(
+ jar,
+ compilationToRuntimeJarMap.inverse().get(jar),
+ srcJar);
+ }
+
NestedSet<Artifact> proguardSpecs = new ProguardLibrary(ruleContext).collectProguardSpecs();
common.addTransitiveInfoProviders(ruleBuilder, filesToBuild, null);
return ruleBuilder
.setFilesToBuild(filesToBuild)
+ .add(JavaRuleOutputJarsProvider.class, ruleOutputJarsProvider.build())
.add(JavaRuntimeJarProvider.class,
new JavaRuntimeJarProvider(common.getJavaCompilationArtifacts().getRuntimeJars()))
.addSkylarkTransitiveInfo(JavaSkylarkApiProvider.NAME, new JavaSkylarkApiProvider())
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java
index 2ac7d5ae0a..6dcc700932 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java
@@ -169,7 +169,9 @@ public class JavaLibrary implements RuleConfiguredTargetFactory {
builder
.add(JavaRuleOutputJarsProvider.class, JavaRuleOutputJarsProvider.builder()
- .addOutputJar(classJar, iJar, srcJar).build())
+ .addOutputJar(classJar, iJar, srcJar)
+ .setJdeps(outputDepsProto)
+ .build())
.add(JavaRuntimeJarProvider.class,
new JavaRuntimeJarProvider(common.getJavaCompilationArtifacts().getRuntimeJars()))
.add(RunfilesProvider.class, RunfilesProvider.simple(common.getRunfiles(neverLink)))
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 e30b27f69f..c8e0532f17 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
@@ -29,7 +29,7 @@ import javax.annotation.Nullable;
public final class JavaRuleOutputJarsProvider implements TransitiveInfoProvider {
public static final JavaRuleOutputJarsProvider EMPTY =
- new JavaRuleOutputJarsProvider(ImmutableList.<OutputJar>of());
+ new JavaRuleOutputJarsProvider(ImmutableList.<OutputJar>of(), null);
/**
* A collection of artifacts associated with a jar output.
@@ -63,15 +63,23 @@ public final class JavaRuleOutputJarsProvider implements TransitiveInfoProvider
}
final Iterable<OutputJar> outputJars;
+ @Nullable final Artifact jdeps;
- private JavaRuleOutputJarsProvider(Iterable<OutputJar> outputJars) {
+ private JavaRuleOutputJarsProvider(Iterable<OutputJar> outputJars,
+ @Nullable Artifact jdeps) {
this.outputJars = outputJars;
+ this.jdeps = jdeps;
}
public Iterable<OutputJar> getOutputJars() {
return outputJars;
}
+ @Nullable
+ public Artifact getJdeps() {
+ return jdeps;
+ }
+
public static Builder builder() {
return new Builder();
}
@@ -81,6 +89,7 @@ public final class JavaRuleOutputJarsProvider implements TransitiveInfoProvider
*/
public static class Builder {
ImmutableList.Builder<OutputJar> outputJars = ImmutableList.builder();
+ Artifact jdeps;
public Builder addOutputJar(
@Nullable Artifact classJar,
@@ -96,8 +105,13 @@ public final class JavaRuleOutputJarsProvider implements TransitiveInfoProvider
return this;
}
+ public Builder setJdeps(Artifact jdeps) {
+ this.jdeps = jdeps;
+ return this;
+ }
+
public JavaRuleOutputJarsProvider build() {
- return new JavaRuleOutputJarsProvider(outputJars.build());
+ return new JavaRuleOutputJarsProvider(outputJars.build(), jdeps);
}
}
}