diff options
7 files changed, 51 insertions, 42 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 d0421fb559..5562b2e24f 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 @@ -344,26 +344,31 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config } // C rules - CppCompilationContext cppCompilationContext = base.getProvider(CppCompilationContext.class); - if (cppCompilationContext != null) { - CRuleIdeInfo cRuleIdeInfo = - makeCRuleIdeInfo(base, ruleContext, cppCompilationContext, ideResolveArtifacts); - outputBuilder.setCRuleIdeInfo(cRuleIdeInfo); + if (isCppRule(base)) { + CppCompilationContext cppCompilationContext = base.getProvider(CppCompilationContext.class); + if (cppCompilationContext != null) { + CRuleIdeInfo cRuleIdeInfo = + makeCRuleIdeInfo(base, ruleContext, cppCompilationContext, ideResolveArtifacts); + outputBuilder.setCRuleIdeInfo(cRuleIdeInfo); + } } // CCToolchain rule - CppConfiguration cppConfiguration = getCppConfiguration(base); - if (cppConfiguration != null) { - CToolchainIdeInfo cToolchainIdeInfo = makeCToolchainIdeInfo(ruleContext, cppConfiguration); - if (cToolchainIdeInfo != null) { - outputBuilder.setCToolchainIdeInfo(cToolchainIdeInfo); + CcToolchainProvider ccToolchainProvider = base.getProvider(CcToolchainProvider.class); + if (ccToolchainProvider != null) { + CppConfiguration cppConfiguration = ccToolchainProvider.getCppConfiguration(); + if (cppConfiguration != null) { + CToolchainIdeInfo cToolchainIdeInfo = makeCToolchainIdeInfo(ruleContext, cppConfiguration); + if (cToolchainIdeInfo != null) { + outputBuilder.setCToolchainIdeInfo(cToolchainIdeInfo); + } } } // Android rules AndroidIdeInfoProvider androidIdeInfoProvider = base.getProvider(AndroidIdeInfoProvider.class); if (androidIdeInfoProvider != null) { - outputBuilder.setAndroidRuleIdeInfo(makeAndroidRuleIdeInfo(base, + outputBuilder.setAndroidRuleIdeInfo(makeAndroidRuleIdeInfo( androidIdeInfoProvider, dependenciesResult, ideResolveArtifacts)); } @@ -394,6 +399,20 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config return provider; } + private boolean isCppRule(ConfiguredTarget base) { + String ruleClass = base.getTarget().getAssociatedRule().getRuleClass(); + switch (ruleClass) { + case "cc_library": + case "cc_binary": + case "cc_test": + case "cc_inc_library:": + return true; + default: + // Fall through + } + return androidStudioInfoSemantics.checkForAdditionalCppRules(ruleClass); + } + @Nullable private static Artifact createPackageManifest(ConfiguredTarget base, RuleContext ruleContext) { Collection<Artifact> sourceFiles = getJavaSources(ruleContext); @@ -455,7 +474,6 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config } private static AndroidRuleIdeInfo makeAndroidRuleIdeInfo( - ConfiguredTarget base, AndroidIdeInfoProvider androidIdeInfoProvider, DependenciesResult dependenciesResult, NestedSetBuilder<Artifact> ideResolveArtifacts) { @@ -597,11 +615,6 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config builder.addSource(makeArtifactLocation(sourceFile)); } - Collection<Artifact> exportedHeaderFiles = getExportedHeaders(ruleContext); - for (Artifact exportedHeaderFile : exportedHeaderFiles) { - builder.addExportedHeader(makeArtifactLocation(exportedHeaderFile)); - } - builder.addAllRuleInclude(getIncludes(ruleContext)); builder.addAllRuleDefine(getDefines(ruleContext)); builder.addAllRuleCopt(getCopts(ruleContext)); @@ -739,10 +752,6 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config return getTargetListAttribute(ruleContext, "srcs"); } - private static Collection<Artifact> getExportedHeaders(RuleContext ruleContext) { - return getTargetListAttribute(ruleContext, "hdrs"); - } - private static Collection<String> getIncludes(RuleContext ruleContext) { return getStringListAttribute(ruleContext, "includes"); } @@ -786,12 +795,6 @@ public class AndroidStudioInfoAspect extends NativeAspectClass implements Config } } - @Nullable - private static CppConfiguration getCppConfiguration(ConfiguredTarget base) { - CcToolchainProvider ccToolchainProvider = base.getProvider(CcToolchainProvider.class); - return ccToolchainProvider != null ? ccToolchainProvider.getCppConfiguration() : null; - } - @Deprecated private RuleIdeInfo.Kind getRuleKind(Rule rule, ConfiguredTarget base) { switch (rule.getRuleClassObject().getName()) { 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 4e6639c966..01234f2abb 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 @@ -34,4 +34,6 @@ public interface AndroidStudioInfoSemantics { 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 f055405b48..1aa3dc9590 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 @@ -39,4 +39,9 @@ public class BazelAndroidStudioInfoSemantics implements AndroidStudioInfoSemanti @Override public void augmentPrerequisiteAttrs(ImmutableList.Builder<PrerequisiteAttr> builder) { } + + @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 baedca7cdd..6d873c79f6 100644 --- a/src/main/protobuf/android_studio_ide_info.proto +++ b/src/main/protobuf/android_studio_ide_info.proto @@ -48,7 +48,6 @@ message JavaRuleIdeInfo { message CRuleIdeInfo { repeated ArtifactLocation source = 1; - repeated ArtifactLocation exported_header = 2; repeated string transitive_include_directory = 3; repeated string transitive_quote_include_directory = 4; 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 42a1e8bd29..f9a1b49e83 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 @@ -1038,8 +1038,6 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase assertThat(relativePathsForCSourcesOf(ruleIdeInfo)) .containsExactly("com/google/example/simple/simple.cc"); - assertThat(relativePathsForExportedCHeadersOf(ruleIdeInfo)) - .containsExactly("com/google/example/simple/simple.h"); assertThat(ruleIdeInfo.hasCRuleIdeInfo()).isTrue(); assertThat(ruleIdeInfo.hasJavaRuleIdeInfo()).isFalse(); @@ -1508,6 +1506,20 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase assertThat(toolchainInfo.hasCToolchainIdeInfo()).isTrue(); } + @Test + public void testJavaLibraryDoesNotHaveCInfo() throws Exception { + scratch.file( + "com/google/example/BUILD", + "java_library(", + " name = 'simple',", + " srcs = ['simple/Simple.java']", + ")"); + Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple"); + RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel( + "//com/google/example:simple", ruleIdeInfos); + assertThat(ruleIdeInfo.hasCRuleIdeInfo()).isFalse(); + } + /** * Returns true if we are testing the native aspect, not the Skylark one. * Eventually Skylark aspect will be equivalent to a native one, and this method diff --git a/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTestBase.java b/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTestBase.java index 291b6be9e3..dfff8a8da6 100644 --- a/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTestBase.java +++ b/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTestBase.java @@ -122,10 +122,6 @@ abstract class AndroidStudioInfoAspectTestBase extends BuildViewTestCase { return relativePathsForSources(ruleIdeInfo.getCRuleIdeInfo().getSourceList()); } - protected static Iterable<String> relativePathsForExportedCHeadersOf(RuleIdeInfo ruleIdeInfo) { - return relativePathsForSources(ruleIdeInfo.getCRuleIdeInfo().getExportedHeaderList()); - } - private static Iterable<String> relativePathsForSources(List<ArtifactLocation> sourcesList) { return transform(sourcesList, ARTIFACT_TO_RELATIVE_PATH); } 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 6d6eab6409..9648cba3e9 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 @@ -164,13 +164,6 @@ def c_rule_ide_info(target, ctx): sources = getSourcesFromRule(ctx) - if hasattr(ctx.rule.attr, "hdrs"): - exported_headers = [artifact_location(file) - for hdr in ctx.rule.attr.hdrs - for file in hdr.files] - else: - exported_headers = [] - rule_includes = [] if hasattr(ctx.rule.attr, "includes"): rule_includes = ctx.rule.attr.includes @@ -187,7 +180,6 @@ def c_rule_ide_info(target, ctx): return (struct_omit_none( source = sources, - exported_header = exported_headers, rule_include = rule_includes, rule_define = rule_defines, rule_copt = rule_copts, |