aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2016-08-10 22:15:27 +0000
committerGravatar Yue Gan <yueg@google.com>2016-08-11 09:16:33 +0000
commitfbaa700337bf0cf9083f083e6cd0d2f82faf1506 (patch)
tree4f7179d3a8b9781393d94ba30f9c8392cacf004c
parentcfd61cf9b12089804118a45eabbf329880ea4641 (diff)
Expose test "data" attribute to IDE.
This is needed to deploy android_tests to the device for testing. For symmetry we expose it for all tests rules. -- MOS_MIGRATED_REVID=129918247
-rw-r--r--src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java18
-rw-r--r--src/main/protobuf/android_studio_ide_info.proto1
-rw-r--r--src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java8
-rw-r--r--src/test/java/com/google/devtools/build/lib/ideinfo/intellij_info.bzl11
4 files changed, 36 insertions, 2 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 8f29d09ae8..12c47a9dab 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
@@ -386,6 +386,10 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config
if (attr != null) {
builder.setSize(attr);
}
+ Collection<Artifact> data = getDataListAttribute(ruleContext, "data");
+ for (Artifact artifact : data) {
+ builder.addData(makeArtifactLocation(artifact));
+ }
outputBuilder.setTestInfo(builder);
}
@@ -797,6 +801,20 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config
return getStringListAttribute(ruleContext, "copts");
}
+ private static boolean hasDataModeAttribute(RuleContext ruleContext,
+ String attributeName, Type<?> type) {
+ return ruleContext.attributes().has(attributeName, type)
+ && ruleContext.getAttributeMode(attributeName) == Mode.DATA;
+ }
+
+ private static Collection<Artifact> getDataListAttribute(RuleContext ruleContext,
+ String attributeName) {
+ return hasDataModeAttribute(ruleContext, attributeName, BuildType.LABEL_LIST)
+ ? ruleContext.getPrerequisiteArtifacts(attributeName, Mode.DATA).list()
+ : ImmutableList.<Artifact>of();
+ }
+
+
private static Collection<Artifact> getTargetListAttribute(RuleContext ruleContext,
String attributeName) {
return (ruleContext.attributes().has(attributeName, BuildType.LABEL_LIST)
diff --git a/src/main/protobuf/android_studio_ide_info.proto b/src/main/protobuf/android_studio_ide_info.proto
index 07c86a53e0..1a65ac8456 100644
--- a/src/main/protobuf/android_studio_ide_info.proto
+++ b/src/main/protobuf/android_studio_ide_info.proto
@@ -100,6 +100,7 @@ message ProtoLibraryLegacyJavaIdeInfo {
message TestInfo {
string size = 1;
+ repeated ArtifactLocation data = 2;
}
message JavaToolchainIdeInfo {
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 998ec257b5..b8df3e0fff 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
@@ -475,6 +475,7 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
" srcs = ['FooBarTest.java'],",
" size = 'large',",
" deps = [':foobar'],",
+ " data = ['MyData'],",
")");
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo(
"//java/com/google/example:FooBarTest");
@@ -501,6 +502,13 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
.isEqualTo("java/com/google/example/FooBarTest.jdeps");
assertThat(testInfo.getTestInfo().getSize()).isEqualTo("large");
+ assertThat(testInfo.getTestInfo().getDataList()).containsExactly(
+ ArtifactLocation.newBuilder()
+ .setIsSource(true)
+ .setRootPath(testLegacyAswbPluginVersionCompatibility() ? "/workspace" : "")
+ .setRelativePath("java/com/google/example/MyData")
+ .build()
+ );
}
@Test
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 d3f27d2a33..ffaf80a28f 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
@@ -358,13 +358,20 @@ def build_android_rule_ide_info(target, ctx, legacy_resource_label):
ide_resolve_files = set(jars_from_output(target.android.idl.output))
return (android_rule_ide_info, ide_resolve_files)
+def _get_data(ctx):
+ """Returns a list of artifact locations from the data attribute."""
+ if not hasattr(ctx.rule.attr, "data"):
+ return []
+ return [artifact_location(f) for data in ctx.rule.attr.data for f in data.files]
+
def build_test_info(target, ctx):
"""Build TestInfo"""
if not is_test_rule(ctx):
return None
return struct_omit_none(
- size = ctx.rule.attr.size,
- )
+ size = ctx.rule.attr.size,
+ data = _get_data(ctx),
+ )
def is_test_rule(ctx):
kind_string = ctx.rule.kind