diff options
author | 2018-02-14 12:47:23 -0800 | |
---|---|---|
committer | 2018-02-14 12:48:40 -0800 | |
commit | 03e27585a10f7f5bc9327d64405efc39666e0342 (patch) | |
tree | af186ade6c87015c4e154b0b49261fa291d7ec42 /src/main/java/com | |
parent | 19f05009065d4d94fc49b306557d7fb2c7b03587 (diff) |
@AutoCodec for CcLinkParamsInfo.
PiperOrigin-RevId: 185728950
Diffstat (limited to 'src/main/java/com')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsInfo.java | 40 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsStore.java | 29 |
2 files changed, 48 insertions, 21 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsInfo.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsInfo.java index e95080ee02..8b60c164f9 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsInfo.java @@ -20,11 +20,18 @@ import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; 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.CcLinkParams.Builder; import com.google.devtools.build.lib.rules.cpp.CcLinkParamsStore.CcLinkParamsStoreImpl; +import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization; /** A target that provides C linker parameters. */ @Immutable +@AutoCodec public final class CcLinkParamsInfo extends NativeInfo { + public static final ObjectCodec<CcLinkParamsInfo> CODEC = new CcLinkParamsInfo_AutoCodec(); + public static final NativeProvider<CcLinkParamsInfo> PROVIDER = new NativeProvider<CcLinkParamsInfo>(CcLinkParamsInfo.class, "link_params") {}; public static final Function<TransitiveInfoCollection, CcLinkParamsStore> TO_LINK_PARAMS = @@ -39,23 +46,34 @@ public final class CcLinkParamsInfo extends NativeInfo { private final CcLinkParamsStoreImpl store; + @AutoCodec.Instantiator public CcLinkParamsInfo(CcLinkParamsStore store) { super(PROVIDER, ImmutableMap.<String, Object>of()); this.store = new CcLinkParamsStoreImpl(store); } + @AutoCodec + @VisibleForSerialization + static class CcLinkParamsInfoCollection extends CcLinkParamsStore { + public static final ObjectCodec<CcLinkParamsInfoCollection> CODEC = + new CcLinkParamsInfo_CcLinkParamsInfoCollection_AutoCodec(); + + private final Iterable<CcLinkParamsInfo> providers; + + CcLinkParamsInfoCollection(Iterable<CcLinkParamsInfo> providers) { + this.providers = providers; + } + + @Override + protected void collect(Builder builder, boolean linkingStatically, boolean linkShared) { + for (CcLinkParamsInfo provider : providers) { + builder.add(provider.getCcLinkParamsStore()); + } + } + } + public static CcLinkParamsInfo merge(final Iterable<CcLinkParamsInfo> providers) { - CcLinkParamsStore ccLinkParamsStore = - new CcLinkParamsStore() { - @Override - protected void collect( - CcLinkParams.Builder builder, boolean linkingStatically, boolean linkShared) { - for (CcLinkParamsInfo provider : providers) { - builder.add(provider.getCcLinkParamsStore()); - } - } - }; - return new CcLinkParamsInfo(ccLinkParamsStore); + return new CcLinkParamsInfo(new CcLinkParamsInfoCollection(providers)); } /** Returns the link params store. */ 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 f0ec5882e7..5aa25f6f16 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 @@ -16,16 +16,19 @@ package com.google.devtools.build.lib.rules.cpp; import com.google.common.base.Preconditions; import com.google.devtools.build.lib.rules.cpp.CcLinkParams.Builder; +import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.Strategy; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization; /** * A cache of C link parameters. * - * <p>The cache holds instances of {@link CcLinkParams} for combinations of - * linkingStatically and linkShared. If a requested value is not available in - * the cache, it is computed and then stored. + * <p>The cache holds instances of {@link CcLinkParams} for combinations of linkingStatically and + * linkShared. If a requested value is not available in the cache, it is computed and then stored. * - * <p>Typically this class is used on targets that may be linked in as C - * libraries as in the following example: + * <p>Typically this class is used on targets that may be linked in as C libraries as in the + * following example: * * <pre> * class SomeTarget implements CcLinkParamsInfo { @@ -44,7 +47,9 @@ import com.google.devtools.build.lib.rules.cpp.CcLinkParams.Builder; * } * </pre> */ +@AutoCodec(strategy = Strategy.POLYMORPHIC) public abstract class CcLinkParamsStore { + public static final ObjectCodec<CcLinkParamsStore> CODEC = new CcLinkParamsStore_AutoCodec(); private CcLinkParams staticSharedParams; private CcLinkParams staticNoSharedParams; @@ -108,14 +113,18 @@ public abstract class CcLinkParamsStore { protected abstract void collect(CcLinkParams.Builder builder, boolean linkingStatically, boolean linkShared); - /** - * An empty CcLinkParamStore. - */ - public static final CcLinkParamsStore EMPTY = new CcLinkParamsStore() { + @AutoCodec + @VisibleForSerialization + static class EmptyCcLinkParamsStore extends CcLinkParamsStore { + public static final ObjectCodec<EmptyCcLinkParamsStore> CODEC = + new CcLinkParamsStore_EmptyCcLinkParamsStore_AutoCodec(); @Override protected void collect(Builder builder, boolean linkingStatically, boolean linkShared) {} - }; + } + + /** An empty CcLinkParamStore. */ + public static final CcLinkParamsStore EMPTY = new EmptyCcLinkParamsStore(); /** * An implementation class for the CcLinkParamsStore. |