Add generate_resource_class to android_studio_ide_info.proto.

This boolean matches bazel's semantics on whether a R.java class should
be generated. Android Studio generates its own in-memory class, but we
need to know *whether* we should generate one.

--
MOS_MIGRATED_REVID=108175802
diff --git a/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java b/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java
index dc3d6f0..afe1d49 100644
--- a/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java
@@ -51,6 +51,7 @@
 import com.google.devtools.build.lib.rules.android.AndroidIdeInfoProvider;
 import com.google.devtools.build.lib.rules.android.AndroidIdeInfoProvider.SourceDirectory;
 import com.google.devtools.build.lib.rules.android.AndroidSdkProvider;
+import com.google.devtools.build.lib.rules.android.LocalResourceContainer;
 import com.google.devtools.build.lib.rules.java.JavaExportsProvider;
 import com.google.devtools.build.lib.rules.java.JavaGenJarsProvider;
 import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider;
@@ -351,6 +352,9 @@
       }
     }
 
+    builder.setGenerateResourceClass(
+        LocalResourceContainer.definesAndroidResources(ruleContext.attributes()));
+
     return builder.build();
   }
 
diff --git a/src/main/protobuf/android_studio_ide_info.proto b/src/main/protobuf/android_studio_ide_info.proto
index 7516d9c..7c729f3 100644
--- a/src/main/protobuf/android_studio_ide_info.proto
+++ b/src/main/protobuf/android_studio_ide_info.proto
@@ -48,6 +48,7 @@
   string java_package = 7;
   bool has_idl_sources = 8;
   LibraryArtifact idl_jar = 9;
+  bool generate_resource_class = 10;
 }
 
 message AndroidSdkRuleInfo {
diff --git a/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java b/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java
index 40afb17..df30f4c 100644
--- a/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java
+++ b/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java
@@ -775,4 +775,35 @@
     RuleIdeInfo libInfo = getRuleInfoAndVerifyLabel("//com/google/example:foobar", ruleIdeInfos);
     assertThat(libInfo.getDependenciesList()).isEmpty();
   }
+
+  public void testAndroidLibraryGeneratesResourceClass() throws Exception {
+    scratch.file(
+        "java/com/google/example/BUILD",
+        "android_library(",
+        "   name = 'resource_files',",
+        "   resource_files = ['res/drawable/a.png'],",
+        "   manifest = 'AndroidManifest.xml',",
+        ")",
+        "android_library(",
+        "   name = 'manifest',",
+        "   manifest = 'AndroidManifest.xml',",
+        ")",
+        "android_library(",
+        "   name = 'neither',",
+        "   srcs = ['FooBar.java'],",
+        "   deps = [':resource_files', ':manifest']",
+        ")");
+
+    Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//java/com/google/example:neither");
+    RuleIdeInfo neither = getRuleInfoAndVerifyLabel(
+        "//java/com/google/example:neither", ruleIdeInfos);
+    RuleIdeInfo resourceFiles = getRuleInfoAndVerifyLabel(
+        "//java/com/google/example:resource_files", ruleIdeInfos);
+    RuleIdeInfo manifest = getRuleInfoAndVerifyLabel(
+        "//java/com/google/example:manifest", ruleIdeInfos);
+
+    assertThat(neither.getAndroidRuleIdeInfo().getGenerateResourceClass()).isFalse();
+    assertThat(resourceFiles.getAndroidRuleIdeInfo().getGenerateResourceClass()).isTrue();
+    assertThat(manifest.getAndroidRuleIdeInfo().getGenerateResourceClass()).isTrue();
+  }
 }