From e155de2897a19010b8581c00d08347628fcbfeba Mon Sep 17 00:00:00 2001 From: Dan Chevalier Date: Fri, 19 Aug 2022 15:03:10 -0400 Subject: [PATCH 1/3] comment out update local classes code that his the inspector service way too hard --- .../screens/inspector/inspector_service.dart | 39 ++++++++++--------- .../lib/src/shared/preferences.dart | 6 ++- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/packages/devtools_app/lib/src/screens/inspector/inspector_service.dart b/packages/devtools_app/lib/src/screens/inspector/inspector_service.dart index 57519cb85df..6fb80618578 100644 --- a/packages/devtools_app/lib/src/screens/inspector/inspector_service.dart +++ b/packages/devtools_app/lib/src/screens/inspector/inspector_service.dart @@ -388,25 +388,26 @@ class InspectorService extends InspectorServiceBase { } Future _updateLocalClasses() async { - localClasses.clear(); - if (_rootDirectories.value.isNotEmpty) { - final isolate = inspectorLibrary.isolate!; - for (var libraryRef in isolate.libraries!) { - if (isLocalUri(libraryRef.uri!)) { - try { - final Library library = await inspectorLibrary.service - .getObject(isolate.id!, libraryRef.id!) as Library; - for (var classRef in library.classes!) { - localClasses[classRef.name!] = classRef; - } - } catch (e) { - // Workaround until https://github.com/flutter/devtools/issues/3110 - // is fixed. - assert(serviceManager.connectedApp!.isDartWebAppNow!); - } - } - } - } + // TODO(https://github.com/flutter/devtools/issues/4393) + // localClasses.clear(); + // if (_rootDirectories.value.isNotEmpty) { + // final isolate = inspectorLibrary.isolate!; + // for (var libraryRef in isolate.libraries!) { + // if (isLocalUri(libraryRef.uri!)) { + // try { + // final Library library = await inspectorLibrary.service + // .getObject(isolate.id!, libraryRef.id!) as Library; + // for (var classRef in library.classes!) { + // localClasses[classRef.name!] = classRef; + // } + // } catch (e) { + // // Workaround until https://github.com/flutter/devtools/issues/3110 + // // is fixed. + // assert(serviceManager.connectedApp!.isDartWebAppNow!); + // } + // } + // } + // } } @visibleForTesting diff --git a/packages/devtools_app/lib/src/shared/preferences.dart b/packages/devtools_app/lib/src/shared/preferences.dart index 0d36eba2ecb..0847bb9cb9d 100644 --- a/packages/devtools_app/lib/src/shared/preferences.dart +++ b/packages/devtools_app/lib/src/shared/preferences.dart @@ -185,8 +185,10 @@ class InspectorPreferencesController extends DisposableController if (_customPubRootDirectories.value.isEmpty) { // If there are no pub root directories set on the first connection // then try inferring them. - await _inspectorService?.inferPubRootDirectoryIfNeeded(); - await loadCustomPubRootDirectories(); + await _customPubRootDirectoryBusyTracker(() async { + await _inspectorService?.inferPubRootDirectoryIfNeeded(); + await loadCustomPubRootDirectories(); + }); } } From e175c5cc5ef02be2e35227d3976c47abe9b39482 Mon Sep 17 00:00:00 2001 From: Dan Chevalier Date: Fri, 19 Aug 2022 15:25:37 -0400 Subject: [PATCH 2/3] comment added --- .../lib/src/screens/inspector/inspector_service.dart | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/devtools_app/lib/src/screens/inspector/inspector_service.dart b/packages/devtools_app/lib/src/screens/inspector/inspector_service.dart index 6fb80618578..d67b13294d5 100644 --- a/packages/devtools_app/lib/src/screens/inspector/inspector_service.dart +++ b/packages/devtools_app/lib/src/screens/inspector/inspector_service.dart @@ -254,6 +254,8 @@ class InspectorService extends InspectorServiceBase { @override bool isLocalClass(RemoteDiagnosticsNode node) { + // TODO(https://github.com/flutter/devtools/issues/4393): localClasses is + // not currently being filled. if (node.widgetRuntimeType == null) return false; // widgetRuntimeType may contain some generic type arguments which we need // to strip out. If widgetRuntimeType is "FooWidget" then we are only From a1254552b7c08ec3a3eb0ff5859b88d085ca93cf Mon Sep 17 00:00:00 2001 From: Dan Chevalier Date: Fri, 19 Aug 2022 15:48:54 -0400 Subject: [PATCH 3/3] skip the local classes test --- .../inspector/inspector_service_test.dart | 218 +++++++++--------- 1 file changed, 111 insertions(+), 107 deletions(-) diff --git a/packages/devtools_app/test/inspector/inspector_service_test.dart b/packages/devtools_app/test/inspector/inspector_service_test.dart index 114f4e170cc..cbd552cb6c8 100644 --- a/packages/devtools_app/test/inspector/inspector_service_test.dart +++ b/packages/devtools_app/test/inspector/inspector_service_test.dart @@ -119,113 +119,117 @@ void main() async { ); }); - test('local classes', () async { - await env.setupEnvironment(); - final inspectorServiceLocal = inspectorService!; - - final group = inspectorServiceLocal.createObjectGroup('test-group'); - // These tests are moot if widget creation is not tracked. - expect(await inspectorServiceLocal.isWidgetCreationTracked(), isTrue); - await inspectorServiceLocal.addPubRootDirectories([]); - final List rootDirectories = - await inspectorServiceLocal.inferPubRootDirectoryIfNeeded(); - expect(rootDirectories.length, 1); - expect(rootDirectories.first, endsWith('/fixtures/flutter_app')); - final originalRootDirectories = rootDirectories.toList(); - try { - expect( - (inspectorServiceLocal.localClasses.keys.toList()..sort()), - equals( - [ - 'AnotherClass', - 'ExportedClass', - 'FooClass', - 'MyApp', - 'MyOtherWidget', - 'NotAWidget', - '_PrivateClass', - '_PrivateExportedClass', - ], - ), - ); - - await inspectorServiceLocal - .addPubRootDirectories(['${rootDirectories.first}/lib/src']); - // Adding src does not change the directory as local classes are - // computed at the library level. - expect( - (inspectorServiceLocal.localClasses.keys.toList()..sort()), - equals( - [ - 'AnotherClass', - 'ExportedClass', - 'FooClass', - 'MyApp', - 'MyOtherWidget', - 'NotAWidget', - '_PrivateClass', - '_PrivateExportedClass' - ], - ), - ); - - expect( - inspectorServiceLocal.rootPackages.toList(), - equals(['flutter_app']), - ); - expect(inspectorServiceLocal.rootPackagePrefixes.toList(), isEmpty); - - await inspectorServiceLocal.addPubRootDirectories( - ['/usr/jacobr/foo/lib', '/usr/jacobr/bar/lib/bla'], - ); - expect( - inspectorServiceLocal.rootPackages.toList(), - equals(['foo', 'bar']), - ); - expect(inspectorServiceLocal.rootPackagePrefixes.toList(), isEmpty); - - expect( - inspectorServiceLocal.isLocalUri('package:foo/src/bar.dart'), - isTrue, - ); - expect( - inspectorServiceLocal.isLocalUri('package:foo.bla/src/bar.dart'), - isFalse, - ); - expect( - inspectorServiceLocal.isLocalUri('package:foos/src/bar.dart'), - isFalse, - ); - expect( - inspectorServiceLocal.isLocalUri('package:bar/src/bar.dart'), - isTrue, - ); - expect( - inspectorServiceLocal.isLocalUri( - 'package:bar.core/src/bar.dart', - ), - isFalse, - ); - expect( - inspectorServiceLocal.isLocalUri( - 'package:bar.core.bla/src/bar.dart', - ), - isFalse, - ); - expect( - inspectorServiceLocal.isLocalUri( - 'package:bar.cores/src/bar.dart', - ), - isFalse, - ); - } finally { - // Restore. - await inspectorServiceLocal - .addPubRootDirectories(originalRootDirectories); - - await group.dispose(); - } - }); + test( + 'local classes', + () async { + await env.setupEnvironment(); + final inspectorServiceLocal = inspectorService!; + + final group = inspectorServiceLocal.createObjectGroup('test-group'); + // These tests are moot if widget creation is not tracked. + expect(await inspectorServiceLocal.isWidgetCreationTracked(), isTrue); + await inspectorServiceLocal.addPubRootDirectories([]); + final List rootDirectories = + await inspectorServiceLocal.inferPubRootDirectoryIfNeeded(); + expect(rootDirectories.length, 1); + expect(rootDirectories.first, endsWith('/fixtures/flutter_app')); + final originalRootDirectories = rootDirectories.toList(); + try { + expect( + (inspectorServiceLocal.localClasses.keys.toList()..sort()), + equals( + [ + 'AnotherClass', + 'ExportedClass', + 'FooClass', + 'MyApp', + 'MyOtherWidget', + 'NotAWidget', + '_PrivateClass', + '_PrivateExportedClass', + ], + ), + ); + + await inspectorServiceLocal + .addPubRootDirectories(['${rootDirectories.first}/lib/src']); + // Adding src does not change the directory as local classes are + // computed at the library level. + expect( + (inspectorServiceLocal.localClasses.keys.toList()..sort()), + equals( + [ + 'AnotherClass', + 'ExportedClass', + 'FooClass', + 'MyApp', + 'MyOtherWidget', + 'NotAWidget', + '_PrivateClass', + '_PrivateExportedClass' + ], + ), + ); + + expect( + inspectorServiceLocal.rootPackages.toList(), + equals(['flutter_app']), + ); + expect(inspectorServiceLocal.rootPackagePrefixes.toList(), isEmpty); + + await inspectorServiceLocal.addPubRootDirectories( + ['/usr/jacobr/foo/lib', '/usr/jacobr/bar/lib/bla'], + ); + expect( + inspectorServiceLocal.rootPackages.toList(), + equals(['foo', 'bar']), + ); + expect(inspectorServiceLocal.rootPackagePrefixes.toList(), isEmpty); + + expect( + inspectorServiceLocal.isLocalUri('package:foo/src/bar.dart'), + isTrue, + ); + expect( + inspectorServiceLocal.isLocalUri('package:foo.bla/src/bar.dart'), + isFalse, + ); + expect( + inspectorServiceLocal.isLocalUri('package:foos/src/bar.dart'), + isFalse, + ); + expect( + inspectorServiceLocal.isLocalUri('package:bar/src/bar.dart'), + isTrue, + ); + expect( + inspectorServiceLocal.isLocalUri( + 'package:bar.core/src/bar.dart', + ), + isFalse, + ); + expect( + inspectorServiceLocal.isLocalUri( + 'package:bar.core.bla/src/bar.dart', + ), + isFalse, + ); + expect( + inspectorServiceLocal.isLocalUri( + 'package:bar.cores/src/bar.dart', + ), + isFalse, + ); + } finally { + // Restore. + await inspectorServiceLocal + .addPubRootDirectories(originalRootDirectories); + + await group.dispose(); + } + }, + skip: true, // TODO(https://github.com/flutter/devtools/issues/4393) + ); test('local classes for bazel projects', () async { await env.setupEnvironment();