Add runtime_deps to android studio proto.

--
MOS_MIGRATED_REVID=111453115
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 cdb90eb..e7d2799 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 @@
 
     RuleIdeInfo.Kind ruleKind = getRuleKind(ruleContext.getRule(), base);
 
-    NestedSet<Label> directDependencies = processDependencies(
+    DependenciesResult dependenciesResult = processDependencies(
         base, ruleContext, providerBuilder, ruleKind);
 
     AndroidStudioInfoFilesProvider provider;
@@ -164,7 +164,8 @@
               base,
               ruleContext,
               ruleKind,
-              directDependencies,
+              dependenciesResult.deps,
+              dependenciesResult.runtimeDeps,
               providerBuilder);
     } else {
       provider = providerBuilder.build();
@@ -181,7 +182,17 @@
     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 @@
       }
     }
 
+    // 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 @@
       providerBuilder.ideResolveFilesBuilder().addTransitive(depProvider.getIdeResolveFiles());
     }
 
-    return dependencies;
+    return new DependenciesResult(dependencies, runtimeDepsBuilder.build());
   }
 
   private static AndroidSdkRuleInfo makeAndroidSdkRuleInfo(AndroidSdkProvider provider) {
@@ -254,7 +274,8 @@
       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 @@
     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 7c729f3..c0b8a39 100644
--- a/src/main/protobuf/android_studio_ide_info.proto
+++ b/src/main/protobuf/android_studio_ide_info.proto
@@ -82,4 +82,5 @@
   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 065ecb8..90446d9 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 @@
   }
 
   @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",