Allows subclasses of SkyframeExecutor to enable analysis during execution.

PiperOrigin-RevId: 206568465
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 60a22fb..3bb767f 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
@@ -588,8 +588,11 @@
       ImmutableMap<Label, ConfigMatchingProvider> configConditions,
       @Nullable ToolchainContext toolchainContext)
       throws InterruptedException, ActionConflictException {
-    Preconditions.checkState(enableAnalysis,
-        "Already in execution phase %s %s", target, configuration);
+    Preconditions.checkState(
+        enableAnalysis || skyframeExecutor.allowsAnalysisDuringExecution(),
+        "Already in execution phase %s %s",
+        target,
+        configuration);
     Preconditions.checkNotNull(analysisEnvironment);
     Preconditions.checkNotNull(target);
     Preconditions.checkNotNull(prerequisiteMap);
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 80ad0b3..c666c4c 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
@@ -2324,4 +2324,8 @@
     modifiedFilesDuringPreviousBuild = 0;
     return result;
   }
+
+  protected boolean allowsAnalysisDuringExecution() {
+    return false;
+  }
 }