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
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 c694cce..6117d58 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 @@
     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 a472310..c74baa9 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 @@
         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 @@
   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 @@
     this.proguard = options.proguard;
     this.useJackForDexing = options.useJackForDexing;
     this.jackSanityChecks = options.jackSanityChecks;
+    this.treatSrcjarsAsSrcsForStrictDeps = options.treatSrcjarsAsSrcsForStrictDeps;
   }
 
   public String getCpu() {
@@ -298,6 +310,14 @@
     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;
   }