aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/android
diff options
context:
space:
mode:
authorGravatar Liam Miller-Cushon <cushon@google.com>2015-08-26 16:18:22 +0000
committerGravatar Philipp Wollermann <philwo@google.com>2015-08-27 14:44:22 +0000
commit4e6bf64a8f958edf8e0d2b0f78c1520e7523f375 (patch)
tree2ad3641f0f0b41d32b43b371183d9b8e8f402816 /src/main/java/com/google/devtools/build/lib/rules/android
parent80532fd48d4f84cbeb0025e7e19eebd70718a907 (diff)
Fix check for srcs-less android_* rules
In android rules with no srcs, deps are treated like exports by strict java deps. This fixes the check for srcs-less targets to consider srcjars in addition to .java files. This bug was fixed for java_* rules by adding the runtime_deps attribute, and disallowing deps in srcs-less rules. -- MOS_MIGRATED_REVID=101581572
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/android')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java20
2 files changed, 26 insertions, 2 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 c694ccef5d..6117d5814d 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
@@ -507,8 +507,12 @@ public class AndroidCommon {
transitiveSourceJars = javaCommon.collectTransitiveSourceJars(srcJar);
if (collectJavaCompilationArgs) {
- this.javaCompilationArgs = collectJavaCompilationArgs(
- ruleContext, exportDeps, asNeverLink, attributes.hasSourceFiles());
+ boolean includeSrcjars =
+ ruleContext.getFragment(AndroidConfiguration.class).treatSrcjarsAsSrcsForStrictDeps();
+ boolean hasSources =
+ attributes.hasSourceFiles() || (includeSrcjars && attributes.hasSourceJars());
+ this.javaCompilationArgs =
+ collectJavaCompilationArgs(ruleContext, exportDeps, asNeverLink, hasSources);
this.recursiveJavaCompilationArgs = collectJavaCompilationArgs(
ruleContext, true, asNeverLink, /* hasSources */ true);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java
index a472310402..c74baa94aa 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java
@@ -162,6 +162,16 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
help = "Enables sanity checks for Jack and Jill compilation.")
public boolean jackSanityChecks;
+ // TODO(cushon): enable by default, then delete the flag
+ @Option(
+ name = "treat_srcjars_as_srcs_for_strict_deps",
+ defaultValue = "false",
+ category = "semantics",
+ help = "Causes deps of android_library rules with .srcjars (but no Java srcs)"
+ + " to be promoted to exports."
+ )
+ public boolean treatSrcjarsAsSrcsForStrictDeps;
+
@Override
public void addAllLabels(Multimap<String, Label> labelMap) {
if (proguard != null) {
@@ -249,6 +259,7 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
private final Label proguard;
private final boolean useJackForDexing;
private final boolean jackSanityChecks;
+ private final boolean treatSrcjarsAsSrcsForStrictDeps;
AndroidConfiguration(Options options) {
this.sdk = options.realSdk();
@@ -261,6 +272,7 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
this.proguard = options.proguard;
this.useJackForDexing = options.useJackForDexing;
this.jackSanityChecks = options.jackSanityChecks;
+ this.treatSrcjarsAsSrcsForStrictDeps = options.treatSrcjarsAsSrcsForStrictDeps;
}
public String getCpu() {
@@ -298,6 +310,14 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment {
return jackSanityChecks;
}
+ /**
+ * Returns true if srcjars should be treated as sources when deciding to promote
+ * deps to exports for Strict Java Deps.
+ */
+ public boolean treatSrcjarsAsSrcsForStrictDeps() {
+ return treatSrcjarsAsSrcsForStrictDeps;
+ }
+
public boolean useIncrementalNativeLibs() {
return incrementalNativeLibs;
}