diff --git a/src/main/java/com/google/devtools/build/lib/concurrent/BlazeInterners.java b/src/main/java/com/google/devtools/build/lib/concurrent/BlazeInterners.java
index 7c9d6dc794c6a2..0546f48880db41 100644
--- a/src/main/java/com/google/devtools/build/lib/concurrent/BlazeInterners.java
+++ b/src/main/java/com/google/devtools/build/lib/concurrent/BlazeInterners.java
@@ -35,6 +35,12 @@ private static InternerBuilder setConcurrencyLevel(InternerBuilder builder) {
return builder.concurrencyLevel(CONCURRENCY_LEVEL);
}
+ /**
+ * Creates an interner which retains a weak reference to each instance it has interned.
+ *
+ *
It is preferred to use {@code SkyKey#SkyKeyInterner} instead for interning {@code SkyKey}
+ * types.
+ */
public static Interner newWeakInterner() {
return setConcurrencyLevel(Interners.newBuilder().weak()).build();
}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFileValue.java b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFileValue.java
index dac3b3b76bc835..efa5166209d79a 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFileValue.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFileValue.java
@@ -16,9 +16,7 @@
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Interner;
import com.google.devtools.build.lib.cmdline.RepositoryName;
-import com.google.devtools.build.lib.concurrent.BlazeInterners;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.vfs.RootedPath;
@@ -43,7 +41,7 @@ public class WorkspaceFileValue implements SkyValue {
@Immutable
@AutoCodec
public static class WorkspaceFileKey implements SkyKey {
- private static final Interner interner = BlazeInterners.newWeakInterner();
+ private static final SkyKeyInterner interner = SkyKey.newInterner();
private final RootedPath path;
private final int idx;
@@ -93,6 +91,11 @@ public int hashCode() {
public String toString() {
return path + ", " + idx;
}
+
+ @Override
+ public SkyKeyInterner getSkyKeyInterner() {
+ return interner;
+ }
}
private final Package pkg;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/AspectKeyCreator.java b/src/main/java/com/google/devtools/build/lib/skyframe/AspectKeyCreator.java
index fc34f04011b036..fc4929ba9e8276 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/AspectKeyCreator.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/AspectKeyCreator.java
@@ -16,16 +16,15 @@
import com.google.common.base.Objects;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Interner;
import com.google.devtools.build.lib.actions.ActionLookupKey;
import com.google.devtools.build.lib.analysis.config.BuildConfigurationValue;
import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.concurrent.BlazeInterners;
import com.google.devtools.build.lib.packages.AspectClass;
import com.google.devtools.build.lib.packages.AspectDescriptor;
import com.google.devtools.build.lib.packages.AspectParameters;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.skyframe.SkyFunctionName;
+import com.google.devtools.build.skyframe.SkyKey;
import java.util.Comparator;
import javax.annotation.Nullable;
@@ -85,7 +84,7 @@ public final int hashCode() {
/** Represents an aspect applied to a particular target. */
@AutoCodec
public static final class AspectKey extends AspectBaseKey {
- private static final Interner interner = BlazeInterners.newWeakInterner();
+ private static final SkyKeyInterner interner = SkyKey.newInterner();
private final ImmutableList baseKeys;
private final AspectDescriptor aspectDescriptor;
@@ -234,6 +233,11 @@ AspectKey withLabel(Label label) {
newBaseKeys.build(),
aspectDescriptor);
}
+
+ @Override
+ public SkyKeyInterner getSkyKeyInterner() {
+ return interner;
+ }
}
/**
@@ -242,7 +246,7 @@ AspectKey withLabel(Label label) {
*/
@AutoCodec
public static final class TopLevelAspectsKey extends AspectBaseKey {
- private static final Interner interner = BlazeInterners.newWeakInterner();
+ private static final SkyKeyInterner interner = SkyKey.newInterner();
private final ImmutableList topLevelAspectsClasses;
private final Label targetLabel;
@@ -324,5 +328,10 @@ public boolean equals(Object o) {
&& Objects.equal(topLevelAspectsClasses, that.topLevelAspectsClasses)
&& Objects.equal(topLevelAspectsParameters, that.topLevelAspectsParameters);
}
+
+ @Override
+ public SkyKeyInterner getSkyKeyInterner() {
+ return interner;
+ }
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationKey.java b/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationKey.java
index c004ebb6236b5f..19f338ce64ec22 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationKey.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BuildConfigurationKey.java
@@ -15,9 +15,7 @@
package com.google.devtools.build.lib.skyframe;
import com.google.common.base.Preconditions;
-import com.google.common.collect.Interner;
import com.google.devtools.build.lib.analysis.config.BuildOptions;
-import com.google.devtools.build.lib.concurrent.BlazeInterners;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.skyframe.SkyFunctionName;
import com.google.devtools.build.skyframe.SkyKey;
@@ -57,7 +55,7 @@ public static BuildConfigurationKey withoutPlatformMapping(BuildOptions options)
return interner.intern(new BuildConfigurationKey(options));
}
- private static final Interner interner = BlazeInterners.newWeakInterner();
+ private static final SkyKeyInterner interner = SkyKey.newInterner();
private final BuildOptions options;
@@ -96,4 +94,9 @@ public String toString() {
// This format is depended on by integration tests.
return "BuildConfigurationKey[" + options.checksum() + "]";
}
+
+ @Override
+ public SkyKeyInterner getSkyKeyInterner() {
+ return interner;
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionValue.java
index 4c826138795816..266b67c2cc45f7 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionValue.java
@@ -14,7 +14,6 @@
package com.google.devtools.build.lib.skyframe;
import com.google.common.base.Preconditions;
-import com.google.common.collect.Interner;
import com.google.devtools.build.lib.actions.ActionLookupKey;
import com.google.devtools.build.lib.actions.Actions.GeneratingActions;
import com.google.devtools.build.lib.actions.BasicActionLookupValue;
@@ -22,9 +21,9 @@
import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoKey;
import com.google.devtools.build.lib.analysis.config.BuildConfigurationValue;
import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.concurrent.BlazeInterners;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.skyframe.SkyFunctionName;
+import com.google.devtools.build.skyframe.SkyKey;
import java.util.Objects;
import javax.annotation.Nullable;
@@ -58,8 +57,7 @@ public static BuildInfoKeyAndConfig key(
/** Key for BuildInfoCollectionValues. */
@AutoCodec
public static final class BuildInfoKeyAndConfig extends ActionLookupKey {
- private static final Interner keyInterner =
- BlazeInterners.newWeakInterner();
+ private static final SkyKeyInterner keyInterner = SkyKey.newInterner();
private final BuildInfoKey infoKey;
private final BuildConfigurationKey configKey;
@@ -114,5 +112,10 @@ public boolean equals(Object other) {
return Objects.equals(this.infoKey, that.infoKey)
&& Objects.equals(this.configKey, that.configKey);
}
+
+ @Override
+ public SkyKeyInterner getSkyKeyInterner() {
+ return keyInterner;
+ }
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BuildTopLevelAspectsDetailsFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/BuildTopLevelAspectsDetailsFunction.java
index aac6b4d8984b7a..d2f5dd5c0aef81 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BuildTopLevelAspectsDetailsFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BuildTopLevelAspectsDetailsFunction.java
@@ -19,10 +19,8 @@
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Interner;
import com.google.devtools.build.lib.analysis.AspectCollection;
import com.google.devtools.build.lib.analysis.AspectCollection.AspectCycleOnPathException;
-import com.google.devtools.build.lib.concurrent.BlazeInterners;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.packages.Aspect;
import com.google.devtools.build.lib.packages.AspectClass;
@@ -244,8 +242,8 @@ public ImmutableList getUsedAspects() {
/** {@link SkyKey} for building top-level aspects details. */
@AutoCodec
static final class BuildTopLevelAspectsDetailsKey implements SkyKey {
- private static final Interner interner =
- BlazeInterners.newWeakInterner();
+ private static final SkyKeyInterner interner =
+ SkyKey.newInterner();
private final ImmutableList topLevelAspectsClasses;
private final ImmutableMap topLevelAspectsParameters;
@@ -311,6 +309,11 @@ public String toString() {
.add("topLevelAspectsParameters", topLevelAspectsParameters)
.toString();
}
+
+ @Override
+ public SkyKeyInterner getSkyKeyInterner() {
+ return interner;
+ }
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BzlCompileValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/BzlCompileValue.java
index c599e7e62de569..02e52f3b6d90c8 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BzlCompileValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BzlCompileValue.java
@@ -15,9 +15,7 @@
package com.google.devtools.build.lib.skyframe;
import com.google.common.base.Preconditions;
-import com.google.common.collect.Interner;
import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.concurrent.BlazeInterners;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant;
import com.google.devtools.build.lib.vfs.Root;
@@ -132,8 +130,6 @@ public static BzlCompileValue withProgram(Program prog, byte[] digest) {
return new Success(prog, digest);
}
- private static final Interner keyInterner = BlazeInterners.newWeakInterner();
-
/** Types of bzl files we may encounter. */
enum Kind {
/** A regular .bzl file loaded on behalf of a BUILD or WORKSPACE file. */
@@ -159,6 +155,8 @@ enum Kind {
/** SkyKey for retrieving a compiled .bzl program. */
@AutoCodec
public static class Key implements SkyKey {
+ private static final SkyKeyInterner interner = SkyKey.newInterner();
+
/** The root in which the .bzl file is to be found. Null for EMPTY_PRELUDE. */
@Nullable final Root root;
@@ -180,7 +178,7 @@ private Key(Root root, Label label, Kind kind) {
@AutoCodec.VisibleForSerialization
@AutoCodec.Instantiator
static Key create(Root root, Label label, Kind kind) {
- return keyInterner.intern(new Key(root, label, kind));
+ return interner.intern(new Key(root, label, kind));
}
/** Returns whether this key is for a {@code @_builtins} .bzl file. */
@@ -225,6 +223,11 @@ public SkyFunctionName functionName() {
public String toString() {
return String.format("%s:[%s]%s", functionName(), root, label);
}
+
+ @Override
+ public SkyKeyInterner getSkyKeyInterner() {
+ return interner;
+ }
}
/** Constructs a key for loading a regular (non-prelude) .bzl. */
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadValue.java
index 225898a3135f7b..d78c26a780809a 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadValue.java
@@ -17,9 +17,7 @@
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.MoreObjects;
-import com.google.common.collect.Interner;
import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.concurrent.BlazeInterners;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.packages.BzlVisibility;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
@@ -27,6 +25,7 @@
import com.google.devtools.build.lib.vfs.RootedPath;
import com.google.devtools.build.skyframe.SkyFunctionName;
import com.google.devtools.build.skyframe.SkyKey;
+import com.google.devtools.build.skyframe.SkyKey.SkyKeyInterner;
import com.google.devtools.build.skyframe.SkyValue;
import java.util.Objects;
import net.starlark.java.eval.Module;
@@ -70,7 +69,7 @@ public BzlVisibility getBzlVisibility() {
return bzlVisibility;
}
- private static final Interner keyInterner = BlazeInterners.newWeakInterner();
+ private static final SkyKeyInterner keyInterner = SkyKey.newInterner();
/** SkyKey for a Starlark load. */
public abstract static class Key implements SkyKey {
@@ -157,6 +156,11 @@ protected final MoreObjects.ToStringHelper toStringHelper() {
public String toString() {
return toStringHelper().toString();
}
+
+ @Override
+ public SkyKeyInterner getSkyKeyInterner() {
+ return keyInterner;
+ }
}
/** A key for loading a .bzl during package loading (BUILD evaluation). */
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ClientEnvironmentFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ClientEnvironmentFunction.java
index 60bc5ad34481b0..d95edd94b142a7 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ClientEnvironmentFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ClientEnvironmentFunction.java
@@ -14,8 +14,6 @@
package com.google.devtools.build.lib.skyframe;
-import com.google.common.collect.Interner;
-import com.google.devtools.build.lib.concurrent.BlazeInterners;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.skyframe.AbstractSkyKey;
import com.google.devtools.build.skyframe.SkyFunction;
@@ -35,7 +33,7 @@ public static Key key(String keyString) {
@AutoCodec.VisibleForSerialization
@AutoCodec
static class Key extends AbstractSkyKey {
- private static final Interner interner = BlazeInterners.newWeakInterner();
+ private static final SkyKeyInterner interner = SkyKey.newInterner();
private Key(String arg) {
super(arg);
@@ -51,6 +49,11 @@ static Key create(String arg) {
public SkyFunctionName functionName() {
return SkyFunctions.CLIENT_ENVIRONMENT_VARIABLE;
}
+
+ @Override
+ public SkyKeyInterner getSkyKeyInterner() {
+ return interner;
+ }
}
private final AtomicReference