diff options
author | 2018-02-21 05:55:49 -0800 | |
---|---|---|
committer | 2018-02-21 05:57:31 -0800 | |
commit | ae4ba82f58034b1875f918965bf781376f89505a (patch) | |
tree | 05be5c14ab9e52e33e5009a57bf024625a106394 /src/main/java/com/google | |
parent | 840b3e434866f002421c059226047c524f0dd997 (diff) |
C++: Migrate CcCompilationInfo to NativeInfo
The old TransitiveInfoProvider is deprecated. Providers used from Skylark
should use NativeInfo as specified in[]
RELNOTES:none
PiperOrigin-RevId: 186447814
Diffstat (limited to 'src/main/java/com/google')
10 files changed, 27 insertions, 33 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java index 5f74c9ea3c..9d96ba2716 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcBinary.java @@ -882,7 +882,7 @@ public abstract class CcBinary implements RuleConfiguredTargetFactory { CppHelper.usePic(ruleContext, toolchain, false)); builder .setFilesToBuild(filesToBuild) - .addProvider(CcCompilationInfo.class, ccCompilationInfo) + .addNativeDeclaredProvider(ccCompilationInfo) .addProvider(TransitiveLipoInfoProvider.class, transitiveLipoInfo) .addProvider( CcExecutionDynamicLibrariesProvider.class, 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 82c45ef2e5..36ba98b96d 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 @@ -214,7 +214,7 @@ public final class CcCompilationHelper { /** Function for extracting module maps from CppCompilationDependencies. */ private static final Function<TransitiveInfoCollection, CppModuleMap> CPP_DEPS_TO_MODULES = dep -> { - CcCompilationInfo ccCompilationInfo = dep.getProvider(CcCompilationInfo.class); + CcCompilationInfo ccCompilationInfo = dep.get(CcCompilationInfo.PROVIDER); return ccCompilationInfo == null ? null : ccCompilationInfo.getCppModuleMap(); }; @@ -790,10 +790,10 @@ public final class CcCompilationHelper { TransitiveInfoProviderMapBuilder providers = new TransitiveInfoProviderMapBuilder() .add( - ccCompilationInfo, new CppDebugFileProvider( dwoArtifacts.getDwoArtifacts(), dwoArtifacts.getPicDwoArtifacts()), collectTransitiveLipoInfo(ccOutputs)); + providers.put(ccCompilationInfo); Map<String, NestedSet<Artifact>> outputGroups = new TreeMap<>(); outputGroups.put(OutputGroupInfo.TEMP_FILES, getTemps(ccOutputs)); @@ -983,7 +983,7 @@ public final class CcCompilationHelper { if (useDeps) { ccCompilationInfoBuilder.mergeDependentCcCompilationInfos( - AnalysisUtils.getProviders(deps, CcCompilationInfo.class)); + AnalysisUtils.getProviders(deps, CcCompilationInfo.PROVIDER)); ccCompilationInfoBuilder.mergeDependentCcCompilationInfos(depCcCompilationInfos); } CppHelper.mergeToolchainDependentCcCompilationInfo( @@ -1194,7 +1194,7 @@ public final class CcCompilationHelper { deps.stream().map(CPP_DEPS_TO_MODULES).collect(toCollection(ArrayList::new)); if (ruleContext.getRule().getAttributeDefinition(":stl") != null) { CcCompilationInfo stl = - ruleContext.getPrerequisite(":stl", Mode.TARGET, CcCompilationInfo.class); + ruleContext.getPrerequisite(":stl", Mode.TARGET, CcCompilationInfo.PROVIDER); if (stl != null) { result.add(stl.getCppModuleMap()); } @@ -2049,7 +2049,7 @@ 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.getProvider(CcCompilationInfo.class) != null + if (dep.get(CcCompilationInfo.PROVIDER) != null && InstrumentedFilesCollector.shouldIncludeLocalSources(configuration, dep)) { return true; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationInfo.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationInfo.java index 82cb1f4bc3..135865f271 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationInfo.java @@ -17,17 +17,19 @@ package com.google.devtools.build.lib.rules.cpp; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.ActionOwner; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.MiddlemanFactory; import com.google.devtools.build.lib.analysis.RuleContext; -import com.google.devtools.build.lib.analysis.TransitiveInfoProvider; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.collect.nestedset.Order; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; +import com.google.devtools.build.lib.packages.NativeInfo; +import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.rules.cpp.CppHelper.PregreppedHeader; import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; @@ -46,9 +48,12 @@ import javax.annotation.Nullable; */ @Immutable @AutoCodec -public final class CcCompilationInfo implements TransitiveInfoProvider { +public final class CcCompilationInfo extends NativeInfo { public static final ObjectCodec<CcCompilationInfo> CODEC = new CcCompilationInfo_AutoCodec(); + public static final NativeProvider<CcCompilationInfo> PROVIDER = + new NativeProvider<CcCompilationInfo>(CcCompilationInfo.class, "CcCompilationInfo") {}; + /** An empty {@code CcCompilationInfo}. */ public static final CcCompilationInfo EMPTY = new Builder(null).build(); @@ -95,6 +100,7 @@ public final class CcCompilationInfo implements TransitiveInfoProvider { CppModuleMap cppModuleMap, @Nullable CppModuleMap verificationModuleMap, boolean propagateModuleMapAsActionInput) { + super(PROVIDER, ImmutableMap.of()); Preconditions.checkNotNull(commandLineCcCompilationInfo); this.commandLineCcCompilationInfo = commandLineCcCompilationInfo; this.declaredIncludeDirs = declaredIncludeDirs; diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcSkylarkApiProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcSkylarkApiProvider.java index 83a0853298..4c327cb993 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcSkylarkApiProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcSkylarkApiProvider.java @@ -48,7 +48,7 @@ public final class CcSkylarkApiProvider extends SkylarkApiProvider { + " <code>src</code> or <code>headers</code> attribute" + "(possibly empty but never <code>None</code>).") public NestedSet<Artifact> getTransitiveHeaders() { - CcCompilationInfo ccCompilationInfo = getInfo().getProvider(CcCompilationInfo.class); + CcCompilationInfo ccCompilationInfo = getInfo().get(CcCompilationInfo.PROVIDER); return ccCompilationInfo.getDeclaredIncludeSrcs(); } @@ -95,7 +95,7 @@ public final class CcSkylarkApiProvider extends SkylarkApiProvider { "Returns the list of defines used to compile this target " + "(possibly empty but never <code>None</code>).") public ImmutableList<String> getDefines() { - CcCompilationInfo ccCompilationInfo = getInfo().getProvider(CcCompilationInfo.class); + CcCompilationInfo ccCompilationInfo = getInfo().get(CcCompilationInfo.PROVIDER); return ccCompilationInfo == null ? ImmutableList.<String>of() : ccCompilationInfo.getDefines(); } @@ -106,7 +106,7 @@ public final class CcSkylarkApiProvider extends SkylarkApiProvider { "Returns the list of system include directories used to compile this target " + "(possibly empty but never <code>None</code>).") public ImmutableList<String> getSystemIncludeDirs() { - CcCompilationInfo ccCompilationInfo = getInfo().getProvider(CcCompilationInfo.class); + CcCompilationInfo ccCompilationInfo = getInfo().get(CcCompilationInfo.PROVIDER); if (ccCompilationInfo == null) { return ImmutableList.of(); } @@ -124,7 +124,7 @@ public final class CcSkylarkApiProvider extends SkylarkApiProvider { "Returns the list of include directories used to compile this target " + "(possibly empty but never <code>None</code>).") public ImmutableList<String> getIncludeDirs() { - CcCompilationInfo ccCompilationInfo = getInfo().getProvider(CcCompilationInfo.class); + CcCompilationInfo ccCompilationInfo = getInfo().get(CcCompilationInfo.PROVIDER); if (ccCompilationInfo == null) { return ImmutableList.of(); } @@ -142,7 +142,7 @@ public final class CcSkylarkApiProvider extends SkylarkApiProvider { "Returns the list of quote include directories used to compile this target " + "(possibly empty but never <code>None</code>).") public ImmutableList<String> getQuoteIncludeDirs() { - CcCompilationInfo ccCompilationInfo = getInfo().getProvider(CcCompilationInfo.class); + CcCompilationInfo ccCompilationInfo = getInfo().get(CcCompilationInfo.PROVIDER); if (ccCompilationInfo == null) { return ImmutableList.of(); } @@ -160,7 +160,7 @@ public final class CcSkylarkApiProvider extends SkylarkApiProvider { "Returns the list of flags used to compile this target " + "(possibly empty but never <code>None</code>).") public ImmutableList<String> getCcFlags() { - CcCompilationInfo ccCompilationInfo = getInfo().getProvider(CcCompilationInfo.class); + CcCompilationInfo ccCompilationInfo = getInfo().get(CcCompilationInfo.PROVIDER); ImmutableList.Builder<String> options = ImmutableList.builder(); for (String define : ccCompilationInfo.getDefines()) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java index 50c78d5ffb..a679527857 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java @@ -122,7 +122,7 @@ public class CppHelper { // TODO(bazel-team): Clean this up. ccCompilationInfoBuilder.addSystemIncludeDir( stl.getLabel().getPackageIdentifier().getPathUnderExecRoot().getRelative("gcc3")); - CcCompilationInfo provider = stl.getProvider(CcCompilationInfo.class); + CcCompilationInfo provider = stl.get(CcCompilationInfo.PROVIDER); if (provider == null) { ruleContext.ruleError("Unable to merge the STL '" + stl.getLabel() + "' and toolchain contexts"); diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java index 109de52411..4774ef895b 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java @@ -413,7 +413,7 @@ public class JavaCommon { protected CcCompilationInfo collectTransitiveCppDeps() { CcCompilationInfo.Builder builder = new CcCompilationInfo.Builder(ruleContext); for (TransitiveInfoCollection dep : targetsTreatedAsDeps(ClasspathType.BOTH)) { - CcCompilationInfo ccCompilationInfo = dep.getProvider(CcCompilationInfo.class); + CcCompilationInfo ccCompilationInfo = dep.get(CcCompilationInfo.PROVIDER); if (ccCompilationInfo != null) { builder.mergeDependentCcCompilationInfo(ccCompilationInfo); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java index 0c1b7db96a..e6192fed29 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaImport.java @@ -184,7 +184,7 @@ public class JavaImport implements RuleConfiguredTargetFactory { .add( JavaNativeLibraryProvider.class, new JavaNativeLibraryProvider(transitiveJavaNativeLibraries)) - .add(CcCompilationInfo.class, transitiveCppDeps) + .addNativeDeclaredProvider(transitiveCppDeps) .add(JavaSourceInfoProvider.class, javaSourceInfoProvider) .add(ProguardSpecProvider.class, new ProguardSpecProvider(proguardSpecs)) .addOutputGroup(JavaSemantics.SOURCE_JARS_OUTPUT_GROUP, transitiveJavaSourceJars) diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java index 56187fea59..6b8aa79263 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java @@ -250,7 +250,7 @@ public class JavaLibrary implements RuleConfiguredTargetFactory { RunfilesProvider.simple( JavaCommon.getRunfiles(ruleContext, semantics, javaArtifacts, neverLink))) .setFilesToBuild(filesToBuild) - .addProvider(transitiveCppDeps) + .addNativeDeclaredProvider(transitiveCppDeps) .addNativeDeclaredProvider(ccLinkParamsInfo) .addProvider(new JavaNativeLibraryProvider(transitiveJavaNativeLibraries)) .addProvider(JavaSourceInfoProvider.fromJavaTargetAttributes(attributes, semantics)) diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java index f5cd94c0f0..3019d7a1a3 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java @@ -62,7 +62,6 @@ 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.analysis.TransitiveInfoCollection; -import com.google.devtools.build.lib.analysis.TransitiveInfoProvider; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.packages.Info; @@ -260,10 +259,10 @@ public final class ObjcCommon { for (ConfiguredTargetAndTarget dep : deps) { ConfiguredTarget depCT = dep.getConfiguredTarget(); addAnyProviders(propagatedObjcDeps, depCT, ObjcProvider.SKYLARK_CONSTRUCTOR); - addAnyProviders(cppDeps, depCT, CcCompilationInfo.class); + addAnyProviders(cppDeps, depCT, CcCompilationInfo.PROVIDER); if (isCcLibrary(dep)) { cppDepLinkParams.add(depCT.get(CcLinkParamsInfo.PROVIDER)); - addDefines(depCT.getProvider(CcCompilationInfo.class).getDefines()); + addDefines(depCT.get(CcCompilationInfo.PROVIDER).getDefines()); } } addDepObjcProviders(propagatedObjcDeps.build()); @@ -288,17 +287,6 @@ public final class ObjcCommon { return this; } - private <T extends TransitiveInfoProvider> ImmutableList.Builder<T> addAnyProviders( - ImmutableList.Builder<T> listBuilder, - TransitiveInfoCollection collection, - Class<T> providerClass) { - T provider = collection.getProvider(providerClass); - if (provider != null) { - listBuilder.add(provider); - } - return listBuilder; - } - private <T extends Info> ImmutableList.Builder<T> addAnyProviders( ImmutableList.Builder<T> listBuilder, TransitiveInfoCollection collection, diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java index 3130596ef7..bebacd8757 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java @@ -99,7 +99,7 @@ public class ObjcLibrary implements RuleConfiguredTargetFactory { return ObjcRuleClasses.ruleConfiguredTarget(ruleContext, filesToBuild.build()) .addNativeDeclaredProvider(common.getObjcProvider()) - .addProvider(CcCompilationInfo.class, ccCompilationInfo) + .addNativeDeclaredProvider(ccCompilationInfo) .addProvider(J2ObjcEntryClassProvider.class, j2ObjcEntryClassProvider) .addProvider(J2ObjcMappingFileProvider.class, j2ObjcMappingFileProvider) .addProvider( |