aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2015-09-23 22:27:19 +0000
committerGravatar Philipp Wollermann <philwo@google.com>2015-09-24 14:20:15 +0000
commit53330510c6ea5cd6257b9981b44e52d15a9e01aa (patch)
tree959cab09426331d606531cc24800b9b5d1f5fb5f /src/main
parent12147f08cae64ba3b1d377e0dea812638dbe7847 (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/main')
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidBinaryRule.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidLibraryRule.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaBinaryRule.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaLibraryRule.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaRuleClasses.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinary.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java23
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java24
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java15
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java4
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");