diff options
5 files changed, 69 insertions, 10 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 5562b2e24f..27a97bce36 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 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config 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 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config /*makeExecutable =*/ false); } - protected static ArtifactLocation makeArtifactLocation(Artifact artifact) { + public static ArtifactLocation makeArtifactLocation(Artifact artifact) { return makeArtifactLocation(artifact.getRoot(), artifact.getRootRelativePath()); } @@ -570,7 +573,7 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config .build(); } - private static JavaRuleIdeInfo makeJavaRuleIdeInfo( + private JavaRuleIdeInfo makeJavaRuleIdeInfo( ConfiguredTarget base, RuleContext ruleContext, JavaRuleOutputJarsProvider outputJarsProvider, @@ -640,8 +643,8 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config 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 01234f2abb..9c06f3334e 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 1aa3dc9590..96933a7dd9 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.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.Builder; +import com.google.devtools.build.lib.ideinfo.androidstudio.AndroidStudioIdeInfo.RuleIdeInfo; import com.google.devtools.build.lib.rules.cpp.CppCompilationContext; /** @@ -28,7 +29,7 @@ import com.google.devtools.build.lib.rules.cpp.CppCompilationContext; public class BazelAndroidStudioInfoSemantics implements AndroidStudioInfoSemantics { @Override - public void updateCppRuleInfo( + public void augmentCppRuleInfo( Builder builder, ConfiguredTarget base, RuleContext ruleContext, @@ -41,6 +42,12 @@ public class BazelAndroidStudioInfoSemantics implements AndroidStudioInfoSemanti } @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 6d873c79f6..04b073e67c 100644 --- a/src/main/protobuf/android_studio_ide_info.proto +++ b/src/main/protobuf/android_studio_ide_info.proto @@ -83,6 +83,21 @@ message CToolchainIdeInfo { 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 @@ message RuleIdeInfo { 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 9648cba3e9..6e7ef44144 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 @@ _kind_to_kind_id = { "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 @@ def java_rule_ide_info(target, ctx): 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 @@ def is_test_rule(ctx): 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 @@ def _aspect_impl(target, ctx): (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 @@ def _aspect_impl(target, ctx): 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. |