Add an --experimental_disable_jvm flag.

--
MOS_MIGRATED_REVID=101457236
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
index 7ce8c04..a64e031 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
@@ -525,6 +525,10 @@
       return error;
     }
 
+    public boolean hasError() {
+      return error != null;
+    }
+
     /**
      * Returns the action graph.
      */
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java
index 6bb7fcd..83539ff 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java
@@ -152,6 +152,7 @@
   public void createStubAction(RuleContext ruleContext, final JavaCommon javaCommon,
       List<String> jvmFlags, Artifact executable, String javaStartClass,
       String javaExecutable) {
+    Preconditions.checkState(ruleContext.getConfiguration().hasFragment(Jvm.class));
 
     Preconditions.checkNotNull(jvmFlags);
     Preconditions.checkNotNull(executable);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java
index ef72a40..b713af8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java
@@ -376,6 +376,7 @@
    * @param launcher if non-null, the cc_binary used to launch the Java Virtual Machine
    */
   public String getJavaBinSubstitution(@Nullable Artifact launcher) {
+    Preconditions.checkState(ruleContext.getConfiguration().hasFragment(Jvm.class));
     PathFragment javaExecutable;
 
     if (launcher != null) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java
index 3254964..4b564a5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java
@@ -290,6 +290,12 @@
       help = "Check the listed constraint.")
   public List<String> checkedConstraints;
 
+  @Option(name = "experimental_disable_jvm",
+      defaultValue = "false",
+      category = "undocumented",
+      help = "Disables the Jvm configuration entirely.")
+  public boolean disableJvm;
+
   @Override
   public FragmentOptions getHost(boolean fallback) {
     JavaOptions host = (JavaOptions) getDefault();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JvmConfigurationLoader.java b/src/main/java/com/google/devtools/build/lib/rules/java/JvmConfigurationLoader.java
index 9ff7651..c6fff96 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JvmConfigurationLoader.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JvmConfigurationLoader.java
@@ -66,6 +66,10 @@
   public Jvm create(ConfigurationEnvironment env, BuildOptions buildOptions)
       throws InvalidConfigurationException {
     JavaOptions javaOptions = buildOptions.get(JavaOptions.class);
+    if (javaOptions.disableJvm) {
+      // TODO(bazel-team): Instead of returning null here, add another method to the interface.
+      return null;
+    }
     String javaHome = javaOptions.javaBase;
     String cpu = cpuSupplier.getJavaCpu(buildOptions, env);
     if (cpu == null) {