aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgValue.java
diff options
context:
space:
mode:
authorGravatar janakr <janakr@google.com>2018-03-02 17:48:57 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-03-02 17:51:19 -0800
commit5fb2a487e53cc3d80e3654d5b63d062f7f70588b (patch)
tree82b23b68d09c451a8950468668150acdf89533e9 /src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgValue.java
parent46f7106d0b20ae0ba245c3609545600ae379cea4 (diff)
Replace LegacySkyKey by AbstractSkyKey or custom SkyKeys. AbstractSkyKey doesn't save memory in the 32-bit case, but makes it easier for people to see how many SkyKeys we have.
There's some unnecessary interning in tests, but it was easier to copypasta and doesn't harm anything, I think. PiperOrigin-RevId: 187694309
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;
}
}
}