Version 2.19.0-63.0.dev

Merge commit 'abd6e8eba79c455402de2acc8f7cb9cca54e7fdb' into 'dev'
diff --git a/DEPS b/DEPS
index ff0a30e..eb586c2 100644
--- a/DEPS
+++ b/DEPS
@@ -108,7 +108,7 @@
   # For more details, see https://github.com/dart-lang/sdk/issues/30164.
   "dart_style_rev": "d7b73536a8079331c888b7da539b80e6825270ea", # manually rev'd
 
-  "dartdoc_rev": "7edeeeb20a506cadec3788c273fdee6cad91e07c",
+  "dartdoc_rev": "bd57c0e7b7562abda6d556ce5a386b67fb4ff4c7",
   "devtools_rev": "d131d19091f6b89ac89486bd92440a25a523e8b0",
   "ffi_rev": "18b2b549d55009ff594600b04705ff6161681e07",
   "file_rev": "0132eeedea2933513bf230513a766a8baeab0c4f",
diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
index 92511cc..a4ea05d 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -90,8 +90,8 @@
 import 'package:analysis_server/src/services/completion/completion_state.dart';
 import 'package:analysis_server/src/services/execution/execution_context.dart';
 import 'package:analysis_server/src/services/flutter/widget_descriptions.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring_manager.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring_manager.dart';
 import 'package:analysis_server/src/utilities/process.dart';
 import 'package:analysis_server/src/utilities/request_statistics.dart';
 import 'package:analyzer/dart/analysis/results.dart';
diff --git a/pkg/analysis_server/lib/src/cider/rename.dart b/pkg/analysis_server/lib/src/cider/rename.dart
index 3ff2d18..7b00736 100644
--- a/pkg/analysis_server/lib/src/cider/rename.dart
+++ b/pkg/analysis_server/lib/src/cider/rename.dart
@@ -5,8 +5,8 @@
 import 'package:analysis_server/src/protocol_server.dart' hide Element;
 import 'package:analysis_server/src/services/correction/status.dart';
 import 'package:analysis_server/src/services/correction/util.dart';
-import 'package:analysis_server/src/services/refactoring/naming_conventions.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/naming_conventions.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
 import 'package:analysis_server/src/services/search/hierarchy.dart';
 import 'package:analysis_server/src/utilities/flutter.dart';
 import 'package:analyzer/dart/ast/ast.dart';
diff --git a/pkg/analysis_server/lib/src/handler/legacy/edit_get_available_refactorings.dart b/pkg/analysis_server/lib/src/handler/legacy/edit_get_available_refactorings.dart
index 5fa0b4a..1e63f00 100644
--- a/pkg/analysis_server/lib/src/handler/legacy/edit_get_available_refactorings.dart
+++ b/pkg/analysis_server/lib/src/handler/legacy/edit_get_available_refactorings.dart
@@ -6,7 +6,7 @@
 
 import 'package:analysis_server/protocol/protocol_generated.dart';
 import 'package:analysis_server/src/handler/legacy/legacy_handler.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/dart/ast/utilities.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/commands/abstract_refactor.dart b/pkg/analysis_server/lib/src/lsp/handlers/commands/abstract_refactor.dart
index 561cd23..8d46e20 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/commands/abstract_refactor.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/commands/abstract_refactor.dart
@@ -10,7 +10,7 @@
 import 'package:analysis_server/src/lsp/handlers/handlers.dart';
 import 'package:analysis_server/src/lsp/progress.dart';
 import 'package:analysis_server/src/protocol_server.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/dart/ast/utilities.dart';
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_code_actions.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_code_actions.dart
index bd82a4a..e11e588 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_code_actions.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_code_actions.dart
@@ -13,7 +13,7 @@
 import 'package:analysis_server/src/services/correction/change_workspace.dart';
 import 'package:analysis_server/src/services/correction/fix.dart';
 import 'package:analysis_server/src/services/correction/fix_internal.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/analysis/session.dart'
     show InconsistentAnalysisException;
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_rename.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_rename.dart
index facbfd8..8c57881 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_rename.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_rename.dart
@@ -7,8 +7,8 @@
 import 'package:analysis_server/src/lsp/constants.dart';
 import 'package:analysis_server/src/lsp/handlers/handlers.dart';
 import 'package:analysis_server/src/lsp/mapping.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
-import 'package:analysis_server/src/services/refactoring/rename_unit_member.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/rename_unit_member.dart';
 import 'package:analyzer/dart/element/element.dart';
 
 class PrepareRenameHandler extends MessageHandler<TextDocumentPositionParams,
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_will_rename_files.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_will_rename_files.dart
index 2091ecf..b7b089a 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_will_rename_files.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_will_rename_files.dart
@@ -5,7 +5,7 @@
 import 'package:analysis_server/lsp_protocol/protocol.dart';
 import 'package:analysis_server/src/lsp/handlers/handlers.dart';
 import 'package:analysis_server/src/lsp/mapping.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
 
 class WillRenameFilesHandler
     extends MessageHandler<RenameFilesParams, WorkspaceEdit?> {
diff --git a/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart b/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
index 3c57d35..e7f0ca9 100644
--- a/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
+++ b/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
@@ -30,7 +30,7 @@
 import 'package:analysis_server/src/server/diagnostic_server.dart';
 import 'package:analysis_server/src/server/error_notifier.dart';
 import 'package:analysis_server/src/server/performance.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
 import 'package:analysis_server/src/utilities/process.dart';
 import 'package:analyzer/dart/analysis/context_locator.dart';
 import 'package:analyzer/dart/analysis/results.dart';
diff --git a/pkg/analysis_server/lib/src/services/refactoring/convert_getter_to_method.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/convert_getter_to_method.dart
similarity index 95%
rename from pkg/analysis_server/lib/src/services/refactoring/convert_getter_to_method.dart
rename to pkg/analysis_server/lib/src/services/refactoring/legacy/convert_getter_to_method.dart
index e0f9237..b10f214 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/convert_getter_to_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/convert_getter_to_method.dart
@@ -4,8 +4,8 @@
 
 import 'package:analysis_server/src/protocol_server.dart' hide Element;
 import 'package:analysis_server/src/services/correction/status.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring_internal.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring_internal.dart';
 import 'package:analysis_server/src/services/search/hierarchy.dart';
 import 'package:analysis_server/src/services/search/search_engine.dart';
 import 'package:analyzer/dart/analysis/session.dart';
diff --git a/pkg/analysis_server/lib/src/services/refactoring/convert_method_to_getter.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/convert_method_to_getter.dart
similarity index 96%
rename from pkg/analysis_server/lib/src/services/refactoring/convert_method_to_getter.dart
rename to pkg/analysis_server/lib/src/services/refactoring/legacy/convert_method_to_getter.dart
index 427b1a1..069baef 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/convert_method_to_getter.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/convert_method_to_getter.dart
@@ -4,8 +4,8 @@
 
 import 'package:analysis_server/src/protocol_server.dart' hide Element;
 import 'package:analysis_server/src/services/correction/status.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring_internal.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring_internal.dart';
 import 'package:analysis_server/src/services/search/hierarchy.dart';
 import 'package:analysis_server/src/services/search/search_engine.dart';
 import 'package:analyzer/dart/analysis/session.dart';
diff --git a/pkg/analysis_server/lib/src/services/refactoring/extract_local.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/extract_local.dart
similarity index 98%
rename from pkg/analysis_server/lib/src/services/refactoring/extract_local.dart
rename to pkg/analysis_server/lib/src/services/refactoring/legacy/extract_local.dart
index 607535c..2bd7555 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/extract_local.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/extract_local.dart
@@ -8,9 +8,9 @@
 import 'package:analysis_server/src/services/correction/name_suggestion.dart';
 import 'package:analysis_server/src/services/correction/status.dart';
 import 'package:analysis_server/src/services/correction/util.dart';
-import 'package:analysis_server/src/services/refactoring/naming_conventions.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring_internal.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/naming_conventions.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring_internal.dart';
 import 'package:analysis_server/src/utilities/strings.dart';
 import 'package:analyzer/dart/analysis/code_style_options.dart';
 import 'package:analyzer/dart/analysis/features.dart';
diff --git a/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/extract_method.dart
similarity index 98%
rename from pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
rename to pkg/analysis_server/lib/src/services/refactoring/legacy/extract_method.dart
index 80d5192..c18f88f 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/extract_method.dart
@@ -8,12 +8,12 @@
 import 'package:analysis_server/src/services/correction/statement_analyzer.dart';
 import 'package:analysis_server/src/services/correction/status.dart';
 import 'package:analysis_server/src/services/correction/util.dart';
-import 'package:analysis_server/src/services/refactoring/naming_conventions.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring_internal.dart';
-import 'package:analysis_server/src/services/refactoring/rename_class_member.dart';
-import 'package:analysis_server/src/services/refactoring/rename_unit_member.dart';
-import 'package:analysis_server/src/services/refactoring/visible_ranges_computer.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/naming_conventions.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring_internal.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/rename_class_member.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/rename_unit_member.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/visible_ranges_computer.dart';
 import 'package:analysis_server/src/services/search/search_engine.dart';
 import 'package:analysis_server/src/utilities/extensions/ast.dart';
 import 'package:analyzer/dart/analysis/features.dart';
diff --git a/pkg/analysis_server/lib/src/services/refactoring/extract_widget.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/extract_widget.dart
similarity index 98%
rename from pkg/analysis_server/lib/src/services/refactoring/extract_widget.dart
rename to pkg/analysis_server/lib/src/services/refactoring/legacy/extract_widget.dart
index b476d7c..85bbc24 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/extract_widget.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/extract_widget.dart
@@ -5,9 +5,9 @@
 import 'package:analysis_server/src/protocol_server.dart' hide Element;
 import 'package:analysis_server/src/services/correction/status.dart';
 import 'package:analysis_server/src/services/correction/util.dart';
-import 'package:analysis_server/src/services/refactoring/naming_conventions.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring_internal.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/naming_conventions.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring_internal.dart';
 import 'package:analysis_server/src/services/search/element_visitors.dart';
 import 'package:analysis_server/src/services/search/search_engine.dart';
 import 'package:analysis_server/src/utilities/flutter.dart';
diff --git a/pkg/analysis_server/lib/src/services/refactoring/inline_local.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/inline_local.dart
similarity index 97%
rename from pkg/analysis_server/lib/src/services/refactoring/inline_local.dart
rename to pkg/analysis_server/lib/src/services/refactoring/legacy/inline_local.dart
index e0f3df71..62b9140 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/inline_local.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/inline_local.dart
@@ -5,8 +5,8 @@
 import 'package:analysis_server/src/protocol_server.dart' hide Element;
 import 'package:analysis_server/src/services/correction/status.dart';
 import 'package:analysis_server/src/services/correction/util.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring_internal.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring_internal.dart';
 import 'package:analysis_server/src/services/search/search_engine.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/ast/ast.dart';
diff --git a/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/inline_method.dart
similarity index 98%
rename from pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
rename to pkg/analysis_server/lib/src/services/refactoring/legacy/inline_method.dart
index fec885d..c44741a 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/inline_method.dart
@@ -5,9 +5,9 @@
 import 'package:analysis_server/src/protocol_server.dart' hide Element;
 import 'package:analysis_server/src/services/correction/status.dart';
 import 'package:analysis_server/src/services/correction/util.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring_internal.dart';
-import 'package:analysis_server/src/services/refactoring/visible_ranges_computer.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring_internal.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/visible_ranges_computer.dart';
 import 'package:analysis_server/src/services/search/hierarchy.dart';
 import 'package:analysis_server/src/services/search/search_engine.dart';
 import 'package:analysis_server/src/utilities/strings.dart';
diff --git a/pkg/analysis_server/lib/src/services/refactoring/move_file.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/move_file.dart
similarity index 98%
rename from pkg/analysis_server/lib/src/services/refactoring/move_file.dart
rename to pkg/analysis_server/lib/src/services/refactoring/legacy/move_file.dart
index f3f985b..fab53d5 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/move_file.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/move_file.dart
@@ -4,8 +4,8 @@
 
 import 'package:analysis_server/src/protocol_server.dart' hide Element;
 import 'package:analysis_server/src/services/correction/status.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring_internal.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring_internal.dart';
 import 'package:analysis_server/src/utilities/extensions/ast.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/analysis/session.dart';
diff --git a/pkg/analysis_server/lib/src/services/refactoring/naming_conventions.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/naming_conventions.dart
similarity index 100%
rename from pkg/analysis_server/lib/src/services/refactoring/naming_conventions.dart
rename to pkg/analysis_server/lib/src/services/refactoring/legacy/naming_conventions.dart
diff --git a/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/refactoring.dart
similarity index 93%
rename from pkg/analysis_server/lib/src/services/refactoring/refactoring.dart
rename to pkg/analysis_server/lib/src/services/refactoring/legacy/refactoring.dart
index 88c21de..12758bf 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/refactoring.dart
@@ -3,22 +3,22 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/status.dart';
-import 'package:analysis_server/src/services/refactoring/convert_getter_to_method.dart';
-import 'package:analysis_server/src/services/refactoring/convert_method_to_getter.dart';
-import 'package:analysis_server/src/services/refactoring/extract_local.dart';
-import 'package:analysis_server/src/services/refactoring/extract_method.dart';
-import 'package:analysis_server/src/services/refactoring/extract_widget.dart';
-import 'package:analysis_server/src/services/refactoring/inline_local.dart';
-import 'package:analysis_server/src/services/refactoring/inline_method.dart';
-import 'package:analysis_server/src/services/refactoring/move_file.dart';
-import 'package:analysis_server/src/services/refactoring/rename_class_member.dart';
-import 'package:analysis_server/src/services/refactoring/rename_constructor.dart';
-import 'package:analysis_server/src/services/refactoring/rename_extension_member.dart';
-import 'package:analysis_server/src/services/refactoring/rename_import.dart';
-import 'package:analysis_server/src/services/refactoring/rename_label.dart';
-import 'package:analysis_server/src/services/refactoring/rename_library.dart';
-import 'package:analysis_server/src/services/refactoring/rename_local.dart';
-import 'package:analysis_server/src/services/refactoring/rename_unit_member.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/convert_getter_to_method.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/convert_method_to_getter.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/extract_local.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/extract_method.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/extract_widget.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/inline_local.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/inline_method.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/move_file.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/rename_class_member.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/rename_constructor.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/rename_extension_member.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/rename_import.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/rename_label.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/rename_library.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/rename_local.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/rename_unit_member.dart';
 import 'package:analysis_server/src/services/search/search_engine.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/analysis/session.dart';
diff --git a/pkg/analysis_server/lib/src/services/refactoring/refactoring_internal.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/refactoring_internal.dart
similarity index 97%
rename from pkg/analysis_server/lib/src/services/refactoring/refactoring_internal.dart
rename to pkg/analysis_server/lib/src/services/refactoring/legacy/refactoring_internal.dart
index d1b121e..76be8d4 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/refactoring_internal.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/refactoring_internal.dart
@@ -6,7 +6,7 @@
 
 import 'package:analysis_server/src/protocol_server.dart' hide Element;
 import 'package:analysis_server/src/services/correction/status.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
 import 'package:analysis_server/src/services/search/search_engine.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/generated/source.dart';
diff --git a/pkg/analysis_server/lib/src/services/refactoring/refactoring_manager.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/refactoring_manager.dart
similarity index 99%
rename from pkg/analysis_server/lib/src/services/refactoring/refactoring_manager.dart
rename to pkg/analysis_server/lib/src/services/refactoring/legacy/refactoring_manager.dart
index bcc0341..730a8c8 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/refactoring_manager.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/refactoring_manager.dart
@@ -9,7 +9,7 @@
 import 'package:analysis_server/src/protocol_server.dart'
     hide AnalysisError, Element;
 import 'package:analysis_server/src/services/correction/status.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
 import 'package:analysis_server/src/services/search/search_engine.dart';
 import 'package:analyzer/dart/analysis/session.dart';
 import 'package:analyzer/dart/element/element.dart';
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/rename.dart
similarity index 95%
rename from pkg/analysis_server/lib/src/services/refactoring/rename.dart
rename to pkg/analysis_server/lib/src/services/refactoring/legacy/rename.dart
index a4cba5b..bc26e15 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/rename.dart
@@ -5,8 +5,8 @@
 import 'package:analysis_server/src/protocol_server.dart' hide Element;
 import 'package:analysis_server/src/services/correction/status.dart';
 import 'package:analysis_server/src/services/correction/util.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring_internal.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring_internal.dart';
 import 'package:analysis_server/src/services/search/search_engine.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/generated/java_core.dart';
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_class_member.dart
similarity index 96%
rename from pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart
rename to pkg/analysis_server/lib/src/services/refactoring/legacy/rename_class_member.dart
index 7661de2..cafd967 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_class_member.dart
@@ -6,11 +6,11 @@
     hide Element, ElementKind;
 import 'package:analysis_server/src/services/correction/status.dart';
 import 'package:analysis_server/src/services/correction/util.dart';
-import 'package:analysis_server/src/services/refactoring/naming_conventions.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring_internal.dart';
-import 'package:analysis_server/src/services/refactoring/rename.dart';
-import 'package:analysis_server/src/services/refactoring/visible_ranges_computer.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/naming_conventions.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring_internal.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/rename.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/visible_ranges_computer.dart';
 import 'package:analysis_server/src/services/search/hierarchy.dart';
 import 'package:analysis_server/src/services/search/search_engine.dart';
 import 'package:analysis_server/src/utilities/strings.dart';
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_constructor.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_constructor.dart
similarity index 93%
rename from pkg/analysis_server/lib/src/services/refactoring/rename_constructor.dart
rename to pkg/analysis_server/lib/src/services/refactoring/legacy/rename_constructor.dart
index 134d6e4..d4972cb 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_constructor.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_constructor.dart
@@ -5,10 +5,10 @@
 import 'package:analysis_server/src/protocol_server.dart' hide Element;
 import 'package:analysis_server/src/services/correction/status.dart';
 import 'package:analysis_server/src/services/correction/util.dart';
-import 'package:analysis_server/src/services/refactoring/naming_conventions.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring_internal.dart';
-import 'package:analysis_server/src/services/refactoring/rename.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/naming_conventions.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring_internal.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/rename.dart';
 import 'package:analysis_server/src/services/search/hierarchy.dart';
 import 'package:analyzer/dart/analysis/session.dart';
 import 'package:analyzer/dart/ast/ast.dart';
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_extension_member.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_extension_member.dart
similarity index 95%
rename from pkg/analysis_server/lib/src/services/refactoring/rename_extension_member.dart
rename to pkg/analysis_server/lib/src/services/refactoring/legacy/rename_extension_member.dart
index f0b65ab..c1bb99b 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_extension_member.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_extension_member.dart
@@ -6,10 +6,10 @@
     hide Element, ElementKind;
 import 'package:analysis_server/src/services/correction/status.dart';
 import 'package:analysis_server/src/services/correction/util.dart';
-import 'package:analysis_server/src/services/refactoring/naming_conventions.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
-import 'package:analysis_server/src/services/refactoring/rename.dart';
-import 'package:analysis_server/src/services/refactoring/visible_ranges_computer.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/naming_conventions.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/rename.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/visible_ranges_computer.dart';
 import 'package:analysis_server/src/services/search/hierarchy.dart';
 import 'package:analysis_server/src/services/search/search_engine.dart';
 import 'package:analyzer/dart/analysis/session.dart';
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_import.dart
similarity index 92%
rename from pkg/analysis_server/lib/src/services/refactoring/rename_import.dart
rename to pkg/analysis_server/lib/src/services/refactoring/legacy/rename_import.dart
index edcdd80..01e2ccd 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_import.dart
@@ -4,10 +4,10 @@
 
 import 'package:analysis_server/src/protocol_server.dart';
 import 'package:analysis_server/src/services/correction/status.dart';
-import 'package:analysis_server/src/services/refactoring/naming_conventions.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring_internal.dart';
-import 'package:analysis_server/src/services/refactoring/rename.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/naming_conventions.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring_internal.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/rename.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/analysis/session.dart';
 import 'package:analyzer/dart/ast/ast.dart';
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_label.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_label.dart
similarity index 81%
rename from pkg/analysis_server/lib/src/services/refactoring/rename_label.dart
rename to pkg/analysis_server/lib/src/services/refactoring/legacy/rename_label.dart
index a2ca221..b6c3710 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_label.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_label.dart
@@ -3,9 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/status.dart';
-import 'package:analysis_server/src/services/refactoring/naming_conventions.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
-import 'package:analysis_server/src/services/refactoring/rename.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/naming_conventions.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/rename.dart';
 import 'package:analyzer/dart/element/element.dart';
 
 /// A [Refactoring] for renaming [LabelElement]s.
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_library.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_library.dart
similarity index 82%
rename from pkg/analysis_server/lib/src/services/refactoring/rename_library.dart
rename to pkg/analysis_server/lib/src/services/refactoring/legacy/rename_library.dart
index ae5d654..1423092 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_library.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_library.dart
@@ -3,9 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/status.dart';
-import 'package:analysis_server/src/services/refactoring/naming_conventions.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
-import 'package:analysis_server/src/services/refactoring/rename.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/naming_conventions.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/rename.dart';
 import 'package:analyzer/dart/element/element.dart';
 
 /// A [Refactoring] for renaming [LibraryElement]s.
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_local.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_local.dart
similarity index 94%
rename from pkg/analysis_server/lib/src/services/refactoring/rename_local.dart
rename to pkg/analysis_server/lib/src/services/refactoring/legacy/rename_local.dart
index 26b9a08..1df2986 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_local.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_local.dart
@@ -6,10 +6,10 @@
     hide Element, ElementKind;
 import 'package:analysis_server/src/services/correction/status.dart';
 import 'package:analysis_server/src/services/correction/util.dart';
-import 'package:analysis_server/src/services/refactoring/naming_conventions.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
-import 'package:analysis_server/src/services/refactoring/rename.dart';
-import 'package:analysis_server/src/services/refactoring/visible_ranges_computer.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/naming_conventions.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/rename.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/visible_ranges_computer.dart';
 import 'package:analysis_server/src/services/search/hierarchy.dart';
 import 'package:analyzer/dart/analysis/session.dart';
 import 'package:analyzer/dart/ast/ast.dart';
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_unit_member.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_unit_member.dart
similarity index 97%
rename from pkg/analysis_server/lib/src/services/refactoring/rename_unit_member.dart
rename to pkg/analysis_server/lib/src/services/refactoring/legacy/rename_unit_member.dart
index caa5679..0ef382b 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_unit_member.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_unit_member.dart
@@ -6,9 +6,9 @@
     show newLocation_fromElement, newLocation_fromMatch;
 import 'package:analysis_server/src/services/correction/status.dart';
 import 'package:analysis_server/src/services/correction/util.dart';
-import 'package:analysis_server/src/services/refactoring/naming_conventions.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
-import 'package:analysis_server/src/services/refactoring/rename.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/naming_conventions.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/rename.dart';
 import 'package:analysis_server/src/services/search/element_visitors.dart';
 import 'package:analysis_server/src/services/search/search_engine.dart';
 import 'package:analysis_server/src/utilities/flutter.dart';
diff --git a/pkg/analysis_server/lib/src/services/refactoring/visible_ranges_computer.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/visible_ranges_computer.dart
similarity index 100%
rename from pkg/analysis_server/lib/src/services/refactoring/visible_ranges_computer.dart
rename to pkg/analysis_server/lib/src/services/refactoring/legacy/visible_ranges_computer.dart
diff --git a/pkg/analysis_server/test/edit/refactoring_test.dart b/pkg/analysis_server/test/edit/refactoring_test.dart
index e397c48..f080f50 100644
--- a/pkg/analysis_server/test/edit/refactoring_test.dart
+++ b/pkg/analysis_server/test/edit/refactoring_test.dart
@@ -6,7 +6,7 @@
 
 import 'package:analysis_server/protocol/protocol.dart';
 import 'package:analysis_server/protocol/protocol_generated.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring_manager.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring_manager.dart';
 import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:test/test.dart';
diff --git a/pkg/analysis_server/test/services/refactoring/abstract_refactoring.dart b/pkg/analysis_server/test/services/refactoring/abstract_refactoring.dart
index 010d536..793296a 100644
--- a/pkg/analysis_server/test/services/refactoring/abstract_refactoring.dart
+++ b/pkg/analysis_server/test/services/refactoring/abstract_refactoring.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/status.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
 import 'package:analysis_server/src/services/search/search_engine.dart';
 import 'package:analysis_server/src/services/search/search_engine_internal.dart';
 import 'package:analyzer/src/generated/source.dart';
diff --git a/pkg/analysis_server/test/services/refactoring/abstract_rename.dart b/pkg/analysis_server/test/services/refactoring/abstract_rename.dart
index dab7e2c..9bbe6a5 100644
--- a/pkg/analysis_server/test/services/refactoring/abstract_rename.dart
+++ b/pkg/analysis_server/test/services/refactoring/abstract_rename.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/namespace.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/dart/ast/element_locator.dart';
diff --git a/pkg/analysis_server/test/services/refactoring/convert_getter_to_method_test.dart b/pkg/analysis_server/test/services/refactoring/convert_getter_to_method_test.dart
index a0a8d9a..29d6dd9 100644
--- a/pkg/analysis_server/test/services/refactoring/convert_getter_to_method_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/convert_getter_to_method_test.dart
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart' hide ElementKind;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
diff --git a/pkg/analysis_server/test/services/refactoring/convert_method_to_getter_test.dart b/pkg/analysis_server/test/services/refactoring/convert_method_to_getter_test.dart
index 3c20426..af7fa9a 100644
--- a/pkg/analysis_server/test/services/refactoring/convert_method_to_getter_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/convert_method_to_getter_test.dart
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart'
     show RefactoringProblemSeverity;
diff --git a/pkg/analysis_server/test/services/refactoring/extract_local_test.dart b/pkg/analysis_server/test/services/refactoring/extract_local_test.dart
index 018abef..b2db53c 100644
--- a/pkg/analysis_server/test/services/refactoring/extract_local_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/extract_local_test.dart
@@ -5,7 +5,7 @@
 import 'dart:convert';
 
 import 'package:analysis_server/src/services/linter/lint_names.dart';
-import 'package:analysis_server/src/services/refactoring/extract_local.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/extract_local.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
diff --git a/pkg/analysis_server/test/services/refactoring/extract_method_test.dart b/pkg/analysis_server/test/services/refactoring/extract_method_test.dart
index 4335a2d..759b9c5 100644
--- a/pkg/analysis_server/test/services/refactoring/extract_method_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/extract_method_test.dart
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analysis_server/src/services/refactoring/extract_method.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/extract_method.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
diff --git a/pkg/analysis_server/test/services/refactoring/extract_widget_test.dart b/pkg/analysis_server/test/services/refactoring/extract_widget_test.dart
index eabe685..2c5b473 100644
--- a/pkg/analysis_server/test/services/refactoring/extract_widget_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/extract_widget_test.dart
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analysis_server/src/services/refactoring/extract_widget.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/extract_widget.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
diff --git a/pkg/analysis_server/test/services/refactoring/inline_local_test.dart b/pkg/analysis_server/test/services/refactoring/inline_local_test.dart
index 3f299ed..174be56 100644
--- a/pkg/analysis_server/test/services/refactoring/inline_local_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/inline_local_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/status.dart';
-import 'package:analysis_server/src/services/refactoring/inline_local.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/inline_local.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart' hide Element;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
diff --git a/pkg/analysis_server/test/services/refactoring/inline_method_test.dart b/pkg/analysis_server/test/services/refactoring/inline_method_test.dart
index 372ce62..d504889 100644
--- a/pkg/analysis_server/test/services/refactoring/inline_method_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/inline_method_test.dart
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analysis_server/src/services/refactoring/inline_method.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/inline_method.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart' hide Element;
 import 'package:test/test.dart';
diff --git a/pkg/analysis_server/test/services/refactoring/move_file_test.dart b/pkg/analysis_server/test/services/refactoring/move_file_test.dart
index c4baa27..c605bcd 100644
--- a/pkg/analysis_server/test/services/refactoring/move_file_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/move_file_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/protocol_server.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
diff --git a/pkg/analysis_server/test/services/refactoring/naming_conventions_test.dart b/pkg/analysis_server/test/services/refactoring/naming_conventions_test.dart
index 05be8f8..d721d15 100644
--- a/pkg/analysis_server/test/services/refactoring/naming_conventions_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/naming_conventions_test.dart
@@ -3,8 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/correction/status.dart';
-import 'package:analysis_server/src/services/refactoring/naming_conventions.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/naming_conventions.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart'
     show RefactoringProblemSeverity;
 import 'package:test_reflective_loader/test_reflective_loader.dart';
diff --git a/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart b/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart
index acb01ea..a690c71 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analysis_server/src/services/linter/lint_names.dart';
-import 'package:analysis_server/src/services/refactoring/refactoring.dart';
+import 'package:analysis_server/src/services/refactoring/legacy/refactoring.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
diff --git a/pkg/dart2js_info/bin/src/to_devtools_format.dart b/pkg/dart2js_info/bin/src/to_devtools_format.dart
index 8e12f5d..9469c95 100644
--- a/pkg/dart2js_info/bin/src/to_devtools_format.dart
+++ b/pkg/dart2js_info/bin/src/to_devtools_format.dart
@@ -1,13 +1,13 @@
+library dart2js_info.bin.to_devtools_format;
+
 import 'dart:convert';
 import 'dart:io';
 
 import 'package:args/command_runner.dart';
 import 'package:dart2js_info/info.dart';
 import 'package:dart2js_info/src/io.dart';
-import 'package:dart2js_info/src/util.dart';
+import 'package:dart2js_info/src/util.dart' show longName, libraryGroupName;
 import 'package:vm_snapshot_analysis/program_info.dart' as vm;
-import 'package:vm_snapshot_analysis/treemap.dart';
-
 import 'usage_exception.dart';
 
 /// Command that converts a `--dump-info` JSON output into a format ingested by Devtools.
@@ -39,12 +39,12 @@
     final AllInfo allInfo = await infoFromFile(args.rest.first);
     final builder = ProgramInfoBuilder(allInfo);
     vm.ProgramInfo programInfo = builder.build(allInfo);
-    Map<String, dynamic> treeMap = treemapFromInfo(programInfo);
-    var treeMapJson = jsonEncode(treeMap);
+    Map<String, dynamic> programInfoTree = programInfo.toJson();
+    // TODO: convert the programInfo tree to a treemap
     if (outputPath == null) {
-      print(treeMapJson);
+      print(jsonEncode(programInfoTree));
     } else {
-      await File(outputPath).writeAsString(treeMapJson);
+      await File(outputPath).writeAsString(jsonEncode(programInfoTree));
     }
   }
 }
@@ -61,17 +61,34 @@
 
   final List<vm.ProgramInfoNode> outputInfo = [];
 
+  /// Mapping between the filename of the outputUnit and the [vm.ProgramInfo]
+  /// subtree representing a program unit (main or deferred).
+  final Map<String, vm.ProgramInfo> outputUnits = {};
+
+  /// Mapping between the name of the library [vm.ProgramInfoNode]
+  /// object and its corresponding outputUnit [vm.ProgramInfo] tree.
+  final Map<String, vm.ProgramInfo> libraryUnits = {};
+
+  /// Mapping between the name of an [Info] object and the corresponding
+  /// [vm.ProgramInfoNode] object.
+  ///
+  /// For packages and libraries, since their children can be split among
+  /// different outputUnits, a composite name is used instead to differentiate
+  /// between [vm.ProgramInfoNode] in different outputUnits.
+  final Map<String, vm.ProgramInfoNode> infoNodesByName = {};
+
+  /// A unique key composed of the name of an [Info] object and the
+  /// filename of the outputUnit.
+  String compositeName(String name, String outputUnitName) =>
+      "$name/$outputUnitName";
+
   /// Mapping between the name of a [Info] object and the corresponding
   /// [vm.ProgramInfoNode] object.
-  Map<String, vm.ProgramInfoNode> infoNodesByName = {};
-
-  /// Mapping between the id (aka coverageId) of an [AllInfo] node and the
-  /// corresponding [vm.ProgramInfoNode] object.
   final Map<String, vm.ProgramInfoNode> infoNodesById = {};
 
-  /// Mapping between package names and the corresponding [vm.ProgramInfoNode]
-  /// objects of [vm.NodeType.packageNode].
-  final Map<String, vm.ProgramInfoNode> packageInfoNodes = {};
+  /// Mapping between the composite name of a package and the corresponding
+  /// [vm.ProgramInfoNode] objects of [vm.NodeType.packageNode].
+  final Map<String, dynamic> packageInfoNodes = {};
 
   /// Mapping between an <unnamed> [LibraryInfo] object and the name of the
   /// corresponding [vm.ProgramInfoNode] object.
@@ -79,33 +96,289 @@
 
   ProgramInfoBuilder(this.info);
 
+  /// Collect libraries into packages and aggregate their sizes.
+  void makePackage(LibraryInfo libraryInfo, String outputUnitName) {
+    vm.ProgramInfo outputUnit = outputUnits[outputUnitName]!;
+    String libraryName = libraryInfo.name;
+    if (libraryInfo.name == '<unnamed>') {
+      libraryName = longName(libraryInfo, useLibraryUri: true, forId: true);
+    }
+    String packageName = libraryGroupName(libraryInfo) ?? libraryName;
+    vm.ProgramInfoNode? packageInfoNode = packageInfoNodes[packageName];
+    if (packageInfoNode == null) {
+      String compositePackageName = compositeName(packageName, outputUnitName);
+      vm.ProgramInfoNode newPackage = outputUnit.makeNode(
+          name: compositePackageName,
+          parent: outputUnit.root,
+          type: vm.NodeType.packageNode);
+      newPackage.size = libraryInfo.size;
+      packageInfoNodes[compositePackageName] = newPackage;
+      outputUnit.root.children[compositePackageName] = newPackage;
+      outputInfo.add(newPackage);
+      var packageNode = infoNodesByName[compositePackageName];
+      assert(packageNode == null,
+          "encountered package with duplicated name: $compositePackageName");
+      infoNodesByName[compositePackageName] = newPackage;
+    } else {
+      packageInfoNode.size = (packageInfoNode.size ?? 0) + libraryInfo.size;
+    }
+  }
+
+  void makeLibrary(LibraryInfo libraryInfo, String outputUnitName) {
+    vm.ProgramInfo outputUnit = outputUnits[outputUnitName]!;
+    String libraryName = libraryInfo.name;
+    if (libraryName == '<unnamed>') {
+      libraryName = longName(libraryInfo, useLibraryUri: true, forId: true);
+      unnamedLibraries[libraryInfo] = libraryName;
+    }
+    String packageName = libraryGroupName(libraryInfo) ?? libraryName;
+    String compositePackageName = compositeName(packageName, outputUnitName);
+    vm.ProgramInfoNode parentNode = infoNodesByName[compositePackageName]!;
+    String compositeLibraryName = compositeName(libraryName, outputUnitName);
+    vm.ProgramInfoNode newLibrary = outputUnit.makeNode(
+        name: compositeLibraryName,
+        parent: parentNode,
+        type: vm.NodeType.libraryNode);
+    newLibrary.size = libraryInfo.size;
+    parentNode.children[newLibrary.name] = newLibrary;
+    vm.ProgramInfoNode? libraryNode = infoNodesByName[compositeLibraryName];
+    assert(libraryNode == null,
+        "encountered library with duplicated name: $compositeLibraryName");
+    infoNodesByName[compositeLibraryName] = newLibrary;
+    outputInfo.add(newLibrary);
+  }
+
+  void makeFunction(FunctionInfo functionInfo) {
+    Info? parent = functionInfo.parent;
+    String outputUnitName = functionInfo.outputUnit!.filename;
+    vm.ProgramInfo? outputUnit = outputUnits[outputUnitName];
+    if (parent != null && outputUnit != null) {
+      assert(parent.kind == kindFromString('library'));
+      vm.ProgramInfoNode parentNode;
+      if (parent.kind == kindFromString('library')) {
+        if (parent.name == "<unnamed>") {
+          var tempName =
+              compositeName(unnamedLibraries[parent]!, outputUnitName);
+          parentNode = infoNodesByName[tempName]!;
+        } else {
+          parentNode =
+              infoNodesByName[compositeName(parent.name, outputUnitName)]!;
+        }
+      } else {
+        parentNode = infoNodesByName[parent.name]!;
+      }
+      vm.ProgramInfoNode newFunction = outputUnit.makeNode(
+          name: functionInfo.name,
+          parent: parentNode,
+          type: vm.NodeType.functionNode);
+      newFunction.size = functionInfo.size;
+      parentNode.children[newFunction.name] = newFunction;
+      vm.ProgramInfoNode? functionNode = infoNodesByName[newFunction.name];
+      assert(functionNode == null,
+          "encountered function with duplicated name: $newFunction.name");
+      infoNodesByName[newFunction.name] = newFunction;
+      outputInfo.add(newFunction);
+    }
+  }
+
+  void makeClass(ClassInfo classInfo) {
+    Info? parent = classInfo.parent;
+    String outputUnitName = classInfo.outputUnit!.filename;
+    vm.ProgramInfo? outputUnit = outputUnits[outputUnitName];
+    if (parent != null && outputUnit != null) {
+      vm.ProgramInfoNode parentNode;
+      if (parent.kind == kindFromString('library')) {
+        if (parent.name == "<unnamed>") {
+          var tempName =
+              compositeName(unnamedLibraries[parent]!, outputUnitName);
+          parentNode = infoNodesByName[tempName]!;
+        } else {
+          parentNode =
+              infoNodesByName[compositeName(parent.name, outputUnitName)]!;
+        }
+      } else {
+        parentNode = infoNodesByName[parent.name]!;
+      }
+      vm.ProgramInfoNode newClass = outputUnit.makeNode(
+          name: classInfo.name,
+          parent: parentNode,
+          type: vm.NodeType.classNode);
+      newClass.size = classInfo.size;
+      parentNode.children[newClass.name] = newClass;
+      vm.ProgramInfoNode? classNode = infoNodesByName[newClass.name];
+      assert(classNode == null,
+          "encountered class with duplicated name: $newClass.name");
+      infoNodesByName[newClass.name] = newClass;
+      outputInfo.add(newClass);
+    }
+  }
+
+  /// Fields are currently assigned [vm.NodeType.other].
+  ///
+  /// Note: we might want to create a separate [vm.NodeType.fieldNode] to
+  /// differentiate fields from other miscellaneous nodes for constructing
+  /// the call graph.
+  void makeField(FieldInfo fieldInfo) {
+    Info? parent = fieldInfo.parent;
+    String outputUnitName = fieldInfo.outputUnit!.filename;
+    vm.ProgramInfo? outputUnit = outputUnits[outputUnitName];
+    if (parent != null && outputUnit != null) {
+      vm.ProgramInfoNode parentNode;
+      if (parent.kind == kindFromString('library')) {
+        if (parent.name == "<unnamed>") {
+          var tempName =
+              compositeName(unnamedLibraries[parent]!, outputUnitName);
+          parentNode = infoNodesByName[tempName]!;
+        } else {
+          parentNode =
+              infoNodesByName[compositeName(parent.name, outputUnitName)]!;
+        }
+      } else {
+        parentNode = infoNodesByName[parent.name]!;
+      }
+      vm.ProgramInfoNode newField = outputUnit.makeNode(
+          name: fieldInfo.name, parent: parentNode, type: vm.NodeType.other);
+      newField.size = fieldInfo.size;
+      parentNode.children[newField.name] = newField;
+      vm.ProgramInfoNode? fieldNode = infoNodesByName[newField.name];
+      assert(fieldNode == null,
+          "encountered field with duplicated name: $newField.name");
+      infoNodesByName[newField.name] = newField;
+      outputInfo.add(newField);
+    }
+  }
+
+  void makeConstant(ConstantInfo constantInfo) {
+    String? constantName = constantInfo.code.first.text ??
+        "${constantInfo.code.first.start}/${constantInfo.code.first.end}";
+    String outputUnitName = constantInfo.outputUnit!.filename;
+    vm.ProgramInfo? outputUnit = outputUnits[outputUnitName];
+    vm.ProgramInfoNode newConstant = outputUnit!.makeNode(
+        name: constantName, parent: outputUnit.root, type: vm.NodeType.other);
+    newConstant.size = constantInfo.size;
+    outputUnit.root.children[newConstant.name] = newConstant;
+    vm.ProgramInfoNode? constantNode = infoNodesByName[newConstant.name];
+    assert(constantNode == null,
+        "encountered constant with duplicated name: $newConstant.name");
+    infoNodesByName[newConstant.name] = newConstant;
+    outputInfo.add(newConstant);
+  }
+
+  void makeTypedef(TypedefInfo typedefInfo) {
+    String outputUnitName = typedefInfo.outputUnit!.filename;
+    vm.ProgramInfo? outputUnit = outputUnits[outputUnitName];
+    vm.ProgramInfoNode newTypedef = outputUnit!.makeNode(
+        name: typedefInfo.name,
+        parent: outputUnit.root,
+        type: vm.NodeType.other);
+    newTypedef.size = typedefInfo.size;
+    vm.ProgramInfoNode? typedefNode = infoNodesByName[newTypedef.name];
+    assert(typedefNode == null,
+        "encountered constant with duplicated name: $newTypedef.name");
+    outputInfo.add(newTypedef);
+  }
+
+  void makeClassType(ClassTypeInfo classTypeInfo) {
+    Info? parent = classTypeInfo.parent;
+    String outputUnitName = classTypeInfo.outputUnit!.filename;
+    vm.ProgramInfo? outputUnit = outputUnits[outputUnitName];
+    if (parent != null && outputUnit != null) {
+      assert(parent.kind == kindFromString('library'));
+      vm.ProgramInfoNode parentNode;
+      if (parent.name == "<unnamed>") {
+        var tempName = compositeName(unnamedLibraries[parent]!, outputUnitName);
+        parentNode = infoNodesByName[tempName]!;
+      } else {
+        parentNode =
+            infoNodesByName[compositeName(parent.name, outputUnitName)]!;
+      }
+      vm.ProgramInfoNode newClassType = outputUnit.makeNode(
+          name: classTypeInfo.name,
+          parent: parentNode,
+          type: vm.NodeType.other);
+      newClassType.size = classTypeInfo.size;
+      vm.ProgramInfoNode? classTypeNode = infoNodesByName[newClassType.name];
+      assert(classTypeNode == null,
+          "encountered classType with duplicated name: $newClassType.name");
+      infoNodesByName[newClassType.name] = newClassType;
+      outputInfo.add(newClassType);
+    }
+  }
+
+  void makeClosure(ClosureInfo closureInfo) {
+    Info? parent = closureInfo.parent;
+    String outputUnitName = closureInfo.outputUnit!.filename;
+    vm.ProgramInfo? outputUnit = outputUnits[outputUnitName];
+    if (parent != null && outputUnit != null) {
+      vm.ProgramInfoNode parentNode;
+      if (parent.kind == kindFromString('library')) {
+        if (parent.name == "<unnamed>") {
+          var tempName =
+              compositeName(unnamedLibraries[parent]!, outputUnitName);
+          parentNode = infoNodesByName[tempName]!;
+        } else {
+          parentNode =
+              infoNodesByName[compositeName(parent.name, outputUnitName)]!;
+        }
+      } else {
+        parentNode = infoNodesByName[parent.name]!;
+      }
+      vm.ProgramInfoNode newClosure = outputUnit.makeNode(
+          name: closureInfo.name,
+          parent: parentNode,
+          // ProgramInfo trees consider closures and functions to both be of the functionNode type.
+          type: vm.NodeType.functionNode);
+      newClosure.size = closureInfo.size;
+      parentNode.children[newClosure.name] = newClosure;
+      vm.ProgramInfoNode? closureNode = infoNodesByName[newClosure.name];
+      assert(closureNode == null,
+          "encountered closure with duplicated name: $newClosure.name");
+      infoNodesByName[newClosure.name] = newClosure;
+      outputInfo.add(newClosure);
+    }
+  }
+
   @override
-  vm.ProgramInfoNode visitAll(AllInfo info) {
-    outputInfo.add(program.root);
-    info.libraries.forEach(makePackage);
-    info.packages.forEach(visitPackage);
-    info.libraries.forEach(makeLibrary);
-    info.libraries.forEach(visitLibrary);
+  vm.ProgramInfoNode visitAll(AllInfo info, String outputUnitName) {
+    outputInfo.add(outputUnits[outputUnitName]!.root);
+    visitProgram(info.program!);
+    for (var package in info.packages) {
+      visitPackage(package, outputUnitName);
+    }
+    for (var library in info.libraries) {
+      visitLibrary(library, outputUnitName);
+    }
     info.constants.forEach(makeConstant);
     info.constants.forEach(visitConstant);
-    return program.root;
+    return outputUnits[outputUnitName]!.root;
+  }
+
+  @override
+  vm.ProgramInfoNode visitOutput(OutputUnitInfo info) {
+    vm.ProgramInfo? outputUnit = outputUnits[info.filename];
+    assert(outputUnit == null, "encountered outputUnit with duplicated name");
+    var newUnit = vm.ProgramInfo();
+    outputUnits[info.filename] = newUnit;
+    outputUnits[info.filename]!.root.size = info.size;
+    return outputUnits[info.filename]!.root;
   }
 
   @override
   vm.ProgramInfoNode visitProgram(ProgramInfo info) {
-    throw Exception('Not supported for devtools format.');
+    program.root.size = info.size;
+    return program.root;
   }
 
   @override
-  vm.ProgramInfoNode visitPackage(PackageInfo info) {
-    info.libraries.forEach(makePackage);
-    info.libraries.forEach(makeLibrary);
-    info.libraries.forEach(visitLibrary);
-    return infoNodesByName[info.name]!;
+  vm.ProgramInfoNode visitPackage(PackageInfo info, String outputUnitName) {
+    for (var library in info.libraries) {
+      visitLibrary(library, outputUnitName);
+    }
+    return infoNodesByName[compositeName(info.name, outputUnitName)]!;
   }
 
   @override
-  vm.ProgramInfoNode visitLibrary(LibraryInfo info) {
+  vm.ProgramInfoNode visitLibrary(LibraryInfo info, String outputUnitName) {
     info.topLevelFunctions.forEach(makeFunction);
     info.topLevelFunctions.forEach(visitFunction);
     info.topLevelVariables.forEach(makeField);
@@ -116,8 +389,9 @@
     info.classTypes.forEach(visitClassType);
     info.typedefs.forEach(makeTypedef);
     info.typedefs.forEach(visitTypedef);
-    return infoNodesByName[info.name] ??
-        infoNodesByName[unnamedLibraries[info]]!;
+    return infoNodesByName[compositeName(info.name, outputUnitName)] ??
+        infoNodesByName[
+            compositeName(unnamedLibraries[info]!, outputUnitName)]!;
   }
 
   @override
@@ -157,7 +431,8 @@
 
   @override
   vm.ProgramInfoNode visitConstant(ConstantInfo info) {
-    return infoNodesByName[info.code.first.text!]!;
+    return infoNodesByName[info.code.first.text] ??
+        infoNodesByName["${info.code.first.start}/${info.code.first.end}"]!;
   }
 
   @override
@@ -165,191 +440,18 @@
     return infoNodesByName[info.name]!;
   }
 
-  @override
-  vm.ProgramInfoNode visitOutput(OutputUnitInfo info) {
-    throw Exception("For deferred loading.");
-  }
-
   vm.ProgramInfo build(AllInfo info) {
-    visitAll(info);
+    info.outputUnits.forEach(visitOutput);
+    for (var outputUnitName in outputUnits.keys) {
+      for (var library in info.libraries) {
+        makePackage(library, outputUnitName);
+        makeLibrary(library, outputUnitName);
+      }
+    }
+    for (var outputUnitName in outputUnits.keys) {
+      visitAll(info, outputUnitName);
+      program.root.children[outputUnitName] = outputUnits[outputUnitName]!.root;
+    }
     return program;
   }
-
-  /// Collect libraries into packages and aggregate their sizes.
-  void makePackage(LibraryInfo libraryInfo) {
-    String packageName = libraryGroupName(libraryInfo) ?? libraryInfo.name;
-    vm.ProgramInfoNode? packageInfoNode = packageInfoNodes[packageName];
-    if (packageInfoNode == null) {
-      vm.ProgramInfoNode newPackage = program.makeNode(
-          name: packageName,
-          parent: program.root,
-          type: vm.NodeType.packageNode);
-      newPackage.size = libraryInfo.size;
-      packageInfoNodes[packageName] = newPackage;
-      program.root.children[packageName] = newPackage;
-      outputInfo.add(newPackage);
-      var packageNode = infoNodesByName[newPackage.name];
-      assert(packageNode == null, "encountered package with duplicated name");
-      infoNodesByName[newPackage.name] = newPackage;
-    } else {
-      packageInfoNode.size = (packageInfoNode.size ?? 0) + libraryInfo.size;
-    }
-  }
-
-  void makeLibrary(LibraryInfo libraryInfo) {
-    String packageName = libraryGroupName(libraryInfo) ?? libraryInfo.name;
-    vm.ProgramInfoNode parentNode = infoNodesByName[packageName]!;
-    String libraryName = libraryInfo.name;
-    if (libraryName == '<unnamed>') {
-      libraryName = longName(libraryInfo, useLibraryUri: true, forId: true);
-      unnamedLibraries[libraryInfo] = libraryName;
-    }
-    vm.ProgramInfoNode newLibrary = program.makeNode(
-        name: libraryName, parent: parentNode, type: vm.NodeType.libraryNode);
-    newLibrary.size = libraryInfo.size;
-    parentNode.children[newLibrary.name] = newLibrary;
-    vm.ProgramInfoNode? libraryNode = infoNodesByName[newLibrary.name];
-    assert(libraryNode == null, "encountered library with duplicated name");
-    infoNodesByName[newLibrary.name] = newLibrary;
-    outputInfo.add(newLibrary);
-  }
-
-  void makeFunction(FunctionInfo functionInfo) {
-    Info? parent = functionInfo.parent;
-    if (parent != null) {
-      vm.ProgramInfoNode parentNode;
-      if (parent.name == "<unnamed>" &&
-          parent.kind == kindFromString('library')) {
-        parentNode = infoNodesByName[unnamedLibraries[parent]]!;
-      } else {
-        parentNode = infoNodesByName[parent.name]!;
-      }
-      vm.ProgramInfoNode newFunction = program.makeNode(
-          name: functionInfo.name,
-          parent: parentNode,
-          type: vm.NodeType.functionNode);
-      newFunction.size = functionInfo.size;
-      parentNode.children[newFunction.name] = newFunction;
-      vm.ProgramInfoNode? functionNode = infoNodesByName[newFunction.name];
-      assert(functionNode == null, "encountered function with duplicated name");
-      infoNodesByName[newFunction.name] = newFunction;
-      outputInfo.add(newFunction);
-    }
-  }
-
-  void makeClass(ClassInfo classInfo) {
-    Info? parent = classInfo.parent;
-    if (parent != null) {
-      vm.ProgramInfoNode parentNode;
-      if (parent.name == "<unnamed>" &&
-          parent.kind == kindFromString('library')) {
-        parentNode = infoNodesByName[unnamedLibraries[parent]]!;
-      } else {
-        parentNode = infoNodesByName[parent.name]!;
-      }
-      vm.ProgramInfoNode newClass = program.makeNode(
-          name: classInfo.name,
-          parent: parentNode,
-          type: vm.NodeType.classNode);
-      newClass.size = classInfo.size;
-      parentNode.children[newClass.name] = newClass;
-      vm.ProgramInfoNode? classNode = infoNodesByName[newClass.name];
-      assert(classNode == null, "encountered class with duplicated name");
-      infoNodesByName[newClass.name] = newClass;
-      outputInfo.add(newClass);
-    }
-  }
-
-  /// Fields are currently assigned [vm.NodeType.other].
-  ///
-  /// Note: we might want to create a separate [vm.NodeType.fieldNode] to
-  /// differentiate fields from other miscellaneous nodes for constructing
-  /// the call graph.
-  void makeField(FieldInfo fieldInfo) {
-    Info? parent = fieldInfo.parent;
-    if (parent != null) {
-      vm.ProgramInfoNode parentNode;
-      if (parent.name == "<unnamed>" &&
-          parent.kind == kindFromString('library')) {
-        parentNode = infoNodesByName[unnamedLibraries[parent]]!;
-      } else {
-        parentNode = infoNodesByName[parent.name]!;
-      }
-      vm.ProgramInfoNode newField = program.makeNode(
-          name: fieldInfo.name, parent: parentNode, type: vm.NodeType.other);
-      newField.size = fieldInfo.size;
-      parentNode.children[newField.name] = newField;
-      vm.ProgramInfoNode? fieldNode = infoNodesByName[newField.name];
-      assert(fieldNode == null, "encountered field with duplicated name");
-      infoNodesByName[newField.name] = newField;
-      outputInfo.add(newField);
-    }
-  }
-
-  void makeConstant(ConstantInfo constantInfo) {
-    String constantName = constantInfo.code.first.text!;
-    vm.ProgramInfoNode newConstant = program.makeNode(
-        name: constantName, parent: program.root, type: vm.NodeType.other);
-    newConstant.size = constantInfo.size;
-    program.root.children[newConstant.name] = newConstant;
-    vm.ProgramInfoNode? constantNode = infoNodesByName[newConstant.name];
-    assert(constantNode == null, "encountered constant with duplicated name");
-    infoNodesByName[newConstant.name] = newConstant;
-    outputInfo.add(newConstant);
-  }
-
-  void makeTypedef(TypedefInfo typedefInfo) {
-    vm.ProgramInfoNode newTypedef = program.makeNode(
-        name: typedefInfo.name, parent: program.root, type: vm.NodeType.other);
-    newTypedef.size = typedefInfo.size;
-    infoNodesByName[newTypedef.name] = newTypedef;
-    outputInfo.add(newTypedef);
-  }
-
-  void makeClassType(ClassTypeInfo classTypeInfo) {
-    Info? parent = classTypeInfo.parent;
-    if (parent != null) {
-      vm.ProgramInfoNode parentNode;
-      if (parent.name == "<unnamed>" &&
-          parent.kind == kindFromString('library')) {
-        parentNode = infoNodesByName[unnamedLibraries[parent]]!;
-      } else {
-        parentNode = infoNodesByName[parent.name]!;
-      }
-      vm.ProgramInfoNode newClassType = program.makeNode(
-          name: classTypeInfo.name,
-          parent: parentNode,
-          type: vm.NodeType.other);
-      newClassType.size = classTypeInfo.size;
-      vm.ProgramInfoNode? classTypeNode = infoNodesByName[newClassType.name];
-      assert(
-          classTypeNode == null, "encountered classType with duplicated name");
-      infoNodesByName[newClassType.name] = newClassType;
-      outputInfo.add(newClassType);
-    }
-  }
-
-  void makeClosure(ClosureInfo closureInfo) {
-    Info? parent = closureInfo.parent;
-    if (parent != null) {
-      vm.ProgramInfoNode parentNode;
-      if (parent.name == "<unnamed>" &&
-          parent.kind == kindFromString('library')) {
-        parentNode = infoNodesByName[unnamedLibraries[parent]]!;
-      } else {
-        parentNode = infoNodesByName[parent.name]!;
-      }
-      vm.ProgramInfoNode newClosure = program.makeNode(
-          name: closureInfo.name,
-          parent: parentNode,
-          // ProgramInfo trees consider closures and functions to both be of the functionNode type.
-          type: vm.NodeType.functionNode);
-      newClosure.size = closureInfo.size;
-      parentNode.children[newClosure.name] = newClosure;
-      vm.ProgramInfoNode? closureNode = infoNodesByName[newClosure.name];
-      assert(closureNode == null, "encountered closure with duplicated name");
-      infoNodesByName[newClosure.name] = newClosure;
-      outputInfo.add(newClosure);
-    }
-  }
 }
diff --git a/pkg/dart2js_info/lib/info.dart b/pkg/dart2js_info/lib/info.dart
index 051d75a..7c14f74 100644
--- a/pkg/dart2js_info/lib/info.dart
+++ b/pkg/dart2js_info/lib/info.dart
@@ -203,14 +203,8 @@
       : super(InfoKind.package, name, outputUnit, size, null);
 
   @override
-  T accept<T>(InfoVisitor<T> visitor) {
-    if (visitor is VMProgramInfoVisitor<T>) {
-      return visitor.visitPackage(this);
-    } else {
-      throw ArgumentError(
-          "PackageInfo can only be visited by a VMProgramInfoVisitor");
-    }
-  }
+  T accept<T>(InfoVisitor<T> visitor) =>
+      throw Exception("PackageInfo is not supported by InfoVisitor.");
 }
 
 /// Info associated with a library element.
@@ -620,8 +614,19 @@
 
 /// A visitor that adds implementation for PackageInfo specifically for building
 /// the VM ProgramInfo Tree from a Dart2js info tree.
-abstract class VMProgramInfoVisitor<T> extends InfoVisitor<T> {
-  T visitPackage(PackageInfo info);
+abstract class VMProgramInfoVisitor<T> {
+  T visitAll(AllInfo info, String outputUnit);
+  T visitProgram(ProgramInfo info);
+  T visitPackage(PackageInfo info, String outputUnit);
+  T visitLibrary(LibraryInfo info, String outputUnit);
+  T visitClass(ClassInfo info);
+  T visitClassType(ClassTypeInfo info);
+  T visitField(FieldInfo info);
+  T visitConstant(ConstantInfo info);
+  T visitFunction(FunctionInfo info);
+  T visitTypedef(TypedefInfo info);
+  T visitClosure(ClosureInfo info);
+  T visitOutput(OutputUnitInfo info);
 }
 
 /// A visitor that recursively walks each portion of the program. Because the
@@ -642,6 +647,11 @@
   @override
   void visitProgram(ProgramInfo info) {}
 
+  void visitPackage(PackageInfo info) {
+    throw Exception(
+        "PackageInfo objects are only defined for the VM Devtools format.");
+  }
+
   @override
   void visitLibrary(LibraryInfo info) {
     info.topLevelFunctions.forEach(visitFunction);
diff --git a/tools/VERSION b/tools/VERSION
index 890a9f6..a42fce5 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 19
 PATCH 0
-PRERELEASE 62
+PRERELEASE 63
 PRERELEASE_PATCH 0
\ No newline at end of file