Merge `EvaluationGraph`, `DeletableGraph` with `ProcessableGraph`.
`ProcessableGraph` is the only interface extends `EvaluationGraph`, `EvaluationGraph` is the only interface extends `DeletableGraph`, it is not necessary to keep all three.
PiperOrigin-RevId: 423079933
diff --git a/src/main/java/com/google/devtools/build/skyframe/DeletableGraph.java b/src/main/java/com/google/devtools/build/skyframe/DeletableGraph.java
deleted file mode 100644
index d091f08..0000000
--- a/src/main/java/com/google/devtools/build/skyframe/DeletableGraph.java
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.skyframe;
-
-import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
-
-/**
- * Interface for classes that need to remove values from graph. Currently just used by {@link
- * EagerInvalidator}.
- *
- * <p>This class is not intended for direct use, and is only exposed as public for use in evaluation
- * implementations outside of this package.
- */
-@ThreadSafe
-public interface DeletableGraph {
- /** Remove the value with given name from the graph. */
- void remove(SkyKey key);
-}
diff --git a/src/main/java/com/google/devtools/build/skyframe/DepsReport.java b/src/main/java/com/google/devtools/build/skyframe/DepsReport.java
index dd2697e..dedcdf7 100644
--- a/src/main/java/com/google/devtools/build/skyframe/DepsReport.java
+++ b/src/main/java/com/google/devtools/build/skyframe/DepsReport.java
@@ -20,7 +20,7 @@
import java.util.Iterator;
/**
- * Result of {@link EvaluableGraph#analyzeDepsDoneness}: Equivalent to an {@code
+ * Result of {@link ProcessableGraph#analyzeDepsDoneness}: Equivalent to an {@code
* Optional<Collection<SkyKey>>} but without the overhead of the wrapper {@code Optional}.
*/
public class DepsReport implements Collection<SkyKey> {
diff --git a/src/main/java/com/google/devtools/build/skyframe/EvaluableGraph.java b/src/main/java/com/google/devtools/build/skyframe/EvaluableGraph.java
deleted file mode 100644
index 488dea2..0000000
--- a/src/main/java/com/google/devtools/build/skyframe/EvaluableGraph.java
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package com.google.devtools.build.skyframe;
-
-import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
-import com.google.devtools.build.lib.supplier.InterruptibleSupplier;
-import com.google.devtools.build.lib.supplier.MemoizingInterruptibleSupplier;
-import com.google.errorprone.annotations.CanIgnoreReturnValue;
-import java.util.Collection;
-import java.util.Map;
-import javax.annotation.Nullable;
-
-/**
- * Interface between a single version of the graph and the evaluator. Supports mutation of that
- * single version of the graph.
- *
- * <p>Certain graph implementations can throw {@link InterruptedException} when trying to retrieve
- * node entries. Such exceptions should not be caught locally -- they should be allowed to propagate
- * up.
- */
-@ThreadSafe
-interface EvaluableGraph extends QueryableGraph, DeletableGraph {
- /**
- * Like {@link QueryableGraph#getBatch}, except it creates a new node for each key not already
- * present in the graph. Thus, the returned map will have an entry for each key in {@code keys}.
- *
- * @param requestor if non-{@code null}, the node on behalf of which the given {@code keys} are
- * being requested.
- * @param reason the reason the nodes are being requested.
- */
- Map<SkyKey, ? extends NodeEntry> createIfAbsentBatch(
- @Nullable SkyKey requestor, Reason reason, Iterable<SkyKey> keys) throws InterruptedException;
-
- /**
- * Like {@link QueryableGraph#getBatchAsync}, except it creates a new node for each key not
- * already present in the graph. Thus, the returned map will have an entry for each key in {@code
- * keys}.
- *
- * @param requestor if non-{@code null}, the node on behalf of which the given {@code keys} are
- * being requested.
- * @param reason the reason the nodes are being requested.
- */
- @CanIgnoreReturnValue
- default InterruptibleSupplier<Map<SkyKey, ? extends NodeEntry>> createIfAbsentBatchAsync(
- @Nullable SkyKey requestor, Reason reason, Iterable<SkyKey> keys) {
- return MemoizingInterruptibleSupplier.of(() -> createIfAbsentBatch(requestor, reason, keys));
- }
-
- /**
- * Optional optimization: graph may use internal knowledge to filter out keys in {@code deps} that
- * have not been recomputed since the last computation of {@code parent}. When determining if
- * {@code parent} needs to be re-evaluated, this may be used to avoid unnecessary graph accesses.
- *
- * <p>Returns deps that may have new values since the node of {@code parent} was last computed,
- * and therefore which may force re-evaluation of the node of {@code parent}.
- */
- DepsReport analyzeDepsDoneness(SkyKey parent, Collection<SkyKey> deps)
- throws InterruptedException;
-
-}
diff --git a/src/main/java/com/google/devtools/build/skyframe/InMemoryNodeEntry.java b/src/main/java/com/google/devtools/build/skyframe/InMemoryNodeEntry.java
index a2efa1d..ad0be18 100644
--- a/src/main/java/com/google/devtools/build/skyframe/InMemoryNodeEntry.java
+++ b/src/main/java/com/google/devtools/build/skyframe/InMemoryNodeEntry.java
@@ -51,9 +51,9 @@
* <li>Done ({@link #isDone} is true; {@link #isDirty} is false)
* </ol>
*
- * <p>The "just created" state is there to allow the {@link EvaluableGraph#createIfAbsentBatch} and
- * {@link NodeEntry#addReverseDepAndCheckIfDone} methods to be separate. All callers have to call
- * both methods in that order if they want to create a node. The second method returns the
+ * <p>The "just created" state is there to allow the {@link ProcessableGraph#createIfAbsentBatch}
+ * and {@link NodeEntry#addReverseDepAndCheckIfDone} methods to be separate. All callers have to
+ * call both methods in that order if they want to create a node. The second method returns the
* NEEDS_SCHEDULING state only on the first time it was called. A caller that gets NEEDS_SCHEDULING
* back from that call must start the evaluation of this node, while any subsequent callers must
* not.
diff --git a/src/main/java/com/google/devtools/build/skyframe/ProcessableGraph.java b/src/main/java/com/google/devtools/build/skyframe/ProcessableGraph.java
index 532a151..9503244 100644
--- a/src/main/java/com/google/devtools/build/skyframe/ProcessableGraph.java
+++ b/src/main/java/com/google/devtools/build/skyframe/ProcessableGraph.java
@@ -14,13 +14,62 @@
package com.google.devtools.build.skyframe;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
+import com.google.devtools.build.lib.supplier.InterruptibleSupplier;
+import com.google.devtools.build.lib.supplier.MemoizingInterruptibleSupplier;
+import com.google.errorprone.annotations.CanIgnoreReturnValue;
+import java.util.Collection;
+import java.util.Map;
+import javax.annotation.Nullable;
/**
- * A graph that is both Dirtiable (values can be deleted) and Evaluable (values can be added). All
- * methods in this interface (as inherited from super-interfaces) should be thread-safe.
+ * Interface between a single version of the graph and the evaluator. Supports mutation of that
+ * single version of the graph.
+ *
+ * <p>Certain graph implementations can throw {@link InterruptedException} when trying to retrieve
+ * node entries. Such exceptions should not be caught locally -- they should be allowed to propagate
+ * up.
*
* <p>This class is not intended for direct use, and is only exposed as public for use in evaluation
* implementations outside of this package.
*/
@ThreadSafe
-public interface ProcessableGraph extends DeletableGraph, EvaluableGraph {}
+public interface ProcessableGraph extends QueryableGraph {
+ /** Remove the value with given name from the graph. */
+ void remove(SkyKey key);
+ /**
+ * Like {@link QueryableGraph#getBatch}, except it creates a new node for each key not already
+ * present in the graph. Thus, the returned map will have an entry for each key in {@code keys}.
+ *
+ * @param requestor if non-{@code null}, the node on behalf of which the given {@code keys} are
+ * being requested.
+ * @param reason the reason the nodes are being requested.
+ */
+ Map<SkyKey, ? extends NodeEntry> createIfAbsentBatch(
+ @Nullable SkyKey requestor, Reason reason, Iterable<SkyKey> keys) throws InterruptedException;
+
+ /**
+ * Like {@link QueryableGraph#getBatchAsync}, except it creates a new node for each key not
+ * already present in the graph. Thus, the returned map will have an entry for each key in {@code
+ * keys}.
+ *
+ * @param requestor if non-{@code null}, the node on behalf of which the given {@code keys} are
+ * being requested.
+ * @param reason the reason the nodes are being requested.
+ */
+ @CanIgnoreReturnValue
+ default InterruptibleSupplier<Map<SkyKey, ? extends NodeEntry>> createIfAbsentBatchAsync(
+ @Nullable SkyKey requestor, Reason reason, Iterable<SkyKey> keys) {
+ return MemoizingInterruptibleSupplier.of(() -> createIfAbsentBatch(requestor, reason, keys));
+ }
+
+ /**
+ * Optional optimization: graph may use internal knowledge to filter out keys in {@code deps} that
+ * have not been recomputed since the last computation of {@code parent}. When determining if
+ * {@code parent} needs to be re-evaluated, this may be used to avoid unnecessary graph accesses.
+ *
+ * <p>Returns deps that may have new values since the node of {@code parent} was last computed,
+ * and therefore which may force re-evaluation of the node of {@code parent}.
+ */
+ DepsReport analyzeDepsDoneness(SkyKey parent, Collection<SkyKey> deps)
+ throws InterruptedException;
+}
diff --git a/src/test/java/com/google/devtools/build/skyframe/GraphTest.java b/src/test/java/com/google/devtools/build/skyframe/GraphTest.java
index 72774b4..e793f27 100644
--- a/src/test/java/com/google/devtools/build/skyframe/GraphTest.java
+++ b/src/test/java/com/google/devtools/build/skyframe/GraphTest.java
@@ -41,7 +41,7 @@
import org.junit.Before;
import org.junit.Test;
-/** Base class for tests on {@link EvaluableGraph} implementations. */
+/** Base class for tests on {@link ProcessableGraph} implementations. */
public abstract class GraphTest {
protected ProcessableGraph graph;
protected TestRunnableWrapper wrapper;