diff options
author | janakr <janakr@google.com> | 2018-02-02 12:38:58 -0800 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-02-02 12:41:12 -0800 |
commit | 64d9a4d6dcd720a3b7a60ff550a17a7707dd41d0 (patch) | |
tree | 204d7e5cbde5268ae94f297fddfd148a848b00c2 /src/main/java/com/google/devtools/build/lib/skyframe | |
parent | a93e4223dedd920a20b9de69bb5274b072de97cd (diff) |
Start process of tagging AspectKey. Still a lot of subclasses of AspectClass to do.
Also change AspectDescriptor #isEmpty() semantics because they seemed like a bug to me.
PiperOrigin-RevId: 184319840
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/AspectValue.java | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/AspectValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/AspectValue.java index e3b651f2af..0aca54b402 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/AspectValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/AspectValue.java @@ -35,8 +35,14 @@ import com.google.devtools.build.lib.packages.AspectParameters; import com.google.devtools.build.lib.packages.Package; import com.google.devtools.build.lib.skyframe.BuildConfigurationValue.Key; import com.google.devtools.build.lib.skyframe.ConfiguredTargetKey.KeyAndHost; +import com.google.devtools.build.lib.skyframe.serialization.ImmutableListCodec; +import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec; +import com.google.devtools.build.lib.skyframe.serialization.SerializationException; import com.google.devtools.build.lib.syntax.SkylarkImport; import com.google.devtools.build.skyframe.SkyFunctionName; +import com.google.protobuf.CodedInputStream; +import com.google.protobuf.CodedOutputStream; +import java.io.IOException; import java.util.List; import javax.annotation.Nullable; @@ -54,6 +60,7 @@ public final class AspectValue extends ActionLookupValue { /** A base class for a key representing an aspect applied to a particular target. */ public static class AspectKey extends AspectValueKey { + public static final ObjectCodec<AspectKey> CODEC = new AspectKeyCodec(); private final Label label; private final ImmutableList<AspectKey> baseKeys; private final BuildConfigurationValue.Key aspectConfigurationKey; @@ -243,7 +250,8 @@ public final class AspectValue extends ActionLookupValue { } /** An {@link AspectKey} for an aspect in the host configuration. */ - private static class HostAspectKey extends AspectKey { + static class HostAspectKey extends AspectKey { + static final ObjectCodec<AspectKey> CODEC = AspectKey.CODEC; private HostAspectKey( Label label, @@ -260,6 +268,38 @@ public final class AspectValue extends ActionLookupValue { } } + private static class AspectKeyCodec implements ObjectCodec<AspectKey> { + private final ImmutableListCodec<AspectKey> listCodec = new ImmutableListCodec<>(this); + + @Override + public Class<AspectKey> getEncodedClass() { + return AspectKey.class; + } + + @Override + public void serialize(AspectKey obj, CodedOutputStream codedOut) + throws SerializationException, IOException { + Label.CODEC.serialize(obj.label, codedOut); + ConfiguredTargetKey.CODEC.serialize(obj.baseConfiguredTargetKey, codedOut); + listCodec.serialize(obj.baseKeys, codedOut); + AspectDescriptor.CODEC.serialize(obj.aspectDescriptor, codedOut); + Key.CODEC.serialize(obj.aspectConfigurationKey, codedOut); + codedOut.writeBoolNoTag(obj.aspectConfigurationIsHost()); + } + + @Override + public AspectKey deserialize(CodedInputStream codedIn) + throws SerializationException, IOException { + return createAspectKey( + Label.CODEC.deserialize(codedIn), + ConfiguredTargetKey.CODEC.deserialize(codedIn), + listCodec.deserialize(codedIn), + AspectDescriptor.CODEC.deserialize(codedIn), + Key.CODEC.deserialize(codedIn), + codedIn.readBool()); + } + } + /** * The key for a skylark aspect. */ |