From d315f906deea7aed4e007e65621bc78bde20e83a Mon Sep 17 00:00:00 2001 From: Alexander Aprelev Date: Tue, 2 Jun 2020 03:03:57 +0000 Subject: [PATCH] Revert "[vm, service, observatory] Bang Bang (My Type System Shot Me Down)." This reverts commit d806959461dbf92ce20aeec98d3f80569de0f7e5. Reason for revert: multiple failures on service and other tests on various buildbots Original change's description: > [vm, service, observatory] Bang Bang (My Type System Shot Me Down). > > Port the service tests and Observatory to Dart 3. > > Change-Id: Ia43b169a110e5209a9770aeda1b9a4007427f064 > Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/143381 > Commit-Queue: Ryan Macnak > Reviewed-by: Ben Konyi TBR=bkonyi@google.com,rmacnak@google.com Change-Id: Id22f40dafa8c0fc3fb8c3052321629a48cb7dbc3 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149684 Reviewed-by: Alexander Aprelev Commit-Queue: Alexander Aprelev --- .dart_tool/package_config.json | 4 +- .../lib/src/compiler_configuration.dart | 1 + runtime/observatory/BUILD.gn | 1 - 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 | 309 +++-- runtime/observatory/lib/service_common.dart | 22 +- runtime/observatory/lib/service_html.dart | 19 +- 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 | 108 +- .../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 | 36 +- .../containers/virtual_collection.dart | 104 +- .../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 | 50 +- .../lib/src/elements/cpu_profile_table.dart | 76 +- .../lib/src/elements/curly_block.dart | 8 +- .../lib/src/elements/debugger.dart | 420 ++++--- .../lib/src/elements/error_ref.dart | 6 +- .../lib/src/elements/error_view.dart | 10 +- .../lib/src/elements/eval_box.dart | 26 +- .../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 | 243 ++-- .../lib/src/elements/helpers/any_ref.dart | 2 +- .../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/tag.dart | 10 +- .../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 | 10 +- .../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 | 20 +- .../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 | 18 +- .../src/elements/observatory_application.dart | 2 +- .../lib/src/elements/pc_descriptors_ref.dart | 8 +- .../lib/src/elements/persistent_handles.dart | 22 +- .../observatory/lib/src/elements/ports.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 | 55 +- .../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 | 14 +- .../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 | 36 +- .../lib/src/models/objects/isolate_group.dart | 8 +- .../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 | 1075 +++++++++-------- runtime/observatory/lib/tracer.dart | 24 +- runtime/observatory/lib/utils.dart | 4 +- runtime/observatory/pubspec.yaml | 2 +- .../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/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 | 4 +- .../tcp_socket_closing_service_test.dart | 2 +- .../tests/service/test_helper.dart | 110 +- .../tests/service/type_arguments_test.dart | 2 +- .../tests/service/typed_data_test.dart | 6 +- .../service/udp_socket_service_test.dart | 2 +- .../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 +- tools/bots/test_matrix.json | 48 +- 313 files changed, 3703 insertions(+), 3801 deletions(-) diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json index 8bd78518f79..87d1ada8f42 100644 --- a/.dart_tool/package_config.json +++ b/.dart_tool/package_config.json @@ -427,12 +427,12 @@ "name": "observatory", "rootUri": "../runtime/observatory", "packageUri": "lib/", - "languageVersion": "2.9" + "languageVersion": "2.2" }, { "name": "observatory_test_package", "rootUri": "../runtime/observatory/tests/service/observatory_test_package", - "languageVersion": "2.9" + "languageVersion": "2.7" }, { "name": "package_config", diff --git a/pkg/test_runner/lib/src/compiler_configuration.dart b/pkg/test_runner/lib/src/compiler_configuration.dart index 8113cc5c7fb..97be6bd17fd 100644 --- a/pkg/test_runner/lib/src/compiler_configuration.dart +++ b/pkg/test_runner/lib/src/compiler_configuration.dart @@ -962,6 +962,7 @@ class AnalyzerCompilerConfiguration extends CompilerConfiguration { "ffi_2", "language_2", "lib_2", + "service", "standalone_2" }; diff --git a/runtime/observatory/BUILD.gn b/runtime/observatory/BUILD.gn index 053164ecd54..1762e1aee03 100644 --- a/runtime/observatory/BUILD.gn +++ b/runtime/observatory/BUILD.gn @@ -37,7 +37,6 @@ prebuilt_dart2js_action("build_observatory") { "-o", rebase_path(output), "--packages=" + rebase_path("../../.packages"), - "--enable-experiment=non-nullable", ] if (is_debug) { args += [ "--enable-asserts" ] diff --git a/runtime/observatory/analysis_options.yaml b/runtime/observatory/analysis_options.yaml index 13bad8a6816..6babf28a427 100644 --- a/runtime/observatory/analysis_options.yaml +++ b/runtime/observatory/analysis_options.yaml @@ -1,10 +1,7 @@ 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 b5aaf93fafd..22d3ce53f14 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 dynResponse) { - if (dynResponse is String) { - final response = json.decode(dynResponse); + ws.listen((dynamic response) { + if (response is String) { + response = json.decode(response); if (response['id'] == 1) { getVM.complete(response['result']['isolates'][0]['id']); } - } else if (dynResponse is List) { - final response = new Uint8List.fromList(dynResponse); + } else if (response is List) { + response = new Uint8List.fromList(response); 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 d6c551fef7d..a0cb274be4a 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 as VM; + VM vm = serviceObject; 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 71bed827806..e79b16b3c61 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,71 +309,69 @@ 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 8a62d01eeb2..ce48c8bf694 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; - List? _chunks = []; + var _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) { @@ -374,7 +374,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); @@ -389,78 +389,70 @@ class _SnapshotMergedDominator implements SnapshotMergedDominator { String get description => "$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 internalSizes = _graph._internalSizes!; - var mergedDomNext = _graph._mergedDomNext!; + var cids = _graph._cids; var size = 0; var sibling = _id; while (sibling != _SENTINEL && cids[sibling] == cids[_id]) { - size += internalSizes[sibling]; - sibling = mergedDomNext[sibling]; + size += _graph._internalSizes[sibling]; + sibling = _graph._mergedDomNext[sibling]; } return size; } int get externalSize { - var cids = _graph._cids!; - var externalSizes = _graph._externalSizes!; - var mergedDomNext = _graph._mergedDomNext!; + var cids = _graph._cids; var size = 0; var sibling = _id; while (sibling != _SENTINEL && cids[sibling] == cids[_id]) { - size += externalSizes[sibling]; - sibling = mergedDomNext[sibling]; + size += _graph._externalSizes[sibling]; + sibling = _graph._mergedDomNext[sibling]; } return size; } int get retainedSize { - var cids = _graph._cids!; - var retainedSizes = _graph._retainedSizes!; - var mergedDomNext = _graph._mergedDomNext!; + var cids = _graph._cids; var size = 0; var sibling = _id; while (sibling != _SENTINEL && cids[sibling] == cids[_id]) { - size += retainedSizes[sibling]; - sibling = mergedDomNext[sibling]; + size += _graph._retainedSizes[sibling]; + sibling = _graph._mergedDomNext[sibling]; } return size; } int get instanceCount { - var cids = _graph._cids!; - var mergedDomNext = _graph._mergedDomNext!; + var cids = _graph._cids; var count = 0; var sibling = _id; while (sibling != _SENTINEL && cids[sibling] == cids[_id]) { count++; - sibling = mergedDomNext[sibling]; + sibling = _graph._mergedDomNext[sibling]; } return count; } Iterable get objects sync* { - var cids = _graph._cids!; - var mergedDomNext = _graph._mergedDomNext!; + var cids = _graph._cids; var sibling = _id; while (sibling != _SENTINEL && cids[sibling] == cids[_id]) { yield _SnapshotObject._new(sibling, _graph, ""); - sibling = mergedDomNext[sibling]; + sibling = _graph._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) { @@ -512,11 +504,9 @@ class _SnapshotClass implements SnapshotClass { int get instanceCount => liveInstanceCount; Iterable get instances sync* { - final N = _graph._N!; - final cids = _graph._cids!; - final retainedSizes = _graph._retainedSizes!; + final N = _graph._N; for (var id = 1; id <= N; id++) { - if (cids[id] == _cid && retainedSizes[id] > 0) { + if (_graph._cids[id] == _cid && _graph._retainedSizes[id] > 0) { yield _SnapshotObject._new(id, _graph, ""); } } @@ -566,27 +556,26 @@ const _kRootName = "Root"; 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); Iterable get objects sync* { - final N = _N!; - final retainedSizes = _retainedSizes!; + final N = _N; for (var id = 1; id <= N; id++) { - if (retainedSizes[id] > 0) { + if (_retainedSizes[id] > 0) { yield _SnapshotObject._new(id, this, ""); } } @@ -600,7 +589,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 { @@ -609,8 +598,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"; } @@ -618,7 +607,7 @@ class _SnapshotGraph implements SnapshotGraph { } String _edgeName(int cid, int index) { - var c = _classes![cid]; + var c = _classes[cid]; if (c == null) { return _kUnknownFieldName; } @@ -630,7 +619,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; @@ -641,9 +630,9 @@ class _SnapshotGraph implements SnapshotGraph { final processPartitions = new Map(); Future _load( - List? chunks, StreamController onProgress) async { + List chunks, StreamController onProgress) async { _chunks = chunks; - _ReadStream? stream = _ReadStream._new(chunks!); + var stream = _ReadStream._new(chunks); chunks = null; // The phases of loading are placed in explicit `new Future(compuation)` so @@ -651,16 +640,16 @@ 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)); onProgress.add("Loading process partitions..."); - await new Future(() => _readProcessPartitions(stream!)); + await new Future(() => _readProcessPartitions(stream)); stream = null; onProgress.add("Compute class table..."); @@ -706,46 +695,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++) { @@ -759,7 +748,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++) { @@ -802,7 +791,7 @@ class _SnapshotGraph implements SnapshotGraph { var internalSizes = _newUint32Array(N + 1); var cids = _newUint16Array(N + 1); - var nonReferenceData = new List.filled(N + 1, null); + var nonReferenceData = new List(N + 1); var firstSuccs = _newUint32Array(N + 2); var succs = _newUint32Array(E); var eid = 0; @@ -878,7 +867,7 @@ class _SnapshotGraph implements SnapshotGraph { } void _readExternalProperties(_ReadStream stream) { - final N = _N!; + final N = _N; final externalPropertyCount = stream.readUnsigned(); final externalSizes = _newUint32Array(N + 1); @@ -904,11 +893,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; @@ -919,7 +908,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++; @@ -930,9 +919,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); @@ -1020,11 +1009,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). @@ -1079,17 +1068,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++) { @@ -1134,11 +1123,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]; } } @@ -1220,14 +1209,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); @@ -1236,7 +1225,7 @@ class _SnapshotGraph implements SnapshotGraph { for (var i = 1; i <= N; i++) { label[i] = i; } - final buckets = new List.filled(N + 1, null); + final buckets = new List(N + 1); final child = _newUint32Array(N + 1); final size = _newUint32Array(N + 1); for (var i = 1; i <= N; i++) { @@ -1263,7 +1252,7 @@ class _SnapshotGraph implements SnapshotGraph { // w.semi.bucket.add(w); var tmp = vertex[semi[w]]; if (buckets[tmp] == null) { - buckets[tmp] = []; + buckets[tmp] = new List(); } buckets[tmp].add(w); @@ -1295,17 +1284,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++) { @@ -1315,7 +1304,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++; @@ -1346,18 +1335,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); @@ -1411,10 +1400,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) { @@ -1448,10 +1437,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 2dd171811ca..f0748918b72 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. - late String name; + String name; // Network address of VM. - late String networkAddress; + 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,7 +135,7 @@ abstract class CommonWebSocketVM extends VM { if (!_hasInitiatedConnect) { _hasInitiatedConnect = true; try { - _webSocket!.connect( + _webSocket.connect( target.networkAddress, _onOpen, _onMessage, _onError, _onClose); } catch (_, stack) { _webSocket = null; @@ -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 ad22944927e..ddc42f5d2d3 100644 --- a/runtime/observatory/lib/service_html.dart +++ b/runtime/observatory/lib/service_html.dart @@ -14,26 +14,25 @@ import 'package:observatory/service_common.dart'; export 'package:observatory/service_common.dart'; class _HtmlWebSocket implements CommonWebSocket { - WebSocket? _webSocket; + WebSocket _webSocket; void connect(String address, void onOpen(), void onMessage(dynamic data), void onError(), void onClose()) { - var socket = new WebSocket(address); - socket.onClose.listen((CloseEvent) => onClose()); - socket.onError.listen((Event) => onError()); - socket.onOpen.listen((Event) => onOpen()); - socket.onMessage.listen((MessageEvent event) => onMessage(event.data)); - _webSocket = socket; + _webSocket = new WebSocket(address); + _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 987f6781817..2ecbbf11391 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; void connect(String address, void onOpen(), void onMessage(dynamic data), void onError(), void onClose()) { WebSocket.connect(address).then((WebSocket socket) { _webSocket = socket; - socket.listen(onMessage, + _webSocket.listen(onMessage, onError: (dynamic) => onError(), onDone: onClose, cancelOnError: true); @@ -32,14 +32,16 @@ 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() { - _webSocket?.close(); + if (_webSocket != null) { + _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 0ec7fa15d5c..c1e7aa1e9c9 100644 --- a/runtime/observatory/lib/src/allocation_profile/allocation_profile.dart +++ b/runtime/observatory/lib/src/allocation_profile/allocation_profile.dart @@ -6,16 +6,15 @@ 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']), @@ -26,7 +25,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; } @@ -39,7 +38,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) { @@ -50,26 +49,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 as ClassHeapStats); + if (accumulators.containsKey(member.clazz.id)) { + accumulators[member.clazz.id].add(member); } else { - result.add(member as ClassHeapStats); + result.add(member); } }); 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; @@ -80,8 +79,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 4311b6bf256..e3c4d7bc016 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 late ObservatoryApplication app; + static 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 = []; - late LocationManager _locationManager; + 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,15 +119,16 @@ 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(); Analytics.initialize(); @@ -145,7 +146,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); } @@ -178,7 +179,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') { @@ -188,7 +189,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]; @@ -210,7 +211,7 @@ class ObservatoryApplication { } if (currentPage != null) { Logger.root.info('Uninstalling page: $currentPage'); - currentPage!.onUninstall(); + currentPage.onUninstall(); // Clear children. rootElement.children.clear(); } @@ -221,7 +222,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; @@ -238,22 +239,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 2f231d83337..a0e1af123e0 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,14 +90,13 @@ 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); @@ -127,7 +126,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; }); @@ -142,7 +141,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()); } @@ -162,7 +161,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 as Element; - go(target.attributes['href']!); + Element target = event.currentTarget; + go(target.attributes['href']); } } diff --git a/runtime/observatory/lib/src/app/notification.dart b/runtime/observatory/lib/src/app/notification.dart index 933cdb9fadc..1f5f9d76f9e 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 410676dfbc3..5018e021480 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); Analytics.reportPageView(uri); @@ -96,7 +96,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); } @@ -107,6 +107,7 @@ 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 +120,7 @@ class SimplePage extends MatchingPage { void onInstall() { if (element == null) { - element = new Element.tag(elementTagName) as HtmlElement; + element = new Element.tag(elementTagName); } } } @@ -169,7 +170,7 @@ class VMPage extends MatchingPage { return; } app.vm.reload().then((serviceObject) { - VM vm = serviceObject as VM; + VM vm = serviceObject; container.children = [ new VMViewElement( vm, @@ -257,7 +258,7 @@ class InspectPage extends MatchingPage { container.children = [ new ClassViewElement( app.vm, - obj.isolate as Isolate, + obj.isolate, obj, app.events, app.notifications, @@ -280,7 +281,7 @@ class InspectPage extends MatchingPage { container.children = [ new CodeViewElement( app.vm, - obj.isolate as Isolate, + obj.isolate, obj, app.events, app.notifications, @@ -296,7 +297,7 @@ class InspectPage extends MatchingPage { container.children = [ new ContextViewElement( app.vm, - obj.isolate as Isolate, + obj.isolate, obj, app.events, app.notifications, @@ -317,7 +318,7 @@ class InspectPage extends MatchingPage { container.children = [ new FieldViewElement( app.vm, - obj.isolate as Isolate, + obj.isolate, obj, app.events, app.notifications, @@ -336,7 +337,7 @@ class InspectPage extends MatchingPage { container.children = [ new InstanceViewElement( app.vm, - obj.isolate as Isolate, + obj.isolate, obj, app.events, app.notifications, @@ -374,7 +375,7 @@ class InspectPage extends MatchingPage { container.children = [ new FunctionViewElement( app.vm, - obj.isolate as Isolate, + obj.isolate, obj, app.events, app.notifications, @@ -393,7 +394,7 @@ class InspectPage extends MatchingPage { container.children = [ new ICDataViewElement( app.vm, - obj.isolate as Isolate, + obj.isolate, obj, app.events, app.notifications, @@ -410,7 +411,7 @@ class InspectPage extends MatchingPage { container.children = [ new SingleTargetCacheViewElement( app.vm, - obj.isolate as Isolate, + obj.isolate, obj, app.events, app.notifications, @@ -427,7 +428,7 @@ class InspectPage extends MatchingPage { container.children = [ new SubtypeTestCacheViewElement( app.vm, - obj.isolate as Isolate, + obj.isolate, obj, app.events, app.notifications, @@ -444,7 +445,7 @@ class InspectPage extends MatchingPage { container.children = [ new UnlinkedCallViewElement( app.vm, - obj.isolate as Isolate, + obj.isolate, obj, app.events, app.notifications, @@ -461,7 +462,7 @@ class InspectPage extends MatchingPage { container.children = [ new LibraryViewElement( app.vm, - obj.isolate as Isolate, + obj.isolate, obj, app.events, app.notifications, @@ -481,7 +482,7 @@ class InspectPage extends MatchingPage { container.children = [ new MegamorphicCacheViewElement( app.vm, - obj.isolate as Isolate, + obj.isolate, obj, app.events, app.notifications, @@ -498,7 +499,7 @@ class InspectPage extends MatchingPage { container.children = [ new ObjectPoolViewElement( app.vm, - obj.isolate as Isolate, + obj.isolate, obj, app.events, app.notifications, @@ -515,13 +516,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 as Isolate, + obj.isolate, obj, app.events, app.notifications, @@ -539,7 +540,7 @@ class InspectPage extends MatchingPage { container.children = [ new ObjectViewElement( app.vm, - obj.isolate as Isolate, + obj.isolate, obj, app.events, app.notifications, @@ -553,8 +554,8 @@ class InspectPage extends MatchingPage { ]; } else if (obj is Sentinel) { container.children = [ - new SentinelViewElement(app.vm, obj.isolate as Isolate, obj, app.events, - app.notifications, + new SentinelViewElement( + app.vm, obj.isolate, obj, app.events, app.notifications, queue: app.queue) .element ]; @@ -911,8 +912,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 +928,7 @@ class MetricsPage extends MatchingPage { final DivElement container = new DivElement(); - Isolate? lastIsolate; + Isolate lastIsolate; void _visit(Uri uri) { super._visit(uri); @@ -953,7 +954,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 7beb26f5a8d..0a0fc425572 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'; } - String toString() => 'RootCommand'; + 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 as Command; + Command parent = _parent; return '${parent.fullName} $name'; } } - String toString() => 'Command(${name})'; + 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 f243e021112..fb297c79982 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 344a010a516..a186fd4be11 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] as Frame?; + return stack['frames'][debugger.currentFrame]; } 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 =