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();
+ }
}