diff options
author | Googler <noreply@google.com> | 2015-09-23 22:27:19 +0000 |
---|---|---|
committer | Philipp Wollermann <philwo@google.com> | 2015-09-24 14:20:15 +0000 |
commit | 53330510c6ea5cd6257b9981b44e52d15a9e01aa (patch) | |
tree | 959cab09426331d606531cc24800b9b5d1f5fb5f /src | |
parent | 12147f08cae64ba3b1d377e0dea812638dbe7847 (diff) |
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=103789186
Diffstat (limited to 'src')
13 files changed, 45 insertions, 59 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 f4b037b1f0..c3a8ede3b6 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,9 +79,6 @@ 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 2947225bdb..8ddc9e6c19 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,9 +39,6 @@ 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 03ccc6222d..df6a316e80 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,8 +67,6 @@ 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 3c412f09ed..b8e665f2ab 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,8 +46,6 @@ 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 f23d62dcbe..ab04b07a32 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,7 +53,6 @@ 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); @@ -61,7 +60,6 @@ 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 81db9ac7cf..2fdef2a77b 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,8 +257,7 @@ public abstract class AndroidBinary implements RuleConfiguredTargetFactory { resourceApk, AndroidIdlProvider.EMPTY, ruleContext.getConfiguration().isCodeCoverageEnabled(), - true /* collectJavaCompilationArgs */, - AndroidRuleClasses.ANDROID_BINARY_GEN_JAR); + true /* collectJavaCompilationArgs */); 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 a881ca827f..b4b47e2d59 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,7 +40,6 @@ 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; @@ -387,8 +386,7 @@ public class AndroidCommon { public JavaTargetAttributes init( JavaSemantics javaSemantics, AndroidSemantics androidSemantics, ResourceApk resourceApk, AndroidIdlProvider transitiveIdlImportData, - boolean addCoverageSupport, boolean collectJavaCompilationArgs, - SafeImplicitOutputsFunction genClassJarImplicitOutput) throws InterruptedException { + boolean addCoverageSupport, boolean collectJavaCompilationArgs) throws InterruptedException { ImmutableList<Artifact> extraSources = resourceApk.isLegacy() || resourceApk.getResourceJavaSrcJar() == null ? ImmutableList.<Artifact>of() @@ -423,8 +421,7 @@ public class AndroidCommon { } initJava( - helper, artifactsBuilder, collectJavaCompilationArgs, resourceApk.getResourceJavaSrcJar(), - genClassJarImplicitOutput); + helper, artifactsBuilder, collectJavaCompilationArgs, resourceApk.getResourceJavaSrcJar()); if (ruleContext.hasErrors()) { return null; } @@ -512,8 +509,7 @@ public class AndroidCommon { JavaCompilationHelper helper, JavaCompilationArtifacts.Builder javaArtifactsBuilder, boolean collectJavaCompilationArgs, - @Nullable Artifact additionalSourceJar, - SafeImplicitOutputsFunction genClassJarImplicitOutput) throws InterruptedException { + @Nullable Artifact additionalSourceJar) throws InterruptedException { NestedSetBuilder<Artifact> filesBuilder = NestedSetBuilder.<Artifact>stableOrder(); if (additionalSourceJar != null) { filesBuilder.add(additionalSourceJar); @@ -546,14 +542,15 @@ public class AndroidCommon { filesBuilder.add(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. - 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); + // 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); + } 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 30112f796c..6820bd5cf4 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,8 +118,7 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory { resourceApk, transitiveIdlImportData, false /* addCoverageSupport */, - true /* collectJavaCompilationArgs */, - AndroidRuleClasses.ANDROID_LIBRARY_GEN_JAR); + true /* collectJavaCompilationArgs */); 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 2b80cb1b7a..c7989d3213 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,8 +66,6 @@ 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 = @@ -86,8 +84,6 @@ 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 = @@ -248,7 +244,6 @@ 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 @@ -291,7 +286,6 @@ 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 bc1aed908d..a428819d6e 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,18 +165,22 @@ 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 = helper.createGensrcJar(classJar); - Artifact manifestProtoOutput = helper.createManifestProtoOutput(classJar); + Artifact genSourceJar = null; + Artifact genClassJar = null; + if (helper.usesAnnotationProcessing()) { + genClassJar = helper.createGenJar(classJar); + genSourceJar = helper.createGensrcJar(classJar); + helper.createGenJarAction(classJar, manifestProtoOutput, genClassJar); + } 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 6ed154241b..7aad5ba86a 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,17 +196,23 @@ 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 or null if no annotation processors are used. + * annotation processors. */ - public Artifact createGensrcJar(@Nullable Artifact outputJar) { - if (usesAnnotationProcessing()) { - return getRuleContext().getDerivedArtifact( - FileSystemUtils.appendWithoutExtension(outputJar.getRootRelativePath(), "-gensrc"), - outputJar.getRoot()); - } else { - return null; - } + public Artifact createGensrcJar(Artifact outputJar) { + return getRuleContext().getDerivedArtifact( + FileSystemUtils.appendWithoutExtension(outputJar.getRootRelativePath(), "-gensrc"), + outputJar.getRoot()); } /** 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 ac8c157632..83088fea04 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,14 +118,17 @@ public class JavaLibrary implements RuleConfiguredTargetFactory { filesBuilder.add(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 = helper.createGensrcJar(classJar); Artifact manifestProtoOutput = helper.createManifestProtoOutput(classJar); - Artifact genClassJar = ruleContext.getImplicitOutputArtifact( - JavaSemantics.JAVA_LIBRARY_GEN_JAR); - helper.createGenJarAction(classJar, manifestProtoOutput, genClassJar); + // 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 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 e429225059..16ad9756d5 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,15 +52,11 @@ 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"); |