diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java
index 2d95ca3..e9ec6f4 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java
@@ -97,8 +97,8 @@
   // This hack allows us to see when a configured target has been invalidated, and thus when the set
   // of artifact conflicts needs to be recomputed (whenever a configured target has been invalidated
   // or newly evaluated).
-  private final EvaluationProgressReceiver invalidationReceiver =
-      new ConfiguredTargetValueInvalidationReceiver();
+  private final EvaluationProgressReceiver progressReceiver =
+      new ConfiguredTargetValueProgressReceiver();
   private final Set<SkyKey> evaluatedConfiguredTargets = Sets.newConcurrentHashSet();
   // Used to see if checks of graph consistency need to be done after analysis.
   private volatile boolean someConfiguredTargetEvaluated = false;
@@ -545,8 +545,8 @@
    * Hack to invalidate actions in legacy action graph when their values are invalidated in
    * skyframe.
    */
-  EvaluationProgressReceiver getInvalidationReceiver() {
-    return invalidationReceiver;
+  EvaluationProgressReceiver getProgressReceiver() {
+    return progressReceiver;
   }
 
   /** Clear the invalidated configured targets detected during loading and analysis phases. */
@@ -589,7 +589,7 @@
     this.enableAnalysis = enable;
   }
 
-  private class ConfiguredTargetValueInvalidationReceiver implements EvaluationProgressReceiver {
+  private class ConfiguredTargetValueProgressReceiver implements EvaluationProgressReceiver {
     @Override
     public void invalidated(SkyKey skyKey, InvalidationState state) {
       if (skyKey.functionName().equals(SkyFunctions.CONFIGURED_TARGET)) {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
index 5b805b3..8f91b50 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
@@ -1885,7 +1885,7 @@
       if (ignoreInvalidations) {
         return;
       }
-      skyframeBuildView.getInvalidationReceiver().invalidated(skyKey, state);
+      skyframeBuildView.getProgressReceiver().invalidated(skyKey, state);
     }
 
     @Override
@@ -1893,7 +1893,7 @@
       if (ignoreInvalidations) {
         return;
       }
-      skyframeBuildView.getInvalidationReceiver().enqueueing(skyKey);
+      skyframeBuildView.getProgressReceiver().enqueueing(skyKey);
       if (executionProgressReceiver != null) {
         executionProgressReceiver.enqueueing(skyKey);
       }
@@ -1907,7 +1907,7 @@
       if (ignoreInvalidations) {
         return;
       }
-      skyframeBuildView.getInvalidationReceiver().evaluated(skyKey, valueSupplier, state);
+      skyframeBuildView.getProgressReceiver().evaluated(skyKey, valueSupplier, state);
       if (executionProgressReceiver != null) {
         executionProgressReceiver.evaluated(skyKey, valueSupplier, state);
       }
diff --git a/src/main/java/com/google/devtools/build/skyframe/EagerInvalidator.java b/src/main/java/com/google/devtools/build/skyframe/EagerInvalidator.java
index 71537e8..bff6850 100644
--- a/src/main/java/com/google/devtools/build/skyframe/EagerInvalidator.java
+++ b/src/main/java/com/google/devtools/build/skyframe/EagerInvalidator.java
@@ -44,14 +44,14 @@
   public static void delete(
       InMemoryGraph graph,
       Iterable<SkyKey> diff,
-      EvaluationProgressReceiver invalidationReceiver,
+      EvaluationProgressReceiver progressReceiver,
       InvalidationState state,
       boolean traverseGraph,
       DirtyKeyTracker dirtyKeyTracker)
       throws InterruptedException {
     DeletingNodeVisitor visitor =
         createDeletingVisitorIfNeeded(
-            graph, diff, invalidationReceiver, state, traverseGraph, dirtyKeyTracker);
+            graph, diff, progressReceiver, state, traverseGraph, dirtyKeyTracker);
     if (visitor != null) {
       visitor.run();
     }
@@ -61,13 +61,13 @@
   static DeletingNodeVisitor createDeletingVisitorIfNeeded(
       InMemoryGraph graph,
       Iterable<SkyKey> diff,
-      EvaluationProgressReceiver invalidationReceiver,
+      EvaluationProgressReceiver progressReceiver,
       InvalidationState state,
       boolean traverseGraph,
       DirtyKeyTracker dirtyKeyTracker) {
     state.update(diff);
     return state.isEmpty() ? null
-        : new DeletingNodeVisitor(graph, invalidationReceiver, state, traverseGraph,
+        : new DeletingNodeVisitor(graph, progressReceiver, state, traverseGraph,
             dirtyKeyTracker);
   }
 
@@ -75,13 +75,13 @@
   static DirtyingNodeVisitor createInvalidatingVisitorIfNeeded(
       QueryableGraph graph,
       Iterable<SkyKey> diff,
-      EvaluationProgressReceiver invalidationReceiver,
+      EvaluationProgressReceiver progressReceiver,
       InvalidationState state,
       DirtyKeyTracker dirtyKeyTracker,
       Function<ExecutorParams, ? extends ExecutorService> executorFactory) {
     state.update(diff);
     return state.isEmpty() ? null
-        : new DirtyingNodeVisitor(graph, invalidationReceiver, state, dirtyKeyTracker,
+        : new DirtyingNodeVisitor(graph, progressReceiver, state, dirtyKeyTracker,
             executorFactory);
   }
 
@@ -89,7 +89,7 @@
   private static DirtyingNodeVisitor createInvalidatingVisitorIfNeeded(
       QueryableGraph graph,
       Iterable<SkyKey> diff,
-      EvaluationProgressReceiver invalidationReceiver,
+      EvaluationProgressReceiver progressReceiver,
       InvalidationState state,
       DirtyKeyTracker dirtyKeyTracker,
       ForkJoinPool forkJoinPool,
@@ -100,7 +100,7 @@
         ? null
         : new DirtyingNodeVisitor(
             graph,
-            invalidationReceiver,
+            progressReceiver,
             state,
             dirtyKeyTracker,
             forkJoinPool,
@@ -114,14 +114,14 @@
   public static void invalidate(
       QueryableGraph graph,
       Iterable<SkyKey> diff,
-      EvaluationProgressReceiver invalidationReceiver,
+      EvaluationProgressReceiver progressReceiver,
       InvalidationState state,
       DirtyKeyTracker dirtyKeyTracker,
       Function<ExecutorParams, ? extends ExecutorService> executorFactory)
       throws InterruptedException {
     DirtyingNodeVisitor visitor =
         createInvalidatingVisitorIfNeeded(
-            graph, diff, invalidationReceiver, state, dirtyKeyTracker, executorFactory);
+            graph, diff, progressReceiver, state, dirtyKeyTracker, executorFactory);
     if (visitor != null) {
       visitor.run();
     }
@@ -134,7 +134,7 @@
   public static void invalidate(
       QueryableGraph graph,
       Iterable<SkyKey> diff,
-      EvaluationProgressReceiver invalidationReceiver,
+      EvaluationProgressReceiver progressReceiver,
       InvalidationState state,
       DirtyKeyTracker dirtyKeyTracker,
       ForkJoinPool forkJoinPool,
@@ -144,7 +144,7 @@
         createInvalidatingVisitorIfNeeded(
             graph,
             diff,
-            invalidationReceiver,
+            progressReceiver,
             state,
             dirtyKeyTracker,
             forkJoinPool,
@@ -159,11 +159,11 @@
   public static void invalidate(
       QueryableGraph graph,
       Iterable<SkyKey> diff,
-      EvaluationProgressReceiver invalidationReceiver,
+      EvaluationProgressReceiver progressReceiver,
       InvalidationState state,
       DirtyKeyTracker dirtyKeyTracker)
       throws InterruptedException {
-    invalidate(graph, diff, invalidationReceiver, state, dirtyKeyTracker,
+    invalidate(graph, diff, progressReceiver, state, dirtyKeyTracker,
         AbstractQueueVisitor.EXECUTOR_FACTORY);
   }
 
diff --git a/src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java b/src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java
index 2545487..317c631 100644
--- a/src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java
+++ b/src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java
@@ -85,19 +85,19 @@
   public InMemoryMemoizingEvaluator(
       Map<SkyFunctionName, ? extends SkyFunction> skyFunctions,
       Differencer differencer,
-      @Nullable EvaluationProgressReceiver invalidationReceiver) {
-    this(skyFunctions, differencer, invalidationReceiver, new EmittedEventState(), true);
+      @Nullable EvaluationProgressReceiver progressReceiver) {
+    this(skyFunctions, differencer, progressReceiver, new EmittedEventState(), true);
   }
 
   public InMemoryMemoizingEvaluator(
       Map<SkyFunctionName, ? extends SkyFunction> skyFunctions,
       Differencer differencer,
-      @Nullable EvaluationProgressReceiver invalidationReceiver,
+      @Nullable EvaluationProgressReceiver progressReceiver,
       EmittedEventState emittedEventState,
       boolean keepEdges) {
     this.skyFunctions = ImmutableMap.copyOf(skyFunctions);
     this.differencer = Preconditions.checkNotNull(differencer);
-    this.progressReceiver = invalidationReceiver;
+    this.progressReceiver = progressReceiver;
     this.graph = new InMemoryGraphImpl(keepEdges);
     this.emittedEventState = emittedEventState;
     this.keepEdges = keepEdges;
@@ -388,11 +388,11 @@
         public MemoizingEvaluator create(
             ImmutableMap<SkyFunctionName, ? extends SkyFunction> skyFunctions,
             Differencer differencer,
-            @Nullable EvaluationProgressReceiver invalidationReceiver,
+            @Nullable EvaluationProgressReceiver progressReceiver,
             EmittedEventState emittedEventState,
             boolean keepEdges) {
           return new InMemoryMemoizingEvaluator(
-              skyFunctions, differencer, invalidationReceiver, emittedEventState, keepEdges);
+              skyFunctions, differencer, progressReceiver, emittedEventState, keepEdges);
         }
       };
 }
diff --git a/src/main/java/com/google/devtools/build/skyframe/InvalidatingNodeVisitor.java b/src/main/java/com/google/devtools/build/skyframe/InvalidatingNodeVisitor.java
index 075274d..5a7f989 100644
--- a/src/main/java/com/google/devtools/build/skyframe/InvalidatingNodeVisitor.java
+++ b/src/main/java/com/google/devtools/build/skyframe/InvalidatingNodeVisitor.java
@@ -80,7 +80,7 @@
       };
 
   protected final TGraph graph;
-  @Nullable protected final EvaluationProgressReceiver invalidationReceiver;
+  @Nullable protected final EvaluationProgressReceiver progressReceiver;
   protected final DirtyKeyTracker dirtyKeyTracker;
   // Aliased to InvalidationState.pendingVisitations.
   protected final Set<Pair<SkyKey, InvalidationType>> pendingVisitations;
@@ -88,16 +88,16 @@
 
   protected InvalidatingNodeVisitor(
       TGraph graph,
-      @Nullable EvaluationProgressReceiver invalidationReceiver,
+      @Nullable EvaluationProgressReceiver progressReceiver,
       InvalidationState state,
       DirtyKeyTracker dirtyKeyTracker) {
     this(
-        graph, invalidationReceiver, state, dirtyKeyTracker, AbstractQueueVisitor.EXECUTOR_FACTORY);
+        graph, progressReceiver, state, dirtyKeyTracker, AbstractQueueVisitor.EXECUTOR_FACTORY);
   }
 
   protected InvalidatingNodeVisitor(
       TGraph graph,
-      @Nullable EvaluationProgressReceiver invalidationReceiver,
+      @Nullable EvaluationProgressReceiver progressReceiver,
       InvalidationState state,
       DirtyKeyTracker dirtyKeyTracker,
       Function<ExecutorParams, ? extends ExecutorService> executorFactory) {
@@ -112,14 +112,14 @@
             executorFactory,
             errorClassifier);
     this.graph = Preconditions.checkNotNull(graph);
-    this.invalidationReceiver = invalidationReceiver;
+    this.progressReceiver = progressReceiver;
     this.dirtyKeyTracker = Preconditions.checkNotNull(dirtyKeyTracker);
     this.pendingVisitations = state.pendingValues;
   }
 
   protected InvalidatingNodeVisitor(
       TGraph graph,
-      @Nullable EvaluationProgressReceiver invalidationReceiver,
+      @Nullable EvaluationProgressReceiver progressReceiver,
       InvalidationState state,
       DirtyKeyTracker dirtyKeyTracker,
       ForkJoinPool forkJoinPool) {
@@ -128,7 +128,7 @@
         .setErrorClassifier(errorClassifier)
         .build();
     this.graph = Preconditions.checkNotNull(graph);
-    this.invalidationReceiver = invalidationReceiver;
+    this.progressReceiver = progressReceiver;
     this.dirtyKeyTracker = Preconditions.checkNotNull(dirtyKeyTracker);
     this.pendingVisitations = state.pendingValues;
   }
@@ -162,10 +162,10 @@
     return executor.getInterruptionLatchForTestingOnly();
   }
 
-  protected void informInvalidationReceiver(SkyKey key,
+  protected void informProgressReceiver(SkyKey key,
       EvaluationProgressReceiver.InvalidationState state) {
-    if (invalidationReceiver != null) {
-      invalidationReceiver.invalidated(key, state);
+    if (progressReceiver != null) {
+      progressReceiver.invalidated(key, state);
     }
   }
 
@@ -242,11 +242,11 @@
 
     DeletingNodeVisitor(
         InMemoryGraph graph,
-        EvaluationProgressReceiver invalidationReceiver,
+        EvaluationProgressReceiver progressReceiver,
         InvalidationState state,
         boolean traverseGraph,
         DirtyKeyTracker dirtyKeyTracker) {
-      super(graph, invalidationReceiver, state, dirtyKeyTracker);
+      super(graph, progressReceiver, state, dirtyKeyTracker);
       this.traverseGraph = traverseGraph;
     }
 
@@ -353,7 +353,7 @@
                 }
 
                 // Allow custom key-specific logic to update dirtiness status.
-                informInvalidationReceiver(
+                informProgressReceiver(
                     key, EvaluationProgressReceiver.InvalidationState.DELETED);
                 // Actually remove the node.
                 graph.remove(key);
@@ -382,11 +382,11 @@
 
     protected DirtyingNodeVisitor(
         QueryableGraph graph,
-        EvaluationProgressReceiver invalidationReceiver,
+        EvaluationProgressReceiver progressReceiver,
         InvalidationState state,
         DirtyKeyTracker dirtyKeyTracker,
         Function<ExecutorParams, ? extends ExecutorService> executorFactory) {
-      super(graph, invalidationReceiver, state, dirtyKeyTracker, executorFactory);
+      super(graph, progressReceiver, state, dirtyKeyTracker, executorFactory);
       this.supportInterruptions = true;
     }
 
@@ -396,12 +396,12 @@
      */
     protected DirtyingNodeVisitor(
         QueryableGraph graph,
-        EvaluationProgressReceiver invalidationReceiver,
+        EvaluationProgressReceiver progressReceiver,
         InvalidationState state,
         DirtyKeyTracker dirtyKeyTracker,
         ForkJoinPool forkJoinPool,
         boolean supportInterruptions) {
-      super(graph, invalidationReceiver, state, dirtyKeyTracker, forkJoinPool);
+      super(graph, progressReceiver, state, dirtyKeyTracker, forkJoinPool);
       this.supportInterruptions = supportInterruptions;
     }
 
@@ -526,7 +526,7 @@
                 // only be marked dirty (because only a dependency of theirs has changed).
                 visit(markedDirtyResult.getReverseDepsUnsafe(), InvalidationType.DIRTIED, key);
 
-                informInvalidationReceiver(key, EvaluationProgressReceiver.InvalidationState.DIRTY);
+                informProgressReceiver(key, EvaluationProgressReceiver.InvalidationState.DIRTY);
                 dirtyKeyTracker.dirty(key);
                 // Remove the node from the set as the last operation.
                 if (supportInterruptions) {
diff --git a/src/main/java/com/google/devtools/build/skyframe/MemoizingEvaluator.java b/src/main/java/com/google/devtools/build/skyframe/MemoizingEvaluator.java
index 5c8236a..114ccb4 100644
--- a/src/main/java/com/google/devtools/build/skyframe/MemoizingEvaluator.java
+++ b/src/main/java/com/google/devtools/build/skyframe/MemoizingEvaluator.java
@@ -148,7 +148,7 @@
     MemoizingEvaluator create(
         ImmutableMap<SkyFunctionName, ? extends SkyFunction> skyFunctions,
         Differencer differencer,
-        @Nullable EvaluationProgressReceiver invalidationReceiver,
+        @Nullable EvaluationProgressReceiver progressReceiver,
         EmittedEventState emittedEventState,
         boolean keepEdges);
   }
