aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/syntax
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/syntax')
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/Environment.java53
1 files changed, 26 insertions, 27 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Environment.java b/src/main/java/com/google/devtools/build/lib/syntax/Environment.java
index 38cbb7c35f..4bec1c6012 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/Environment.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/Environment.java
@@ -29,12 +29,12 @@ import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.lib.util.SpellChecker;
import com.google.devtools.common.options.Options;
-import java.io.Serializable;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.Map;
+import java.util.Objects;
import java.util.Set;
import java.util.TreeSet;
import javax.annotation.Nullable;
@@ -295,38 +295,20 @@ public final class Environment implements Freezable {
}
}
- // TODO(bazel-team): Eliminate this hack around Java serialization. The bindings are currently
- // factored out into BaseExtension, which is non-Serializable, and which has a default constructor
- // that does not initialize any bindings. This means that when Extension is Java-serialized, all
- // the bindings are simply lost.
- private static class BaseExtension {
-
- protected final ImmutableMap<String, Object> bindings;
-
- BaseExtension(Map<String, Object> bindings) {
- this.bindings = ImmutableMap.copyOf(bindings);
- }
-
- // Hack to "allow" java serialization.
- BaseExtension() {
- this.bindings = ImmutableMap.of();
- }
- }
-
/** An Extension to be imported with load() into a BUILD or .bzl file. */
@Immutable
- public static final class Extension extends BaseExtension implements Serializable {
+ public static final class Extension {
+
+ private final ImmutableMap<String, Object> bindings;
/**
* Cached hash code for the transitive content of this {@code Extension} and its dependencies.
*/
private final String transitiveContentHashCode;
- /**
- * Constructs with the given hash code and bindings.
- */
- public Extension(Map<String, Object> bindings, String transitiveContentHashCode) {
- super(bindings);
+ /** Constructs with the given hash code and bindings. */
+ public Extension(ImmutableMap<String, Object> bindings, String transitiveContentHashCode) {
+ this.bindings = bindings;
this.transitiveContentHashCode = transitiveContentHashCode;
}
@@ -335,8 +317,7 @@ public final class Environment implements Freezable {
* and that {@code Environment}'s transitive hash code.
*/
public Extension(Environment env) {
- super(env.globalFrame.bindings);
- this.transitiveContentHashCode = env.getTransitiveContentHashCode();
+ this(ImmutableMap.copyOf(env.globalFrame.bindings), env.getTransitiveContentHashCode());
}
public String getTransitiveContentHashCode() {
@@ -346,6 +327,24 @@ public final class Environment implements Freezable {
public ImmutableMap<String, Object> getBindings() {
return bindings;
}
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (!(obj instanceof Extension)) {
+ return false;
+ }
+ Extension other = (Extension) obj;
+ return transitiveContentHashCode.equals(other.getTransitiveContentHashCode())
+ && bindings.equals(other.getBindings());
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(bindings, transitiveContentHashCode);
+ }
}
/**