aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build
diff options
context:
space:
mode:
authorGravatar janakr <janakr@google.com>2018-06-19 09:47:01 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-06-19 09:49:20 -0700
commitd7bec2e36820928a436de2ecedec2b41c9fb419f (patch)
tree98ec4b7f905a1cdf9a8e077200bbd8b64b7e3506 /src/main/java/com/google/devtools/build
parent9b0b987e5df9a7e5d5c7cc09ed37d5ccaa8eb54e (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')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/ShellConfiguration.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/AppleToolchain.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java17
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java30
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