aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java9
-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/AndroidIdeInfoProvider.java16
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java11
-rw-r--r--src/main/protobuf/android_studio_ide_info.proto1
-rw-r--r--src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java4
-rw-r--r--src/test/java/com/google/devtools/build/lib/ideinfo/intellij_info.bzl36
7 files changed, 67 insertions, 18 deletions
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 1b95ca38ef..64f9293edd 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
@@ -532,6 +532,15 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config
builder.setLegacyResources(dependenciesResult.resources.toString());
}
+ OutputJar resourceJar = androidIdeInfoProvider.getResourceJar();
+ if (resourceJar != null) {
+ LibraryArtifact resourceLibraryArtifact = makeLibraryArtifact(ideResolveArtifacts,
+ resourceJar.getClassJar(), resourceJar.getIJar(), resourceJar.getSrcJar());
+ if (resourceLibraryArtifact != null) {
+ builder.setResourceJar(resourceLibraryArtifact);
+ }
+ }
+
return builder.build();
}
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 80606ce237..457416cc1c 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
@@ -59,6 +59,7 @@ import com.google.devtools.build.lib.rules.java.JavaCompilationArtifacts;
import com.google.devtools.build.lib.rules.java.JavaCompilationHelper;
import com.google.devtools.build.lib.rules.java.JavaNativeLibraryProvider;
import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider;
+import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider.OutputJar;
import com.google.devtools.build.lib.rules.java.JavaRuntimeJarProvider;
import com.google.devtools.build.lib.rules.java.JavaSemantics;
import com.google.devtools.build.lib.rules.java.JavaSourceJarsProvider;
@@ -244,6 +245,7 @@ public class AndroidCommon {
RuleContext ruleContext,
AndroidSemantics semantics,
AndroidIdlHelper idlHelper,
+ OutputJar resourceJar,
ResourceApk resourceApk,
Artifact zipAlignedApk,
Iterable<Artifact> apksUnderTest) {
@@ -251,6 +253,7 @@ public class AndroidCommon {
new AndroidIdeInfoProvider.Builder()
.setIdlClassJar(idlHelper.getIdlClassJar())
.setIdlSourceJar(idlHelper.getIdlSourceJar())
+ .setResourceJar(resourceJar)
.addIdlParcelables(idlHelper.getIdlParcelables())
.addIdlSrcs(idlHelper.getIdlSources())
.addIdlGeneratedJavaFiles(idlHelper.getIdlGeneratedJavaSources())
@@ -660,8 +663,10 @@ public class AndroidCommon {
JavaRuleOutputJarsProvider.Builder outputJarsBuilder = JavaRuleOutputJarsProvider.builder()
.addOutputJar(classJar, iJar, srcJar)
.setJdeps(outputDepsProto);
+ OutputJar resourceJar = null;
if (resourceClassJar != null && resourceIJar != null && resourceSourceJar != null) {
- outputJarsBuilder.addOutputJar(resourceClassJar, resourceIJar, resourceSourceJar);
+ resourceJar = new OutputJar(resourceClassJar, resourceIJar, resourceSourceJar);
+ outputJarsBuilder.addOutputJar(resourceJar);
}
return builder
@@ -678,6 +683,7 @@ public class AndroidCommon {
ruleContext,
androidSemantics,
idlHelper,
+ resourceJar,
resourceApk,
zipAlignedApk,
apksUnderTest))
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdeInfoProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdeInfoProvider.java
index d39365a17a..39f8ba9f7a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdeInfoProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdeInfoProvider.java
@@ -22,6 +22,7 @@ import com.google.devtools.build.lib.actions.Root;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.packages.AttributeMap;
+import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider.OutputJar;
import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -128,6 +129,7 @@ public final class AndroidIdeInfoProvider implements TransitiveInfoProvider {
private Artifact apk = null;
private Artifact idlClassJar = null;
private Artifact idlSourceJar = null;
+ private OutputJar resourceJar = null;
private String javaPackage = null;
private final Set<SourceDirectory> resourceDirs = new LinkedHashSet<>();
private final Set<SourceDirectory> assetDirs = new LinkedHashSet<>();
@@ -145,6 +147,7 @@ public final class AndroidIdeInfoProvider implements TransitiveInfoProvider {
apk,
idlClassJar,
idlSourceJar,
+ resourceJar,
definesAndroidResources,
ImmutableList.copyOf(assetDirs),
ImmutableList.copyOf(resourceDirs),
@@ -194,6 +197,11 @@ public final class AndroidIdeInfoProvider implements TransitiveInfoProvider {
return this;
}
+ public Builder setResourceJar(OutputJar resourceJar) {
+ this.resourceJar = resourceJar;
+ return this;
+ }
+
/**
* Add "idl_srcs" contents.
*/
@@ -280,6 +288,7 @@ public final class AndroidIdeInfoProvider implements TransitiveInfoProvider {
private final Artifact signedApk;
@Nullable private final Artifact idlClassJar;
@Nullable private final Artifact idlSourceJar;
+ @Nullable private final OutputJar resourceJar;
private final ImmutableCollection<SourceDirectory> resourceDirs;
private final boolean definesAndroidResources;
private final ImmutableCollection<SourceDirectory> assetDirs;
@@ -295,6 +304,7 @@ public final class AndroidIdeInfoProvider implements TransitiveInfoProvider {
@Nullable Artifact signedApk,
@Nullable Artifact idlClassJar,
@Nullable Artifact idlSourceJar,
+ @Nullable OutputJar resourceJar,
boolean definesAndroidResources,
ImmutableCollection<SourceDirectory> assetDirs,
ImmutableCollection<SourceDirectory> resourceDirs,
@@ -308,6 +318,7 @@ public final class AndroidIdeInfoProvider implements TransitiveInfoProvider {
this.signedApk = signedApk;
this.idlClassJar = idlClassJar;
this.idlSourceJar = idlSourceJar;
+ this.resourceJar = resourceJar;
this.definesAndroidResources = definesAndroidResources;
this.assetDirs = assetDirs;
this.resourceDirs = resourceDirs;
@@ -358,6 +369,11 @@ public final class AndroidIdeInfoProvider implements TransitiveInfoProvider {
return idlSourceJar;
}
+ @Nullable
+ public OutputJar getResourceJar() {
+ return resourceJar;
+ }
+
/** A list of the direct Resource directories. */
public ImmutableCollection<SourceDirectory> getResourceDirs() {
return resourceDirs;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java
index a8b81ddbaf..e64bc92f61 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkApiProvider.java
@@ -117,6 +117,17 @@ public class AndroidSkylarkApiProvider extends SkylarkApiProvider {
return collectDirectArtifacts(ResourceType.RESOURCES);
}
+ @SkylarkCallable(
+ name = "resource_jar",
+ structField = true,
+ allowReturnNones = true,
+ doc = "Returns a jar file for classes generated from resources."
+ )
+ @Nullable
+ public JavaRuleOutputJarsProvider.OutputJar getResourceJar() {
+ return getIdeInfoProvider().getResourceJar();
+ }
+
private NestedSet<Artifact> collectDirectArtifacts(final ResourceType resources) {
AndroidResourcesProvider provider = getInfo().getProvider(AndroidResourcesProvider.class);
if (provider == null) {
diff --git a/src/main/protobuf/android_studio_ide_info.proto b/src/main/protobuf/android_studio_ide_info.proto
index 8c48e198d1..ede84b895f 100644
--- a/src/main/protobuf/android_studio_ide_info.proto
+++ b/src/main/protobuf/android_studio_ide_info.proto
@@ -69,6 +69,7 @@ message AndroidRuleIdeInfo {
LibraryArtifact idl_jar = 9;
bool generate_resource_class = 10;
string legacy_resources = 11;
+ LibraryArtifact resource_jar = 12;
}
message CToolchainIdeInfo {
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 f099c9e00d..2584146699 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
@@ -626,6 +626,10 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
assertThat(ruleInfo.getAndroidRuleIdeInfo().getManifest().getRelativePath())
.isEqualTo("com/google/example/AndroidManifest.xml");
assertThat(ruleInfo.getAndroidRuleIdeInfo().getJavaPackage()).isEqualTo("com.google.example");
+ assertThat(LIBRARY_ARTIFACT_TO_STRING.apply(ruleInfo.getAndroidRuleIdeInfo().getResourceJar()))
+ .isEqualTo(jarString("com/google/example",
+ "l_resources.jar", "l_resources-ijar.jar", "l_resources-src.jar"
+ ));
assertThat(ruleInfo.getDependenciesList()).contains("//com/google/example:l1");
assertThat(getIdeResolveFiles()).containsExactly(
diff --git a/src/test/java/com/google/devtools/build/lib/ideinfo/intellij_info.bzl b/src/test/java/com/google/devtools/build/lib/ideinfo/intellij_info.bzl
index c73e7f835b..250776a1bd 100644
--- a/src/test/java/com/google/devtools/build/lib/ideinfo/intellij_info.bzl
+++ b/src/test/java/com/google/devtools/build/lib/ideinfo/intellij_info.bzl
@@ -284,16 +284,17 @@ def build_android_rule_ide_info(target, ctx):
return (None, set())
ide_resolve_files = set(jars_from_output(target.android.idl.output))
return (struct_omit_none(
- java_package = target.android.java_package,
- manifest = artifact_location(target.android.manifest),
- apk = artifact_location(target.android.apk),
- dependency_apk = [artifact_location(apk) for apk in target.android.apks_under_test],
- has_idl_sources = target.android.idl.output != None,
- idl_jar = library_artifact(target.android.idl.output),
- generate_resource_class = target.android.defines_resources,
- resources = all_unique_source_directories(target.android.resources),
- ),
- ide_resolve_files)
+ java_package = target.android.java_package,
+ manifest = artifact_location(target.android.manifest),
+ apk = artifact_location(target.android.apk),
+ dependency_apk = [artifact_location(apk) for apk in target.android.apks_under_test],
+ has_idl_sources = target.android.idl.output != None,
+ idl_jar = library_artifact(target.android.idl.output),
+ generate_resource_class = target.android.defines_resources,
+ resources = all_unique_source_directories(target.android.resources),
+ resource_jar = library_artifact(target.android.resource_jar),
+ ),
+ ide_resolve_files)
def build_test_info(target, ctx):
"""Build TestInfo"""
@@ -337,13 +338,14 @@ def collect_labels(rule_attrs, attrs):
Assuming that values of attributes from attr_list in rule_atrs
are label lists, collect a set of string representation of those labels.
"""
- return set([str(dep.label)
- for attr_name in attrs.label_list
- if hasattr(rule_attrs, attr_name)
- for dep in getattr(rule_attrs, attr_name)]) | \
- set([str(getattr(rule_attrs, attr_name).label)
- for attr_name in attrs.label
- if hasattr(rule_attrs, attr_name)])
+ list_labels = [str(dep.label) for attr_name in attrs.label_list
+ if hasattr(rule_attrs, attr_name)
+ for dep in getattr(rule_attrs, attr_name)]
+
+ scalar_labels = [str(getattr(rule_attrs, attr_name).label) for attr_name in attrs.label
+ if hasattr(rule_attrs, attr_name)]
+
+ return set(list_labels) | set(scalar_labels)
def collect_export_deps(rule_attrs):
"""Build a union of all export dependencies."""