diff options
author | 2015-09-24 00:21:04 +0000 | |
---|---|---|
committer | 2015-09-24 14:21:05 +0000 | |
commit | 402d112bc25449f1e690bbbace600bbcda834d24 (patch) | |
tree | 7ab138fa656c0ce80cd8fd9171891dfb7563f687 /src | |
parent | 93cb6466b928eb4abd1f0bd050619a31d3752f68 (diff) |
Rollback of commit 53330510c6ea5cd6257b9981b44e52d15a9e01aa.
*** Reason for rollback ***
Breaks tests.
*** Original change description ***
Remove gen jar implicit output.
This allows us to only create a jar for libraries that use annotation processing.
It also increases our flexibility by reducing the visibility of these gen jars
to an undocumented output group.
--
MOS_MIGRATED_REVID=103800137
Diffstat (limited to 'src')
13 files changed, 59 insertions, 45 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidBinaryRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidBinaryRule.java index c3a8ede3b6..f4b037b1f0 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidBinaryRule.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidBinaryRule.java @@ -79,6 +79,9 @@ public class BazelAndroidBinaryRule implements RuleDefinition { <a href="#android_binary.proguard_generate_mapping">proguard_generate_mapping</a> is set. </li> + <li><code><var>name</var>-gen.jar</code>: An archive containing the class files + for source files generated by annotation processors ("gen jar"). + </li> </ul> <!-- #END_BLAZE_RULE.IMPLICIT_OUTPUTS --> */ .setImplicitOutputsFunction(AndroidRuleClasses.ANDROID_BINARY_IMPLICIT_OUTPUTS) diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidLibraryRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidLibraryRule.java index 8ddc9e6c19..2947225bdb 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidLibraryRule.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidLibraryRule.java @@ -39,6 +39,9 @@ public class BazelAndroidLibraryRule implements RuleDefinition { <li><code>lib<var>name</var>.jar</code>: A Java archive.</li> <li><code>lib<var>name</var>-src.jar</code>: An archive containing the sources ("source jar").</li> + <li><code>lib<var>name</var>-gen.jar</code>: An archive containing the + class files for source files generated by annotation processors + ("gen jar").</li> </ul> <!-- #END_BLAZE_RULE.IMPLICIT_OUTPUTS --> */ .setImplicitOutputsFunction(AndroidRuleClasses.ANDROID_LIBRARY_IMPLICIT_OUTPUTS) diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaBinaryRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaBinaryRule.java index df6a316e80..03ccc6222d 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaBinaryRule.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaBinaryRule.java @@ -67,6 +67,8 @@ public final class BazelJavaBinaryRule implements RuleDefinition { <li><code><var>name</var>_deploy-src.jar</code>: An archive containing the sources collected from the transitive closure of the target. These will match the classes in the <code>deploy.jar</code> except where jars have no matching source jar.</li> + <li><code><var>name</var>-gen.jar</code>: An archive containing the class files for + source files generated by annotation processors ("gen jar").</li> </ul> <!-- #END_BLAZE_RULE.IMPLICIT_OUTPUTS --> */ .setImplicitOutputsFunction(BazelJavaRuleClasses.JAVA_BINARY_IMPLICIT_OUTPUTS) diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaLibraryRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaLibraryRule.java index b8e665f2ab..3c412f09ed 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaLibraryRule.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaLibraryRule.java @@ -46,6 +46,8 @@ public final class BazelJavaLibraryRule implements RuleDefinition { <li><code>lib<var>name</var>.jar</code>: A Java archive containing the class files.</li> <li><code>lib<var>name</var>-src.jar</code>: An archive containing the sources ("source jar").</li> + <li><code>lib<var>name</var>-gen.jar</code>: An archive containing the class files for + source files generated by annotation processors ("gen jar").</li> </ul> <!-- #END_BLAZE_RULE.IMPLICIT_OUTPUTS --> */ .setImplicitOutputsFunction(BazelJavaRuleClasses.JAVA_LIBRARY_IMPLICIT_OUTPUTS) diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaRuleClasses.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaRuleClasses.java index ab04b07a32..f23d62dcbe 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaRuleClasses.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaRuleClasses.java @@ -53,6 +53,7 @@ public class BazelJavaRuleClasses { public static final ImplicitOutputsFunction JAVA_BINARY_IMPLICIT_OUTPUTS = fromFunctions( JavaSemantics.JAVA_BINARY_CLASS_JAR, + JavaSemantics.JAVA_BINARY_GEN_JAR, JavaSemantics.JAVA_BINARY_SOURCE_JAR, JavaSemantics.JAVA_BINARY_DEPLOY_JAR, JavaSemantics.JAVA_BINARY_DEPLOY_SOURCE_JAR); @@ -60,6 +61,7 @@ public class BazelJavaRuleClasses { static final ImplicitOutputsFunction JAVA_LIBRARY_IMPLICIT_OUTPUTS = fromFunctions( JavaSemantics.JAVA_LIBRARY_CLASS_JAR, + JavaSemantics.JAVA_LIBRARY_GEN_JAR, JavaSemantics.JAVA_LIBRARY_SOURCE_JAR); /** diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java index 2fdef2a77b..81db9ac7cf 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java @@ -257,7 +257,8 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { resourceApk, AndroidIdlProvider.EMPTY, ruleContext.getConfiguration().isCodeCoverageEnabled(), - true /* collectJavaCompilationArgs */); + true /* collectJavaCompilationArgs */, + AndroidRuleClasses.ANDROID_BINARY_GEN_JAR); if (resourceClasses == null) { return null; } 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 b4b47e2d59..a881ca827f 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 @@ -40,6 +40,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.packages.BuildType; +import com.google.devtools.build.lib.packages.ImplicitOutputsFunction.SafeImplicitOutputsFunction; import com.google.devtools.build.lib.rules.android.AndroidResourcesProvider.ResourceContainer; import com.google.devtools.build.lib.rules.android.AndroidResourcesProvider.ResourceType; import com.google.devtools.build.lib.rules.android.AndroidRuleClasses.MultidexMode; @@ -386,7 +387,8 @@ public class AndroidCommon { public JavaTargetAttributes init( JavaSemantics javaSemantics, AndroidSemantics androidSemantics, ResourceApk resourceApk, AndroidIdlProvider transitiveIdlImportData, - boolean addCoverageSupport, boolean collectJavaCompilationArgs) throws InterruptedException { + boolean addCoverageSupport, boolean collectJavaCompilationArgs, + SafeImplicitOutputsFunction genClassJarImplicitOutput) throws InterruptedException { ImmutableList<Artifact> extraSources = resourceApk.isLegacy() || resourceApk.getResourceJavaSrcJar() == null ? ImmutableList.<Artifact>of() @@ -421,7 +423,8 @@ public class AndroidCommon { } initJava( - helper, artifactsBuilder, collectJavaCompilationArgs, resourceApk.getResourceJavaSrcJar()); + helper, artifactsBuilder, collectJavaCompilationArgs, resourceApk.getResourceJavaSrcJar(), + genClassJarImplicitOutput); if (ruleContext.hasErrors()) { return null; } @@ -509,7 +512,8 @@ public class AndroidCommon { JavaCompilationHelper helper, JavaCompilationArtifacts.Builder javaArtifactsBuilder, boolean collectJavaCompilationArgs, - @Nullable Artifact additionalSourceJar) throws InterruptedException { + @Nullable Artifact additionalSourceJar, + SafeImplicitOutputsFunction genClassJarImplicitOutput) throws InterruptedException { NestedSetBuilder<Artifact> filesBuilder = NestedSetBuilder.<Artifact>stableOrder(); if (additionalSourceJar != null) { filesBuilder.add(additionalSourceJar); @@ -542,15 +546,14 @@ public class AndroidCommon { filesBuilder.add(classJar); - Artifact manifestProtoOutput = helper.createManifestProtoOutput(classJar); - // The gensrc jar is created only if the target uses annotation processing. Otherwise, // it is null, and the source jar action will not depend on the compile action. - if (helper.usesAnnotationProcessing()) { - genClassJar = helper.createGenJar(classJar); - genSourceJar = helper.createGensrcJar(classJar); - helper.createGenJarAction(classJar, manifestProtoOutput, genClassJar); - } + genSourceJar = helper.createGensrcJar(classJar); + Artifact manifestProtoOutput = helper.createManifestProtoOutput(classJar); + + // AndroidBinary will pass its -gen.jar output, and AndroidLibrary will pass its own. + genClassJar = ruleContext.getImplicitOutputArtifact(genClassJarImplicitOutput); + helper.createGenJarAction(classJar, manifestProtoOutput, genClassJar); srcJar = ruleContext.getImplicitOutputArtifact(AndroidRuleClasses.ANDROID_LIBRARY_SOURCE_JAR); helper.createSourceJarAction(srcJar, genSourceJar); diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java index 6820bd5cf4..30112f796c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java @@ -118,7 +118,8 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory { resourceApk, transitiveIdlImportData, false /* addCoverageSupport */, - true /* collectJavaCompilationArgs */); + true /* collectJavaCompilationArgs */, + AndroidRuleClasses.ANDROID_LIBRARY_GEN_JAR); if (javaTargetAttributes == null) { return null; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java index c7989d3213..2b80cb1b7a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java @@ -66,6 +66,8 @@ public final class AndroidRuleClasses { JavaSemantics.JAVA_LIBRARY_SOURCE_JAR; public static final SafeImplicitOutputsFunction ANDROID_LIBRARY_CLASS_JAR = JavaSemantics.JAVA_LIBRARY_CLASS_JAR; + public static final SafeImplicitOutputsFunction ANDROID_LIBRARY_GEN_JAR = + JavaSemantics.JAVA_LIBRARY_GEN_JAR; public static final SafeImplicitOutputsFunction ANDROID_LIBRARY_JACK_FILE = fromTemplates("lib%{name}.jack"); public static final SafeImplicitOutputsFunction ANDROID_LIBRARY_AAR = @@ -84,6 +86,8 @@ public final class AndroidRuleClasses { fromTemplates("%{name}_unsigned.apk"); public static final SafeImplicitOutputsFunction ANDROID_BINARY_SIGNED_APK = fromTemplates("%{name}_signed.apk"); + public static final SafeImplicitOutputsFunction ANDROID_BINARY_GEN_JAR = + JavaSemantics.JAVA_BINARY_GEN_JAR; public static final SafeImplicitOutputsFunction ANDROID_BINARY_DEPLOY_JAR = fromTemplates("%{name}_deploy.jar"); public static final SafeImplicitOutputsFunction ANDROID_BINARY_PROGUARD_JAR = @@ -244,6 +248,7 @@ public final class AndroidRuleClasses { functions.add(AndroidRuleClasses.ANDROID_BINARY_APK); functions.add(AndroidRuleClasses.ANDROID_BINARY_UNSIGNED_APK); functions.add(AndroidRuleClasses.ANDROID_BINARY_DEPLOY_JAR); + functions.add(AndroidRuleClasses.ANDROID_BINARY_GEN_JAR); // The below is a hack to support configurable attributes (proguard_specs seems like // too valuable an attribute to make nonconfigurable, and we don't currently @@ -286,6 +291,7 @@ public final class AndroidRuleClasses { implicitOutputs.add( AndroidRuleClasses.ANDROID_LIBRARY_CLASS_JAR, + AndroidRuleClasses.ANDROID_LIBRARY_GEN_JAR, AndroidRuleClasses.ANDROID_LIBRARY_SOURCE_JAR, AndroidRuleClasses.ANDROID_LIBRARY_JACK_FILE, AndroidRuleClasses.ANDROID_LIBRARY_AAR); 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 a428819d6e..bc1aed908d 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 @@ -165,22 +165,18 @@ public class JavaBinary implements RuleConfiguredTargetFactory { common.setJavaCompilationArtifacts(javaArtifactsBuilder.build()); - Artifact manifestProtoOutput = helper.createManifestProtoOutput(classJar); - // The gensrc jar is created only if the target uses annotation processing. Otherwise, // it is null, and the source jar action will not depend on the compile action. - Artifact genSourceJar = null; - Artifact genClassJar = null; - if (helper.usesAnnotationProcessing()) { - genClassJar = helper.createGenJar(classJar); - genSourceJar = helper.createGensrcJar(classJar); - helper.createGenJarAction(classJar, manifestProtoOutput, genClassJar); - } + Artifact genSourceJar = helper.createGensrcJar(classJar); + Artifact manifestProtoOutput = helper.createManifestProtoOutput(classJar); helper.createCompileAction( classJar, manifestProtoOutput, genSourceJar, outputDepsProto, instrumentationMetadata); helper.createSourceJarAction(srcJar, genSourceJar); + Artifact genClassJar = ruleContext.getImplicitOutputArtifact(JavaSemantics.JAVA_BINARY_GEN_JAR); + helper.createGenJarAction(classJar, manifestProtoOutput, genClassJar); + common.setClassPathFragment(new ClasspathConfiguredFragment( common.getJavaCompilationArtifacts(), attributes, false)); diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java index 7aad5ba86a..6ed154241b 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java @@ -196,23 +196,17 @@ public class JavaCompilationHelper extends BaseJavaCompilationHelper { } /** - * Returns the artifact for a jar file containing class files that were generated by - * annotation processors. - */ - public Artifact createGenJar(Artifact outputJar) { - return getRuleContext().getDerivedArtifact( - FileSystemUtils.appendWithoutExtension(outputJar.getRootRelativePath(), "-gen"), - outputJar.getRoot()); - } - - /** * Returns the artifact for a jar file containing source files that were generated by - * annotation processors. + * annotation processors or null if no annotation processors are used. */ - public Artifact createGensrcJar(Artifact outputJar) { - return getRuleContext().getDerivedArtifact( - FileSystemUtils.appendWithoutExtension(outputJar.getRootRelativePath(), "-gensrc"), - outputJar.getRoot()); + public Artifact createGensrcJar(@Nullable Artifact outputJar) { + if (usesAnnotationProcessing()) { + return getRuleContext().getDerivedArtifact( + FileSystemUtils.appendWithoutExtension(outputJar.getRootRelativePath(), "-gensrc"), + outputJar.getRoot()); + } else { + return null; + } } /** 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 83088fea04..ac8c157632 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 @@ -118,17 +118,14 @@ public class JavaLibrary implements RuleConfiguredTargetFactory { filesBuilder.add(classJar); - Artifact manifestProtoOutput = helper.createManifestProtoOutput(classJar); - // The gensrc jar is created only if the target uses annotation processing. // Otherwise, it is null, and the source jar action will not depend on the compile action. - Artifact genSourceJar = null; - Artifact genClassJar = null; - if (helper.usesAnnotationProcessing()) { - genClassJar = helper.createGenJar(classJar); - genSourceJar = helper.createGensrcJar(classJar); - helper.createGenJarAction(classJar, manifestProtoOutput, genClassJar); - } + Artifact genSourceJar = helper.createGensrcJar(classJar); + Artifact manifestProtoOutput = helper.createManifestProtoOutput(classJar); + + Artifact genClassJar = ruleContext.getImplicitOutputArtifact( + JavaSemantics.JAVA_LIBRARY_GEN_JAR); + helper.createGenJarAction(classJar, manifestProtoOutput, genClassJar); Artifact outputDepsProto = helper.createOutputDepsProtoArtifact(classJar, javaArtifactsBuilder); diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java index 16ad9756d5..e429225059 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java @@ -52,11 +52,15 @@ public interface JavaSemantics { public static final SafeImplicitOutputsFunction JAVA_LIBRARY_CLASS_JAR = fromTemplates("lib%{name}.jar"); + public static final SafeImplicitOutputsFunction JAVA_LIBRARY_GEN_JAR = + fromTemplates("lib%{name}-gen.jar"); public static final SafeImplicitOutputsFunction JAVA_LIBRARY_SOURCE_JAR = fromTemplates("lib%{name}-src.jar"); public static final SafeImplicitOutputsFunction JAVA_BINARY_CLASS_JAR = fromTemplates("%{name}.jar"); + public static final SafeImplicitOutputsFunction JAVA_BINARY_GEN_JAR = + fromTemplates("%{name}-gen.jar"); public static final SafeImplicitOutputsFunction JAVA_BINARY_SOURCE_JAR = fromTemplates("%{name}-src.jar"); |