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.