aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2015-09-24 00:21:04 +0000
committerGravatar Philipp Wollermann <philwo@google.com>2015-09-24 14:21:05 +0000
commit402d112bc25449f1e690bbbace600bbcda834d24 (patch)
tree7ab138fa656c0ce80cd8fd9171891dfb7563f687 /src
parent93cb6466b928eb4abd1f0bd050619a31d3752f68 (diff)
*** 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')
-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, 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");