aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java
diff options
context:
space:
mode:
authorGravatar janakr <janakr@google.com>2018-01-24 10:15:56 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-01-24 10:17:58 -0800
commit269d9bd849938af49a30950522bec9e1140cf599 (patch)
treeab253fd7b188014998ba3762f88557a7a6485035 /src/main/java
parenteb5e3ccaa1dccb6b3a77427be0f1b4d48012c069 (diff)
Add codecs for SkyKeys that are needed for null build.
PiperOrigin-RevId: 183102476
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/pkgcache/TestFilter.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationValue.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/ConfigurationFragmentValue.java69
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseValue.java12
4 files changed, 77 insertions, 13 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/TestFilter.java b/src/main/java/com/google/devtools/build/lib/pkgcache/TestFilter.java
index 5dbed752e7..56e8e8e616 100644
--- a/src/main/java/com/google/devtools/build/lib/pkgcache/TestFilter.java
+++ b/src/main/java/com/google/devtools/build/lib/pkgcache/TestFilter.java
@@ -39,7 +39,7 @@ import javax.annotation.Nullable;
*/
@AutoCodec
public final class TestFilter implements com.google.common.base.Predicate<Target> {
- static final ObjectCodec<TestFilter> CODEC = new TestFilter_AutoCodec();
+ public static final ObjectCodec<TestFilter> CODEC = new TestFilter_AutoCodec();
private static final Predicate<Target> ALWAYS_TRUE = (t) -> true;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationValue.java
index df86614495..da75352d25 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationValue.java
@@ -25,6 +25,7 @@ import com.google.devtools.build.lib.skyframe.serialization.InjectingObjectCodec
import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
import com.google.devtools.build.lib.skyframe.serialization.SerializationException;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.lib.skyframe.serialization.strings.StringCodecs;
import com.google.devtools.build.lib.vfs.FileSystemProvider;
import com.google.devtools.build.skyframe.SkyFunctionName;
@@ -77,7 +78,11 @@ public class BuildConfigurationValue implements SkyValue {
return keyInterner.intern(new Key(fragmentClassSet, buildOptions));
}
- static final class Key implements SkyKey, Serializable {
+ /** {@link SkyKey} for {@link BuildConfigurationValue}. */
+ @VisibleForSerialization
+ public static final class Key implements SkyKey, Serializable {
+ public static final ObjectCodec<Key> CODEC = new Codec();
+
private final FragmentClassSet fragments;
private final BuildOptions buildOptions;
// If hashCode really is -1, we'll recompute it from scratch each time. Oh well.
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfigurationFragmentValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfigurationFragmentValue.java
index 4a59bb4209..6fd58f605e 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfigurationFragmentValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfigurationFragmentValue.java
@@ -15,17 +15,24 @@ package com.google.devtools.build.lib.skyframe;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Interner;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration.Fragment;
import com.google.devtools.build.lib.analysis.config.BuildOptions;
+import com.google.devtools.build.lib.concurrent.BlazeInterners;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
import com.google.devtools.build.lib.packages.RuleClassProvider;
+import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
+import com.google.devtools.build.lib.skyframe.serialization.SerializationException;
+import com.google.devtools.build.lib.skyframe.serialization.strings.StringCodecs;
import com.google.devtools.build.lib.util.Fingerprint;
-import com.google.devtools.build.skyframe.LegacySkyKey;
+import com.google.devtools.build.skyframe.SkyFunctionName;
import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.SkyValue;
-import java.io.Serializable;
+import com.google.protobuf.CodedInputStream;
+import com.google.protobuf.CodedOutputStream;
+import java.io.IOException;
import java.util.Objects;
import javax.annotation.Nullable;
@@ -48,30 +55,40 @@ public class ConfigurationFragmentValue implements SkyValue {
}
@ThreadSafe
- public static SkyKey key(BuildOptions buildOptions, Class<? extends Fragment> fragmentType,
+ public static ConfigurationFragmentKey key(
+ BuildOptions buildOptions,
+ Class<? extends Fragment> fragmentType,
RuleClassProvider ruleClassProvider) {
BuildOptions optionsKey =
buildOptions.trim(
BuildConfiguration.getOptionsClasses(
ImmutableList.<Class<? extends BuildConfiguration.Fragment>>of(fragmentType),
ruleClassProvider));
- return LegacySkyKey.create(
- SkyFunctions.CONFIGURATION_FRAGMENT,
- new ConfigurationFragmentKey(optionsKey, fragmentType));
+ return ConfigurationFragmentKey.of(optionsKey, fragmentType);
}
- static final class ConfigurationFragmentKey implements Serializable {
+ /** {@link SkyKey} for {@link ConfigurationFragmentValue}. */
+ public static final class ConfigurationFragmentKey implements SkyKey {
+ private static Interner<ConfigurationFragmentKey> interner = BlazeInterners.newWeakInterner();
+
+ public static final ObjectCodec<ConfigurationFragmentKey> CODEC = new Codec();
+
private final BuildOptions buildOptions;
private final String checksum;
private final Class<? extends Fragment> fragmentType;
- public ConfigurationFragmentKey(BuildOptions buildOptions,
- Class<? extends Fragment> fragmentType) {
+ private ConfigurationFragmentKey(
+ BuildOptions buildOptions, Class<? extends Fragment> fragmentType) {
this.buildOptions = Preconditions.checkNotNull(buildOptions);
this.checksum = Fingerprint.md5Digest(buildOptions.computeCacheKey());
this.fragmentType = Preconditions.checkNotNull(fragmentType);
}
+ private static ConfigurationFragmentKey of(
+ BuildOptions buildOptions, Class<? extends Fragment> fragmentType) {
+ return interner.intern(new ConfigurationFragmentKey(buildOptions, fragmentType));
+ }
+
public BuildOptions getBuildOptions() {
return buildOptions;
}
@@ -103,5 +120,39 @@ public class ConfigurationFragmentValue implements SkyValue {
return String.format("ConfigurationFragmentKey(class=%s, checksum=%s)",
fragmentType.getName(), checksum);
}
+
+ @Override
+ public SkyFunctionName functionName() {
+ return SkyFunctions.CONFIGURATION_FRAGMENT;
+ }
+
+ private static class Codec implements ObjectCodec<ConfigurationFragmentKey> {
+ @Override
+ public Class<ConfigurationFragmentKey> getEncodedClass() {
+ return ConfigurationFragmentKey.class;
+ }
+
+ @Override
+ public void serialize(ConfigurationFragmentKey obj, CodedOutputStream codedOut)
+ throws SerializationException, IOException {
+ BuildOptions.CODEC.serialize(obj.buildOptions, codedOut);
+ StringCodecs.asciiOptimized().serialize(obj.fragmentType.getName(), codedOut);
+ }
+
+ @SuppressWarnings("unchecked") // Cast to Class<? extends Fragment>.
+ @Override
+ public ConfigurationFragmentKey deserialize(CodedInputStream codedIn)
+ throws SerializationException, IOException {
+
+ try {
+ return of(
+ BuildOptions.CODEC.deserialize(codedIn),
+ (Class<? extends Fragment>)
+ Class.forName(StringCodecs.asciiOptimized().deserialize(codedIn)));
+ } catch (ClassNotFoundException e) {
+ throw new SerializationException("Couldn't deserialize ConfigurationFragmentKey", e);
+ }
+ }
+ }
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseValue.java
index 21635b53aa..cc7e84db78 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseValue.java
@@ -23,6 +23,9 @@ import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.pkgcache.LoadingResult;
import com.google.devtools.build.lib.pkgcache.TestFilter;
import com.google.devtools.build.lib.skyframe.serialization.NotSerializableRuntimeException;
+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;
import com.google.devtools.build.skyframe.SkyFunctionName;
import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.SkyValue;
@@ -152,7 +155,12 @@ public final class TargetPatternPhaseValue implements SkyValue {
/** The configuration needed to run the target pattern evaluation phase. */
@ThreadSafe
- static final class TargetPatternPhaseKey implements SkyKey, Serializable {
+ @VisibleForSerialization
+ @AutoCodec
+ public static final class TargetPatternPhaseKey implements SkyKey, Serializable {
+ public static final ObjectCodec<TargetPatternPhaseKey> CODEC =
+ new TargetPatternPhaseValue_TargetPatternPhaseKey_AutoCodec();
+
private final ImmutableList<String> targetPatterns;
private final String offset;
private final boolean compileOneDependency;
@@ -163,7 +171,7 @@ public final class TargetPatternPhaseValue implements SkyValue {
private final boolean expandTestSuites;
@Nullable private final TestFilter testFilter;
- public TargetPatternPhaseKey(
+ TargetPatternPhaseKey(
ImmutableList<String> targetPatterns,
String offset,
boolean compileOneDependency,