diff options
author | 2018-01-05 14:16:54 -0800 | |
---|---|---|
committer | 2018-01-05 14:19:25 -0800 | |
commit | 13b000c575e3fc86bfd0ccce8db89740980d5f15 (patch) | |
tree | 40cb8619155087234b8713bd04b7f535b0067da9 | |
parent | 1ade18a652900410f632b2b9f47e6456c522a2e4 (diff) |
Codecs for all non-test Fragment subclasses (except CppConfiguration, handled separately).
PiperOrigin-RevId: 180974083
13 files changed, 296 insertions, 90 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelConfiguration.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelConfiguration.java index a2191eda26..376ff19df6 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelConfiguration.java @@ -35,11 +35,12 @@ import com.google.devtools.common.options.OptionEffectTag; import java.util.Map; import javax.annotation.Nullable; -/** - * Bazel-specific configuration fragment. - */ +/** Bazel-specific configuration fragment. */ +@AutoCodec @Immutable public class BazelConfiguration extends Fragment { + public static final ObjectCodec<BazelConfiguration> CODEC = new BazelConfiguration_AutoCodec(); + /** Command-line options. */ @AutoCodec(strategy = AutoCodec.Strategy.PUBLIC_FIELDS) public static class Options extends FragmentOptions { @@ -119,9 +120,14 @@ public class BazelConfiguration extends Fragment { private final PathFragment shellExecutable; public BazelConfiguration(OS os, Options options) { + this(os, options.useStrictActionEnv, determineShellExecutable(os, options.shellExecutable)); + } + + @AutoCodec.Constructor + BazelConfiguration(OS os, boolean useStrictActionEnv, PathFragment shellExecutable) { this.os = os; - this.useStrictActionEnv = options.useStrictActionEnv; - this.shellExecutable = determineShellExecutable(os, options.shellExecutable); + this.useStrictActionEnv = useStrictActionEnv; + this.shellExecutable = shellExecutable; } @Override diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonConfiguration.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonConfiguration.java index 0cb066377b..d0952b8d7d 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonConfiguration.java @@ -35,11 +35,12 @@ import com.google.devtools.common.options.OptionDocumentationCategory; import com.google.devtools.common.options.OptionEffectTag; import com.google.devtools.common.options.OptionMetadataTag; -/** - * Bazel-specific Python configuration. - */ +/** Bazel-specific Python configuration. */ +@AutoCodec @Immutable public class BazelPythonConfiguration extends BuildConfiguration.Fragment { + public static final ObjectCodec<BazelPythonConfiguration> CODEC = + new BazelPythonConfiguration_AutoCodec(); /** * A path converter for python3 path @@ -163,7 +164,8 @@ public class BazelPythonConfiguration extends BuildConfiguration.Fragment { private final Options options; - private BazelPythonConfiguration(Options options) { + @AutoCodec.Constructor + BazelPythonConfiguration(Options options) { this.options = options; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java index 7e40dba996..ecdb28fc41 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java @@ -52,6 +52,7 @@ import java.util.List; import javax.annotation.Nullable; /** Configuration fragment for Android rules. */ +@AutoCodec @SkylarkModule( name = "android", doc = "A configuration fragment for Android.", @@ -59,6 +60,8 @@ import javax.annotation.Nullable; ) @Immutable public class AndroidConfiguration extends BuildConfiguration.Fragment { + public static final ObjectCodec<AndroidConfiguration> CODEC = + new AndroidConfiguration_AutoCodec(); /** * Converter for {@link @@ -831,7 +834,7 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment { private final Label sdk; private final String cpu; - private final boolean incrementalNativeLibs; + private final boolean useIncrementalNativeLibs; private final ConfigurationDistinguisher configurationDistinguisher; private final boolean incrementalDexing; private final int incrementalDexingShardsAfterProguard; @@ -864,7 +867,7 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment { AndroidConfiguration(Options options) throws InvalidConfigurationException { this.sdk = options.sdk; - this.incrementalNativeLibs = options.incrementalNativeLibs; + this.useIncrementalNativeLibs = options.incrementalNativeLibs; this.cpu = options.cpu; this.configurationDistinguisher = options.configurationDistinguisher; this.incrementalDexing = options.incrementalDexing; @@ -911,6 +914,74 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment { } } + @AutoCodec.Constructor + AndroidConfiguration( + Label sdk, + String cpu, + boolean useIncrementalNativeLibs, + ConfigurationDistinguisher configurationDistinguisher, + boolean incrementalDexing, + int incrementalDexingShardsAfterProguard, + boolean incrementalDexingUseDexSharder, + boolean assumeMinSdkVersion, + ImmutableList<String> dexoptsSupportedInIncrementalDexing, + ImmutableList<String> targetDexoptsThatPreventIncrementalDexing, + ImmutableList<String> dexoptsSupportedInDexMerger, + boolean useWorkersWithDexbuilder, + boolean desugarJava8, + boolean checkDesugarDeps, + boolean useRexToCompressDexFiles, + boolean allowAndroidLibraryDepsWithoutSrcs, + boolean useAndroidResourceShrinking, + boolean useAndroidResourceCycleShrinking, + AndroidManifestMerger manifestMerger, + ApkSigningMethod apkSigningMethod, + boolean useSingleJarApkBuilder, + ResourceFilterFactory resourceFilterFactory, + boolean compressJavaResources, + boolean exportsManifestDefault, + AndroidAaptVersion androidAaptVersion, + boolean useAapt2ForRobolectric, + boolean throwOnResourceConflict, + boolean useParallelDex2Oat, + boolean allowAndroidResources, + boolean allowResourcesAttr, + boolean skipParsingAction, + boolean fixedResourceNeverlinking) { + this.sdk = sdk; + this.cpu = cpu; + this.useIncrementalNativeLibs = useIncrementalNativeLibs; + this.configurationDistinguisher = configurationDistinguisher; + this.incrementalDexing = incrementalDexing; + this.incrementalDexingShardsAfterProguard = incrementalDexingShardsAfterProguard; + this.incrementalDexingUseDexSharder = incrementalDexingUseDexSharder; + this.assumeMinSdkVersion = assumeMinSdkVersion; + this.dexoptsSupportedInIncrementalDexing = dexoptsSupportedInIncrementalDexing; + this.targetDexoptsThatPreventIncrementalDexing = targetDexoptsThatPreventIncrementalDexing; + this.dexoptsSupportedInDexMerger = dexoptsSupportedInDexMerger; + this.useWorkersWithDexbuilder = useWorkersWithDexbuilder; + this.desugarJava8 = desugarJava8; + this.checkDesugarDeps = checkDesugarDeps; + this.useRexToCompressDexFiles = useRexToCompressDexFiles; + this.allowAndroidLibraryDepsWithoutSrcs = allowAndroidLibraryDepsWithoutSrcs; + this.useAndroidResourceShrinking = useAndroidResourceShrinking; + this.useAndroidResourceCycleShrinking = useAndroidResourceCycleShrinking; + this.manifestMerger = manifestMerger; + this.apkSigningMethod = apkSigningMethod; + this.useSingleJarApkBuilder = useSingleJarApkBuilder; + this.resourceFilterFactory = resourceFilterFactory; + this.compressJavaResources = compressJavaResources; + this.exportsManifestDefault = exportsManifestDefault; + this.androidAaptVersion = androidAaptVersion; + this.useAapt2ForRobolectric = useAapt2ForRobolectric; + this.throwOnResourceConflict = throwOnResourceConflict; + this.useParallelDex2Oat = useParallelDex2Oat; + this.allowAndroidResources = allowAndroidResources; + this.allowResourcesAttr = allowResourcesAttr; + this.skipParsingAction = skipParsingAction; + this.fixedResourceNeverlinking = fixedResourceNeverlinking; + } + public String getCpu() { return cpu; } @@ -926,7 +997,7 @@ public class AndroidConfiguration extends BuildConfiguration.Fragment { } public boolean useIncrementalNativeLibs() { - return incrementalNativeLibs; + return useIncrementalNativeLibs; } /** Returns whether to use incremental dexing. */ diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java index 6370ac2ec2..8bc992fd56 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java @@ -32,19 +32,17 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.rules.apple.AppleCommandLineOptions.AppleBitcodeMode; import com.google.devtools.build.lib.rules.apple.ApplePlatform.PlatformType; import com.google.devtools.build.lib.skyframe.serialization.EnumCodec; -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.skyframe.serialization.ObjectCodec; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; -import com.google.protobuf.CodedInputStream; -import com.google.protobuf.CodedOutputStream; -import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.annotation.Nullable; /** A configuration containing flags required for Apple platforms and tools. */ +@AutoCodec @SkylarkModule( name = "apple", doc = "A configuration fragment for Apple platforms.", @@ -52,6 +50,8 @@ import javax.annotation.Nullable; ) @Immutable public class AppleConfiguration extends BuildConfiguration.Fragment { + public static final ObjectCodec<AppleConfiguration> CODEC = new AppleConfiguration_AutoCodec(); + /** * Environment variable name for the xcode version. The value of this environment variable should * be set to the version (for example, "7.2") of xcode to use when invoking part of the apple @@ -91,7 +91,7 @@ public class AppleConfiguration extends BuildConfiguration.Fragment { private final boolean mandatoryMinimumVersion; private final boolean objcProviderFromLinked; - @VisibleForTesting + @AutoCodec.Constructor AppleConfiguration(AppleCommandLineOptions options, String iosCpu) { this.options = options; this.iosCpu = iosCpu; @@ -503,18 +503,6 @@ public class AppleConfiguration extends BuildConfiguration.Fragment { return options.hashCode(); } - void serialize(CodedOutputStream out) throws IOException, SerializationException { - options.serialize(out); - out.writeStringNoTag(iosCpu); - } - - static AppleConfiguration deserialize(CodedInputStream in) - throws IOException, SerializationException { - AppleCommandLineOptions options = AppleCommandLineOptions.deserialize(in); - String iosCpu = StringCodecs.asciiOptimized().deserialize(in); - return new AppleConfiguration(options, iosCpu); - } - @VisibleForTesting static AppleConfiguration create(AppleCommandLineOptions appleOptions, String cpu) { return new AppleConfiguration(appleOptions, iosCpuFromCpu(cpu)); diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/swift/SwiftConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/apple/swift/SwiftConfiguration.java index 4636f1eb60..09a8936000 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/apple/swift/SwiftConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/rules/apple/swift/SwiftConfiguration.java @@ -23,6 +23,8 @@ import com.google.devtools.build.lib.analysis.config.ConfigurationFragmentFactor import com.google.devtools.build.lib.analysis.config.FragmentOptions; import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; +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.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; @@ -31,6 +33,7 @@ import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; * A configuration containing flags required for Swift tools. This is used primarily by swift_* * family of rules written in Skylark. */ +@AutoCodec @SkylarkModule( name = "swift", doc = "A configuration fragment for Swift tools.", @@ -38,13 +41,19 @@ import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; ) @Immutable public class SwiftConfiguration extends BuildConfiguration.Fragment { + public static final ObjectCodec<SwiftConfiguration> CODEC = new SwiftConfiguration_AutoCodec(); private final boolean enableWholeModuleOptimization; private final ImmutableList<String> copts; public SwiftConfiguration(SwiftCommandLineOptions options) { - enableWholeModuleOptimization = options.enableWholeModuleOptimization; - copts = ImmutableList.copyOf(options.copts); + this(options.enableWholeModuleOptimization, ImmutableList.copyOf(options.copts)); + } + + @AutoCodec.Constructor + SwiftConfiguration(boolean enableWholeModuleOptimization, ImmutableList<String> copts) { + this.enableWholeModuleOptimization = enableWholeModuleOptimization; + this.copts = copts; } /** Returns whether to enable Whole Module Optimization. */ diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagConfiguration.java index 7ce92f0d1c..287c8895c3 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagConfiguration.java @@ -41,7 +41,10 @@ import javax.annotation.Nullable; * Configuration fragment for Android's config_feature_flag, flags which can be defined in BUILD * files. */ +@AutoCodec public final class ConfigFeatureFlagConfiguration extends BuildConfiguration.Fragment { + public static final ObjectCodec<ConfigFeatureFlagConfiguration> CODEC = + new ConfigFeatureFlagConfiguration_AutoCodec(); /** A converter used by the flag options which always returns an empty map, ignoring input. */ public static final class EmptyImmutableSortedMapConverter @@ -118,7 +121,12 @@ public final class ConfigFeatureFlagConfiguration extends BuildConfiguration.Fra /** Creates a new configuration fragment from the given {@link Options} fragment. */ public ConfigFeatureFlagConfiguration(Options options) { - this.flagValues = options.getFlagValues(); + this(options.getFlagValues()); + } + + @AutoCodec.Constructor + ConfigFeatureFlagConfiguration(ImmutableSortedMap<Label, String> flagValues) { + this.flagValues = flagValues; this.flagHash = this.flagValues.isEmpty() ? null : hashFlags(this.flagValues); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaConfiguration.java index 81fcf8caa0..3380566823 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaConfiguration.java @@ -28,6 +28,8 @@ import com.google.devtools.build.lib.cmdline.LabelSyntaxException; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.EventHandler; +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.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; @@ -37,6 +39,7 @@ import java.util.Map; import javax.annotation.Nullable; /** A java compiler configuration containing the flags required for compilation. */ +@AutoCodec @Immutable @SkylarkModule( name = "java", @@ -44,6 +47,8 @@ import javax.annotation.Nullable; category = SkylarkModuleCategory.CONFIGURATION_FRAGMENT ) public final class JavaConfiguration extends Fragment { + public static final ObjectCodec<JavaConfiguration> CODEC = new JavaConfiguration_AutoCodec(); + /** Values for the --java_classpath option */ public enum JavaClasspathMode { /** Use full transitive classpaths, the default behavior. */ @@ -160,21 +165,21 @@ public final class JavaConfiguration extends Fragment { private final ImmutableList<Label> translationTargets; private final JavaOptimizationMode javaOptimizationMode; private final ImmutableMap<String, Optional<Label>> bytecodeOptimizers; - private final Label javaToolchain; + private final Label toolchainLabel; private final boolean explicitJavaTestDeps; private final boolean experimentalTestRunner; private final boolean jplPropagateCcLinkParamsStore; private final ImmutableList<Label> pluginList; // TODO(dmarting): remove once we have a proper solution for #2539 - private final boolean legacyBazelJavaTest; + private final boolean useLegacyBazelJavaTest; JavaConfiguration( boolean generateJavaDeps, List<String> defaultJvmFlags, JavaOptions javaOptions, - Label javaToolchain) - throws InvalidConfigurationException { + Label toolchainLabel) + throws InvalidConfigurationException { this.commandLineJavacFlags = ImmutableList.copyOf(JavaHelper.tokenizeJavaOptions(javaOptions.javacOpts)); this.javaLauncherLabel = javaOptions.javaLauncher; @@ -189,9 +194,9 @@ public final class JavaConfiguration extends Fragment { this.proguardBinary = javaOptions.proguard; this.extraProguardSpecs = ImmutableList.copyOf(javaOptions.extraProguardSpecs); this.bundleTranslations = javaOptions.bundleTranslations; - this.javaToolchain = javaToolchain; + this.toolchainLabel = toolchainLabel; this.javaOptimizationMode = javaOptions.javaOptimizationMode; - this.legacyBazelJavaTest = javaOptions.legacyBazelJavaTest; + this.useLegacyBazelJavaTest = javaOptions.legacyBazelJavaTest; this.strictDepsJavaProtos = javaOptions.strictDepsJavaProtos; this.enforceOneVersion = javaOptions.enforceOneVersion; this.enforceOneVersionOnJavaTests = javaOptions.enforceOneVersionOnJavaTests; @@ -224,6 +229,62 @@ public final class JavaConfiguration extends Fragment { this.pluginList = ImmutableList.copyOf(javaOptions.pluginList); } + @AutoCodec.Constructor + JavaConfiguration( + ImmutableList<String> commandLineJavacFlags, + Label javaLauncherLabel, + boolean useIjars, + boolean useHeaderCompilation, + boolean headerCompilationDisableJavacFallback, + boolean generateJavaDeps, + boolean strictDepsJavaProtos, + OneVersionEnforcementLevel enforceOneVersion, + boolean enforceOneVersionOnJavaTests, + boolean allowRuntimeDepsOnNeverLink, + JavaClasspathMode javaClasspath, + ImmutableList<String> defaultJvmFlags, + ImmutableList<String> checkedConstraints, + StrictDepsMode strictJavaDeps, + Label proguardBinary, + ImmutableList<Label> extraProguardSpecs, + TriState bundleTranslations, + ImmutableList<Label> translationTargets, + JavaOptimizationMode javaOptimizationMode, + ImmutableMap<String, Optional<Label>> bytecodeOptimizers, + Label toolchainLabel, + boolean explicitJavaTestDeps, + boolean experimentalTestRunner, + boolean jplPropagateCcLinkParamsStore, + ImmutableList<Label> pluginList, + boolean useLegacyBazelJavaTest) { + this.commandLineJavacFlags = commandLineJavacFlags; + this.javaLauncherLabel = javaLauncherLabel; + this.useIjars = useIjars; + this.useHeaderCompilation = useHeaderCompilation; + this.headerCompilationDisableJavacFallback = headerCompilationDisableJavacFallback; + this.generateJavaDeps = generateJavaDeps; + this.strictDepsJavaProtos = strictDepsJavaProtos; + this.enforceOneVersion = enforceOneVersion; + this.enforceOneVersionOnJavaTests = enforceOneVersionOnJavaTests; + this.allowRuntimeDepsOnNeverLink = allowRuntimeDepsOnNeverLink; + this.javaClasspath = javaClasspath; + this.defaultJvmFlags = defaultJvmFlags; + this.checkedConstraints = checkedConstraints; + this.strictJavaDeps = strictJavaDeps; + this.proguardBinary = proguardBinary; + this.extraProguardSpecs = extraProguardSpecs; + this.bundleTranslations = bundleTranslations; + this.translationTargets = translationTargets; + this.javaOptimizationMode = javaOptimizationMode; + this.bytecodeOptimizers = bytecodeOptimizers; + this.toolchainLabel = toolchainLabel; + this.explicitJavaTestDeps = explicitJavaTestDeps; + this.experimentalTestRunner = experimentalTestRunner; + this.jplPropagateCcLinkParamsStore = jplPropagateCcLinkParamsStore; + this.pluginList = pluginList; + this.useLegacyBazelJavaTest = useLegacyBazelJavaTest; + } + @SkylarkCallable(name = "default_javac_flags", structField = true, doc = "The default flags for the Java compiler.") // TODO(bazel-team): this is the command-line passed options, we should remove from skylark @@ -363,7 +424,7 @@ public final class JavaConfiguration extends Fragment { * Returns the label of the default java_toolchain rule */ public Label getToolchainLabel() { - return javaToolchain; + return toolchainLabel; } /** @@ -387,7 +448,7 @@ public final class JavaConfiguration extends Fragment { * open-sourced our test runner. */ public boolean useLegacyBazelJavaTest() { - return legacyBazelJavaTest; + return useLegacyBazelJavaTest; } /** diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/Jvm.java b/src/main/java/com/google/devtools/build/lib/rules/java/Jvm.java index f9724fc2f5..818f4f1ec4 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/Jvm.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/Jvm.java @@ -19,6 +19,8 @@ import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; +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.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; import com.google.devtools.build.lib.util.OsUtils; @@ -29,6 +31,7 @@ import com.google.devtools.build.lib.vfs.PathFragment; * the client, it can optionally also contain a label pointing to a target that contains all the * necessary files. */ +@AutoCodec @SkylarkModule( name = "jvm", category = SkylarkModuleCategory.CONFIGURATION_FRAGMENT, @@ -36,6 +39,8 @@ import com.google.devtools.build.lib.vfs.PathFragment; ) @Immutable public final class Jvm extends BuildConfiguration.Fragment { + public static final ObjectCodec<Jvm> CODEC = new Jvm_AutoCodec(); + private final PathFragment javaHome; private final Label jvmLabel; private final PathFragment java; @@ -43,10 +48,10 @@ public final class Jvm extends BuildConfiguration.Fragment { public static final String BIN_JAVA = "bin/java" + OsUtils.executableExtension(); /** - * Creates a Jvm instance. Either the {@code javaHome} parameter is absolute, - * and/or the {@code jvmLabel} parameter must be non-null. Only the - * {@code jvmLabel} is optional. + * Creates a Jvm instance. Either the {@code javaHome} parameter is absolute, and/or the {@code + * jvmLabel} parameter must be non-null. Only the {@code jvmLabel} is optional. */ + @AutoCodec.Constructor public Jvm(PathFragment javaHome, Label jvmLabel) { Preconditions.checkArgument(javaHome.isAbsolute() || jvmLabel != null); this.javaHome = javaHome; diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcConfiguration.java index 5342172730..0d07d7393b 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcConfiguration.java @@ -27,16 +27,21 @@ import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.EventHandler; +import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import java.util.Collections; import java.util.List; /** - * A J2ObjC transpiler configuration fragment containing J2ObjC translation flags. - * This configuration fragment is used by Java rules that can be transpiled - * (specifically, J2ObjCAspects thereof). + * A J2ObjC transpiler configuration fragment containing J2ObjC translation flags. This + * configuration fragment is used by Java rules that can be transpiled (specifically, J2ObjCAspects + * thereof). */ +@AutoCodec @Immutable public class J2ObjcConfiguration extends Fragment { + public static final ObjectCodec<J2ObjcConfiguration> CODEC = new J2ObjcConfiguration_AutoCodec(); + /** * Always-on flags for J2ObjC translation. These flags are always used when invoking the J2ObjC * transpiler, and cannot be overridden by user-specified flags in {@link @@ -92,14 +97,27 @@ public class J2ObjcConfiguration extends Fragment { private final Optional<Label> deadCodeReport; J2ObjcConfiguration(J2ObjcCommandLineOptions j2ObjcOptions) { - this.removeDeadCode = j2ObjcOptions.removeDeadCode; - this.experimentalJ2ObjcHeaderMap = j2ObjcOptions.experimentalJ2ObjcHeaderMap; - this.deadCodeReport = Optional.fromNullable(j2ObjcOptions.deadCodeReport); - this.translationFlags = ImmutableList.<String>builder() - .addAll(J2OBJC_DEFAULT_TRANSLATION_FLAGS) - .addAll(j2ObjcOptions.translationFlags) - .addAll(J2OBJC_ALWAYS_ON_TRANSLATION_FLAGS) - .build(); + this( + ImmutableList.<String>builder() + .addAll(J2OBJC_DEFAULT_TRANSLATION_FLAGS) + .addAll(j2ObjcOptions.translationFlags) + .addAll(J2OBJC_ALWAYS_ON_TRANSLATION_FLAGS) + .build(), + j2ObjcOptions.removeDeadCode, + j2ObjcOptions.experimentalJ2ObjcHeaderMap, + Optional.fromNullable(j2ObjcOptions.deadCodeReport)); + } + + @AutoCodec.Constructor + J2ObjcConfiguration( + List<String> translationFlags, + boolean removeDeadCode, + boolean experimentalJ2ObjcHeaderMap, + Optional<Label> deadCodeReport) { + this.translationFlags = translationFlags; + this.removeDeadCode = removeDeadCode; + this.experimentalJ2ObjcHeaderMap = experimentalJ2ObjcHeaderMap; + this.deadCodeReport = deadCodeReport; } /** diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java index 8f7cc2168c..85bfaa4a06 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java @@ -24,12 +24,15 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.rules.apple.ApplePlatform.PlatformType; import com.google.devtools.build.lib.rules.apple.DottedVersion; import com.google.devtools.build.lib.rules.cpp.HeaderDiscovery; +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.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; import javax.annotation.Nullable; /** A compiler configuration containing flags required for Objective-C compilation. */ +@AutoCodec @SkylarkModule( name = "objc", category = SkylarkModuleCategory.CONFIGURATION_FRAGMENT, @@ -37,6 +40,8 @@ import javax.annotation.Nullable; ) @Immutable public class ObjcConfiguration extends BuildConfiguration.Fragment { + public static final ObjectCodec<ObjcConfiguration> CODEC = new ObjcConfiguration_AutoCodec(); + @VisibleForTesting static final ImmutableList<String> DBG_COPTS = ImmutableList.of("-O0", "-DDEBUG=1", "-fstack-protector", "-fstack-protector-all", "-g"); @@ -112,6 +117,58 @@ public class ObjcConfiguration extends BuildConfiguration.Fragment { this.appleSdk = objcOptions.appleSdk; } + @AutoCodec.Constructor + ObjcConfiguration( + DottedVersion iosSimulatorVersion, + String iosSimulatorDevice, + DottedVersion watchosSimulatorVersion, + String watchosSimulatorDevice, + DottedVersion tvosSimulatorVersion, + String tvosSimulatorDevice, + boolean generateDsym, + boolean generateLinkmap, + boolean runMemleaks, + ImmutableList<String> copts, + CompilationMode compilationMode, + ImmutableList<String> fastbuildOptions, + boolean enableBinaryStripping, + boolean moduleMapsEnabled, + String signingCertName, + boolean debugWithGlibcxx, + Label extraEntitlements, + boolean deviceDebugEntitlements, + boolean enableAppleBinaryNativeProtos, + HeaderDiscovery.DotdPruningMode dotdPruningPlan, + boolean experimentalHeaderThinning, + int objcHeaderThinningPartitionSize, + Label objcHeaderScannerTool, + Label appleSdk) { + this.iosSimulatorVersion = iosSimulatorVersion; + this.iosSimulatorDevice = iosSimulatorDevice; + this.watchosSimulatorVersion = watchosSimulatorVersion; + this.watchosSimulatorDevice = watchosSimulatorDevice; + this.tvosSimulatorVersion = tvosSimulatorVersion; + this.tvosSimulatorDevice = tvosSimulatorDevice; + this.generateDsym = generateDsym; + this.generateLinkmap = generateLinkmap; + this.runMemleaks = runMemleaks; + this.copts = copts; + this.compilationMode = compilationMode; + this.fastbuildOptions = fastbuildOptions; + this.enableBinaryStripping = enableBinaryStripping; + this.moduleMapsEnabled = moduleMapsEnabled; + this.signingCertName = signingCertName; + this.debugWithGlibcxx = debugWithGlibcxx; + this.extraEntitlements = extraEntitlements; + this.deviceDebugEntitlements = deviceDebugEntitlements; + this.enableAppleBinaryNativeProtos = enableAppleBinaryNativeProtos; + this.dotdPruningPlan = dotdPruningPlan; + this.experimentalHeaderThinning = experimentalHeaderThinning; + this.objcHeaderThinningPartitionSize = objcHeaderThinningPartitionSize; + this.objcHeaderScannerTool = objcHeaderScannerTool; + this.appleSdk = appleSdk; + } + /** * Returns the type of device (e.g. 'iPhone 6') to simulate when running on the simulator. */ diff --git a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConfiguration.java index feb0706fe6..e1c1c073ff 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConfiguration.java @@ -37,18 +37,18 @@ import com.google.devtools.common.options.OptionEffectTag; import com.google.devtools.common.options.OptionMetadataTag; import java.util.List; -/** - * Configuration for Protocol Buffer Libraries. - */ +/** Configuration for Protocol Buffer Libraries. */ +@AutoCodec @Immutable // This module needs to be exported to Skylark so it can be passed as a mandatory host/target // configuration fragment in aspect definitions. @SkylarkModule( - name = "proto", - category = SkylarkModuleCategory.CONFIGURATION_FRAGMENT, - doc = "A configuration fragment representing protocol buffers." + name = "proto", + category = SkylarkModuleCategory.CONFIGURATION_FRAGMENT, + doc = "A configuration fragment representing protocol buffers." ) public class ProtoConfiguration extends Fragment { + public static final ObjectCodec<ProtoConfiguration> CODEC = new ProtoConfiguration_AutoCodec(); /** Command line options. */ @AutoCodec(strategy = AutoCodec.Strategy.PUBLIC_FIELDS) @@ -225,6 +225,7 @@ public class ProtoConfiguration extends Fragment { private final ImmutableList<String> ccProtoLibrarySourceSuffixes; private final Options options; + @AutoCodec.Constructor public ProtoConfiguration(Options options) { this.protocOpts = ImmutableList.copyOf(options.protocOpts); this.ccProtoLibraryHeaderSuffixes = ImmutableList.copyOf(options.ccProtoLibraryHeaderSuffixes); @@ -272,5 +273,4 @@ public class ProtoConfiguration extends Fragment { public List<String> ccProtoLibrarySourceSuffixes() { return ccProtoLibrarySourceSuffixes; } - } diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PythonConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/python/PythonConfiguration.java index bc0555790f..83da07b243 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/python/PythonConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/rules/python/PythonConfiguration.java @@ -20,9 +20,10 @@ import com.google.devtools.build.lib.analysis.config.BuildOptions; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.EventHandler; +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.util.OS; import com.google.devtools.common.options.TriState; - import java.util.Arrays; import java.util.List; @@ -30,20 +31,24 @@ import java.util.List; * The configuration fragment containing information about the various pieces of infrastructure * needed to run Python compilations. */ +@AutoCodec @Immutable public class PythonConfiguration extends BuildConfiguration.Fragment { + public static final ObjectCodec<PythonConfiguration> CODEC = new PythonConfiguration_AutoCodec(); + private final boolean ignorePythonVersionAttribute; private final PythonVersion defaultPythonVersion; private final TriState buildPythonZip; private final boolean buildTransitiveRunfilesTrees; + @AutoCodec.Constructor PythonConfiguration( - PythonVersion pythonVersion, + PythonVersion defaultPythonVersion, boolean ignorePythonVersionAttribute, TriState buildPythonZip, boolean buildTransitiveRunfilesTrees) { this.ignorePythonVersionAttribute = ignorePythonVersionAttribute; - this.defaultPythonVersion = pythonVersion; + this.defaultPythonVersion = defaultPythonVersion; this.buildPythonZip = buildPythonZip; this.buildTransitiveRunfilesTrees = buildTransitiveRunfilesTrees; } diff --git a/src/test/java/com/google/devtools/build/lib/rules/apple/AppleConfigurationSerializationTest.java b/src/test/java/com/google/devtools/build/lib/rules/apple/AppleConfigurationSerializationTest.java index c0a69921fc..1de930eecd 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/apple/AppleConfigurationSerializationTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/apple/AppleConfigurationSerializationTest.java @@ -17,13 +17,8 @@ package com.google.devtools.build.lib.rules.apple; import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.analysis.config.BuildOptions; import com.google.devtools.build.lib.cmdline.Label; -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.testutils.AbstractObjectCodecTest; import com.google.devtools.common.options.OptionsParsingException; -import com.google.protobuf.CodedInputStream; -import com.google.protobuf.CodedOutputStream; -import java.io.IOException; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @@ -32,26 +27,7 @@ import org.junit.runners.JUnit4; public class AppleConfigurationSerializationTest extends AbstractObjectCodecTest<AppleConfiguration> { public AppleConfigurationSerializationTest() { - super( - new ObjectCodec<AppleConfiguration>() { - @Override - public void serialize(AppleConfiguration obj, CodedOutputStream codedOut) - throws SerializationException, IOException { - obj.serialize(codedOut); - } - - @Override - public AppleConfiguration deserialize(CodedInputStream codedIn) - throws SerializationException, IOException { - return AppleConfiguration.deserialize(codedIn); - } - - @Override - public Class<AppleConfiguration> getEncodedClass() { - return AppleConfiguration.class; - } - }, - subject()); + super(AppleConfiguration.CODEC, subject()); } private static AppleConfiguration[] subject() { |