diff options
author | janakr <janakr@google.com> | 2018-06-19 10:30:15 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-06-19 10:31:48 -0700 |
commit | 123d78472da1428298e8300e6b3de469e25e3af1 (patch) | |
tree | cdf0a29414ea299624e9ece95d4bbe2bb7ac5821 | |
parent | 191238f51dc9575c90baa20dd7ee4fd2b8cf2bec (diff) |
Make things easier to serialize: make constants constant, tag some lambdas. Get rid of a useless tag, because the Function being tagged is a concrete class, so won't be serializable. Will deal with it in a follow-up. Implement equality for BazelInfo.
PiperOrigin-RevId: 201199255
5 files changed, 37 insertions, 5 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java index bb39ec5ee2..323f7152a8 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java @@ -28,6 +28,7 @@ import com.google.devtools.build.lib.actions.CommandLineItemSimpleFormatter; import com.google.devtools.build.lib.actions.ParamFileInfo; import com.google.devtools.build.lib.actions.ParameterFile.ParameterFileType; import com.google.devtools.build.lib.actions.RunfilesSupplier; +import com.google.devtools.build.lib.actions.extra.ExtraActionInfo; import com.google.devtools.build.lib.actions.extra.SpawnInfo; import com.google.devtools.build.lib.analysis.CommandHelper; import com.google.devtools.build.lib.analysis.FilesToRunProvider; @@ -45,6 +46,7 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.packages.TargetUtils; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.lib.skylarkbuildapi.CommandLineArgsApi; import com.google.devtools.build.lib.skylarkbuildapi.FileApi; import com.google.devtools.build.lib.skylarkbuildapi.SkylarkActionFactoryApi; @@ -63,6 +65,7 @@ import com.google.devtools.build.lib.syntax.SkylarkMutable; import com.google.devtools.build.lib.syntax.SkylarkNestedSet; import com.google.devtools.build.lib.syntax.SkylarkSemantics; import com.google.devtools.build.lib.vfs.PathFragment; +import com.google.protobuf.GeneratedMessage; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; @@ -143,11 +146,15 @@ public class SkylarkActionFactory implements SkylarkActionFactoryApi { inputSet, ImmutableList.of(PseudoAction.getDummyOutput(ruleContext)), mnemonic, - SpawnInfo.spawnInfo, + SPAWN_INFO, SpawnInfo.newBuilder().build()); ruleContext.registerAction(action); } + @AutoCodec @AutoCodec.VisibleForSerialization + static final GeneratedMessage.GeneratedExtension<ExtraActionInfo, SpawnInfo> SPAWN_INFO = + SpawnInfo.spawnInfo; + @Override public void write(FileApi output, Object content, Boolean isExecutable) throws EvalException { context.checkMutable("actions.write"); diff --git a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java index b22a3d69bc..91a26c2f1e 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java +++ b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java @@ -1061,9 +1061,12 @@ public final class Attribute implements Comparable<Attribute> { * dependencies through this attribute. */ public Builder<TYPE> aspect(NativeAspectClass aspect) { - return this.aspect(aspect, input -> AspectParameters.EMPTY); + return this.aspect(aspect, EMPTY_FUNCTION); } + @AutoCodec @AutoCodec.VisibleForSerialization + static final Function<Rule, AspectParameters> EMPTY_FUNCTION = input -> AspectParameters.EMPTY; + public Builder<TYPE> aspect(SkylarkDefinedAspect skylarkAspect, Location location) throws EvalException { SkylarkRuleAspect skylarkRuleAspect = new SkylarkRuleAspect(skylarkAspect); diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlag.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlag.java index dd34a57b44..4326d4a23c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlag.java +++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlag.java @@ -39,7 +39,6 @@ import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.Attribute.ComputedDefault; import com.google.devtools.build.lib.packages.AttributeMap; import com.google.devtools.build.lib.syntax.Printer; -import java.io.Serializable; import java.util.List; import java.util.Optional; @@ -102,7 +101,7 @@ public class ConfigFeatureFlag implements RuleConfiguredTargetFactory { List<String> specifiedValues = ruleContext.attributes().get("allowed_values", STRING_LIST); ImmutableSet<String> values = ImmutableSet.copyOf(specifiedValues); - Predicate<String> isValidValue = (Predicate<String> & Serializable) Predicates.in(values); + Predicate<String> isValidValue = Predicates.in(values); if (values.size() != specifiedValues.size()) { ImmutableMultiset<String> groupedValues = ImmutableMultiset.copyOf(specifiedValues); ImmutableList.Builder<String> duplicates = new ImmutableList.Builder<String>(); diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java index f0c8615dbf..158233a24c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java @@ -46,6 +46,7 @@ import com.google.devtools.build.lib.packages.Info; import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.packages.StructProvider; import com.google.devtools.build.lib.rules.cpp.CppFileTypes; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.lib.syntax.EvalUtils; import com.google.devtools.build.lib.syntax.SkylarkNestedSet; @@ -298,10 +299,13 @@ public final class PyCommon { NestedSetBuilder.wrap(Order.STABLE_ORDER, Iterables.concat(sources, dependencies)), ImmutableList.of(output), "Python", - PythonInfo.pythonInfo, + PYTHON_INFO, info); } + @AutoCodec @AutoCodec.VisibleForSerialization + static final GeneratedExtension<ExtraActionInfo, PythonInfo> PYTHON_INFO = PythonInfo.pythonInfo; + private void addSourceFiles(NestedSetBuilder<Artifact> builder, Iterable<Artifact> artifacts) { Preconditions.checkState(convertedFiles == null); if (sourcesVersion == PythonVersion.PY2 && version == PythonVersion.PY3) { diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkUtils.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkUtils.java index 4f6c0463e7..cc92fd7928 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkUtils.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkUtils.java @@ -15,6 +15,7 @@ package com.google.devtools.build.lib.syntax; import com.google.common.collect.ImmutableMap; +import java.util.Objects; /** This class contains Bazel-specific functions to extend or interoperate with Skylark. */ public final class SkylarkUtils { @@ -23,6 +24,24 @@ public final class SkylarkUtils { private static class BazelInfo { String toolsRepository; ImmutableMap<String, Class<?>> fragmentNameToClass; + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof BazelInfo)) { + return false; + } + BazelInfo that = (BazelInfo) obj; + return Objects.equals(this.toolsRepository, that.toolsRepository) + && Objects.equals(this.fragmentNameToClass, that.fragmentNameToClass); + } + + @Override + public int hashCode() { + return Objects.hash(toolsRepository, fragmentNameToClass); + } } private static final String BAZEL_INFO_KEY = "$bazel"; |