Change the way protos report their output.

--
MOS_MIGRATED_REVID=122846987
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 5562b2e..27a97bc 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
@@ -383,6 +383,9 @@
       outputBuilder.setTestInfo(builder);
     }
 
+    androidStudioInfoSemantics.augmentRuleInfo(
+        outputBuilder, base, ruleContext, ideResolveArtifacts);
+
     AndroidStudioInfoFilesProvider provider = providerBuilder.build();
 
     outputBuilder.addAllDependencies(transform(dependenciesResult.deps, LABEL_TO_STRING));
@@ -542,7 +545,7 @@
         /*makeExecutable =*/ false);
   }
 
-  protected static ArtifactLocation makeArtifactLocation(Artifact artifact) {
+  public static ArtifactLocation makeArtifactLocation(Artifact artifact) {
     return makeArtifactLocation(artifact.getRoot(), artifact.getRootRelativePath());
   }
 
@@ -570,7 +573,7 @@
         .build();
   }
 
-  private static JavaRuleIdeInfo makeJavaRuleIdeInfo(
+  private JavaRuleIdeInfo makeJavaRuleIdeInfo(
       ConfiguredTarget base,
       RuleContext ruleContext,
       JavaRuleOutputJarsProvider outputJarsProvider,
@@ -640,8 +643,8 @@
       builder.addTransitiveSystemIncludeDirectory(pathFragment.getSafePathString());
     }
 
-    androidStudioInfoSemantics
-        .updateCppRuleInfo(builder, base, ruleContext, cppCompilationContext, ideResolveArtifacts);
+    androidStudioInfoSemantics.augmentCppRuleInfo(
+        builder, base, ruleContext, cppCompilationContext, ideResolveArtifacts);
 
     return builder.build();
   }
diff --git a/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoSemantics.java b/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoSemantics.java
index 01234f2..9c06f33 100644
--- a/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoSemantics.java
@@ -13,27 +13,35 @@
 // limitations under the License.
 package com.google.devtools.build.lib.ideinfo;
 
-import com.google.common.collect.ImmutableList.Builder;
+import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.analysis.ConfiguredTarget;
 import com.google.devtools.build.lib.analysis.RuleContext;
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
 import com.google.devtools.build.lib.ideinfo.AndroidStudioInfoAspect.PrerequisiteAttr;
 import com.google.devtools.build.lib.ideinfo.androidstudio.AndroidStudioIdeInfo.CRuleIdeInfo;
+import com.google.devtools.build.lib.ideinfo.androidstudio.AndroidStudioIdeInfo.RuleIdeInfo;
 import com.google.devtools.build.lib.rules.cpp.CppCompilationContext;
 
 /**
  * Methods to handle differences between blaze and bazel in the {@link AndroidStudioInfoAspect}.
  */
 public interface AndroidStudioInfoSemantics {
-  void updateCppRuleInfo(
+
+  void augmentPrerequisiteAttrs(ImmutableList.Builder<PrerequisiteAttr> builder);
+
+  void augmentRuleInfo(
+      RuleIdeInfo.Builder builder,
+      ConfiguredTarget base,
+      RuleContext ruleContext,
+      NestedSetBuilder<Artifact> ideResolveArtifacts);
+
+  void augmentCppRuleInfo(
       CRuleIdeInfo.Builder builder,
       ConfiguredTarget base,
       RuleContext ruleContext,
       CppCompilationContext cppCompilationContext,
       NestedSetBuilder<Artifact> ideResolveArtifacts);
 
-  void augmentPrerequisiteAttrs(Builder<PrerequisiteAttr> builder);
-
   boolean checkForAdditionalCppRules(String ruleClass);
 }
diff --git a/src/main/java/com/google/devtools/build/lib/ideinfo/BazelAndroidStudioInfoSemantics.java b/src/main/java/com/google/devtools/build/lib/ideinfo/BazelAndroidStudioInfoSemantics.java
index 1aa3dc9..96933a7 100644
--- a/src/main/java/com/google/devtools/build/lib/ideinfo/BazelAndroidStudioInfoSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/ideinfo/BazelAndroidStudioInfoSemantics.java
@@ -20,6 +20,7 @@
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
 import com.google.devtools.build.lib.ideinfo.AndroidStudioInfoAspect.PrerequisiteAttr;
 import com.google.devtools.build.lib.ideinfo.androidstudio.AndroidStudioIdeInfo.CRuleIdeInfo.Builder;
+import com.google.devtools.build.lib.ideinfo.androidstudio.AndroidStudioIdeInfo.RuleIdeInfo;
 import com.google.devtools.build.lib.rules.cpp.CppCompilationContext;
 
 /**
@@ -28,7 +29,7 @@
 public class BazelAndroidStudioInfoSemantics implements AndroidStudioInfoSemantics {
 
   @Override
-  public void updateCppRuleInfo(
+  public void augmentCppRuleInfo(
       Builder builder,
       ConfiguredTarget base,
       RuleContext ruleContext,
@@ -41,6 +42,12 @@
   }
 
   @Override
+  public void augmentRuleInfo(RuleIdeInfo.Builder builder, ConfiguredTarget base,
+      RuleContext ruleContext,
+      NestedSetBuilder<Artifact> ideResolveArtifacts) {
+  }
+
+  @Override
   public boolean checkForAdditionalCppRules(String ruleClass) {
     return false;
   }
diff --git a/src/main/protobuf/android_studio_ide_info.proto b/src/main/protobuf/android_studio_ide_info.proto
index 6d873c7..04b073e 100644
--- a/src/main/protobuf/android_studio_ide_info.proto
+++ b/src/main/protobuf/android_studio_ide_info.proto
@@ -83,6 +83,21 @@
   repeated string unfiltered_compiler_option = 9;
 }
 
+message ProtoLibraryLegacyJavaIdeInfo {
+  enum ApiFlavor {
+    NONE = 0;
+    IMMUTABLE = 1;
+    MUTABLE = 2;
+    BOTH = 3;
+  }
+
+  int32 api_version = 1;
+  ApiFlavor api_flavor = 2;
+  repeated LibraryArtifact jars1 = 3;
+  repeated LibraryArtifact jars_mutable = 4;
+  repeated LibraryArtifact jars_immutable = 5;
+}
+
 message TestInfo {
   string size = 1;
 }
@@ -130,4 +145,6 @@
   string kind_string = 14;
 
   TestInfo test_info = 15;
+
+  ProtoLibraryLegacyJavaIdeInfo proto_library_legacy_java_ide_info = 16;
 }
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 9648cba..6e7ef44 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
@@ -37,6 +37,14 @@
   "java_wrap_cc": 17,
 }
 
+# A map to convert JavaApiFlavor to ProtoLibraryLegacyJavaIdeInfo.ApiFlavor
+_api_flavor_to_id = {
+  "FLAVOR_NONE": 0,
+  "FLAVOR_IMMUTABLE": 1,
+  "FLAVOR_MUTABLE": 2,
+  "FLAVOR_BOTH": 3,
+}
+
 _unrecognized_rule = -1;
 
 def get_kind_legacy(target, ctx):
@@ -242,7 +250,7 @@
   Returns a pair of (JavaRuleIdeInfo proto, a set of ide-resolve-files).
   (or (None, empty set) if the rule is not Java rule).
   """
-  if not hasattr(target, "java"):
+  if not hasattr(target, "java") or ctx.rule.kind == "proto_library":
     return (None, set())
 
   sources = getSourcesFromRule(ctx)
@@ -303,6 +311,19 @@
   kind_string = ctx.rule.kind
   return kind_string.endswith("_test")
 
+def proto_library_legacy_java_ide_info(target, ctx):
+  """ Build ProtoLibraryLegacyJavaIdeInfo."""
+  if not hasattr(target, 'proto_legacy_java'):
+    return None
+  proto_info = target.proto_legacy_java.legacy_info
+  return struct_omit_none(
+    api_version = proto_info.api_version,
+    api_flavor = _api_flavor_to_id[proto_info.api_flavor],
+    jars1 = [library_artifact(output) for output in proto_info.jars1],
+    jars_mutable = [library_artifact(output) for output in proto_info.jars_mutable],
+    jars_immutable = [library_artifact(output) for output in proto_info.jars_immutable],
+  )
+
 def collect_labels(rule_attrs, attrs):
   """ Collect labels from attribute values.
 
@@ -376,6 +397,8 @@
   (android_rule_ide_info, android_ide_resolve_files) = android_rule_ide_info(target, ctx)
   ide_resolve_files = ide_resolve_files | android_ide_resolve_files
 
+  proto_library_legacy_java_ide_info = proto_library_legacy_java_ide_info(target, ctx)
+
   # Collect test info
   test_info = test_info(target, ctx)
 
@@ -402,6 +425,7 @@
       android_rule_ide_info = android_rule_ide_info,
       tags = ctx.rule.attr.tags,
       test_info = test_info,
+      proto_library_legacy_java_ide_info = proto_library_legacy_java_ide_info,
   )
 
   # Output the ide information file.