diff options
author | Liam Miller-Cushon <cushon@google.com> | 2015-08-26 16:18:22 +0000 |
---|---|---|
committer | Philipp Wollermann <philwo@google.com> | 2015-08-27 14:44:22 +0000 |
commit | 4e6bf64a8f958edf8e0d2b0f78c1520e7523f375 (patch) | |
tree | 2ad3641f0f0b41d32b43b371183d9b8e8f402816 /src/main/java/com/google/devtools/build/lib/rules/android | |
parent | 80532fd48d4f84cbeb0025e7e19eebd70718a907 (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.java | 8 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java | 20 |
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; } |