aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java39
-rw-r--r--src/main/protobuf/android_studio_ide_info.proto1
-rw-r--r--src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java33
3 files changed, 64 insertions, 9 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 cdb90eb9d5..e7d27990eb 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
@@ -154,7 +154,7 @@ public class AndroidStudioInfoAspect implements ConfiguredNativeAspectFactory {
RuleIdeInfo.Kind ruleKind = getRuleKind(ruleContext.getRule(), base);
- NestedSet<Label> directDependencies = processDependencies(
+ DependenciesResult dependenciesResult = processDependencies(
base, ruleContext, providerBuilder, ruleKind);
AndroidStudioInfoFilesProvider provider;
@@ -164,7 +164,8 @@ public class AndroidStudioInfoAspect implements ConfiguredNativeAspectFactory {
base,
ruleContext,
ruleKind,
- directDependencies,
+ dependenciesResult.deps,
+ dependenciesResult.runtimeDeps,
providerBuilder);
} else {
provider = providerBuilder.build();
@@ -181,7 +182,17 @@ public class AndroidStudioInfoAspect implements ConfiguredNativeAspectFactory {
return builder.build();
}
- private NestedSet<Label> processDependencies(
+ private static class DependenciesResult {
+ private DependenciesResult(Iterable<Label> deps,
+ Iterable<Label> runtimeDeps) {
+ this.deps = deps;
+ this.runtimeDeps = runtimeDeps;
+ }
+ final Iterable<Label> deps;
+ final Iterable<Label> runtimeDeps;
+ }
+
+ private DependenciesResult processDependencies(
ConfiguredTarget base, RuleContext ruleContext,
AndroidStudioInfoFilesProvider.Builder providerBuilder, RuleIdeInfo.Kind ruleKind) {
@@ -223,12 +234,21 @@ public class AndroidStudioInfoAspect implements ConfiguredNativeAspectFactory {
}
}
+ // runtime_deps
+ List<? extends TransitiveInfoCollection> runtimeDeps = ImmutableList.of();
+ NestedSetBuilder<Label> runtimeDepsBuilder = NestedSetBuilder.stableOrder();
+ if (ruleContext.attributes().has("runtime_deps", BuildType.LABEL_LIST)) {
+ runtimeDeps = ruleContext.getPrerequisites("runtime_deps", Mode.TARGET);
+ for (TransitiveInfoCollection dep : runtimeDeps) {
+ runtimeDepsBuilder.add(dep.getLabel());
+ }
+ }
+
// Propagate providers from all prerequisites (deps + runtime_deps)
ImmutableList.Builder<TransitiveInfoCollection> prerequisitesBuilder = ImmutableList.builder();
prerequisitesBuilder.addAll(directDeps);
- if (ruleContext.attributes().has("runtime_deps", BuildType.LABEL_LIST)) {
- prerequisitesBuilder.addAll(ruleContext.getPrerequisites("runtime_deps", Mode.TARGET));
- }
+ prerequisitesBuilder.addAll(runtimeDeps);
+
List<TransitiveInfoCollection> prerequisites = prerequisitesBuilder.build();
for (AndroidStudioInfoFilesProvider depProvider :
@@ -238,7 +258,7 @@ public class AndroidStudioInfoAspect implements ConfiguredNativeAspectFactory {
providerBuilder.ideResolveFilesBuilder().addTransitive(depProvider.getIdeResolveFiles());
}
- return dependencies;
+ return new DependenciesResult(dependencies, runtimeDepsBuilder.build());
}
private static AndroidSdkRuleInfo makeAndroidSdkRuleInfo(AndroidSdkProvider provider) {
@@ -254,7 +274,8 @@ public class AndroidStudioInfoAspect implements ConfiguredNativeAspectFactory {
ConfiguredTarget base,
RuleContext ruleContext,
Kind ruleKind,
- NestedSet<Label> directDependencies,
+ Iterable<Label> directDependencies,
+ Iterable<Label> runtimeDeps,
AndroidStudioInfoFilesProvider.Builder providerBuilder) {
Artifact ideInfoFile = derivedArtifact(base, ruleContext, ASWB_BUILD_SUFFIX);
@@ -308,7 +329,7 @@ public class AndroidStudioInfoAspect implements ConfiguredNativeAspectFactory {
AndroidStudioInfoFilesProvider provider = providerBuilder.build();
outputBuilder.addAllDependencies(transform(directDependencies, LABEL_TO_STRING));
-
+ outputBuilder.addAllRuntimeDeps(transform(runtimeDeps, LABEL_TO_STRING));
outputBuilder.addAllTags(base.getTarget().getAssociatedRule().getRuleTags());
final RuleIdeInfo ruleIdeInfo = outputBuilder.build();
diff --git a/src/main/protobuf/android_studio_ide_info.proto b/src/main/protobuf/android_studio_ide_info.proto
index 7c729f3f12..c0b8a39bb0 100644
--- a/src/main/protobuf/android_studio_ide_info.proto
+++ b/src/main/protobuf/android_studio_ide_info.proto
@@ -82,4 +82,5 @@ message RuleIdeInfo {
AndroidRuleIdeInfo android_rule_ide_info = 8;
repeated string tags = 9;
+ repeated string runtime_deps = 10;
}
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 065ecb82a3..90446d9cd0 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
@@ -855,6 +855,39 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
}
@Test
+ public void testRuntimeDepsAddedToProto() throws Exception {
+ scratch.file(
+ "com/google/example/BUILD",
+ "java_library(",
+ " name = 'foobar',",
+ " srcs = ['FooBar.java'],",
+ ")",
+ "java_library(",
+ " name = 'foobar2',",
+ " srcs = ['FooBar2.java'],",
+ ")",
+ "java_library(",
+ " name = 'lib',",
+ " srcs = ['Lib.java'],",
+ " deps = [':lib2'],",
+ " runtime_deps = [':foobar'],",
+ ")",
+ "java_library(",
+ " name = 'lib2',",
+ " srcs = ['Lib2.java'],",
+ " runtime_deps = [':foobar2'],",
+ ")");
+
+ Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:lib");
+ // Fails if aspect was not propagated
+ RuleIdeInfo lib = getRuleInfoAndVerifyLabel("//com/google/example:lib", ruleIdeInfos);
+ RuleIdeInfo lib2 = getRuleInfoAndVerifyLabel("//com/google/example:lib2", ruleIdeInfos);
+
+ assertThat(lib.getRuntimeDepsList()).containsExactly("//com/google/example:foobar");
+ assertThat(lib2.getRuntimeDepsList()).containsExactly("//com/google/example:foobar2");
+ }
+
+ @Test
public void testAndroidLibraryGeneratesResourceClass() throws Exception {
scratch.file(
"java/com/google/example/BUILD",