diff options
author | 2016-08-10 22:15:27 +0000 | |
---|---|---|
committer | 2016-08-11 09:16:33 +0000 | |
commit | fbaa700337bf0cf9083f083e6cd0d2f82faf1506 (patch) | |
tree | 4f7179d3a8b9781393d94ba30f9c8392cacf004c | |
parent | cfd61cf9b12089804118a45eabbf329880ea4641 (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
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 |