diff options
author | 2018-06-19 09:47:01 -0700 | |
---|---|---|
committer | 2018-06-19 09:49:20 -0700 | |
commit | d7bec2e36820928a436de2ecedec2b41c9fb419f (patch) | |
tree | 98ec4b7f905a1cdf9a8e077200bbd8b64b7e3506 /src/main/java/com/google/devtools/build | |
parent | 9b0b987e5df9a7e5d5c7cc09ed37d5ccaa8eb54e (diff) |
Make some Apple objects more serializable: tag constants as constant, tag lambdas as Serializable.
PiperOrigin-RevId: 201191461
Diffstat (limited to 'src/main/java/com/google/devtools/build')
5 files changed, 49 insertions, 21 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ShellConfiguration.java b/src/main/java/com/google/devtools/build/lib/analysis/ShellConfiguration.java index a76290d06f..f2dd58db01 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/ShellConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/ShellConfiguration.java @@ -27,6 +27,7 @@ import com.google.devtools.build.lib.vfs.PathFragment; import com.google.devtools.common.options.Option; import com.google.devtools.common.options.OptionDocumentationCategory; import com.google.devtools.common.options.OptionEffectTag; +import java.io.Serializable; import javax.annotation.Nullable; /** A configuration fragment that tells where the shell is. */ @@ -83,7 +84,7 @@ public class ShellConfiguration extends BuildConfiguration.Fragment { /** A shell executable whose path is hard-coded. */ public static ShellExecutableProvider hardcodedShellExecutable(String shell) { - return (BuildOptions options) -> PathFragment.create(shell); + return (ShellExecutableProvider & Serializable) (options) -> PathFragment.create(shell); } /** The loader for {@link ShellConfiguration}. */ diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleToolchain.java b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleToolchain.java index 21e3ffba45..73917ca798 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleToolchain.java +++ b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleToolchain.java @@ -24,10 +24,12 @@ import com.google.devtools.build.lib.analysis.RuleDefinition; import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; +import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.Attribute.LabelLateBoundDefault; import com.google.devtools.build.lib.packages.RuleClass; import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType; import com.google.devtools.build.lib.skylarkbuildapi.apple.AppleToolchainApi; +import java.io.Serializable; /** * Utility class for resolving items for the Apple toolchain (such as common tool flags, and paths). @@ -131,12 +133,14 @@ public class AppleToolchain implements AppleToolchainApi<AppleConfiguration> { } /** The default label of the build-wide {@code xcode_config} configuration rule. */ - public static LabelLateBoundDefault<?> getXcodeConfigLabel(String toolsRepository) { + public static LabelLateBoundDefault<AppleConfiguration> getXcodeConfigLabel( + String toolsRepository) { return LabelLateBoundDefault.fromTargetConfiguration( AppleConfiguration.class, Label.parseAbsoluteUnchecked( toolsRepository + AppleCommandLineOptions.DEFAULT_XCODE_VERSION_CONFIG_LABEL), - (rule, attributes, appleConfig) -> appleConfig.getXcodeConfigLabel()); + (Attribute.LateBoundDefault.Resolver<AppleConfiguration, Label> & Serializable) + (rule, attributes, appleConfig) -> appleConfig.getXcodeConfigLabel()); } /** diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java index d3511024fa..c85b3703ce 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java @@ -34,6 +34,7 @@ import com.google.devtools.build.lib.analysis.actions.TemplateExpansionAction.Co import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; +import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.Attribute.LabelLateBoundDefault; import com.google.devtools.build.lib.packages.Attribute.LabelListLateBoundDefault; import com.google.devtools.build.lib.packages.ImplicitOutputsFunction.SafeImplicitOutputsFunction; @@ -42,11 +43,13 @@ import com.google.devtools.build.lib.rules.java.JavaCompilationArgs.ClasspathTyp import com.google.devtools.build.lib.rules.java.JavaConfiguration.JavaOptimizationMode; import com.google.devtools.build.lib.rules.java.JavaConfiguration.OneVersionEnforcementLevel; import com.google.devtools.build.lib.rules.java.proto.GeneratedExtensionRegistryProvider; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.lib.syntax.Type; import com.google.devtools.build.lib.util.FileType; import com.google.devtools.build.lib.util.Pair; import com.google.devtools.build.lib.vfs.PathFragment; import java.io.File; +import java.io.Serializable; import java.util.List; import java.util.stream.Collectors; import javax.annotation.Nullable; @@ -121,7 +124,8 @@ public interface JavaSemantics { // TODO(b/79239052): replace by //environment.getToolsLabel(JAVA_TOOLCHAIN_LABEL) // @bazel_tools//tools/defaults can not be resolved while DefaultPackage exists. Label.parseAbsoluteUnchecked(JAVA_TOOLCHAIN_LABEL), - (rule, attributes, javaConfig) -> javaConfig.getToolchainLabel()); + (Attribute.LateBoundDefault.Resolver<JavaConfiguration, Label> & Serializable) + (rule, attributes, javaConfig) -> javaConfig.getToolchainLabel()); } /** @@ -142,7 +146,8 @@ public interface JavaSemantics { return LabelLateBoundDefault.fromTargetConfiguration( JavaConfiguration.class, env.getToolsLabel(JavaImplicitAttributes.JDK_LABEL), - (rule, attributes, configuration) -> configuration.getRuntimeLabel()); + (Attribute.LateBoundDefault.Resolver<JavaConfiguration, Label> & Serializable) + (rule, attributes, configuration) -> configuration.getRuntimeLabel()); } /** Implementation for the :host_jdk attribute. */ @@ -150,13 +155,15 @@ public interface JavaSemantics { return LabelLateBoundDefault.fromHostConfiguration( JavaConfiguration.class, env.getToolsLabel(JavaImplicitAttributes.HOST_JDK_LABEL), - (rule, attributes, configuration) -> configuration.getRuntimeLabel()); + (Attribute.LateBoundDefault.Resolver<JavaConfiguration, Label> & Serializable) + (rule, attributes, configuration) -> configuration.getRuntimeLabel()); } /** * Implementation for the :java_launcher attribute. Note that the Java launcher is disabled by * default, so it returns null for the configuration-independent default value. */ + @AutoCodec LabelLateBoundDefault<JavaConfiguration> JAVA_LAUNCHER = LabelLateBoundDefault.fromTargetConfiguration( JavaConfiguration.class, @@ -180,24 +187,28 @@ public interface JavaSemantics { return javaConfig.getJavaLauncherLabel(); }); + @AutoCodec LabelListLateBoundDefault<JavaConfiguration> JAVA_PLUGINS = LabelListLateBoundDefault.fromTargetConfiguration( JavaConfiguration.class, (rule, attributes, javaConfig) -> ImmutableList.copyOf(javaConfig.getPlugins())); /** Implementation for the :proguard attribute. */ + @AutoCodec LabelLateBoundDefault<JavaConfiguration> PROGUARD = LabelLateBoundDefault.fromTargetConfiguration( JavaConfiguration.class, null, (rule, attributes, javaConfig) -> javaConfig.getProguardBinary()); + @AutoCodec LabelListLateBoundDefault<JavaConfiguration> EXTRA_PROGUARD_SPECS = LabelListLateBoundDefault.fromTargetConfiguration( JavaConfiguration.class, (rule, attributes, javaConfig) -> ImmutableList.copyOf(javaConfig.getExtraProguardSpecs())); + @AutoCodec LabelListLateBoundDefault<JavaConfiguration> BYTECODE_OPTIMIZERS = LabelListLateBoundDefault.fromTargetConfiguration( JavaConfiguration.class, diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java index 4f1b1a5c93..e28151d34d 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java @@ -46,6 +46,7 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.packages.AspectDefinition; import com.google.devtools.build.lib.packages.AspectParameters; import com.google.devtools.build.lib.packages.Attribute.LabelLateBoundDefault; +import com.google.devtools.build.lib.packages.Attribute.LateBoundDefault.Resolver; import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.packages.NativeAspectClass; import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; @@ -76,8 +77,10 @@ import com.google.devtools.build.lib.rules.proto.ProtoSourcesProvider; import com.google.devtools.build.lib.rules.proto.ProtoSupportDataProvider; import com.google.devtools.build.lib.rules.proto.SupportData; import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.lib.util.FileType; import com.google.devtools.build.lib.vfs.PathFragment; +import java.io.Serializable; import java.util.List; import java.util.stream.Collectors; @@ -88,11 +91,13 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF private static final ExtraCompileArgs EXTRA_COMPILE_ARGS = new ExtraCompileArgs( "-fno-strict-overflow"); - private static LabelLateBoundDefault<?> getProtoToolchainLabel(String defaultValue) { + private static LabelLateBoundDefault<ProtoConfiguration> getProtoToolchainLabel( + String defaultValue) { return LabelLateBoundDefault.fromTargetConfiguration( ProtoConfiguration.class, Label.parseAbsoluteUnchecked(defaultValue), - (rule, attributes, protoConfig) -> protoConfig.protoToolchainForJ2objc()); + (Resolver<ProtoConfiguration, Label> & Serializable) + (rule, attributes, protoConfig) -> protoConfig.protoToolchainForJ2objc()); } private static final ImmutableList<Attribute> JAVA_DEPENDENT_ATTRIBUTES = @@ -107,7 +112,8 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF private static final String J2OBJC_PROTO_TOOLCHAIN_ATTR = ":j2objc_proto_toolchain"; - private static final LabelLateBoundDefault<?> DEAD_CODE_REPORT = + @AutoCodec @AutoCodec.VisibleForSerialization + static final LabelLateBoundDefault<?> DEAD_CODE_REPORT = LabelLateBoundDefault.fromTargetConfiguration( J2ObjcConfiguration.class, null, diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java index f510105dd6..721209cf40 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java @@ -40,6 +40,7 @@ import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.config.HostTransition; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.collect.nestedset.NestedSet; +import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.Attribute.LabelLateBoundDefault; import com.google.devtools.build.lib.packages.BuildType; import com.google.devtools.build.lib.packages.ImplicitOutputsFunction.SafeImplicitOutputsFunction; @@ -56,9 +57,11 @@ import com.google.devtools.build.lib.rules.cpp.CppConfiguration; import com.google.devtools.build.lib.rules.cpp.CppModuleMap.UmbrellaHeaderStrategy; import com.google.devtools.build.lib.rules.cpp.CppRuleClasses; import com.google.devtools.build.lib.rules.proto.ProtoSourceFileBlacklist; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.lib.syntax.Type; import com.google.devtools.build.lib.util.FileType; import com.google.devtools.build.lib.util.FileTypeSet; +import java.io.Serializable; /** * Shared rule classes and associated utility code for Objective-C rules. @@ -158,6 +161,7 @@ public class ObjcRuleClasses { * * <p>TODO(cpeyser): Use AppleCcToolchain instead of CcToolchain once released. */ + @AutoCodec public static final LabelLateBoundDefault<?> APPLE_TOOLCHAIN = LabelLateBoundDefault.fromTargetConfiguration( CppConfiguration.class, @@ -613,6 +617,15 @@ public class ObjcRuleClasses { static final ImmutableSet<String> ALLOWED_CC_DEPS_RULE_CLASSES = ImmutableSet.of("cc_library", "cc_inc_library"); + @AutoCodec @AutoCodec.VisibleForSerialization + static final Attribute.LateBoundDefault<ObjcConfiguration, Label> SDK_LATE_BOUND_DEFAULT = + LabelLateBoundDefault.fromTargetConfiguration( + ObjcConfiguration.class, + null, + // Apple SDKs are currently only used by ObjC header thinning feature + (rule, attributes, objcConfig) -> + objcConfig.useExperimentalHeaderThinning() ? objcConfig.getAppleSdk() : null); + @Override public RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment env) { return builder @@ -704,18 +717,11 @@ public class ObjcRuleClasses { LabelLateBoundDefault.fromTargetConfiguration( ObjcConfiguration.class, env.getToolsLabel("//tools/objc:header_scanner"), - (rule, attributes, objcConfig) -> objcConfig.getObjcHeaderScannerTool()))) - .add( - attr(APPLE_SDK_ATTRIBUTE, LABEL) - .value( - LabelLateBoundDefault.fromTargetConfiguration( - ObjcConfiguration.class, - null, - // Apple SDKs are currently only used by ObjC header thinning feature - (rule, attributes, objcConfig) -> - objcConfig.useExperimentalHeaderThinning() - ? objcConfig.getAppleSdk() - : null))) + (Attribute.LateBoundDefault.Resolver<ObjcConfiguration, Label> + & Serializable) + (rule, attributes, objcConfig) -> + objcConfig.getObjcHeaderScannerTool()))) + .add(attr(APPLE_SDK_ATTRIBUTE, LABEL).value(SDK_LATE_BOUND_DEFAULT)) .build(); } @Override |