From 146c2457808318191b7afd3424170fea13eff28b Mon Sep 17 00:00:00 2001 From: janakr Date: Wed, 24 Jan 2018 12:54:15 -0800 Subject: Add codecs for TestConfiguration, ConfiguredFragmentValue, and TestConfigFragment. Thanks to shahan@ for the TestConfigFragment code. PiperOrigin-RevId: 183127152 --- .../build/lib/analysis/test/TestConfiguration.java | 2 + .../lib/skyframe/ConfigurationFragmentValue.java | 10 ++-- .../build/lib/analysis/TestConfigFragments.java | 54 ++++++++++++++-------- 3 files changed, 43 insertions(+), 23 deletions(-) (limited to 'src') 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 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 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 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 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()); } -- cgit v1.2.3