diff --git a/packages/flutter/lib/src/widgets/widget_inspector.dart b/packages/flutter/lib/src/widgets/widget_inspector.dart index fe655c6a380..03177fa988a 100644 --- a/packages/flutter/lib/src/widgets/widget_inspector.dart +++ b/packages/flutter/lib/src/widgets/widget_inspector.dart @@ -929,17 +929,8 @@ mixin WidgetInspectorService { ); errorJson['errorsSinceReload'] = _errorsSinceReload; - if (_errorsSinceReload == 0) { - errorJson['renderedErrorText'] = TextTreeRenderer( - wrapWidth: FlutterError.wrapWidth, - wrapWidthProperties: FlutterError.wrapWidth, - maxDescendentsTruncatableNode: 5, - ).render(details.toDiagnosticsNode(style: DiagnosticsTreeStyle.error)).trimRight(); - } else { - errorJson['renderedErrorText'] = 'Another exception was thrown: ${details.summary}'; - } - _errorsSinceReload += 1; + postEvent('Flutter.Error', errorJson); } diff --git a/packages/flutter/test/widgets/widget_inspector_test.dart b/packages/flutter/test/widgets/widget_inspector_test.dart index 7c467e28d5c..8cdd02aa643 100644 --- a/packages/flutter/test/widgets/widget_inspector_test.dart +++ b/packages/flutter/test/widgets/widget_inspector_test.dart @@ -2254,10 +2254,6 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { // Validate that we received an error count. expect(error['errorsSinceReload'], 0); - expect( - error['renderedErrorText'], - startsWith( - '══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞════════════')); // Send a second error. FlutterError.reportError(FlutterErrorDetailsForRendering( @@ -2271,7 +2267,6 @@ class _TestWidgetInspectorService extends TestWidgetInspectorService { expect(flutterErrorEvents, hasLength(2)); error = flutterErrorEvents.last; expect(error['errorsSinceReload'], 1); - expect(error['renderedErrorText'], startsWith('Another exception was thrown:')); // Reloads the app. final FlutterExceptionHandler oldHandler = FlutterError.onError; diff --git a/packages/flutter_tools/lib/src/build_runner/resident_web_runner.dart b/packages/flutter_tools/lib/src/build_runner/resident_web_runner.dart index a28fb741780..e2ad8f7b2bd 100644 --- a/packages/flutter_tools/lib/src/build_runner/resident_web_runner.dart +++ b/packages/flutter_tools/lib/src/build_runner/resident_web_runner.dart @@ -112,7 +112,6 @@ abstract class ResidentWebRunner extends ResidentRunner { ConnectionResult _connectionResult; StreamSubscription _stdOutSub; StreamSubscription _stdErrSub; - StreamSubscription _extensionEventSub; bool _exited = false; WipConnection _wipConnection; ChromiumLauncher _chromiumLauncher; @@ -151,7 +150,6 @@ abstract class ResidentWebRunner extends ResidentRunner { } await _stdOutSub?.cancel(); await _stdErrSub?.cancel(); - await _extensionEventSub?.cancel(); await device.device.stopApp(null); try { _generatedEntrypointDirectory?.deleteSync(recursive: true); @@ -677,8 +675,6 @@ class _ResidentWebRunner extends ResidentWebRunner { final String message = utf8.decode(base64.decode(log.bytes)); globals.printStatus(message, newline: false); }); - _extensionEventSub = - _vmService.onExtensionEvent.listen(printStructuredErrorLog); try { await _vmService.streamListen(vmservice.EventStreams.kStdout); } on vmservice.RPCError { @@ -697,12 +693,6 @@ class _ResidentWebRunner extends ResidentWebRunner { // It is safe to ignore this error because we expect an error to be // thrown if we're not already subscribed. } - try { - await _vmService.streamListen(vmservice.EventStreams.kExtension); - } on vmservice.RPCError { - // It is safe to ignore this error because we expect an error to be - // thrown if we're not already subscribed. - } unawaited(_vmService.registerService('reloadSources', 'FlutterTools')); _vmService.registerServiceCallback('reloadSources', (Map params) async { final bool pause = params['pause'] as bool ?? false; diff --git a/packages/flutter_tools/lib/src/resident_runner.dart b/packages/flutter_tools/lib/src/resident_runner.dart index bb0282eba8a..5a999b1a903 100644 --- a/packages/flutter_tools/lib/src/resident_runner.dart +++ b/packages/flutter_tools/lib/src/resident_runner.dart @@ -184,7 +184,6 @@ class FlutterDevice { CompileExpression compileExpression, ReloadMethod reloadMethod, GetSkSLMethod getSkSLMethod, - PrintStructuredErrorLogMethod printStructuredErrorLogMethod, }) { final Completer completer = Completer(); StreamSubscription subscription; @@ -204,7 +203,6 @@ class FlutterDevice { compileExpression: compileExpression, reloadMethod: reloadMethod, getSkSLMethod: getSkSLMethod, - printStructuredErrorLogMethod: printStructuredErrorLogMethod, device: device, ); } on Exception catch (exception) { @@ -1057,23 +1055,11 @@ abstract class ResidentRunner { final String copyPath = getDefaultCachedKernelPath( trackWidgetCreation: trackWidgetCreation, ); - globals.fs - .file(copyPath) - .parent - .createSync(recursive: true); + globals.fs.file(copyPath).parent.createSync(recursive: true); outputDill.copySync(copyPath); } } - void printStructuredErrorLog(vm_service.Event event) { - if (event.extensionKind == 'Flutter.Error') { - final Map json = event.extensionData?.data; - if (json != null && json.containsKey('renderedErrorText')) { - globals.printStatus('\n${json['renderedErrorText']}'); - } - } - } - /// If the [reloadSources] parameter is not null the 'reloadSources' service /// will be registered. // @@ -1098,8 +1084,7 @@ abstract class ResidentRunner { restart: restart, compileExpression: compileExpression, reloadMethod: reloadMethod, - getSkSLMethod: getSkSLMethod, - printStructuredErrorLogMethod: printStructuredErrorLog, + getSkSLMethod: getSkSLMethod ); // This will wait for at least one flutter view before returning. final Status status = globals.logger.startProgress( diff --git a/packages/flutter_tools/lib/src/vmservice.dart b/packages/flutter_tools/lib/src/vmservice.dart index dd5aca6582a..9fcf284bbf7 100644 --- a/packages/flutter_tools/lib/src/vmservice.dart +++ b/packages/flutter_tools/lib/src/vmservice.dart @@ -31,8 +31,6 @@ const int kIsolateReloadBarred = 1005; /// for [WebSocket]s (used by tests). typedef WebSocketConnector = Future Function(String url, {io.CompressionOptions compression}); -typedef PrintStructuredErrorLogMethod = void Function(vm_service.Event); - WebSocketConnector _openChannel = _defaultOpenChannel; /// The error codes for the JSON-RPC standard. @@ -151,7 +149,6 @@ typedef VMServiceConnector = Future Function(Uri httpUri, CompileExpression compileExpression, ReloadMethod reloadMethod, GetSkSLMethod getSkSLMethod, - PrintStructuredErrorLogMethod printStructuredErrorLogMethod, io.CompressionOptions compression, Device device, }); @@ -178,7 +175,6 @@ vm_service.VmService setUpVmService( Device device, ReloadMethod reloadMethod, GetSkSLMethod skSLMethod, - PrintStructuredErrorLogMethod printStructuredErrorLogMethod, vm_service.VmService vmService ) { if (reloadSources != null) { @@ -297,10 +293,6 @@ vm_service.VmService setUpVmService( }); vmService.registerService('flutterGetSkSL', 'Flutter Tools'); } - if (printStructuredErrorLogMethod != null) { - vmService.streamListen(vm_service.EventStreams.kExtension); - vmService.onExtensionEvent.listen(printStructuredErrorLogMethod); - } return vmService; } @@ -319,7 +311,6 @@ Future connectToVmService( CompileExpression compileExpression, ReloadMethod reloadMethod, GetSkSLMethod getSkSLMethod, - PrintStructuredErrorLogMethod printStructuredErrorLogMethod, io.CompressionOptions compression = io.CompressionOptions.compressionDefault, Device device, }) async { @@ -332,7 +323,6 @@ Future connectToVmService( device: device, reloadMethod: reloadMethod, getSkSLMethod: getSkSLMethod, - printStructuredErrorLogMethod: printStructuredErrorLogMethod, ); } @@ -343,7 +333,6 @@ Future _connect( CompileExpression compileExpression, ReloadMethod reloadMethod, GetSkSLMethod getSkSLMethod, - PrintStructuredErrorLogMethod printStructuredErrorLogMethod, io.CompressionOptions compression = io.CompressionOptions.compressionDefault, Device device, }) async { @@ -365,7 +354,6 @@ Future _connect( device, reloadMethod, getSkSLMethod, - printStructuredErrorLogMethod, delegateService, ); _httpAddressExpando[service] = httpUri; diff --git a/packages/flutter_tools/test/commands.shard/hermetic/attach_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/attach_test.dart index 8fae84fe244..4b48cdb3117 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/attach_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/attach_test.dart @@ -679,7 +679,6 @@ VMServiceConnector getFakeVmServiceFactory({ CompileExpression compileExpression, ReloadMethod reloadMethod, GetSkSLMethod getSkSLMethod, - PrintStructuredErrorLogMethod printStructuredErrorLogMethod, CompressionOptions compression, Device device, }) async { diff --git a/packages/flutter_tools/test/general.shard/cold_test.dart b/packages/flutter_tools/test/general.shard/cold_test.dart index d9f88a9d55e..83b3d74e6c9 100644 --- a/packages/flutter_tools/test/general.shard/cold_test.dart +++ b/packages/flutter_tools/test/general.shard/cold_test.dart @@ -135,7 +135,6 @@ class TestFlutterDevice extends FlutterDevice { CompileExpression compileExpression, ReloadMethod reloadMethod, GetSkSLMethod getSkSLMethod, - PrintStructuredErrorLogMethod printStructuredErrorLogMethod, }) async { throw exception; } diff --git a/packages/flutter_tools/test/general.shard/hot_test.dart b/packages/flutter_tools/test/general.shard/hot_test.dart index 1f786394b1a..48de79b31ea 100644 --- a/packages/flutter_tools/test/general.shard/hot_test.dart +++ b/packages/flutter_tools/test/general.shard/hot_test.dart @@ -510,7 +510,6 @@ class TestFlutterDevice extends FlutterDevice { CompileExpression compileExpression, ReloadMethod reloadMethod, GetSkSLMethod getSkSLMethod, - PrintStructuredErrorLogMethod printStructuredErrorLogMethod, }) async { throw exception; } diff --git a/packages/flutter_tools/test/general.shard/resident_runner_test.dart b/packages/flutter_tools/test/general.shard/resident_runner_test.dart index 7e4c06915b7..dc43ddd98b0 100644 --- a/packages/flutter_tools/test/general.shard/resident_runner_test.dart +++ b/packages/flutter_tools/test/general.shard/resident_runner_test.dart @@ -1355,7 +1355,6 @@ void main() { CompileExpression compileExpression, ReloadMethod reloadMethod, GetSkSLMethod getSkSLMethod, - PrintStructuredErrorLogMethod printStructuredErrorLogMethod, io.CompressionOptions compression, Device device, }) async => mockVMService, diff --git a/packages/flutter_tools/test/general.shard/resident_web_runner_test.dart b/packages/flutter_tools/test/general.shard/resident_web_runner_test.dart index 160a8cc572d..aca6cecb0db 100644 --- a/packages/flutter_tools/test/general.shard/resident_web_runner_test.dart +++ b/packages/flutter_tools/test/general.shard/resident_web_runner_test.dart @@ -4,7 +4,6 @@ import 'dart:async'; import 'dart:convert'; -import 'dart:io'; import 'package:dwds/dwds.dart'; import 'package:flutter_tools/src/base/common.dart'; @@ -57,12 +56,6 @@ const List kAttachIsolateExpectations = { - 'streamId': 'Extension', - }, - ), FakeVmServiceRequest( method: 'registerService', args: { @@ -347,68 +340,6 @@ void main() { expect(testLogger.statusText, contains('SO IS THIS')); })); - test('Listens to extension events with structured errors', () => testbed.run(() async { - final Map extensionData = { - 'test': 'data', - 'renderedErrorText': 'error text', - }; - final Map emptyExtensionData = { - 'test': 'data', - 'renderedErrorText': '', - }; - final Map nonStructuredErrorData = { - 'other': 'other stuff', - }; - fakeVmServiceHost = FakeVmServiceHost(requests: [ - ...kAttachExpectations, - FakeVmServiceStreamResponse( - streamId: 'Extension', - event: vm_service.Event( - timestamp: 0, - extensionKind: 'Flutter.Error', - extensionData: vm_service.ExtensionData.parse(extensionData), - kind: vm_service.EventStreams.kExtension, - ), - ), - // Empty error text should not break anything. - FakeVmServiceStreamResponse( - streamId: 'Extension', - event: vm_service.Event( - timestamp: 0, - extensionKind: 'Flutter.Error', - extensionData: vm_service.ExtensionData.parse(emptyExtensionData), - kind: vm_service.EventStreams.kExtension, - ), - ), - // This is not Flutter.Error kind data, so it should not be logged. - FakeVmServiceStreamResponse( - streamId: 'Extension', - event: vm_service.Event( - timestamp: 0, - extensionKind: 'Other', - extensionData: vm_service.ExtensionData.parse(nonStructuredErrorData), - kind: vm_service.EventStreams.kExtension, - ), - ), - ]); - - _setupMocks(); - final Completer connectionInfoCompleter = Completer(); - unawaited(residentWebRunner.run( - connectionInfoCompleter: connectionInfoCompleter, - )); - await connectionInfoCompleter.future; - - // Need these to run events, otherwise expect statements below run before - // structured errors are processed. - await null; - await null; - await null; - - expect(testLogger.statusText, contains('\nerror text')); - expect(testLogger.statusText, isNot(contains('other stuff'))); - })); - test('Does not run main with --start-paused', () => testbed.run(() async { fakeVmServiceHost = FakeVmServiceHost(requests: kAttachExpectations.toList()); residentWebRunner = DwdsWebRunnerFactory().createWebRunner( @@ -1142,7 +1073,19 @@ void main() { test('Sends launched app.webLaunchUrl event for Chrome device', () => testbed.run(() async { fakeVmServiceHost = FakeVmServiceHost(requests: [ ...kAttachLogExpectations, - ...kAttachIsolateExpectations, + const FakeVmServiceRequest( + method: 'streamListen', + args: { + 'streamId': 'Isolate' + } + ), + const FakeVmServiceRequest( + method: 'registerService', + args: { + 'service': 'reloadSources', + 'alias': 'FlutterTools', + } + ) ]); _setupMocks(); final ChromiumLauncher chromiumLauncher = MockChromeLauncher(); diff --git a/packages/flutter_tools/test/general.shard/vmservice_test.dart b/packages/flutter_tools/test/general.shard/vmservice_test.dart index 78bfed103e1..859e8b07a41 100644 --- a/packages/flutter_tools/test/general.shard/vmservice_test.dart +++ b/packages/flutter_tools/test/general.shard/vmservice_test.dart @@ -104,7 +104,6 @@ void main() { null, null, null, - null, mockVMService, ); @@ -124,7 +123,6 @@ void main() { null, reloadMethod, null, - null, mockVMService, ); @@ -144,7 +142,6 @@ void main() { mockDevice, null, null, - null, mockVMService, ); @@ -162,7 +159,6 @@ void main() { null, null, () async => 'hello', - null, mockVMService, ); @@ -171,26 +167,6 @@ void main() { Logger: () => BufferLogger.test() }); - testUsingContext('VmService registers flutterPrintStructuredErrorLogMethod', () async { - final MockVMService mockVMService = MockVMService(); - when(mockVMService.onExtensionEvent).thenAnswer((Invocation invocation) { - return const Stream.empty(); - }); - setUpVmService( - null, - null, - null, - null, - null, - null, - (vm_service.Event event) async => 'hello', - mockVMService, - ); - verify(mockVMService.streamListen(vm_service.EventStreams.kExtension)).called(1); - }, overrides: { - Logger: () => BufferLogger.test() - }); - testUsingContext('VMService returns correct FlutterVersion', () async { final MockVMService mockVMService = MockVMService(); setUpVmService( @@ -200,7 +176,6 @@ void main() { null, null, null, - null, mockVMService, );