aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgValue.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgValue.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgValue.java84
1 files changed, 22 insertions, 62 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgValue.java
index 7397a7a918..d864c024d3 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgValue.java
@@ -13,22 +13,20 @@
// limitations under the License.
package com.google.devtools.build.lib.skyframe;
-import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Interner;
import com.google.devtools.build.lib.cmdline.RepositoryName;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.Order;
+import com.google.devtools.build.lib.concurrent.BlazeInterners;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.vfs.RootedPath;
-import com.google.devtools.build.skyframe.LegacySkyKey;
-import com.google.devtools.build.skyframe.SkyKey;
+import com.google.devtools.build.skyframe.SkyFunctionName;
import com.google.devtools.build.skyframe.SkyValue;
-import java.io.Serializable;
-import java.util.Objects;
/**
* This value represents the result of looking up all the packages under a given package path root,
@@ -54,81 +52,43 @@ public class RecursivePkgValue implements SkyValue {
return new RecursivePkgValue(packages.build());
}
- /**
- * Create a transitive package lookup request.
- */
+ /** Create a transitive package lookup request. */
@ThreadSafe
- public static SkyKey key(RepositoryName repositoryName, RootedPath rootedPath,
+ public static Key key(
+ RepositoryName repositoryName,
+ RootedPath rootedPath,
ImmutableSet<PathFragment> excludedPaths) {
- return LegacySkyKey.create(
- SkyFunctions.RECURSIVE_PKG, new RecursivePkgKey(repositoryName, rootedPath, excludedPaths));
+ return Key.create(repositoryName, rootedPath, excludedPaths);
}
public NestedSet<String> getPackages() {
return packages;
}
- /**
- * A RecursivePkgKey is a tuple of a {@link RootedPath}, {@code rootedPath}, defining the
- * directory to recurse beneath in search of packages, and an {@link ImmutableSet} of {@link
- * PathFragment}s, {@code excludedPaths}, relative to {@code rootedPath.getRoot}, defining the set
- * of subdirectories strictly beneath {@code rootedPath} to skip.
- *
- * <p>Throws {@link IllegalArgumentException} if {@code excludedPaths} contains any paths that are
- * equal to {@code rootedPath} or that are not beneath {@code rootedPath}.
- */
+ @AutoCodec.VisibleForSerialization
@AutoCodec
- @ThreadSafe
- public static final class RecursivePkgKey implements Serializable {
- private final RepositoryName repositoryName;
- private final RootedPath rootedPath;
- private final ImmutableSet<PathFragment> excludedPaths;
+ static class Key extends RecursivePkgSkyKey {
+ private static final Interner<Key> interner = BlazeInterners.newWeakInterner();
- @AutoCodec.Instantiator
- public RecursivePkgKey(
+ private Key(
RepositoryName repositoryName,
RootedPath rootedPath,
ImmutableSet<PathFragment> excludedPaths) {
- PathFragment.checkAllPathsAreUnder(excludedPaths, rootedPath.getRootRelativePath());
- Preconditions.checkState(!repositoryName.isDefault());
- this.repositoryName = repositoryName;
- this.rootedPath = Preconditions.checkNotNull(rootedPath);
- this.excludedPaths = Preconditions.checkNotNull(excludedPaths);
+ super(repositoryName, rootedPath, excludedPaths);
}
- public RepositoryName getRepository() {
- return repositoryName;
- }
-
- public RootedPath getRootedPath() {
- return rootedPath;
- }
-
- public ImmutableSet<PathFragment> getExcludedPaths() {
- return excludedPaths;
- }
-
- @Override
- public String toString() {
- return "rootedPath=" + rootedPath + ", excludedPaths=<omitted>";
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (!(o instanceof RecursivePkgKey)) {
- return false;
- }
-
- RecursivePkgKey that = (RecursivePkgKey) o;
- return excludedPaths.equals(that.excludedPaths) && rootedPath.equals(that.rootedPath);
+ @AutoCodec.VisibleForSerialization
+ @AutoCodec.Instantiator
+ static Key create(
+ RepositoryName repositoryName,
+ RootedPath rootedPath,
+ ImmutableSet<PathFragment> excludedPaths) {
+ return interner.intern(new Key(repositoryName, rootedPath, excludedPaths));
}
@Override
- public int hashCode() {
- return Objects.hash(rootedPath, excludedPaths);
+ public SkyFunctionName functionName() {
+ return SkyFunctions.RECURSIVE_PKG;
}
}
}