From 37ed87b0384bad05e955a18a6e542384d68fa6cf Mon Sep 17 00:00:00 2001 From: Ryan Macnak Date: Wed, 14 Oct 2020 18:16:27 +0000 Subject: [PATCH] [vm, service, observatory] Bang Bang (My Type System Shot Me Down). Port the service tests and Observatory to Dart 3. Change-Id: I8a8b20d8f90acd3b5f741c93f10ba99971aa0c52 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/154825 Commit-Queue: Ryan Macnak Reviewed-by: Ben Konyi --- .dart_tool/package_config.json | 4 +- .../experimental_flags_generated.dart | 6 + runtime/observatory/BUILD.gn | 2 + runtime/observatory/analysis_options.yaml | 3 + runtime/observatory/bin/heap_snapshot.dart | 10 +- runtime/observatory/bin/shell.dart | 2 +- runtime/observatory/lib/event.dart | 70 +- runtime/observatory/lib/object_graph.dart | 371 +++--- runtime/observatory/lib/service_common.dart | 24 +- runtime/observatory/lib/service_html.dart | 16 +- runtime/observatory/lib/service_io.dart | 12 +- .../allocation_profile.dart | 29 +- .../observatory/lib/src/app/application.dart | 55 +- .../lib/src/app/location_manager.dart | 17 +- .../observatory/lib/src/app/notification.dart | 2 +- runtime/observatory/lib/src/app/page.dart | 55 +- runtime/observatory/lib/src/cli/command.dart | 16 +- .../lib/src/debugger/debugger.dart | 6 +- .../lib/src/debugger/debugger_location.dart | 86 +- .../lib/src/elements/allocation_profile.dart | 48 +- .../elements/class_allocation_profile.dart | 32 +- .../lib/src/elements/class_instances.dart | 54 +- .../lib/src/elements/class_ref.dart | 8 +- .../lib/src/elements/class_tree.dart | 55 +- .../lib/src/elements/class_view.dart | 96 +- .../lib/src/elements/code_ref.dart | 14 +- .../lib/src/elements/code_view.dart | 115 +- .../src/elements/containers/search_bar.dart | 40 +- .../containers/virtual_collection.dart | 108 +- .../src/elements/containers/virtual_tree.dart | 22 +- .../lib/src/elements/context_ref.dart | 24 +- .../lib/src/elements/context_view.dart | 36 +- .../lib/src/elements/cpu_profile.dart | 37 +- .../elements/cpu_profile/virtual_tree.dart | 54 +- .../lib/src/elements/cpu_profile_table.dart | 76 +- .../lib/src/elements/curly_block.dart | 8 +- .../lib/src/elements/debugger.dart | 434 +++---- .../lib/src/elements/error_ref.dart | 6 +- .../lib/src/elements/error_view.dart | 10 +- .../lib/src/elements/eval_box.dart | 28 +- .../lib/src/elements/field_ref.dart | 24 +- .../lib/src/elements/field_view.dart | 75 +- .../lib/src/elements/flag_list.dart | 22 +- .../lib/src/elements/function_ref.dart | 23 +- .../lib/src/elements/function_view.dart | 78 +- .../lib/src/elements/general_error.dart | 8 +- .../lib/src/elements/heap_map.dart | 70 +- .../lib/src/elements/heap_snapshot.dart | 223 ++-- .../lib/src/elements/helpers/any_ref.dart | 2 +- .../src/elements/helpers/custom_element.dart | 17 +- .../lib/src/elements/helpers/nav_bar.dart | 2 +- .../lib/src/elements/helpers/nav_menu.dart | 2 +- .../elements/helpers/rendering_scheduler.dart | 2 +- .../lib/src/elements/helpers/uris.dart | 4 +- .../lib/src/elements/icdata_ref.dart | 8 +- .../lib/src/elements/icdata_view.dart | 28 +- .../lib/src/elements/inbound_references.dart | 18 +- .../lib/src/elements/instance_ref.dart | 70 +- .../lib/src/elements/instance_view.dart | 111 +- .../src/elements/isolate/counter_chart.dart | 8 +- .../lib/src/elements/isolate/location.dart | 24 +- .../lib/src/elements/isolate/run_state.dart | 14 +- .../src/elements/isolate/shared_summary.dart | 23 +- .../lib/src/elements/isolate/summary.dart | 33 +- .../lib/src/elements/isolate_reconnect.dart | 18 +- .../lib/src/elements/isolate_ref.dart | 12 +- .../lib/src/elements/isolate_view.dart | 54 +- .../lib/src/elements/json_view.dart | 8 +- .../lib/src/elements/library_ref.dart | 8 +- .../lib/src/elements/library_view.dart | 60 +- .../elements/local_var_descriptors_ref.dart | 8 +- .../observatory/lib/src/elements/logging.dart | 22 +- .../lib/src/elements/logging_list.dart | 10 +- .../src/elements/megamorphiccache_ref.dart | 8 +- .../src/elements/megamorphiccache_view.dart | 28 +- .../lib/src/elements/metric/details.dart | 10 +- .../lib/src/elements/metric/graph.dart | 16 +- .../observatory/lib/src/elements/metrics.dart | 36 +- .../src/elements/native_memory_profiler.dart | 41 +- .../lib/src/elements/nav/class_menu.dart | 14 +- .../lib/src/elements/nav/isolate_menu.dart | 16 +- .../lib/src/elements/nav/library_menu.dart | 14 +- .../lib/src/elements/nav/menu_item.dart | 12 +- .../lib/src/elements/nav/notify.dart | 12 +- .../lib/src/elements/nav/notify_event.dart | 8 +- .../src/elements/nav/notify_exception.dart | 12 +- .../lib/src/elements/nav/refresh.dart | 8 +- .../lib/src/elements/nav/reload.dart | 30 +- .../lib/src/elements/nav/top_menu.dart | 4 +- .../lib/src/elements/nav/vm_menu.dart | 16 +- .../lib/src/elements/object_common.dart | 58 +- .../lib/src/elements/object_view.dart | 27 +- .../lib/src/elements/objectpool_ref.dart | 8 +- .../lib/src/elements/objectpool_view.dart | 36 +- .../lib/src/elements/objectstore_view.dart | 20 +- .../src/elements/observatory_application.dart | 2 +- .../lib/src/elements/pc_descriptors_ref.dart | 8 +- .../lib/src/elements/persistent_handles.dart | 24 +- .../observatory/lib/src/elements/ports.dart | 22 +- .../lib/src/elements/process_snapshot.dart | 22 +- .../lib/src/elements/retaining_path.dart | 20 +- .../src/elements/sample_buffer_control.dart | 14 +- .../lib/src/elements/script_inset.dart | 322 ++--- .../lib/src/elements/script_ref.dart | 12 +- .../lib/src/elements/script_view.dart | 34 +- .../lib/src/elements/sentinel_value.dart | 6 +- .../lib/src/elements/sentinel_view.dart | 14 +- .../src/elements/singletargetcache_ref.dart | 10 +- .../src/elements/singletargetcache_view.dart | 28 +- .../lib/src/elements/source_inset.dart | 24 +- .../lib/src/elements/source_link.dart | 26 +- .../src/elements/stack_trace_tree_config.dart | 16 +- .../strongly_reachable_instances.dart | 22 +- .../src/elements/subtypetestcache_ref.dart | 8 +- .../src/elements/subtypetestcache_view.dart | 28 +- .../lib/src/elements/timeline/dashboard.dart | 26 +- .../lib/src/elements/timeline_page.dart | 57 +- .../lib/src/elements/tree_map.dart | 5 +- .../lib/src/elements/type_arguments_ref.dart | 8 +- .../lib/src/elements/unknown_ref.dart | 8 +- .../lib/src/elements/unlinkedcall_ref.dart | 8 +- .../lib/src/elements/unlinkedcall_view.dart | 28 +- .../lib/src/elements/view_footer.dart | 4 +- .../lib/src/elements/vm_connect.dart | 16 +- .../lib/src/elements/vm_connect_target.dart | 8 +- .../observatory/lib/src/elements/vm_view.dart | 34 +- .../models/objects/allocation_profile.dart | 8 +- .../lib/src/models/objects/breakpoint.dart | 8 +- .../lib/src/models/objects/class.dart | 42 +- .../lib/src/models/objects/code.dart | 24 +- .../lib/src/models/objects/context.dart | 8 +- .../lib/src/models/objects/error.dart | 4 +- .../lib/src/models/objects/event.dart | 12 +- .../lib/src/models/objects/field.dart | 22 +- .../lib/src/models/objects/frame.dart | 8 +- .../lib/src/models/objects/function.dart | 56 +- .../lib/src/models/objects/guarded.dart | 4 +- .../lib/src/models/objects/icdata.dart | 8 +- .../lib/src/models/objects/instance.dart | 87 +- .../lib/src/models/objects/isolate.dart | 38 +- .../lib/src/models/objects/isolate_group.dart | 10 +- .../lib/src/models/objects/library.dart | 18 +- .../models/objects/local_var_descriptors.dart | 2 +- .../src/models/objects/megamorphiccache.dart | 10 +- .../lib/src/models/objects/metric.dart | 10 +- .../lib/src/models/objects/notification.dart | 2 +- .../lib/src/models/objects/object.dart | 8 +- .../lib/src/models/objects/objectpool.dart | 8 +- .../src/models/objects/pc_descriptors.dart | 2 +- .../src/models/objects/sample_profile.dart | 6 +- .../lib/src/models/objects/script.dart | 20 +- .../models/objects/single_target_cache.dart | 6 +- .../src/models/objects/source_location.dart | 10 +- .../models/objects/subtype_test_cache.dart | 2 +- .../lib/src/models/objects/thread.dart | 10 +- .../src/models/objects/type_arguments.dart | 4 +- .../lib/src/models/objects/unknown.dart | 2 +- .../lib/src/models/objects/unlinked_call.dart | 4 +- .../lib/src/models/objects/vm.dart | 6 +- .../lib/src/models/repositories/metric.dart | 2 +- .../lib/src/models/repositories/target.dart | 4 +- .../src/repositories/allocation_profile.dart | 2 +- .../lib/src/repositories/breakpoint.dart | 4 +- .../lib/src/repositories/editor.dart | 20 +- .../src/repositories/inbound_references.dart | 2 +- .../lib/src/repositories/isolate.dart | 2 +- .../lib/src/repositories/metric.dart | 30 +- .../lib/src/repositories/notification.dart | 2 +- .../src/repositories/persistent_handles.dart | 2 +- .../lib/src/repositories/ports.dart | 2 +- .../lib/src/repositories/retaining_path.dart | 2 +- .../lib/src/repositories/sample_profile.dart | 29 +- .../lib/src/repositories/target.dart | 10 +- .../lib/src/repositories/timeline.dart | 5 +- .../lib/src/repositories/timeline_base.dart | 11 +- .../src/sample_profile/sample_profile.dart | 106 +- .../observatory/lib/src/service/object.dart | 1092 ++++++++--------- runtime/observatory/lib/tracer.dart | 24 +- runtime/observatory/lib/utils.dart | 4 +- runtime/observatory/pubspec.yaml | 3 +- .../tests/observatory_ui/app_test.dart | 2 +- .../add_breakpoint_rpc_kernel_test.dart | 24 +- .../tests/service/allocations_test.dart | 2 +- .../async_single_step_exception_test.dart | 2 +- .../tests/service/auth_token_test.dart | 8 +- .../tests/service/bad_reload_test.dart | 4 +- .../service/bad_web_socket_address_test.dart | 2 +- .../service/break_on_activation_test.dart | 6 +- .../service/break_on_async_function_test.dart | 2 +- .../break_on_default_constructor_test.dart | 2 +- .../tests/service/break_on_function_test.dart | 2 +- .../service/breakpoint_async_break_test.dart | 8 +- ...reakpoint_non_debuggable_library_test.dart | 4 +- .../breakpoint_two_args_checked_test.dart | 10 +- .../tests/service/caching_test.dart | 6 +- ...pprovals_approve_then_disconnect_test.dart | 8 +- .../client_resume_approvals_common.dart | 2 +- ...ient_resume_approvals_disconnect_test.dart | 8 +- ...resume_approvals_identical_names_test.dart | 8 +- ..._resume_approvals_multiple_names_test.dart | 13 +- ...ent_resume_approvals_name_change_test.dart | 13 +- .../client_resume_approvals_reload_test.dart | 8 +- .../observatory/tests/service/code_test.dart | 8 +- .../tests/service/command_test.dart | 8 +- .../tests/service/complex_reload_test.dart | 4 +- .../tests/service/contexts_test.dart | 58 +- ...verage_const_field_async_closure_test.dart | 2 +- .../service/coverage_leaf_function_test.dart | 12 +- .../coverage_optimized_function_test.dart | 6 +- .../dds_log_history_size_gigantic_test.dart | 4 +- .../dds_log_history_size_simple_test.dart | 10 +- .../service/dds_log_history_size_test.dart | 4 +- .../tests/service/debugger_inspect_test.dart | 2 +- .../debugger_location_second_test.dart | 2 +- .../tests/service/debugger_location_test.dart | 2 +- .../debugging_inlined_finally_test.dart | 12 +- .../tests/service/debugging_test.dart | 12 +- .../tests/service/dev_fs_test.dart | 2 +- .../service/developer_extension_test.dart | 5 +- .../developer_server_control_test.dart | 6 +- ...developer_service_get_isolate_id_test.dart | 25 +- .../observatory/tests/service/echo_test.dart | 8 +- .../enable_service_port_fallback_test.dart | 2 +- .../service/eval_internal_class_test.dart | 11 +- .../eval_regression_flutter20255_test.dart | 2 +- ...luate_activation_in_method_class_test.dart | 18 +- .../service/evaluate_activation_test.dart | 16 +- .../service/evaluate_async_closure_test.dart | 2 +- .../evaluate_class_type_parameters_test.dart | 4 +- ...valuate_function_type_parameters_test.dart | 31 +- .../evaluate_in_async_activation_test.dart | 4 +- ...valuate_in_async_star_activation_test.dart | 4 +- .../service/evaluate_in_frame_rpc_test.dart | 10 +- .../evaluate_in_frame_with_scope_test.dart | 16 +- ...evaluate_in_sync_star_activation_test.dart | 4 +- .../evaluate_with_escaping_closure_test.dart | 9 +- .../service/evaluate_with_scope_test.dart | 23 +- ..._service_asynchronous_invocation_test.dart | 4 +- .../external_service_disappear_test.dart | 4 +- ..._service_notification_invocation_test.dart | 6 +- .../external_service_registration_test.dart | 4 +- ...ce_registration_via_notification_test.dart | 4 +- ...l_service_synchronous_invocation_test.dart | 6 +- .../tests/service/field_script_test.dart | 4 +- ...et_allocation_profile_public_rpc_test.dart | 8 +- .../get_allocation_profile_rpc_test.dart | 8 +- .../service/get_allocation_samples_test.dart | 8 +- .../service/get_client_name_rpc_test.dart | 2 +- .../tests/service/get_flag_list_rpc_test.dart | 2 +- .../get_isolate_after_async_error_test.dart | 2 +- ...olate_after_stack_overflow_error_test.dart | 2 +- .../get_isolate_after_sync_error_test.dart | 2 +- .../get_isolate_group_memory_usage.dart | 2 +- .../tests/service/get_isolate_rpc_test.dart | 2 +- .../tests/service/get_memory_usage.dart | 2 +- .../get_native_allocation_samples_test.dart | 10 +- .../tests/service/get_object_rpc_test.dart | 16 +- .../service/get_retaining_path_rpc_test.dart | 26 +- .../tests/service/get_scripts_rpc_test.dart | 2 +- .../get_source_report_with_mixin_test.dart | 4 +- .../tests/service/get_stack_rpc_test.dart | 2 +- .../service/get_vm_timeline_rpc_test.dart | 2 +- .../http_get_isolate_group_rpc_common.dart | 12 +- .../service/http_get_isolate_rpc_common.dart | 12 +- .../tests/service/http_get_vm_rpc_common.dart | 6 +- .../service/implicit_getter_setter_test.dart | 24 +- .../service/inbound_references_test.dart | 9 +- .../tests/service/invoke_test.dart | 6 +- .../tests/service/isolate_lifecycle_test.dart | 2 +- .../tests/service/issue_25465_test.dart | 6 +- .../tests/service/issue_30555_test.dart | 30 +- .../local_variable_declaration_test.dart | 16 +- .../tests/service/logging_test.dart | 16 +- .../tests/service/malformed_test.dart | 4 +- .../tests/service/metrics_test.dart | 4 +- .../tests/service/mirror_references_test.dart | 16 +- .../tests/service/native_metrics_test.dart | 4 +- .../tests/service/network_profiling_test.dart | 8 +- .../next_through_assign_call_test.dart | 20 +- .../service/next_through_assign_int_test.dart | 20 +- ...next_through_create_list_and_map_test.dart | 2 +- .../tests/service/object_graph_vm_test.dart | 8 +- .../observatory_test_package/pubspec.yaml | 2 +- .../parameters_in_scope_at_entry_test.dart | 4 +- .../service/pause_on_exceptions_test.dart | 2 +- .../service/pause_on_start_and_exit_test.dart | 8 +- .../pause_on_start_then_step_test.dart | 8 +- .../tests/service/process_service_test.dart | 18 +- .../tests/service/reachable_size_test.dart | 26 +- .../tests/service/regexp_function_test.dart | 14 +- .../tests/service/regress_34841_test.dart | 4 +- .../service/rewind_optimized_out_test.dart | 6 +- .../tests/service/rewind_test.dart | 15 +- .../tests/service/service_test_common.dart | 80 +- .../set_library_debuggable_rpc_test.dart | 2 +- .../service/set_library_debuggable_test.dart | 4 +- .../tests/service/set_name_rpc_test.dart | 4 +- .../tests/service/set_vm_name_rpc_test.dart | 4 +- .../tests/service/simple_reload_test.dart | 4 +- .../tests/service/string_escaping_test.dart | 6 +- .../tests/service/test_helper.dart | 110 +- .../tests/service/type_arguments_test.dart | 2 +- .../tests/service/typed_data_test.dart | 6 +- .../service/valid_source_locations_test.dart | 14 +- .../service/verify_http_timeline_test.dart | 4 +- .../observatory/tests/service/vm_test.dart | 4 +- .../service/vm_timeline_events_test.dart | 6 +- .../tests/service/vm_timeline_flags_test.dart | 8 +- .../tests/service/weak_properties_test.dart | 16 +- runtime/observatory/tests/ui/inspector.dart | 9 +- .../observatory/tests/ui/retainingPath.dart | 2 +- runtime/observatory/web/main.dart | 2 +- sdk/lib/_internal/allowed_experiments.json | 6 + tools/bots/test_matrix.json | 16 +- 314 files changed, 3845 insertions(+), 3727 deletions(-) diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json index f280248f9f8..e08b11b973d 100644 --- a/.dart_tool/package_config.json +++ b/.dart_tool/package_config.json @@ -443,7 +443,7 @@ "name": "observatory", "rootUri": "../runtime/observatory", "packageUri": "lib/", - "languageVersion": "2.2" + "languageVersion": "2.10" }, { "name": "observatory_2", @@ -454,7 +454,7 @@ { "name": "observatory_test_package", "rootUri": "../runtime/observatory/tests/service/observatory_test_package", - "languageVersion": "2.7" + "languageVersion": "2.10" }, { "name": "observatory_test_package_2", diff --git a/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart index c3b0dc722dd..de7521d4462 100644 --- a/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart +++ b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart @@ -202,6 +202,12 @@ const AllowedExperimentalFlags defaultAllowedExperimentalFlags = "native_stack_traces": { ExperimentalFlag.nonNullable, }, + "observatory": { + ExperimentalFlag.nonNullable, + }, + "observatory_test_package": { + ExperimentalFlag.nonNullable, + }, "path": { ExperimentalFlag.nonNullable, }, diff --git a/runtime/observatory/BUILD.gn b/runtime/observatory/BUILD.gn index 1762e1aee03..360863ccd09 100644 --- a/runtime/observatory/BUILD.gn +++ b/runtime/observatory/BUILD.gn @@ -37,6 +37,8 @@ prebuilt_dart2js_action("build_observatory") { "-o", rebase_path(output), "--packages=" + rebase_path("../../.packages"), + "--enable-experiment=non-nullable", + "--no-sound-null-safety", ] if (is_debug) { args += [ "--enable-asserts" ] diff --git a/runtime/observatory/analysis_options.yaml b/runtime/observatory/analysis_options.yaml index 6babf28a427..13bad8a6816 100644 --- a/runtime/observatory/analysis_options.yaml +++ b/runtime/observatory/analysis_options.yaml @@ -1,7 +1,10 @@ analyzer: + enable-experiment: + - non-nullable errors: dead_code: ignore unused_local_variable: ignore + getter_not_subtype_setter_types: ignore exclude: - tests/service/bad_reload/v2/main.dart - tests/service/complex_reload/v2/main.dart diff --git a/runtime/observatory/bin/heap_snapshot.dart b/runtime/observatory/bin/heap_snapshot.dart index 22d3ce53f14..b5aaf93fafd 100644 --- a/runtime/observatory/bin/heap_snapshot.dart +++ b/runtime/observatory/bin/heap_snapshot.dart @@ -22,14 +22,14 @@ Future load(String uri) async { reader.onProgress.listen(print); - ws.listen((dynamic response) { - if (response is String) { - response = json.decode(response); + ws.listen((dynamic dynResponse) { + if (dynResponse is String) { + final response = json.decode(dynResponse); if (response['id'] == 1) { getVM.complete(response['result']['isolates'][0]['id']); } - } else if (response is List) { - response = new Uint8List.fromList(response); + } else if (dynResponse is List) { + final response = new Uint8List.fromList(dynResponse); final dataOffset = new ByteData.view(response.buffer).getUint32(0, Endian.little); dynamic metadata = new Uint8List.view(response.buffer, 4, dataOffset - 4); diff --git a/runtime/observatory/bin/shell.dart b/runtime/observatory/bin/shell.dart index a0cb274be4a..d6c551fef7d 100644 --- a/runtime/observatory/bin/shell.dart +++ b/runtime/observatory/bin/shell.dart @@ -30,7 +30,7 @@ void repl(VM vm, Isolate isolate, String lastResult) { void main() { String addr = 'ws://localhost:8181/ws'; new WebSocketVM(new WebSocketVMTarget(addr)).load().then((serviceObject) { - VM vm = serviceObject; + VM vm = serviceObject as VM; Isolate isolate = vm.isolates.first; repl(vm, isolate, 'isolate ${isolate.id}'); }); diff --git a/runtime/observatory/lib/event.dart b/runtime/observatory/lib/event.dart index e79b16b3c61..71bed827806 100644 --- a/runtime/observatory/lib/event.dart +++ b/runtime/observatory/lib/event.dart @@ -108,7 +108,7 @@ class PauseBreakpointEvent implements M.PauseBreakpointEvent { final bool atAsyncSuspension; /// [optional] - final M.Breakpoint breakpoint; + final M.Breakpoint? breakpoint; PauseBreakpointEvent( this.timestamp, this.isolate, @@ -128,7 +128,7 @@ class PauseBreakpointEvent implements M.PauseBreakpointEvent { class PauseInterruptedEvent implements M.PauseInterruptedEvent { final DateTime timestamp; final M.IsolateRef isolate; - final M.Frame topFrame; + final M.Frame? topFrame; final bool atAsyncSuspension; PauseInterruptedEvent( this.timestamp, this.isolate, this.topFrame, this.atAsyncSuspension) { @@ -141,7 +141,7 @@ class PauseInterruptedEvent implements M.PauseInterruptedEvent { class PausePostRequestEvent implements M.PausePostRequestEvent { final DateTime timestamp; final M.IsolateRef isolate; - final M.Frame topFrame; + final M.Frame? topFrame; final bool atAsyncSuspension; PausePostRequestEvent( this.timestamp, this.isolate, this.topFrame, this.atAsyncSuspension) { @@ -168,7 +168,7 @@ class PauseExceptionEvent implements M.PauseExceptionEvent { class ResumeEvent implements M.ResumeEvent { final DateTime timestamp; final M.IsolateRef isolate; - final M.Frame topFrame; + final M.Frame? topFrame; ResumeEvent(this.timestamp, this.isolate, this.topFrame) { assert(timestamp != null); assert(isolate != null); @@ -309,69 +309,71 @@ class ServiceUnregisteredEvent implements M.ServiceUnregisteredEvent { } } -M.Event createEventFromServiceEvent(S.ServiceEvent event) { +M.Event? createEventFromServiceEvent(S.ServiceEvent event) { switch (event.kind) { case S.ServiceEvent.kVMUpdate: - return new VMUpdateEvent(event.timestamp, event.vm); + return new VMUpdateEvent(event.timestamp!, event.vm); case S.ServiceEvent.kIsolateStart: - return new IsolateStartEvent(event.timestamp, event.isolate); + return new IsolateStartEvent(event.timestamp!, event.isolate!); case S.ServiceEvent.kIsolateRunnable: - return new IsolateRunnableEvent(event.timestamp, event.isolate); + return new IsolateRunnableEvent(event.timestamp!, event.isolate!); case S.ServiceEvent.kIsolateUpdate: - return new IsolateUpdateEvent(event.timestamp, event.isolate); + return new IsolateUpdateEvent(event.timestamp!, event.isolate!); case S.ServiceEvent.kIsolateReload: return new IsolateReloadEvent( - event.timestamp, event.isolate, event.error); + event.timestamp!, event.isolate!, event.error!); case S.ServiceEvent.kIsolateExit: - return new IsolateExitEvent(event.timestamp, event.isolate); + return new IsolateExitEvent(event.timestamp!, event.isolate!); case S.ServiceEvent.kBreakpointAdded: return new BreakpointAddedEvent( - event.timestamp, event.isolate, event.breakpoint); + event.timestamp!, event.isolate!, event.breakpoint!); case S.ServiceEvent.kBreakpointResolved: return new BreakpointResolvedEvent( - event.timestamp, event.isolate, event.breakpoint); + event.timestamp!, event.isolate!, event.breakpoint!); case S.ServiceEvent.kBreakpointRemoved: return new BreakpointRemovedEvent( - event.timestamp, event.isolate, event.breakpoint); + event.timestamp!, event.isolate!, event.breakpoint!); case S.ServiceEvent.kDebuggerSettingsUpdate: - return new DebuggerSettingsUpdateEvent(event.timestamp, event.isolate); + return new DebuggerSettingsUpdateEvent(event.timestamp!, event.isolate!); case S.ServiceEvent.kResume: - return new ResumeEvent(event.timestamp, event.isolate, event.topFrame); + return new ResumeEvent(event.timestamp!, event.isolate!, event.topFrame); case S.ServiceEvent.kPauseStart: - return new PauseStartEvent(event.timestamp, event.isolate); + return new PauseStartEvent(event.timestamp!, event.isolate!); case S.ServiceEvent.kPauseExit: - return new PauseExitEvent(event.timestamp, event.isolate); + return new PauseExitEvent(event.timestamp!, event.isolate!); case S.ServiceEvent.kPausePostRequest: - return new PausePostRequestEvent(event.timestamp, event.isolate, - event.topFrame, event.atAsyncSuspension); + return new PausePostRequestEvent(event.timestamp!, event.isolate!, + event.topFrame, event.atAsyncSuspension!); case S.ServiceEvent.kPauseBreakpoint: return new PauseBreakpointEvent( - event.timestamp, - event.isolate, - event.pauseBreakpoints, - event.topFrame, - event.atAsyncSuspension, + event.timestamp!, + event.isolate!, + event.pauseBreakpoints!, + event.topFrame!, + event.atAsyncSuspension!, event.breakpoint); case S.Isolate.kLoggingStream: - return new LoggingEvent(event.timestamp, event.isolate, event.logRecord); + return new LoggingEvent( + event.timestamp!, event.isolate!, event.logRecord!); case S.ServiceEvent.kPauseInterrupted: - return new PauseInterruptedEvent(event.timestamp, event.isolate, - event.topFrame, event.atAsyncSuspension); + return new PauseInterruptedEvent(event.timestamp!, event.isolate!, + event.topFrame, event.atAsyncSuspension!); case S.ServiceEvent.kPauseException: return new PauseExceptionEvent( - event.timestamp, event.isolate, event.topFrame, event.exception); + event.timestamp!, event.isolate!, event.topFrame!, event.exception!); case S.ServiceEvent.kInspect: - return new InspectEvent(event.timestamp, event.isolate, event.inspectee); + return new InspectEvent( + event.timestamp!, event.isolate!, event.inspectee!); case S.ServiceEvent.kGC: - return new GCEvent(event.timestamp, event.isolate); + return new GCEvent(event.timestamp!, event.isolate!); case S.ServiceEvent.kServiceRegistered: return new ServiceRegisteredEvent( - event.timestamp, event.service, event.method, event.alias); + event.timestamp!, event.service!, event.method!, event.alias!); case S.ServiceEvent.kServiceUnregistered: return new ServiceUnregisteredEvent( - event.timestamp, event.service, event.method); + event.timestamp!, event.service!, event.method!); case S.ServiceEvent.kNone: - return new NoneEvent(event.timestamp, event.isolate); + return new NoneEvent(event.timestamp!, event.isolate!); default: // Ignore unrecognized events. Logger.root.severe('Unrecognized event: $event'); diff --git a/runtime/observatory/lib/object_graph.dart b/runtime/observatory/lib/object_graph.dart index 0e891ce7b1d..f0adee0560c 100644 --- a/runtime/observatory/lib/object_graph.dart +++ b/runtime/observatory/lib/object_graph.dart @@ -22,7 +22,7 @@ abstract class SnapshotReader { class _SnapshotReader implements SnapshotReader { bool _closed = false; - var _chunks = []; + List? _chunks = []; final _onProgress = new StreamController.broadcast(); final _done = new Completer(); @@ -32,8 +32,8 @@ class _SnapshotReader implements SnapshotReader { if (_closed) { throw new StateError("Stream is closed"); } - _chunks.add(chunk); - _onProgress.add("Receiving snapshot chunk ${_chunks.length}..."); + _chunks!.add(chunk); + _onProgress.add("Receiving snapshot chunk ${_chunks!.length}..."); // TODO(rmacnak): Incremental loading. } @@ -45,7 +45,7 @@ class _SnapshotReader implements SnapshotReader { _closed = true; var graph = new _SnapshotGraph._new(); - var chunks = _chunks; + var chunks = _chunks!; _chunks = null; // Let the binary chunks be GCable. _done.complete(graph._load(chunks, _onProgress)); return _done.future; @@ -270,39 +270,39 @@ class _SnapshotObject implements SnapshotObject { int get hashCode => _id ^ _graph.hashCode; int get shallowSize => internalSize + externalSize; - int get internalSize => _graph._internalSizes[_id]; - int get externalSize => _graph._externalSizes[_id]; - int get retainedSize => _graph._retainedSizes[_id]; + int get internalSize => _graph._internalSizes![_id]; + int get externalSize => _graph._externalSizes![_id]; + int get retainedSize => _graph._retainedSizes![_id]; String get description => _graph._describeObject(_id); - SnapshotClass get klass => _graph._classes[_graph._cids[_id]]; + SnapshotClass get klass => _graph._classes![_graph._cids![_id]]!; Iterable get successors sync* { final id = _id; - final cid = _graph._cids[id]; - final startSuccIndex = _graph._firstSuccs[id]; - final limitSuccIndex = _graph._firstSuccs[id + 1]; + final cid = _graph._cids![id]; + final startSuccIndex = _graph._firstSuccs![id]; + final limitSuccIndex = _graph._firstSuccs![id + 1]; for (var nextSuccIndex = startSuccIndex; nextSuccIndex < limitSuccIndex; nextSuccIndex++) { final index = nextSuccIndex - startSuccIndex; - final succId = _graph._succs[nextSuccIndex]; + final succId = _graph._succs![nextSuccIndex]; final name = _graph._edgeName(cid, index); yield _SnapshotObject._new(succId, _graph, name); } } Iterable get predecessors sync* { - var firstSuccs = _graph._firstSuccs; - var succs = _graph._succs; + var firstSuccs = _graph._firstSuccs!; + var succs = _graph._succs!; var id = _id; - var N = _graph._N; + var N = _graph._N!; for (var predId = 1; predId <= N; predId++) { var base = firstSuccs[predId]; var limit = firstSuccs[predId + 1]; for (var i = base; i < limit; i++) { if (succs[i] == id) { - var cid = _graph._cids[predId]; + var cid = _graph._cids![predId]; var name = _graph._edgeName(cid, i - base); yield _SnapshotObject._new(predId, _graph, name); } @@ -314,12 +314,12 @@ class _SnapshotObject implements SnapshotObject { if (_id == _ROOT) { return this; } - return _SnapshotObject._new(_graph._doms[_id], _graph, ""); + return _SnapshotObject._new(_graph._doms![_id], _graph, ""); } Iterable get children sync* { - var N = _graph._N; - var doms = _graph._doms; + var N = _graph._N!; + var doms = _graph._doms!; var parentId = _id; for (var childId = _ROOT; childId <= N; childId++) { if (doms[childId] == parentId) { @@ -334,17 +334,17 @@ class _SnapshotObject implements SnapshotObject { } class _SyntheticSnapshotObject implements SnapshotObject { - String _description; - SnapshotClass _klass; - int _internalSize; - int _externalSize; - int _retainedSize; - List _successors; - List _predecessors; - SnapshotObject _parent; - List _children; + late String _description; + late SnapshotClass _klass; + late int _internalSize; + late int _externalSize; + late int _retainedSize; + late List _successors; + late List _predecessors; + late SnapshotObject _parent; + late List _children; - String get label => null; + String get label => ""; String get description => _description; SnapshotClass get klass => _klass; @@ -404,7 +404,7 @@ abstract class SnapshotMergedDominator { class _SnapshotMergedDominator implements SnapshotMergedDominator { final int _id; final _SnapshotGraph _graph; - final _SnapshotMergedDominator _parent; + final _SnapshotMergedDominator? _parent; _SnapshotMergedDominator._new(this._id, this._graph, this._parent); @@ -423,70 +423,78 @@ class _SnapshotMergedDominator implements SnapshotMergedDominator { : "$instanceCount instances of ${klass.name}"; } - SnapshotClass get klass => _graph._classes[_graph._cids[_id]]; + SnapshotClass get klass => _graph._classes![_graph._cids![_id]]!; int get shallowSize => internalSize + externalSize; int get internalSize { - var cids = _graph._cids; + var cids = _graph._cids!; + var internalSizes = _graph._internalSizes!; + var mergedDomNext = _graph._mergedDomNext!; var size = 0; var sibling = _id; while (sibling != _SENTINEL && cids[sibling] == cids[_id]) { - size += _graph._internalSizes[sibling]; - sibling = _graph._mergedDomNext[sibling]; + size += internalSizes[sibling]; + sibling = mergedDomNext[sibling]; } return size; } int get externalSize { - var cids = _graph._cids; + var cids = _graph._cids!; + var externalSizes = _graph._externalSizes!; + var mergedDomNext = _graph._mergedDomNext!; var size = 0; var sibling = _id; while (sibling != _SENTINEL && cids[sibling] == cids[_id]) { - size += _graph._externalSizes[sibling]; - sibling = _graph._mergedDomNext[sibling]; + size += externalSizes[sibling]; + sibling = mergedDomNext[sibling]; } return size; } int get retainedSize { - var cids = _graph._cids; + var cids = _graph._cids!; + var retainedSizes = _graph._retainedSizes!; + var mergedDomNext = _graph._mergedDomNext!; var size = 0; var sibling = _id; while (sibling != _SENTINEL && cids[sibling] == cids[_id]) { - size += _graph._retainedSizes[sibling]; - sibling = _graph._mergedDomNext[sibling]; + size += retainedSizes[sibling]; + sibling = mergedDomNext[sibling]; } return size; } int get instanceCount { - var cids = _graph._cids; + var cids = _graph._cids!; + var mergedDomNext = _graph._mergedDomNext!; var count = 0; var sibling = _id; while (sibling != _SENTINEL && cids[sibling] == cids[_id]) { count++; - sibling = _graph._mergedDomNext[sibling]; + sibling = mergedDomNext[sibling]; } return count; } Iterable get objects sync* { - var cids = _graph._cids; + var cids = _graph._cids!; + var mergedDomNext = _graph._mergedDomNext!; var sibling = _id; while (sibling != _SENTINEL && cids[sibling] == cids[_id]) { yield _SnapshotObject._new(sibling, _graph, ""); - sibling = _graph._mergedDomNext[sibling]; + sibling = mergedDomNext[sibling]; } } SnapshotMergedDominator get parent => _parent ?? this; Iterable get children sync* { - var next = _graph._mergedDomNext; - var cids = _graph._cids; + var next = _graph._mergedDomNext!; + var cids = _graph._cids!; var prev = _SENTINEL; - var child = _graph._mergedDomHead[_id]; + var child = _graph._mergedDomHead![_id]; // Walk the list of children and look for the representative objects, i.e. // the first sibling of each cid. while (child != _SENTINEL) { @@ -500,14 +508,14 @@ class _SnapshotMergedDominator implements SnapshotMergedDominator { } class _SyntheticSnapshotMergedDominator implements SnapshotMergedDominator { - String _description; - SnapshotClass _klass; - int _internalSize; - int _externalSize; - int _retainedSize; - List _objects; - SnapshotMergedDominator _parent; - List _children; + late String _description; + late SnapshotClass _klass; + late int _internalSize; + late int _externalSize; + late int _retainedSize; + late List _objects; + late SnapshotMergedDominator _parent; + late List _children; SnapshotClass get klass => _klass; String get description => _description; @@ -560,9 +568,11 @@ class _SnapshotClass implements SnapshotClass { int get instanceCount => liveInstanceCount; Iterable get instances sync* { - final N = _graph._N; + final N = _graph._N!; + final cids = _graph._cids!; + final retainedSizes = _graph._retainedSizes!; for (var id = 1; id <= N; id++) { - if (_graph._cids[id] == _cid && _graph._retainedSizes[id] > 0) { + if (cids[id] == _cid && retainedSizes[id] > 0) { yield _SnapshotObject._new(id, _graph, ""); } } @@ -613,36 +623,36 @@ const _kRootName = "Live Objects + External"; const _kUnknownFieldName = ""; class _SnapshotGraph implements SnapshotGraph { - List _chunks; - List get chunks => _chunks; + List? _chunks; + List get chunks => _chunks!; _SnapshotGraph._new(); - String get description => _description; + String get description => _description!; - int get size => _liveInternalSize + _liveExternalSize; - int get internalSize => _liveInternalSize; - int get externalSize => _liveExternalSize; - int get capacity => _capacity; + int get size => _liveInternalSize! + _liveExternalSize!; + int get internalSize => _liveInternalSize!; + int get externalSize => _liveExternalSize!; + int get capacity => _capacity!; SnapshotObject get root => _SnapshotObject._new(_ROOT, this, "Root"); SnapshotMergedDominator get mergedRoot => _SnapshotMergedDominator._new(_ROOT, this, null); - SnapshotObject _extendedRoot; + SnapshotObject? _extendedRoot; SnapshotObject get extendedRoot { if (_extendedRoot == null) { _createExtended(); } - return _extendedRoot; + return _extendedRoot!; } - SnapshotMergedDominator _extendedMergedRoot; + SnapshotMergedDominator? _extendedMergedRoot; SnapshotMergedDominator get extendedMergedRoot { if (_extendedMergedRoot == null) { _createExtended(); } - return _extendedMergedRoot; + return _extendedMergedRoot!; } void _createExtended() { @@ -657,8 +667,8 @@ class _SnapshotGraph implements SnapshotGraph { capacity._description = "Capacity + External"; capacity._klass = live.klass; - capacity._internalSize = _capacity; - capacity._externalSize = _totalExternalSize; + capacity._internalSize = _capacity!; + capacity._externalSize = _totalExternalSize!; capacity._retainedSize = capacity._internalSize + capacity._externalSize; capacity._successors = [live, uncollected, fragmentation]; capacity._predecessors = []; @@ -666,8 +676,8 @@ class _SnapshotGraph implements SnapshotGraph { mcapacity._description = "Capacity + External"; mcapacity._klass = mlive.klass; - mcapacity._internalSize = _capacity; - mcapacity._externalSize = _totalExternalSize; + mcapacity._internalSize = _capacity!; + mcapacity._externalSize = _totalExternalSize!; mcapacity._retainedSize = mcapacity._internalSize + mcapacity._externalSize; mcapacity._children = [ mlive, @@ -678,8 +688,8 @@ class _SnapshotGraph implements SnapshotGraph { uncollected._description = "Uncollected Garbage"; uncollected._klass = live.klass; - uncollected._internalSize = _totalInternalSize - _liveInternalSize; - uncollected._externalSize = _totalExternalSize - _liveExternalSize; + uncollected._internalSize = _totalInternalSize! - _liveInternalSize!; + uncollected._externalSize = _totalExternalSize! - _liveExternalSize!; uncollected._retainedSize = uncollected._internalSize + uncollected._externalSize; uncollected._successors = []; @@ -689,8 +699,8 @@ class _SnapshotGraph implements SnapshotGraph { muncollected._description = "Uncollected Garbage"; muncollected._klass = mlive.klass; - muncollected._internalSize = _totalInternalSize - _liveInternalSize; - muncollected._externalSize = _totalExternalSize - _liveExternalSize; + muncollected._internalSize = _totalInternalSize! - _liveInternalSize!; + muncollected._externalSize = _totalExternalSize! - _liveExternalSize!; muncollected._retainedSize = muncollected._internalSize + muncollected._externalSize; muncollected._parent = mcapacity; @@ -699,7 +709,7 @@ class _SnapshotGraph implements SnapshotGraph { fragmentation._description = "Free"; fragmentation._klass = live.klass; - fragmentation._internalSize = _capacity - _totalInternalSize; + fragmentation._internalSize = _capacity! - _totalInternalSize!; fragmentation._externalSize = 0; fragmentation._retainedSize = fragmentation._internalSize; fragmentation._successors = []; @@ -709,7 +719,7 @@ class _SnapshotGraph implements SnapshotGraph { mfragmentation._description = "Free"; mfragmentation._klass = mlive.klass; - mfragmentation._internalSize = _capacity - _totalInternalSize; + mfragmentation._internalSize = _capacity! - _totalInternalSize!; mfragmentation._externalSize = 0; mfragmentation._retainedSize = mfragmentation._internalSize; mfragmentation._parent = mcapacity; @@ -721,9 +731,10 @@ class _SnapshotGraph implements SnapshotGraph { } Iterable get objects sync* { - final N = _N; + final N = _N!; + final retainedSizes = _retainedSizes!; for (var id = 1; id <= N; id++) { - if (_retainedSizes[id] > 0) { + if (retainedSizes[id] > 0) { yield _SnapshotObject._new(id, this, ""); } } @@ -737,7 +748,7 @@ class _SnapshotGraph implements SnapshotGraph { return _kRootName; } var cls = _className(oid); - var data = _nonReferenceData[oid]; + var data = _nonReferenceData![oid]; if (data == null) { return cls; } else { @@ -746,8 +757,8 @@ class _SnapshotGraph implements SnapshotGraph { } String _className(int oid) { - var cid = _cids[oid]; - var cls = _classes[cid]; + var cid = _cids![oid]; + var cls = _classes![cid]; if (cls == null) { return "Class$cid"; } @@ -755,7 +766,7 @@ class _SnapshotGraph implements SnapshotGraph { } String _edgeName(int cid, int index) { - var c = _classes[cid]; + var c = _classes![cid]; if (c == null) { return _kUnknownFieldName; } @@ -767,7 +778,7 @@ class _SnapshotGraph implements SnapshotGraph { } Iterable get classes sync* { - for (final c in _classes) { + for (final c in _classes!) { // Not all CIDs are occupied. if (c != null) { yield c; @@ -776,9 +787,9 @@ class _SnapshotGraph implements SnapshotGraph { } Future _load( - List chunks, StreamController onProgress) async { + List? chunks, StreamController onProgress) async { _chunks = chunks; - var stream = _ReadStream._new(chunks); + _ReadStream? stream = _ReadStream._new(chunks!); chunks = null; // The phases of loading are placed in explicit `new Future(compuation)` so @@ -786,13 +797,13 @@ class _SnapshotGraph implements SnapshotGraph { // defer to the microtask loop. onProgress.add("Loading classes..."); - await new Future(() => _readClasses(stream)); + await new Future(() => _readClasses(stream!)); onProgress.add("Loading objects..."); - await new Future(() => _readObjects(stream)); + await new Future(() => _readObjects(stream!)); onProgress.add("Loading external properties..."); - await new Future(() => _readExternalProperties(stream)); + await new Future(() => _readExternalProperties(stream!)); stream = null; @@ -839,46 +850,46 @@ class _SnapshotGraph implements SnapshotGraph { return this; } - Uint8List _encoded; + Uint8List? _encoded; - String _description; + String? _description; - int _kStackCid; - int _kFieldCid; - int _numCids; - int _N; // Objects in the snapshot. - int _Nconnected; // Objects reachable from root. - int _E; // References in the snapshot. + int? _kStackCid; + int? _kFieldCid; + int? _numCids; + int? _N; // Objects in the snapshot. + int? _Nconnected; // Objects reachable from root. + int? _E; // References in the snapshot. - int _capacity; - int _liveInternalSize; - int _liveExternalSize; - int _totalInternalSize; - int _totalExternalSize; + int? _capacity; + int? _liveInternalSize; + int? _liveExternalSize; + int? _totalInternalSize; + int? _totalExternalSize; - List<_SnapshotClass> _classes; + List<_SnapshotClass?>? _classes; // Indexed by node id, with id 0 representing invalid/uninitialized. // From snapshot. - List _nonReferenceData; - Uint16List _cids; - Uint32List _internalSizes; - Uint32List _externalSizes; - Uint32List _firstSuccs; - Uint32List _succs; + List? _nonReferenceData; + Uint16List? _cids; + Uint32List? _internalSizes; + Uint32List? _externalSizes; + Uint32List? _firstSuccs; + Uint32List? _succs; // Intermediates. - Uint32List _vertex; - Uint32List _parent; - Uint32List _semi; - Uint32List _firstPreds; // Offset into preds. - Uint32List _preds; + Uint32List? _vertex; + Uint32List? _parent; + Uint32List? _semi; + Uint32List? _firstPreds; // Offset into preds. + Uint32List? _preds; // Outputs. - Uint32List _doms; - Uint32List _retainedSizes; - Uint32List _mergedDomHead; - Uint32List _mergedDomNext; + Uint32List? _doms; + Uint32List? _retainedSizes; + Uint32List? _mergedDomHead; + Uint32List? _mergedDomNext; void _readClasses(_ReadStream stream) { for (var i = 0; i < 8; i++) { @@ -892,7 +903,7 @@ class _SnapshotGraph implements SnapshotGraph { _totalExternalSize = stream.readUnsigned(); var K = stream.readUnsigned(); - var classes = new List<_SnapshotClass>.filled(K + 1, null); + var classes = new List<_SnapshotClass?>.filled(K + 1, null); classes[0] = _SnapshotClass._new(this, 0, "Root", "", ""); for (var cid = 1; cid <= K; cid++) { @@ -935,7 +946,7 @@ class _SnapshotGraph implements SnapshotGraph { var internalSizes = _newUint32Array(N + 1); var cids = _newUint16Array(N + 1); - var nonReferenceData = new List(N + 1); + var nonReferenceData = new List.filled(N + 1, null); var firstSuccs = _newUint32Array(N + 2); var succs = _newUint32Array(E); var eid = 0; @@ -1011,7 +1022,7 @@ class _SnapshotGraph implements SnapshotGraph { } void _readExternalProperties(_ReadStream stream) { - final N = _N; + final N = _N!; final externalPropertyCount = stream.readUnsigned(); final externalSizes = _newUint32Array(N + 1); @@ -1026,11 +1037,11 @@ class _SnapshotGraph implements SnapshotGraph { } void _computeClassTable() { - final N = _N; - final classes = _classes; - final cids = _cids; - final internalSizes = _internalSizes; - final externalSizes = _externalSizes; + final N = _N!; + final classes = _classes!; + final cids = _cids!; + final internalSizes = _internalSizes!; + final externalSizes = _externalSizes!; var totalInternalSize = 0; var totalExternalSize = 0; @@ -1041,7 +1052,7 @@ class _SnapshotGraph implements SnapshotGraph { var externalSize = externalSizes[oid]; totalExternalSize += externalSize; - var cls = classes[cids[oid]]; + var cls = classes[cids[oid]]!; cls.totalInternalSize += internalSize; cls.totalExternalSize += externalSize; cls.totalInstanceCount++; @@ -1052,9 +1063,9 @@ class _SnapshotGraph implements SnapshotGraph { } void _dfs() { - final N = _N; - final firstSuccs = _firstSuccs; - final succs = _succs; + final N = _N!; + final firstSuccs = _firstSuccs!; + final succs = _succs!; final stackNodes = _newUint32Array(N); final stackCurrentEdgePos = _newUint32Array(N); @@ -1142,11 +1153,11 @@ class _SnapshotGraph implements SnapshotGraph { } void _buildPredecessors() { - final N = _N; - final Nconnected = _Nconnected; - final E = _E; - final firstSuccs = _firstSuccs; - final succs = _succs; + final N = _N!; + final Nconnected = _Nconnected!; + final E = _E!; + final firstSuccs = _firstSuccs!; + final succs = _succs!; // This is first filled with the predecessor counts, then reused to hold the // offset to the first predecessor (see alias below). @@ -1201,17 +1212,17 @@ class _SnapshotGraph implements SnapshotGraph { // Fold the size of any object with in-degree(1) into its parent. // Requires the DFS numbering and predecessor lists. void _buildOwnedSizes() { - final N = _N; - final Nconnected = _Nconnected; + final N = _N!; + final Nconnected = _Nconnected!; final kStackCid = _kStackCid; final kFieldCid = _kFieldCid; - final cids = _cids; - final internalSizes = _internalSizes; - final externalSizes = _externalSizes; - final vertex = _vertex; - final firstPreds = _firstPreds; - final preds = _preds; + final cids = _cids!; + final internalSizes = _internalSizes!; + final externalSizes = _externalSizes!; + final vertex = _vertex!; + final firstPreds = _firstPreds!; + final preds = _preds!; final ownedSizes = _newUint32Array(N + 1); for (var i = 1; i <= Nconnected; i++) { @@ -1256,11 +1267,11 @@ class _SnapshotGraph implements SnapshotGraph { // TODO(rmacnak): Maybe keep the per-objects sizes to be able to provide // examples of large owners for each class. - final classes = _classes; + final classes = _classes!; for (var i = 1; i <= Nconnected; i++) { final v = vertex[i]; final cid = cids[v]; - final cls = classes[cid]; + final cls = classes[cid]!; cls.ownedSize += ownedSizes[v]; } } @@ -1342,14 +1353,14 @@ class _SnapshotGraph implements SnapshotGraph { // T. Lengauer and R. E. Tarjan. "A Fast Algorithm for Finding Dominators // in a Flowgraph." void _buildDominators() { - final N = _N; - final Nconnected = _Nconnected; + final N = _N!; + final Nconnected = _Nconnected!; - final vertex = _vertex; - final semi = _semi; - final parent = _parent; - final firstPreds = _firstPreds; - final preds = _preds; + final vertex = _vertex!; + final semi = _semi!; + final parent = _parent!; + final firstPreds = _firstPreds!; + final preds = _preds!; final dom = _newUint32Array(N + 1); @@ -1358,7 +1369,7 @@ class _SnapshotGraph implements SnapshotGraph { for (var i = 1; i <= N; i++) { label[i] = i; } - final buckets = new List(N + 1); + final buckets = new List.filled(N + 1, null); final child = _newUint32Array(N + 1); final size = _newUint32Array(N + 1); for (var i = 1; i <= N; i++) { @@ -1385,7 +1396,7 @@ class _SnapshotGraph implements SnapshotGraph { // w.semi.bucket.add(w); var tmp = vertex[semi[w]]; if (buckets[tmp] == null) { - buckets[tmp] = new List(); + buckets[tmp] = []; } buckets[tmp].add(w); @@ -1417,17 +1428,17 @@ class _SnapshotGraph implements SnapshotGraph { } void _calculateRetainedSizes() { - final N = _N; - final Nconnected = _Nconnected; + final N = _N!; + final Nconnected = _Nconnected!; var liveInternalSize = 0; var liveExternalSize = 0; - final classes = _classes; - final cids = _cids; - final internalSizes = _internalSizes; - final externalSizes = _externalSizes; - final vertex = _vertex; - final doms = _doms; + final classes = _classes!; + final cids = _cids!; + final internalSizes = _internalSizes!; + final externalSizes = _externalSizes!; + final vertex = _vertex!; + final doms = _doms!; // Sum internal and external sizes. for (var i = 1; i <= Nconnected; i++) { @@ -1437,7 +1448,7 @@ class _SnapshotGraph implements SnapshotGraph { liveInternalSize += internalSize; liveExternalSize += externalSize; - var cls = classes[cids[v]]; + var cls = classes[cids[v]]!; cls.liveInternalSize += internalSize; cls.liveExternalSize += externalSize; cls.liveInstanceCount++; @@ -1468,18 +1479,18 @@ class _SnapshotGraph implements SnapshotGraph { _liveInternalSize = liveInternalSize; _liveExternalSize = liveExternalSize; - print("internal-garbage: ${_totalInternalSize - _liveInternalSize}"); - print("external-garbage: ${_totalExternalSize - _liveExternalSize}"); - print("fragmentation: ${_capacity - _totalInternalSize}"); - assert(_liveInternalSize <= _totalInternalSize); - assert(_liveExternalSize <= _totalExternalSize); - assert(_totalInternalSize <= _capacity); + print("internal-garbage: ${_totalInternalSize! - _liveInternalSize!}"); + print("external-garbage: ${_totalExternalSize! - _liveExternalSize!}"); + print("fragmentation: ${_capacity! - _totalInternalSize!}"); + assert(_liveInternalSize! <= _totalInternalSize!); + assert(_liveExternalSize! <= _totalExternalSize!); + assert(_totalInternalSize! <= _capacity!); } // Build linked lists of the children for each node in the dominator tree. void _linkDominatorChildren() { - final N = _N; - final doms = _doms; + final N = _N!; + final doms = _doms!; final head = _newUint32Array(N + 1); final next = _newUint32Array(N + 1); @@ -1533,10 +1544,10 @@ class _SnapshotGraph implements SnapshotGraph { } void _sortDominatorChildren() { - final N = _N; - final cids = _cids; - final head = _mergedDomHead; - final next = _mergedDomNext; + final N = _N!; + final cids = _cids!; + final head = _mergedDomHead!; + final next = _mergedDomNext!; // Returns the new head of the sorted list. int sort(int head) { @@ -1570,10 +1581,10 @@ class _SnapshotGraph implements SnapshotGraph { } void _mergeDominatorSiblings() { - var N = _N; - var cids = _cids; - var head = _mergedDomHead; - var next = _mergedDomNext; + var N = _N!; + var cids = _cids!; + var head = _mergedDomHead!; + var next = _mergedDomNext!; var workStack = _newUint32Array(N); var workStackTop = 0; diff --git a/runtime/observatory/lib/service_common.dart b/runtime/observatory/lib/service_common.dart index 2ff81759fcd..236343cf27a 100644 --- a/runtime/observatory/lib/service_common.dart +++ b/runtime/observatory/lib/service_common.dart @@ -26,9 +26,9 @@ class WebSocketVMTarget implements M.Target { bool get standalone => !chrome; // User defined name. - String name; + late String name; // Network address of VM. - String networkAddress; + late String networkAddress; WebSocketVMTarget(this.networkAddress) { name = networkAddress; @@ -89,7 +89,7 @@ abstract class CommonWebSocketVM extends VM { String get displayName => '${name}@${target.name}'; - CommonWebSocket _webSocket; + CommonWebSocket? _webSocket; CommonWebSocketVM(this.target, this._webSocket) { assert(target != null); @@ -120,7 +120,7 @@ abstract class CommonWebSocketVM extends VM { void disconnect({String reason: 'WebSocket closed'}) { if (_hasInitiatedConnect) { if (_webSocket != null) { - _webSocket.close(); + _webSocket!.close(); } } // We don't need to cancel requests and notify here. These @@ -135,8 +135,8 @@ abstract class CommonWebSocketVM extends VM { if (!_hasInitiatedConnect) { _hasInitiatedConnect = true; try { - await _webSocket.connect( - target, _onOpen, _onMessage, _onError, _onClose); + await _webSocket! + .connect(target, _onOpen, _onMessage, _onError, _onClose); } catch (_, stack) { _webSocket = null; var exception = new NetworkRpcException('WebSocket closed'); @@ -150,7 +150,7 @@ abstract class CommonWebSocketVM extends VM { } String serial = (_requestSerial++).toString(); var request = new _WebSocketRequest(method, params); - if ((_webSocket != null) && _webSocket.isOpen) { + if ((_webSocket != null) && _webSocket!.isOpen) { // Already connected, send request immediately. _sendRequest(serial, request); } else { @@ -180,7 +180,7 @@ abstract class CommonWebSocketVM extends VM { _notifyConnect(); } - Map _parseJSON(String message) { + Map? _parseJSON(String message) { var map; try { map = json.decode(message); @@ -198,7 +198,7 @@ abstract class CommonWebSocketVM extends VM { } void _onBinaryMessage(dynamic data) { - _webSocket.nonStringToByteData(data).then((ByteData bytes) { + _webSocket!.nonStringToByteData(data).then((ByteData bytes) { var metadataOffset = 4; var dataOffset = bytes.getUint32(0, Endian.little); var metadataLength = dataOffset - metadataOffset; @@ -292,7 +292,7 @@ abstract class CommonWebSocketVM extends VM { /// Send all delayed requests. void _sendAllDelayedRequests() { - assert(_webSocket.isOpen); + assert(_webSocket!.isOpen); if (_delayedRequests.length == 0) { return; } @@ -305,7 +305,7 @@ abstract class CommonWebSocketVM extends VM { /// Send the request over WebSocket. void _sendRequest(String serial, _WebSocketRequest request) { - assert(_webSocket.isOpen); + assert(_webSocket!.isOpen); // Mark request as pending. assert(_pendingRequests.containsKey(serial) == false); _pendingRequests[serial] = request; @@ -332,7 +332,7 @@ abstract class CommonWebSocketVM extends VM { 'GET [${serial}] ${request.method}(${request.params}) from ${target.networkAddress}'); } // Send message. - _webSocket.send(message); + _webSocket!.send(message); } String toString() => displayName; diff --git a/runtime/observatory/lib/service_html.dart b/runtime/observatory/lib/service_html.dart index cf93d5ebc97..fa2be06fda6 100644 --- a/runtime/observatory/lib/service_html.dart +++ b/runtime/observatory/lib/service_html.dart @@ -15,7 +15,7 @@ import 'package:observatory/service_common.dart'; export 'package:observatory/service_common.dart'; class _HtmlWebSocket implements CommonWebSocket { - WebSocket _webSocket; + WebSocket? _webSocket; Future connect(WebSocketVMTarget target, void onOpen(), void onMessage(dynamic data), void onError(), void onClose()) async { @@ -43,20 +43,20 @@ class _HtmlWebSocket implements CommonWebSocket { target.networkAddress = response['result']['uri']; */ _webSocket = new WebSocket(target.networkAddress); - _webSocket.onClose.listen((CloseEvent) => onClose()); - _webSocket.onError.listen((Event) => onError()); - _webSocket.onOpen.listen((Event) => onOpen()); - _webSocket.onMessage.listen((MessageEvent event) => onMessage(event.data)); + _webSocket!.onClose.listen((CloseEvent) => onClose()); + _webSocket!.onError.listen((Event) => onError()); + _webSocket!.onOpen.listen((Event) => onOpen()); + _webSocket!.onMessage.listen((MessageEvent event) => onMessage(event.data)); } - bool get isOpen => _webSocket.readyState == WebSocket.OPEN; + bool get isOpen => _webSocket!.readyState == WebSocket.OPEN; void send(dynamic data) { - _webSocket.send(data); + _webSocket!.send(data); } void close() { - _webSocket.close(); + _webSocket!.close(); } Future nonStringToByteData(dynamic data) { diff --git a/runtime/observatory/lib/service_io.dart b/runtime/observatory/lib/service_io.dart index bf21fea0061..ece0fe1e531 100644 --- a/runtime/observatory/lib/service_io.dart +++ b/runtime/observatory/lib/service_io.dart @@ -15,13 +15,13 @@ import 'package:observatory/service_common.dart'; export 'package:observatory/service_common.dart'; class _IOWebSocket implements CommonWebSocket { - WebSocket _webSocket; + WebSocket? _webSocket; Future connect(WebSocketVMTarget target, void onOpen(), void onMessage(dynamic data), void onError(), void onClose()) async { try { _webSocket = await WebSocket.connect(target.networkAddress); - _webSocket.listen(onMessage, + _webSocket!.listen(onMessage, onError: (dynamic) => onError(), onDone: onClose, cancelOnError: true); @@ -32,16 +32,14 @@ class _IOWebSocket implements CommonWebSocket { } bool get isOpen => - (_webSocket != null) && (_webSocket.readyState == WebSocket.open); + (_webSocket != null) && (_webSocket!.readyState == WebSocket.open); void send(dynamic data) { - _webSocket.add(data); + _webSocket!.add(data); } void close() { - if (_webSocket != null) { - _webSocket.close(); - } + _webSocket?.close(); } Future nonStringToByteData(dynamic data) { diff --git a/runtime/observatory/lib/src/allocation_profile/allocation_profile.dart b/runtime/observatory/lib/src/allocation_profile/allocation_profile.dart index c1e7aa1e9c9..0ec7fa15d5c 100644 --- a/runtime/observatory/lib/src/allocation_profile/allocation_profile.dart +++ b/runtime/observatory/lib/src/allocation_profile/allocation_profile.dart @@ -6,15 +6,16 @@ part of allocation_profiler; class AllocationProfile implements M.AllocationProfile { static const _lastServiceGC = 'dateLastServiceGC'; - final DateTime lastServiceGC; + final DateTime? lastServiceGC; static const _lastAccumulatorReset = 'dateLastAccumulatorReset'; - final DateTime lastAccumulatorReset; + final DateTime? lastAccumulatorReset; final S.HeapSpace newSpace; final S.HeapSpace oldSpace; final S.HeapSpace totalSpace; final Iterable members; - AllocationProfile(S.ServiceMap map, {Map/*>*/ defaults}) + AllocationProfile(S.ServiceMap map, + {Map/*>*/ ? defaults}) : lastAccumulatorReset = _intString2DateTime(map[_lastAccumulatorReset]), lastServiceGC = _intString2DateTime(map[_lastServiceGC]), oldSpace = new S.HeapSpace()..update(map['_heaps']['old']), @@ -25,7 +26,7 @@ class AllocationProfile implements M.AllocationProfile { totalSpace.add(newSpace); } - static DateTime _intString2DateTime(String milliseconds) { + static DateTime? _intString2DateTime(String milliseconds) { if ((milliseconds == null) || milliseconds == '') { return null; } @@ -38,7 +39,7 @@ class AllocationProfile implements M.AllocationProfile { } static List _convertMembers(Iterable/**/ raw, - {Map/*>*/ defaults}) { + {Map/*>*/ ? defaults}) { final List members = raw.map(_convertMember).toList(); if (defaults == null) { @@ -49,26 +50,26 @@ class AllocationProfile implements M.AllocationProfile { final Map> accumulators = >{}; defaults.forEach((/*String*/ key, /*List*/ values) { - final classes = aliases[key]; + final classes = aliases[key]!; accumulators.addAll(new Map.fromIterable(values, value: (_) => classes)); }); final List result = []; members.forEach((M.ClassHeapStats member) { - if (accumulators.containsKey(member.clazz.id)) { - accumulators[member.clazz.id].add(member); + if (accumulators.containsKey(member.clazz!.id)) { + accumulators[member.clazz!.id]!.add(member as ClassHeapStats); } else { - result.add(member); + result.add(member as ClassHeapStats); } }); return result ..addAll( - aliases.keys.map((key) => new ClassesHeapStats(key, aliases[key]))); + aliases.keys.map((key) => new ClassesHeapStats(key, aliases[key]!))); } } class ClassHeapStats implements M.ClassHeapStats { - final S.Class clazz; - final String displayName = null; + final S.Class? clazz; + final String? displayName = null; final S.Allocations newSpace; final S.Allocations oldSpace; @@ -79,8 +80,8 @@ class ClassHeapStats implements M.ClassHeapStats { } class ClassesHeapStats implements M.ClassHeapStats { - final S.Class clazz = null; - final String displayName; + final S.Class? clazz = null; + final String? displayName; final S.Allocations newSpace; final S.Allocations oldSpace; diff --git a/runtime/observatory/lib/src/app/application.dart b/runtime/observatory/lib/src/app/application.dart index 768c3b49f60..e7eae4dd338 100644 --- a/runtime/observatory/lib/src/app/application.dart +++ b/runtime/observatory/lib/src/app/application.dart @@ -7,30 +7,30 @@ part of app; /// The observatory application. Instances of this are created and owned /// by the observatory_application custom element. class ObservatoryApplication { - static ObservatoryApplication app; + static late ObservatoryApplication app; final RenderingQueue queue = new RenderingQueue(); final TargetRepository targets = new TargetRepository(isConnectedVMTarget); final EventRepository events = new EventRepository(); final NotificationRepository notifications = new NotificationRepository(); final _pageRegistry = []; - LocationManager _locationManager; + late LocationManager _locationManager; LocationManager get locationManager => _locationManager; - Page currentPage; + Page? currentPage; bool _vmConnected = false; - VM _vm; - VM get vm => _vm; + VM? _vm; + VM get vm => _vm!; static bool isConnectedVMTarget(M.Target target) { if (app._vm is CommonWebSocketVM) { if ((app._vm as CommonWebSocketVM).target == target) { - return app._vm.isConnected; + return app._vm!.isConnected; } } return false; } - _switchVM(VM newVM) { - final VM oldVM = _vm; + _switchVM(VM? newVM) { + final VM? oldVM = _vm; Logger.root.info('_switchVM from:${oldVM} to:${newVM}'); @@ -89,14 +89,14 @@ class ObservatoryApplication { _vm = newVM; } - StreamSubscription _gcSubscription; - StreamSubscription _loggingSubscription; + StreamSubscription? _gcSubscription; + StreamSubscription? _loggingSubscription; Future startGCEventListener() async { if (_gcSubscription != null || _vm == null) { return; } - _gcSubscription = await _vm.listenEventStream(VM.kGCStream, _onEvent); + _gcSubscription = await _vm!.listenEventStream(VM.kGCStream, _onEvent); } Future startLoggingEventListener() async { @@ -104,14 +104,14 @@ class ObservatoryApplication { return; } _loggingSubscription = - await _vm.listenEventStream(Isolate.kLoggingStream, _onEvent); + await _vm!.listenEventStream(Isolate.kLoggingStream, _onEvent); } Future stopGCEventListener() async { if (_gcSubscription == null) { return; } - _gcSubscription.cancel(); + _gcSubscription!.cancel(); _gcSubscription = null; } @@ -119,16 +119,15 @@ class ObservatoryApplication { if (_loggingSubscription == null) { return; } - _loggingSubscription.cancel(); + _loggingSubscription!.cancel(); _loggingSubscription = null; } final ObservatoryApplicationElement rootElement; - ServiceObject lastErrorOrException; + ServiceObject? lastErrorOrException; void _initOnce() { - assert(app == null); app = this; _registerPages(); // Visit the current page. @@ -145,7 +144,7 @@ class ObservatoryApplication { void _onEvent(ServiceEvent event) { assert(event.kind != ServiceEvent.kNone); - M.Event e = createEventFromServiceEvent(event); + M.Event? e = createEventFromServiceEvent(event); if (e != null) { events.add(e); } @@ -179,7 +178,7 @@ class ObservatoryApplication { _pageRegistry.add(new ErrorPage(this)); } - void _visit(Uri uri, Map internalArguments) { + void _visit(Uri uri, Map internalArguments) { if (internalArguments['trace'] != null) { var traceArg = internalArguments['trace']; if (traceArg == 'on') { @@ -189,7 +188,7 @@ class ObservatoryApplication { } } if (Tracer.current != null) { - Tracer.current.reset(); + Tracer.current!.reset(); } for (var i = 0; i < _pageRegistry.length; i++) { var page = _pageRegistry[i]; @@ -211,7 +210,7 @@ class ObservatoryApplication { } if (currentPage != null) { Logger.root.info('Uninstalling page: $currentPage'); - currentPage.onUninstall(); + currentPage!.onUninstall(); // Clear children. rootElement.children.clear(); } @@ -222,7 +221,7 @@ class ObservatoryApplication { Logger.root.severe('Failed to install page: $e'); } // Add new page. - rootElement.children.add(page.element); + rootElement.children.add(page.element!); // Remember page. currentPage = page; @@ -239,22 +238,22 @@ class ObservatoryApplication { _switchVM(null); } else { final bool currentTarget = - (_vm as WebSocketVM)?.target == targets.current; - final bool currentTargetConnected = (_vm != null) && _vm.isConnected; + (_vm as WebSocketVM?)?.target == targets.current; + final bool currentTargetConnected = (_vm != null) && _vm!.isConnected; if (!currentTarget || !currentTargetConnected) { - _switchVM(new WebSocketVM(targets.current)); - _vm.onConnect.then((_) { + _switchVM(new WebSocketVM(targets.current!)); + _vm!.onConnect.then((_) { app.locationManager.go(Uris.vm()); }); - _vm.load(); + _vm!.load(); } else if (currentTargetConnected) { app.locationManager.go(Uris.vm()); } } }); - Logger.root.info('Setting initial target to ${targets.current.name}'); - _switchVM(new WebSocketVM(targets.current)); + Logger.root.info('Setting initial target to ${targets.current!.name}'); + _switchVM(new WebSocketVM(targets.current!)); _initOnce(); // delete pause events. diff --git a/runtime/observatory/lib/src/app/location_manager.dart b/runtime/observatory/lib/src/app/location_manager.dart index a0e1af123e0..2f231d83337 100644 --- a/runtime/observatory/lib/src/app/location_manager.dart +++ b/runtime/observatory/lib/src/app/location_manager.dart @@ -11,11 +11,11 @@ class LocationManager { /// application URL. final Map internalArguments = new Map(); - Uri _uri; + Uri? _uri; /// [uri] is the application uri. Application uris consist of a path and /// the queryParameters map. - Uri get uri => _uri; + Uri get uri => _uri!; LocationManager(this._app) { window.onPopState.listen(_onBrowserNavigation); @@ -90,13 +90,14 @@ class LocationManager { /// Notify the current page that something has changed. _visit() { - Chain.capture(() => _app._visit(_uri, internalArguments), onError: (e, st) { + Chain.capture(() => _app._visit(_uri!, internalArguments), + onError: (e, st) { if (e is IsolateNotFound) { var newPath = ((_app.vm == null || _app.vm.isDisconnected) ? '/vm-connect' : '/isolate-reconnect'); var parameters = {}; - parameters.addAll(_uri.queryParameters); + parameters.addAll(_uri!.queryParameters); parameters['originalUri'] = _uri.toString(); parameters['isolateId'] = parameters['isolateId']; var generatedUri = new Uri(path: newPath, queryParameters: parameters); @@ -126,7 +127,7 @@ class LocationManager { } makeLinkReplacingParameters(Map updatedParameters) { - var parameters = new Map.from(_uri.queryParameters); + var parameters = new Map.from(_uri!.queryParameters); updatedParameters.forEach((k, v) { parameters[k] = v; }); @@ -141,7 +142,7 @@ class LocationManager { } makeLinkForwardingParameters(String newPath) { - var parameters = _uri.queryParameters; + var parameters = _uri!.queryParameters; var generatedUri = new Uri(path: newPath, queryParameters: parameters); return makeLink(generatedUri.toString()); } @@ -161,7 +162,7 @@ class LocationManager { event.preventDefault(); // 'currentTarget' is the dom element that would process the event. // If we use 'target' we might get an element or somesuch. - Element target = event.currentTarget; - go(target.attributes['href']); + Element target = event.currentTarget as Element; + go(target.attributes['href']!); } } diff --git a/runtime/observatory/lib/src/app/notification.dart b/runtime/observatory/lib/src/app/notification.dart index 1f5f9d76f9e..933cdb9fadc 100644 --- a/runtime/observatory/lib/src/app/notification.dart +++ b/runtime/observatory/lib/src/app/notification.dart @@ -8,7 +8,7 @@ class ExceptionNotification implements M.ExceptionNotification { final exception; /// [optional] - final StackTrace stacktrace; + final StackTrace? stacktrace; ExceptionNotification(this.exception, {this.stacktrace}); } diff --git a/runtime/observatory/lib/src/app/page.dart b/runtime/observatory/lib/src/app/page.dart index a366acf5ce4..9adaad79532 100644 --- a/runtime/observatory/lib/src/app/page.dart +++ b/runtime/observatory/lib/src/app/page.dart @@ -55,7 +55,7 @@ RetainingPathRepository _retainingPathRepository = abstract class Page { final ObservatoryApplication app; final Map internalArguments = {}; - HtmlElement element; + HtmlElement? element; Page(this.app); @@ -70,7 +70,7 @@ abstract class Page { } /// Called when the page should update its state based on [uri]. - void visit(Uri uri, Map internalArguments) { + void visit(Uri uri, Map internalArguments) { this.internalArguments.clear(); this.internalArguments.addAll(internalArguments); _visit(uri); @@ -95,7 +95,7 @@ abstract class MatchingPage extends Page { Future getIsolate(Uri uri) { var isolateId = uri.queryParameters['isolateId']; - return app.vm.getIsolate(isolateId).then((isolate) { + return app.vm.getIsolate(isolateId!).then((isolate) { if (isolate == null) { throw new IsolateNotFound(isolateId); } @@ -106,7 +106,6 @@ abstract class MatchingPage extends Page { EditorRepository getEditor(Uri uri) { final editor = uri.queryParameters['editor']; return new EditorRepository(app.vm, editor: editor); - return null; } bool canVisit(Uri uri) => uri.path == path; @@ -119,7 +118,7 @@ class SimplePage extends MatchingPage { void onInstall() { if (element == null) { - element = new Element.tag(elementTagName); + element = new Element.tag(elementTagName) as HtmlElement; } } } @@ -169,7 +168,7 @@ class VMPage extends MatchingPage { return; } app.vm.reload().then((serviceObject) { - VM vm = serviceObject; + VM vm = serviceObject as VM; container.children = [ new VMViewElement( vm, @@ -257,7 +256,7 @@ class InspectPage extends MatchingPage { container.children = [ new ClassViewElement( app.vm, - obj.isolate, + obj.isolate as Isolate, obj, app.events, app.notifications, @@ -280,7 +279,7 @@ class InspectPage extends MatchingPage { container.children = [ new CodeViewElement( app.vm, - obj.isolate, + obj.isolate as Isolate, obj, app.events, app.notifications, @@ -296,7 +295,7 @@ class InspectPage extends MatchingPage { container.children = [ new ContextViewElement( app.vm, - obj.isolate, + obj.isolate as Isolate, obj, app.events, app.notifications, @@ -317,7 +316,7 @@ class InspectPage extends MatchingPage { container.children = [ new FieldViewElement( app.vm, - obj.isolate, + obj.isolate as Isolate, obj, app.events, app.notifications, @@ -336,7 +335,7 @@ class InspectPage extends MatchingPage { container.children = [ new InstanceViewElement( app.vm, - obj.isolate, + obj.isolate as Isolate, obj, app.events, app.notifications, @@ -374,7 +373,7 @@ class InspectPage extends MatchingPage { container.children = [ new FunctionViewElement( app.vm, - obj.isolate, + obj.isolate as Isolate, obj, app.events, app.notifications, @@ -393,7 +392,7 @@ class InspectPage extends MatchingPage { container.children = [ new ICDataViewElement( app.vm, - obj.isolate, + obj.isolate as Isolate, obj, app.events, app.notifications, @@ -410,7 +409,7 @@ class InspectPage extends MatchingPage { container.children = [ new SingleTargetCacheViewElement( app.vm, - obj.isolate, + obj.isolate as Isolate, obj, app.events, app.notifications, @@ -427,7 +426,7 @@ class InspectPage extends MatchingPage { container.children = [ new SubtypeTestCacheViewElement( app.vm, - obj.isolate, + obj.isolate as Isolate, obj, app.events, app.notifications, @@ -444,7 +443,7 @@ class InspectPage extends MatchingPage { container.children = [ new UnlinkedCallViewElement( app.vm, - obj.isolate, + obj.isolate as Isolate, obj, app.events, app.notifications, @@ -461,7 +460,7 @@ class InspectPage extends MatchingPage { container.children = [ new LibraryViewElement( app.vm, - obj.isolate, + obj.isolate as Isolate, obj, app.events, app.notifications, @@ -481,7 +480,7 @@ class InspectPage extends MatchingPage { container.children = [ new MegamorphicCacheViewElement( app.vm, - obj.isolate, + obj.isolate as Isolate, obj, app.events, app.notifications, @@ -498,7 +497,7 @@ class InspectPage extends MatchingPage { container.children = [ new ObjectPoolViewElement( app.vm, - obj.isolate, + obj.isolate as Isolate, obj, app.events, app.notifications, @@ -515,13 +514,13 @@ class InspectPage extends MatchingPage { var pos; if (app.locationManager.internalArguments['pos'] != null) { try { - pos = int.parse(app.locationManager.internalArguments['pos']); + pos = int.parse(app.locationManager.internalArguments['pos']!); } catch (_) {} } container.children = [ new ScriptViewElement( app.vm, - obj.isolate, + obj.isolate as Isolate, obj, app.events, app.notifications, @@ -539,7 +538,7 @@ class InspectPage extends MatchingPage { container.children = [ new ObjectViewElement( app.vm, - obj.isolate, + obj.isolate as Isolate, obj, app.events, app.notifications, @@ -553,8 +552,8 @@ class InspectPage extends MatchingPage { ]; } else if (obj is Sentinel) { container.children = [ - new SentinelViewElement( - app.vm, obj.isolate, obj, app.events, app.notifications, + new SentinelViewElement(app.vm, obj.isolate as Isolate, obj, app.events, + app.notifications, queue: app.queue) .element ]; @@ -911,8 +910,8 @@ class IsolateReconnectPage extends Page { app.vm, app.events, app.notifications, - uri.queryParameters['isolateId'], - Uri.parse(uri.queryParameters['originalUri'])) + uri.queryParameters['isolateId']!, + Uri.parse(uri.queryParameters['originalUri']!)) .element ]; assert(element != null); @@ -927,7 +926,7 @@ class MetricsPage extends MatchingPage { final DivElement container = new DivElement(); - Isolate lastIsolate; + Isolate? lastIsolate; void _visit(Uri uri) { super._visit(uri); @@ -953,7 +952,7 @@ class MetricsPage extends MatchingPage { @override void onUninstall() { super.onUninstall(); - _metricRepository.stopSampling(lastIsolate); + _metricRepository.stopSampling(lastIsolate!); container.children = const []; } } diff --git a/runtime/observatory/lib/src/cli/command.dart b/runtime/observatory/lib/src/cli/command.dart index 0a0fc425572..7beb26f5a8d 100644 --- a/runtime/observatory/lib/src/cli/command.dart +++ b/runtime/observatory/lib/src/cli/command.dart @@ -46,8 +46,8 @@ abstract class _CommandBase { // A command may optionally have sub-commands. List _children = []; - _CommandBase _parent; - int get _depth => (_parent == null ? 0 : _parent._depth + 1); + _CommandBase? _parent; + int get _depth => (_parent == null ? 0 : _parent!._depth + 1); // Override in subclasses to provide command-specific argument completion. // @@ -115,7 +115,7 @@ abstract class _CommandBase { // The root of a tree of commands. class RootCommand extends _CommandBase { - RootCommand(List children, [List history]) + RootCommand(List children, [List? history]) : this._(children, history ?? ['']); RootCommand._(List children, List history) @@ -161,7 +161,7 @@ class RootCommand extends _CommandBase { // If we are showing all possiblities, also include local // completions for the parent command. return commands[0] - ._parent + ._parent! ._buildCompletions(args, false) .then((localCompletions) { completions.addAll(localCompletions); @@ -232,7 +232,7 @@ class RootCommand extends _CommandBase { throw 'should-not-execute-the-root-command'; } - toString() => 'RootCommand'; + String toString() => 'RootCommand'; } // A node in the command tree. @@ -240,18 +240,18 @@ abstract class Command extends _CommandBase { Command(this.name, List children) : super(children); final String name; - String alias; + String? alias; String get fullName { if (_parent is RootCommand) { return name; } else { - Command parent = _parent; + Command parent = _parent as Command; return '${parent.fullName} $name'; } } - toString() => 'Command(${name})'; + String toString() => 'Command(${name})'; } abstract class CommandException implements Exception {} diff --git a/runtime/observatory/lib/src/debugger/debugger.dart b/runtime/observatory/lib/src/debugger/debugger.dart index fb297c79982..f243e021112 100644 --- a/runtime/observatory/lib/src/debugger/debugger.dart +++ b/runtime/observatory/lib/src/debugger/debugger.dart @@ -8,7 +8,7 @@ part of debugger; abstract class Debugger { VM get vm; Isolate get isolate; - M.ObjectRepository objects; - ServiceMap get stack; - int get currentFrame; + M.ObjectRepository? objects; + ServiceMap? get stack; + int? get currentFrame; } diff --git a/runtime/observatory/lib/src/debugger/debugger_location.dart b/runtime/observatory/lib/src/debugger/debugger_location.dart index a186fd4be11..344a010a516 100644 --- a/runtime/observatory/lib/src/debugger/debugger_location.dart +++ b/runtime/observatory/lib/src/debugger/debugger_location.dart @@ -50,12 +50,12 @@ class DebuggerLocation { new DebuggerLocation.error("Invalid source location '${locDesc}'")); } - static Future _currentFrame(Debugger debugger) async { - ServiceMap stack = debugger.stack; + static Future _currentFrame(Debugger debugger) async { + ServiceMap? stack = debugger.stack; if (stack == null || stack['frames'].length == 0) { return null; } - return stack['frames'][debugger.currentFrame]; + return stack['frames'][debugger.currentFrame] as Frame?; } static Future _currentLocation(Debugger debugger) async { @@ -64,10 +64,10 @@ class DebuggerLocation { return new DebuggerLocation.error( 'A script must be provided when the stack is empty'); } - Script script = frame.location.script; + Script script = frame.location!.script; await script.load(); - var line = script.tokenToLine(frame.location.tokenPos); - var col = script.tokenToCol(frame.location.tokenPos); + var line = script.tokenToLine(frame.location!.tokenPos); + var col = script.tokenToCol(frame.location!.tokenPos); return new DebuggerLocation.file(script, line, col); } @@ -87,7 +87,7 @@ class DebuggerLocation { if (colStr != null) { colStr = colStr.substring(1); } - var line = int.tryParse(lineStr) ?? -1; + var line = int.tryParse(lineStr!) ?? -1; var col = (colStr != null ? int.tryParse(colStr) ?? -1 : null); if (line == -1) { return new Future.value( @@ -121,7 +121,7 @@ class DebuggerLocation { return new Future.value(new DebuggerLocation.error( 'A script must be provided when the stack is empty')); } - Script script = frame.location.script; + Script script = frame.location!.script; await script.load(); return new DebuggerLocation.file(script, line, col); } @@ -139,7 +139,7 @@ class DebuggerLocation { var matches =