aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar janakr <janakr@google.com>2018-06-19 10:30:15 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-06-19 10:31:48 -0700
commit123d78472da1428298e8300e6b3de469e25e3af1 (patch)
treecdf0a29414ea299624e9ece95d4bbe2bb7ac5821
parent191238f51dc9575c90baa20dd7ee4fd2b8cf2bec (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
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/Attribute.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlag.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/python/PyCommon.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/SkylarkUtils.java19
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";