diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java | 38 |
1 files changed, 23 insertions, 15 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java index ba662d8aff..49c88e280a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java @@ -128,8 +128,11 @@ public final class CcCompilationHelper { /** Function for extracting module maps from CppCompilationDependencies. */ private static final Function<TransitiveInfoCollection, CppModuleMap> CPP_DEPS_TO_MODULES = dep -> { - CcCompilationContextInfo ccCompilationContextInfo = - dep.get(CcCompilationContextInfo.PROVIDER); + CcCompilationInfo ccCompilationInfo = dep.get(CcCompilationInfo.PROVIDER); + CcCompilationContextInfo ccCompilationContextInfo = null; + if (ccCompilationInfo != null) { + ccCompilationContextInfo = ccCompilationInfo.getCcCompilationContextInfo(); + } return ccCompilationContextInfo == null ? null : ccCompilationContextInfo.getCppModuleMap(); }; @@ -150,17 +153,14 @@ public final class CcCompilationHelper { private final TransitiveInfoProviderMap providers; private final Map<String, NestedSet<Artifact>> outputGroups; private final CcCompilationOutputs compilationOutputs; - private final CcCompilationContextInfo ccCompilationContextInfo; private CompilationInfo( TransitiveInfoProviderMap providers, Map<String, NestedSet<Artifact>> outputGroups, - CcCompilationOutputs compilationOutputs, - CcCompilationContextInfo ccCompilationContextInfo) { + CcCompilationOutputs compilationOutputs) { this.providers = providers; this.outputGroups = outputGroups; this.compilationOutputs = compilationOutputs; - this.ccCompilationContextInfo = ccCompilationContextInfo; } public TransitiveInfoProviderMap getProviders() { @@ -177,8 +177,13 @@ public final class CcCompilationHelper { } @SkylarkCallable(name = "cc_compilation_info", documented = false) + public CcCompilationInfo getCcCompilationInfo() { + return (CcCompilationInfo) providers.getProvider(CcCompilationInfo.PROVIDER.getKey()); + } + public CcCompilationContextInfo getCcCompilationContextInfo() { - return ccCompilationContextInfo; + return ((CcCompilationInfo) providers.getProvider(CcCompilationInfo.PROVIDER.getKey())) + .getCcCompilationContextInfo(); } } @@ -731,7 +736,9 @@ public final class CcCompilationHelper { new CppDebugFileProvider( dwoArtifacts.getDwoArtifacts(), dwoArtifacts.getPicDwoArtifacts()), collectTransitiveLipoInfo(ccOutputs)); - providers.put(ccCompilationContextInfo); + CcCompilationInfo.Builder ccCompilationInfoBuilder = CcCompilationInfo.Builder.create(); + ccCompilationInfoBuilder.setCcCompilationContextInfo(ccCompilationContextInfo); + providers.put(ccCompilationInfoBuilder.build()); Map<String, NestedSet<Artifact>> outputGroups = new TreeMap<>(); outputGroups.put(OutputGroupInfo.TEMP_FILES, getTemps(ccOutputs)); @@ -747,8 +754,7 @@ public final class CcCompilationHelper { CcCommon.collectCompilationPrerequisites(ruleContext, ccCompilationContextInfo)); } - return new CompilationInfo( - providers.build(), outputGroups, ccOutputs, ccCompilationContextInfo); + return new CompilationInfo(providers.build(), outputGroups, ccOutputs); } @Immutable @@ -922,7 +928,7 @@ public final class CcCompilationHelper { if (useDeps) { ccCompilationContextInfoBuilder.mergeDependentCcCompilationContextInfos( - AnalysisUtils.getProviders(deps, CcCompilationContextInfo.PROVIDER)); + CcCompilationInfo.getCcCompilationContextInfos(deps)); ccCompilationContextInfoBuilder.mergeDependentCcCompilationContextInfos( depCcCompilationContextInfos); } @@ -1097,10 +1103,10 @@ public final class CcCompilationHelper { List<CppModuleMap> result = deps.stream().map(CPP_DEPS_TO_MODULES).collect(toCollection(ArrayList::new)); if (ruleContext.getRule().getAttributeDefinition(":stl") != null) { - CcCompilationContextInfo stl = - ruleContext.getPrerequisite(":stl", Mode.TARGET, CcCompilationContextInfo.PROVIDER); + CcCompilationInfo stl = + ruleContext.getPrerequisite(":stl", Mode.TARGET, CcCompilationInfo.PROVIDER); if (stl != null) { - result.add(stl.getCppModuleMap()); + result.add(stl.getCcCompilationContextInfo().getCppModuleMap()); } } @@ -1980,7 +1986,9 @@ public final class CcCompilationHelper { // implementation (with caching results of this method) to avoid O(N^2) slowdown. if (ruleContext.getRule().isAttrDefined("deps", BuildType.LABEL_LIST)) { for (TransitiveInfoCollection dep : ruleContext.getPrerequisites("deps", Mode.TARGET)) { - if (dep.get(CcCompilationContextInfo.PROVIDER) != null + CcCompilationInfo ccCompilationInfo = dep.get(CcCompilationInfo.PROVIDER); + if (ccCompilationInfo != null + && ccCompilationInfo.getCcCompilationContextInfo() != null && InstrumentedFilesCollector.shouldIncludeLocalSources(configuration, dep)) { return true; } |