[ VM / DartDev ] Disable DartDev by default, allow for enabling via
--enable-dart-dev

Fixes https://github.com/dart-lang/sdk/issues/42748

Change-Id: I107ff86a65c20317d8813769bdf78b92bb6cb145
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/154822
Commit-Queue: Ben Konyi <bkonyi@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
diff --git a/runtime/bin/main_options.cc b/runtime/bin/main_options.cc
index e3f195b..a250af8 100644
--- a/runtime/bin/main_options.cc
+++ b/runtime/bin/main_options.cc
@@ -42,6 +42,7 @@
 bool Options::enable_vm_service_ = false;
 MallocGrowableArray<const char*> Options::enabled_experiments_ =
     MallocGrowableArray<const char*>(4);
+bool Options::disable_dart_dev_ = true;
 
 #define OPTION_FIELD(variable) Options::variable##_
 
@@ -403,6 +404,28 @@
   return true;
 }
 
+bool Options::ProcessEnableDartDevOption(const char* arg,
+                                         CommandLineOptions* vm_options) {
+  const char* value = OptionProcessor::ProcessOption(arg, "--enable-dart-dev");
+  if (value == nullptr) {
+    value = OptionProcessor::ProcessOption(arg, "--enable_dart_dev");
+  }
+  if (value == nullptr) {
+    // Ensure --disable-dart-dev doesn't result in an unknown flag error.
+    value = OptionProcessor::ProcessOption(arg, "--disable-dart-dev");
+    if (value != nullptr) {
+      return true;
+    }
+    value = OptionProcessor::ProcessOption(arg, "--disable_dart_dev");
+    if (value != nullptr) {
+      return true;
+    }
+    return false;
+  }
+  disable_dart_dev_ = false;
+  return true;
+}
+
 static void ResolveDartDevSnapshotPath(const char* script,
                                        char** snapshot_path) {
   if (!DartDevUtils::TryResolveDartDevSnapshotPath(snapshot_path)) {
@@ -591,7 +614,8 @@
         }
       }
     }
-    if (num_experiment_flags + 1 != script_or_cmd_index) {
+    // +2 since --enable-dart-dev needs to be passed to enable DartDev.
+    if (num_experiment_flags + 2 != script_or_cmd_index) {
       Syslog::PrintErr(
           "Warning: The following flags were passed as VM options and are "
           "being "
diff --git a/runtime/bin/main_options.h b/runtime/bin/main_options.h
index adfcb5c..54b44b6 100644
--- a/runtime/bin/main_options.h
+++ b/runtime/bin/main_options.h
@@ -46,8 +46,7 @@
   V(disable_exit, exit_disabled)                                               \
   V(preview_dart_2, nop_option)                                                \
   V(suppress_core_dump, suppress_core_dump)                                    \
-  V(enable_service_port_fallback, enable_service_port_fallback)                \
-  V(disable_dart_dev, disable_dart_dev)
+  V(enable_service_port_fallback, enable_service_port_fallback)
 
 // Boolean flags that have a short form.
 #define SHORT_BOOL_OPTIONS_LIST(V)                                             \
@@ -70,7 +69,8 @@
   V(ProcessEnableVmServiceOption)                                              \
   V(ProcessObserveOption)                                                      \
   V(ProcessAbiVersionOption)                                                   \
-  V(ProcessEnableExperimentOption)
+  V(ProcessEnableExperimentOption)                                             \
+  V(ProcessEnableDartDevOption)
 
 // This enum must match the strings in kSnapshotKindNames in main_options.cc.
 enum SnapshotKind {
@@ -129,6 +129,8 @@
   static constexpr int kAbiVersionUnset = -1;
   static int target_abi_version() { return target_abi_version_; }
 
+  static bool disable_dart_dev() { return disable_dart_dev_; }
+
 #if !defined(DART_PRECOMPILED_RUNTIME)
   static DFE* dfe() { return dfe_; }
   static void set_dfe(DFE* dfe) { dfe_ = dfe; }
@@ -179,6 +181,7 @@
 
   static int target_abi_version_;
   static MallocGrowableArray<const char*> enabled_experiments_;
+  static bool disable_dart_dev_;
 
 #define OPTION_FRIEND(flag, variable) friend class OptionProcessor_##flag;
   STRING_OPTIONS_LIST(OPTION_FRIEND)