diff options
author | 2018-01-24 12:54:15 -0800 | |
---|---|---|
committer | 2018-01-24 12:55:55 -0800 | |
commit | 146c2457808318191b7afd3424170fea13eff28b (patch) | |
tree | cac212a103e8a844174b75dc669667206c55cf0e /src | |
parent | c619e7881559f774d16f84261ab39906a3ac8c60 (diff) |
Add codecs for TestConfiguration, ConfiguredFragmentValue, and TestConfigFragment.
Thanks to shahan@ for the TestConfigFragment code.
PiperOrigin-RevId: 183127152
Diffstat (limited to 'src')
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()); } |