diff options
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.java | 84 |
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; } } } |