aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar janakr <janakr@google.com>2018-01-24 12:54:15 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-01-24 12:55:55 -0800
commit146c2457808318191b7afd3424170fea13eff28b (patch)
treecac212a103e8a844174b75dc669667206c55cf0e
parentc619e7881559f774d16f84261ab39906a3ac8c60 (diff)
Add codecs for TestConfiguration, ConfiguredFragmentValue, and TestConfigFragment.
Thanks to shahan@ for the TestConfigFragment code. PiperOrigin-RevId: 183127152
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/test/TestConfiguration.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/ConfigurationFragmentValue.java10
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/TestConfigFragments.java54
3 files changed, 43 insertions, 23 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/TestConfiguration.java b/src/main/java/com/google/devtools/build/lib/analysis/test/TestConfiguration.java
index 241008e57d..e50deeded7 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/TestConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/TestConfiguration.java
@@ -37,7 +37,9 @@ import com.google.devtools.common.options.TriState;
import java.util.List;
/** Test-related options. */
+@AutoCodec
public class TestConfiguration extends Fragment {
+ public static final ObjectCodec<TestConfiguration> CODEC = new TestConfiguration_AutoCodec();
/** Command-line options. */
@AutoCodec(strategy = AutoCodec.Strategy.PUBLIC_FIELDS)
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 6fd58f605e..3ec99dbcd1 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
@@ -23,10 +23,13 @@ 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.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.strings.StringCodecs;
import com.google.devtools.build.lib.util.Fingerprint;
+import com.google.devtools.build.lib.vfs.FileSystemProvider;
import com.google.devtools.build.skyframe.SkyFunctionName;
import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.SkyValue;
@@ -36,12 +39,13 @@ import java.io.IOException;
import java.util.Objects;
import javax.annotation.Nullable;
-/**
- * A Skyframe node representing a build configuration fragment.
- */
+/** A Skyframe node representing a build configuration fragment. */
@Immutable
@ThreadSafe
+@AutoCodec(dependency = FileSystemProvider.class)
public class ConfigurationFragmentValue implements SkyValue {
+ public static final InjectingObjectCodec<ConfigurationFragmentValue, FileSystemProvider> CODEC =
+ new ConfigurationFragmentValue_AutoCodec();
@Nullable
private final BuildConfiguration.Fragment fragment;
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/TestConfigFragments.java b/src/test/java/com/google/devtools/build/lib/analysis/TestConfigFragments.java
index d07220505e..2dcad7ecaf 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/TestConfigFragments.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/TestConfigFragments.java
@@ -23,6 +23,8 @@ import com.google.devtools.build.lib.analysis.config.FragmentOptions;
import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException;
import com.google.devtools.build.lib.analysis.config.transitions.PatchTransition;
import com.google.devtools.build.lib.packages.Target;
+import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
/**
* Grab bag file for test configuration fragments and fragment factories.
@@ -62,8 +64,9 @@ public class TestConfigFragments {
}
@Override
- public BuildConfiguration.Fragment create(ConfigurationEnvironment env,
- BuildOptions buildOptions) throws InvalidConfigurationException {
+ public BuildConfiguration.Fragment create(
+ ConfigurationEnvironment env, BuildOptions buildOptions)
+ throws InvalidConfigurationException {
return fragment;
}
@@ -78,27 +81,38 @@ public class TestConfigFragments {
}
}
+ @AutoCodec
+ static class Hook1Fragment extends BuildConfiguration.Fragment {
+ public static final ObjectCodec<Hook1Fragment> CODEC =
+ new TestConfigFragments_Hook1Fragment_AutoCodec();
+
+ @Override
+ public PatchTransition topLevelConfigurationHook(Target toTarget) {
+ return new HostCpuTransition("CONFIG HOOK 1");
+ }
+ }
+
/** Factory for a test fragment with a top-level configuration hook. */
public static SimpleFragmentFactory FragmentWithTopLevelConfigHook1Factory =
- new SimpleFragmentFactory(
- new BuildConfiguration.Fragment() {
- @Override
- public PatchTransition topLevelConfigurationHook(Target toTarget) {
- return new HostCpuTransition("CONFIG HOOK 1");
- }
- });
+ new SimpleFragmentFactory(new Hook1Fragment());
+
+ /**
+ * The class definition for the BuildConfiguration.Fragment needs to be different than the one of
+ * its peer above. This is because Bazel indexes configuration fragments by class name. So we need
+ * to make sure all fragment definitions retain distinct class names.
+ */
+ @AutoCodec
+ static class Hook2Fragment extends BuildConfiguration.Fragment {
+ public static final ObjectCodec<Hook2Fragment> CODEC =
+ new TestConfigFragments_Hook2Fragment_AutoCodec();
+
+ @Override
+ public PatchTransition topLevelConfigurationHook(Target toTarget) {
+ return new HostCpuTransition("CONFIG HOOK 2");
+ }
+ }
/** Factory for a test fragment with a top-level configuration hook. */
public static SimpleFragmentFactory FragmentWithTopLevelConfigHook2Factory =
- // The anonymous class definition for the BuildConfiguration.Fragment needs to be different
- // than the one of its peer above. This is because Bazel indexes configuration fragments
- // by class name. So we need to make sure all fragment definitions retain distinct class
- // names (i.e. "TestConfigFragments$1", "TestConfigFragments$2", etc).
- new SimpleFragmentFactory(
- new BuildConfiguration.Fragment() {
- @Override
- public PatchTransition topLevelConfigurationHook(Target toTarget) {
- return new HostCpuTransition("CONFIG HOOK 2");
- }
- });
+ new SimpleFragmentFactory(new Hook2Fragment());
}