diff options
author | 2016-02-04 18:00:33 +0000 | |
---|---|---|
committer | 2016-02-04 18:15:55 +0000 | |
commit | ea16e10b71da3797c22ec8fbe30970dae90e597c (patch) | |
tree | e6c0c2781be95396e7ff3d4dec038357740c0a08 /src/main/java/com/google/devtools/build/lib/rules | |
parent | 8eccb7f834a262b81e92140d9c3b968dc90d2c47 (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')
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); } } } |