aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar shahan <shahan@google.com>2018-01-05 14:16:54 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-01-05 14:19:25 -0800
commit13b000c575e3fc86bfd0ccce8db89740980d5f15 (patch)
tree40cb8619155087234b8713bd04b7f535b0067da9
parent1ade18a652900410f632b2b9f47e6456c522a2e4 (diff)
Codecs for all non-test Fragment subclasses (except CppConfiguration, handled separately).
PiperOrigin-RevId: 180974083
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/BazelConfiguration.java16
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPythonConfiguration.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidConfiguration.java77
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java24
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/swift/SwiftConfiguration.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagConfiguration.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaConfiguration.java77
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/Jvm.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcConfiguration.java40
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java57
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConfiguration.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/python/PythonConfiguration.java11
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/apple/AppleConfigurationSerializationTest.java26
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() {