diff options
author | 2018-07-23 02:02:24 -0700 | |
---|---|---|
committer | 2018-07-23 02:04:09 -0700 | |
commit | 6b5df97308d5ce60e801f9872d6b354db5164fe6 (patch) | |
tree | 27c789f49745f2123cefecd5f9c10c343c46c692 | |
parent | a6255612e4892729d3758775c76085b26b9bc584 (diff) |
C++: Refactors every provider wrapping CcLinkParamsStore
Providers that were wrapping CcLinkParamsStore now wrap CcLinkingInfo instead.
CcLinkParamsStore will be deleted in a future CL.
RELNOTES:none
PiperOrigin-RevId: 205629924
6 files changed, 51 insertions, 41 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCcLinkParamsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCcLinkParamsProvider.java index 5d88498db7..2b9ba895d3 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCcLinkParamsProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCcLinkParamsProvider.java @@ -20,46 +20,46 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.packages.BuiltinProvider; import com.google.devtools.build.lib.packages.NativeInfo; import com.google.devtools.build.lib.rules.cpp.AbstractCcLinkParamsStore; -import com.google.devtools.build.lib.rules.cpp.CcLinkParamsStore; +import com.google.devtools.build.lib.rules.cpp.CcLinkingInfo; import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidCcLinkParamsProviderApi; import com.google.devtools.build.lib.syntax.EvalException; /** A target that provides C++ libraries to be linked into Android targets. */ @Immutable public final class AndroidCcLinkParamsProvider extends NativeInfo - implements AndroidCcLinkParamsProviderApi<CcLinkParamsStore> { + implements AndroidCcLinkParamsProviderApi<CcLinkingInfo> { public static final String PROVIDER_NAME = "AndroidCcLinkParamsInfo"; public static final Provider PROVIDER = new Provider(); - private final CcLinkParamsStore store; + private final CcLinkingInfo ccLinkingInfo; - public AndroidCcLinkParamsProvider(AbstractCcLinkParamsStore store) { + public AndroidCcLinkParamsProvider(CcLinkingInfo ccLinkingInfo) { super(PROVIDER); - this.store = new CcLinkParamsStore(store); + this.ccLinkingInfo = ccLinkingInfo; } @Override - public CcLinkParamsStore getLinkParams() { - return store; + public CcLinkingInfo getLinkParams() { + return ccLinkingInfo; } public static final Function<TransitiveInfoCollection, AbstractCcLinkParamsStore> TO_LINK_PARAMS = (TransitiveInfoCollection input) -> { AndroidCcLinkParamsProvider provider = input.get(AndroidCcLinkParamsProvider.PROVIDER); - return provider == null ? null : provider.getLinkParams(); + return provider == null ? null : provider.getLinkParams().getCcLinkParamsStore(); }; /** Provider class for {@link AndroidCcLinkParamsProvider} objects. */ public static class Provider extends BuiltinProvider<AndroidCcLinkParamsProvider> - implements AndroidCcLinkParamsProviderApi.Provider<CcLinkParamsStore> { + implements AndroidCcLinkParamsProviderApi.Provider<CcLinkingInfo> { private Provider() { super(PROVIDER_NAME, AndroidCcLinkParamsProvider.class); } @Override - public AndroidCcLinkParamsProviderApi<CcLinkParamsStore> createInfo(CcLinkParamsStore store) + public AndroidCcLinkParamsProviderApi<CcLinkingInfo> createInfo(CcLinkingInfo ccLinkingInfo) throws EvalException { - return new AndroidCcLinkParamsProvider(store); + return new AndroidCcLinkParamsProvider(ccLinkingInfo); } } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java index 26115c36fa..19262c7ce8 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java @@ -30,6 +30,8 @@ import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.packages.TriState; import com.google.devtools.build.lib.rules.android.AndroidConfiguration.AndroidAaptVersion; import com.google.devtools.build.lib.rules.android.AndroidLibraryAarInfo.Aar; +import com.google.devtools.build.lib.rules.cpp.CcLinkParamsStore; +import com.google.devtools.build.lib.rules.cpp.CcLinkingInfo; import com.google.devtools.build.lib.rules.java.JavaCommon; import com.google.devtools.build.lib.rules.java.JavaSemantics; import com.google.devtools.build.lib.rules.java.JavaSourceInfoProvider; @@ -245,7 +247,11 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory { JavaSourceInfoProvider.class, JavaSourceInfoProvider.fromJavaTargetAttributes(javaTargetAttributes, javaSemantics)) .addNativeDeclaredProvider( - new AndroidCcLinkParamsProvider(androidCommon.getCcLinkParamsStore())) + new AndroidCcLinkParamsProvider( + CcLinkingInfo.Builder.create() + .setCcLinkParamsStore( + new CcLinkParamsStore(androidCommon.getCcLinkParamsStore())) + .build())) .addNativeDeclaredProvider(new ProguardSpecProvider(transitiveProguardConfigs)) .addNativeDeclaredProvider( new AndroidProguardInfo(proguardLibrary.collectLocalProguardSpecs())) diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsStore.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsStore.java index f3cc7ee8a5..5d07f6d5cc 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsStore.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsStore.java @@ -23,6 +23,8 @@ import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcLinkParamsStoreApi; /** An implementation class for the AbstractCcLinkParamsStore. */ @AutoCodec +@Deprecated +// TODO(plf): Remove class, use CcLinkParams instances individually. public final class CcLinkParamsStore extends AbstractCcLinkParamsStore implements CcLinkParamsStoreApi { public static final ObjectCodec<com.google.devtools.build.lib.rules.cpp.CcLinkParamsStore> CODEC = diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCcLinkParamsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCcLinkParamsProvider.java index 1d9ff5a3c3..597d788f70 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCcLinkParamsProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCcLinkParamsProvider.java @@ -19,32 +19,28 @@ import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; import com.google.devtools.build.lib.analysis.TransitiveInfoProvider; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.rules.cpp.AbstractCcLinkParamsStore; -import com.google.devtools.build.lib.rules.cpp.CcLinkParamsStore; +import com.google.devtools.build.lib.rules.cpp.CcLinkingInfo; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; /** A target that provides C++ libraries to be linked into Java targets. */ @Immutable @AutoCodec public final class JavaCcLinkParamsProvider implements TransitiveInfoProvider { - private final CcLinkParamsStore store; - - public JavaCcLinkParamsProvider(AbstractCcLinkParamsStore store) { - this(new CcLinkParamsStore(store)); - } + private final CcLinkingInfo ccLinkingInfo; @AutoCodec.VisibleForSerialization @AutoCodec.Instantiator - JavaCcLinkParamsProvider(CcLinkParamsStore store) { - this.store = store; + public JavaCcLinkParamsProvider(CcLinkingInfo ccLinkingInfo) { + this.ccLinkingInfo = ccLinkingInfo; } - public AbstractCcLinkParamsStore getLinkParams() { - return store; + public CcLinkingInfo getCcLinkingInfo() { + return ccLinkingInfo; } public static final Function<TransitiveInfoCollection, AbstractCcLinkParamsStore> TO_LINK_PARAMS = input -> { JavaCcLinkParamsProvider provider = input.getProvider(JavaCcLinkParamsProvider.class); - return provider == null ? null : provider.getLinkParams(); + return provider == null ? null : provider.getCcLinkingInfo().getCcLinkParamsStore(); }; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JplCcLinkParams.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JplCcLinkParams.java index b5a67af825..68f7222d46 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JplCcLinkParams.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JplCcLinkParams.java @@ -20,6 +20,8 @@ import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget; import com.google.devtools.build.lib.rules.cpp.AbstractCcLinkParamsStore; import com.google.devtools.build.lib.rules.cpp.CcLinkParams; +import com.google.devtools.build.lib.rules.cpp.CcLinkParamsStore; +import com.google.devtools.build.lib.rules.cpp.CcLinkingInfo; import com.google.devtools.build.lib.rules.java.JavaCcLinkParamsProvider; import java.util.ArrayList; import java.util.List; @@ -41,24 +43,27 @@ public class JplCcLinkParams { */ public static JavaCcLinkParamsProvider createCcLinkParamsStore( final RuleContext ruleContext, final ImmutableList<TransitiveInfoCollection> protoRuntimes) { - List<AbstractCcLinkParamsStore> stores = new ArrayList<>(); + List<JavaCcLinkParamsProvider> providers = new ArrayList<>(); for (TransitiveInfoCollection t : ruleContext.getPrerequisites("deps", RuleConfiguredTarget.Mode.TARGET)) { - stores.add(t.getProvider(JavaProtoLibraryAspectProvider.class) - .getTransitiveInfoProviderMap() - .getProvider(JavaCcLinkParamsProvider.class) - .getLinkParams()); + providers.add( + t.getProvider(JavaProtoLibraryAspectProvider.class) + .getTransitiveInfoProviderMap() + .getProvider(JavaCcLinkParamsProvider.class)); } - return new JavaCcLinkParamsProvider( - new AbstractCcLinkParamsStore() { - @Override - protected void collect( - CcLinkParams.Builder builder, boolean linkingStatically, boolean linkShared) { - for (AbstractCcLinkParamsStore store : stores) { - builder.add(store); - } - builder.addTransitiveTargets(protoRuntimes); - } - }); + CcLinkingInfo.Builder builder = CcLinkingInfo.Builder.create(); + builder.setCcLinkParamsStore( + new CcLinkParamsStore( + new AbstractCcLinkParamsStore() { + @Override + protected void collect( + CcLinkParams.Builder builder, boolean linkingStatically, boolean linkShared) { + for (JavaCcLinkParamsProvider provider : providers) { + builder.add(provider.getCcLinkingInfo().getCcLinkParamsStore()); + } + builder.addTransitiveTargets(protoRuntimes); + } + })); + return new JavaCcLinkParamsProvider(builder.build()); } } diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidCcLinkParamsProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidCcLinkParamsProviderApi.java index 34b4dd4cc3..15cffb4ad5 100644 --- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidCcLinkParamsProviderApi.java +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidCcLinkParamsProviderApi.java @@ -17,6 +17,7 @@ package com.google.devtools.build.lib.skylarkbuildapi.android; import com.google.devtools.build.lib.skylarkbuildapi.ProviderApi; import com.google.devtools.build.lib.skylarkbuildapi.StructApi; import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcLinkParamsStoreApi; +import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcLinkingInfoApi; import com.google.devtools.build.lib.skylarkinterface.Param; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkConstructor; @@ -29,7 +30,7 @@ import com.google.devtools.build.lib.syntax.EvalException; name = "AndroidCcLinkParamsInfo", doc = "Information about the c++ libraries to be linked into Android targets.", category = SkylarkModuleCategory.PROVIDER) -public interface AndroidCcLinkParamsProviderApi<T extends CcLinkParamsStoreApi> extends StructApi { +public interface AndroidCcLinkParamsProviderApi<T extends CcLinkingInfoApi> extends StructApi { /** Name of this info object. */ public static String NAME = "AndroidCcLinkParamsInfo"; @@ -39,7 +40,7 @@ public interface AndroidCcLinkParamsProviderApi<T extends CcLinkParamsStoreApi> /** The provider implementing this can construct the AndroidCcLinkParamsInfo provider. */ @SkylarkModule(name = "Provider", doc = "", documented = false) - public interface Provider<T extends CcLinkParamsStoreApi> extends ProviderApi { + public interface Provider<T extends CcLinkingInfoApi> extends ProviderApi { @SkylarkCallable( name = NAME, |