diff --git a/analysis_options.yaml b/analysis_options.yaml index 7438d8d372a..a50ef32e527 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -170,10 +170,6 @@ dart_code_metrics: # devtools_app/. # TODO(https://github.com/flutter/devtools/issues/9906) remove these # excludes as findings are resolved. - # Investigate internal usages of inspector logic before removing. - - lib/src/screens/inspector/**_controller.dart - - lib/src/shared/diagnostics/inspector_service.dart - - lib/src/shared/diagnostics/diagnostics_node.dart # This fixture has unused code for testing the debugger. - test/test_infra/fixtures/flutter_app/** rules: diff --git a/packages/devtools_app/lib/src/screens/inspector/inspector_controller.dart b/packages/devtools_app/lib/src/screens/inspector/inspector_controller.dart index 9484ecb422e..b9049b0fb24 100644 --- a/packages/devtools_app/lib/src/screens/inspector/inspector_controller.dart +++ b/packages/devtools_app/lib/src/screens/inspector/inspector_controller.dart @@ -223,17 +223,10 @@ class InspectorController extends DisposableController InspectorObjectGroupManager? _layoutGroups; - /// Node being highlighted due to the current hover. - InspectorTreeNode? get currentShowNode => inspectorTree.hover; - - set currentShowNode(InspectorTreeNode? node) => inspectorTree.hover = node; - bool flutterAppFrameReady = false; bool treeLoadStarted = false; - RemoteDiagnosticsNode? subtreeRoot; - bool programmaticSelectionChangeInProgress = false; ValueListenable get selectedNode => _selectedNode; @@ -252,8 +245,6 @@ class InspectorController extends DisposableController _implementationWidgetsHidden; final _implementationWidgetsHidden = ValueNotifier(true); - InspectorTreeNode? lastExpanded; - bool isActive = false; final valueToInspectorTreeNode = {}; @@ -262,8 +253,6 @@ class InspectorController extends DisposableController /// not perform any actions. bool visibleToUser = false; - bool highlightNodesShownInBothTrees = false; - RemoteDiagnosticsNode? get selectedDiagnostic => selectedNode.value?.diagnostic; @@ -276,10 +265,6 @@ class InspectorController extends DisposableController /// inspector tree load timing. bool firstInspectorTreeLoadCompleted = false; - FlutterTreeType getTreeType() { - return treeType; - } - Future setVisibleToUser(bool visible) async { if (visibleToUser == visible) { return; @@ -293,24 +278,12 @@ class InspectorController extends DisposableController } } - bool hasDiagnosticsValue(InspectorInstanceRef ref) { - return valueToInspectorTreeNode.containsKey(ref); - } - - RemoteDiagnosticsNode? findDiagnosticsValue(InspectorInstanceRef ref) { - return valueToInspectorTreeNode[ref]?.diagnostic; - } - void endShowNode() { highlightShowNode(null); } - bool highlightShowFromNodeInstanceRef(InspectorInstanceRef ref) { - return highlightShowNode(valueToInspectorTreeNode[ref]); - } - bool highlightShowNode(InspectorTreeNode? node) { - currentShowNode = node; + inspectorTree.hover = node; return true; } @@ -350,11 +323,8 @@ class InspectorController extends DisposableController _treeGroups?.clear(isolateStopped); _selectionGroups?.clear(isolateStopped); - currentShowNode = null; + inspectorTree.hover = null; _selectedNode.value = null; - lastExpanded = null; - - subtreeRoot = null; inspectorTree.root = inspectorTree.createNode(); programmaticSelectionChangeInProgress = false; @@ -622,35 +592,6 @@ class InspectorController extends DisposableController valueToInspectorTreeNode.clear(); } - void setSubtreeRoot( - RemoteDiagnosticsNode? node, - RemoteDiagnosticsNode? selection, - ) { - selection ??= node; - if (node != null && node == subtreeRoot) { - // Select the new node in the existing subtree. - applyNewSelection(selection); - return; - } - subtreeRoot = node; - if (node == null) { - // Passing in a null node indicates we should clear the subtree and free any memory allocated. - shutdownTree(false); - return; - } - - // Clear now to eliminate frame of highlighted nodes flicker. - _clearValueToInspectorTreeNodeMapping(); - unawaited(_recomputeTreeRoot(selection)); - } - - InspectorTreeNode? getSubtreeRootNode() { - if (subtreeRoot == null) { - return null; - } - return valueToInspectorTreeNode[subtreeRoot!.valueRef]; - } - void refreshSelection(RemoteDiagnosticsNode? newSelection) { newSelection ??= selectedDiagnostic; final matchingNode = findMatchingInspectorTreeNode(newSelection); @@ -676,26 +617,6 @@ class InspectorController extends DisposableController animateTo(selectedNode.value); } - void selectAndShowNode(RemoteDiagnosticsNode? node) { - if (node == null) { - return; - } - selectAndShowInspectorInstanceRef(node.valueRef); - } - - void selectAndShowInspectorInstanceRef(InspectorInstanceRef ref) { - final node = valueToInspectorTreeNode[ref]; - if (node == null) { - return; - } - setSelectedNode(node); - syncTreeSelection(); - } - - InspectorTreeNode? getTreeNode(RemoteDiagnosticsNode node) { - return valueToInspectorTreeNode[node.valueRef]; - } - @override void onFlutterFrame() { flutterAppFrameReady = true; @@ -754,8 +675,6 @@ class InspectorController extends DisposableController selectionGroups.promoteNext(); - subtreeRoot = newSelection; - applyNewSelection(newSelection); await _maybeShowNotificationForSelectedNode( @@ -804,7 +723,6 @@ class InspectorController extends DisposableController _selectedNode.value = newSelection; - lastExpanded = null; // New selected node takes precedence. endShowNode(); _updateSelectedErrorFromNode(_selectedNode.value); diff --git a/packages/devtools_app/lib/src/screens/inspector/inspector_tree_controller.dart b/packages/devtools_app/lib/src/screens/inspector/inspector_tree_controller.dart index de13f6173f2..957364a2f92 100644 --- a/packages/devtools_app/lib/src/screens/inspector/inspector_tree_controller.dart +++ b/packages/devtools_app/lib/src/screens/inspector/inspector_tree_controller.dart @@ -220,13 +220,10 @@ class InspectorTreeController extends DisposableController return true; } - InspectorTreeNode? get hover => _hover; InspectorTreeNode? _hover; double? lastContentWidth; - InspectorTreeRow? _cachedSelectedRow; - /// All cached rows of the tree. /// /// Similar to [rowsInTree] but: @@ -290,23 +287,11 @@ class InspectorTreeController extends DisposableController InspectorTreeRow? rowAtIndex(int index) => _rowsInTree.value.safeGet(index); + @visibleForTesting double rowOffset(int index) { return (rowAtIndex(index)?.depth ?? 0) * inspectorColumnIndent; } - List getPathFromSelectedRowToRoot() { - final selectedItem = _cachedSelectedRow?.node; - if (selectedItem == null) return []; - - final pathToRoot = [selectedItem]; - InspectorTreeNode? nextParentNode = selectedItem.parent; - while (nextParentNode != null) { - pathToRoot.add(nextParentNode); - nextParentNode = nextParentNode.parent; - } - return pathToRoot.reversed.toList(); - } - set hover(InspectorTreeNode? node) { if (node == _hover) { return; @@ -527,6 +512,7 @@ class InspectorTreeController extends DisposableController return rowAtIndex(_rowIndexFromNode(node)); } + @visibleForTesting InspectorTreeRow? rowForOffset(Offset offset) { final rootLocal = root; if (rootLocal == null) return null; diff --git a/packages/devtools_app/lib/src/shared/diagnostics/diagnostics_node.dart b/packages/devtools_app/lib/src/shared/diagnostics/diagnostics_node.dart index 128f2cba2be..032080ababb 100644 --- a/packages/devtools_app/lib/src/shared/diagnostics/diagnostics_node.dart +++ b/packages/devtools_app/lib/src/shared/diagnostics/diagnostics_node.dart @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file or at https://developers.google.com/open-source/licenses/bsd. +// ignore_for_file: unused-code, contains the full model class for DiagnosticsNode. + /// @docImport '../console/widgets/description.dart'; library; diff --git a/packages/devtools_app/lib/src/shared/diagnostics/inspector_service.dart b/packages/devtools_app/lib/src/shared/diagnostics/inspector_service.dart index 2d4e8a794ff..e9837552292 100644 --- a/packages/devtools_app/lib/src/shared/diagnostics/inspector_service.dart +++ b/packages/devtools_app/lib/src/shared/diagnostics/inspector_service.dart @@ -29,7 +29,6 @@ import 'diagnostics_node.dart'; import 'generic_instance_reference.dart'; import 'object_group_api.dart'; import 'primitives/instance_ref.dart'; -import 'primitives/source_location.dart'; const _inspectorLibraryUri = 'package:flutter/src/widgets/widget_inspector.dart'; @@ -466,6 +465,7 @@ class InspectorService extends InspectorServiceBase { ); } + @visibleForTesting Future isWidgetCreationTracked() { return invokeBoolServiceMethodNoArgs( WidgetInspectorServiceExtensions.isWidgetCreationTracked.name, @@ -536,6 +536,7 @@ abstract class InspectorObjectGroupBase ); } + // ignore: unused-code, this is used in g3. Future invokeServiceMethodWithArgReturningNode( String methodName, String arg, @@ -834,27 +835,6 @@ abstract class InspectorObjectGroupBase return properties; } - Future getPropertyLocationHelper( - ClassRef classRef, - String name, - ) async { - final clazz = await inspectorLibrary.getClass(classRef, this) as Class; - for (final f in clazz.functions!) { - // TODO(pq): check for properties that match name. - if (f.name == name) { - final func = await inspectorLibrary.getFunc(f, this) as Func; - final location = func.location; - throw UnimplementedError( - 'getSourcePosition not implemented. $location', - ); - } - } - final superClass = clazz.superClass; - return superClass == null - ? null - : getPropertyLocationHelper(superClass, name); - } - Future> getListHelper( InspectorInstanceRef? instanceRef, String methodName, @@ -1135,23 +1115,6 @@ class ObjectGroup extends InspectorObjectGroupBase { ); } - Future getDetailsSubtree( - RemoteDiagnosticsNode? node, { - int subtreeDepth = 2, - }) async { - if (node == null) return null; - final args = { - 'objectGroup': groupName, - 'arg': node.valueRef.id, - 'subtreeDepth': subtreeDepth.toString(), - }; - final json = await invokeServiceMethodDaemonParams( - WidgetInspectorServiceExtensions.getDetailsSubtree.name, - args, - ); - return parseDiagnosticsNodeHelper(json as Map?); - } - Future invokeSetFlexProperties( InspectorInstanceRef ref, MainAxisAlignment? mainAxisAlignment, @@ -1203,15 +1166,6 @@ class ObjectGroup extends InspectorObjectGroupBase { ), ); } - - Future> getPubRootDirectories() async { - final invocationResult = await invokeServiceMethodDaemonParams( - WidgetInspectorServiceExtensions.getPubRootDirectories.name, - {}, - ); - final directories = (invocationResult as List?)?.cast(); - return List.from(directories ?? []); - } } abstract class InspectorServiceClient { diff --git a/packages/devtools_app/test/screens/inspector/inspector_integration_test.dart b/packages/devtools_app/test/screens/inspector/inspector_integration_test.dart index 3f09b29eb1f..47eb4923e4d 100644 --- a/packages/devtools_app/test/screens/inspector/inspector_integration_test.dart +++ b/packages/devtools_app/test/screens/inspector/inspector_integration_test.dart @@ -708,3 +708,22 @@ Future _resetPubRootDirectories(InspectorService inspectorService) async { await inspectorService.addPubRootDirectories([rootLibrary]); } } + +extension _ObjectGroupTestExtension on ObjectGroup { + Future getDetailsSubtree( + RemoteDiagnosticsNode? node, { + int subtreeDepth = 2, + }) async { + if (node == null) return null; + final args = { + 'objectGroup': groupName, + 'arg': node.valueRef.id, + 'subtreeDepth': subtreeDepth.toString(), + }; + final json = await invokeServiceMethodDaemonParams( + WidgetInspectorServiceExtensions.getDetailsSubtree.name, + args, + ); + return parseDiagnosticsNodeHelper(json as Map?); + } +} diff --git a/pubspec.lock b/pubspec.lock index 71542ee8c28..e746a9dc16d 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -61,34 +61,34 @@ packages: dependency: transitive description: name: build - sha256: a156715e7cd728130c592f30552575908aae5b100005fbc1f0fb16b3c03a3d10 + sha256: "45d14a0fb23e018d8287c32fc98d726ce466b231928ed9b9200f29bd3ccd39ae" url: "https://pub.dev" source: hosted - version: "4.0.6" + version: "4.0.7" build_config: dependency: transitive description: name: build_config - sha256: "4070d2a59f8eec34c97c86ceb44403834899075f66e8a9d59706f8e7834f6f71" + sha256: "94eaf6708fe64408c632ef2689ca3777b112f9421306ccf4f8c84d7c5c9f83f8" url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.3.2" build_daemon: dependency: transitive description: name: build_daemon - sha256: bf05f6e12cfea92d3c09308d7bcdab1906cd8a179b023269eed00c071004b957 + sha256: "8c0535c3b2f625619f4dd1036ef1127f2e77bfedf89ed2eb2676ef076e0b6712" url: "https://pub.dev" source: hosted - version: "4.1.1" + version: "4.1.3" build_runner: dependency: "direct dev" description: name: build_runner - sha256: "1523ce62448ebac2c15a8ba5fbad8acac169788658a7dd2a1c2d9c2a9318b9a6" + sha256: "5367e521935b102bdf1e735d2aab461e36b2edca6517662d088dd04cc39f8d16" url: "https://pub.dev" source: hosted - version: "2.15.0" + version: "2.15.1" built_collection: dependency: transitive description: @@ -181,10 +181,10 @@ packages: dependency: transitive description: name: cross_file - sha256: d687bec93342bf6a764a116d15c8694ebeff10e633dc28a39dd3144f7195024e + sha256: "92c9c43c383bfa1c32079d3bc492d55d6d4318044b7b47edaff8971cbb555c51" url: "https://pub.dev" source: hosted - version: "0.3.5+3" + version: "0.3.5+4" crypto: dependency: transitive description: @@ -286,10 +286,10 @@ packages: dependency: transitive description: name: file_selector_android - sha256: "6a26687fa65cbc28a5345c7ae6f227e89f0b47740978a4c475b1a625da7a331b" + sha256: "1d45e9910f68c16eb0c74f0b10097ad81aed516ea28054c027137e8f7d75e840" url: "https://pub.dev" source: hosted - version: "0.5.2+8" + version: "0.5.2+9" file_selector_ios: dependency: transitive description: @@ -682,10 +682,10 @@ packages: dependency: transitive description: name: posix - sha256: "185ef7606574f789b40f289c233efa52e96dead518aed988e040a10737febb07" + sha256: bc1bad54ad2b735816e31f8d4600cfde6c7839975085ddfbca48b6c9f7c4044e url: "https://pub.dev" source: hosted - version: "6.5.0" + version: "6.5.2" process: dependency: transitive description: @@ -767,10 +767,10 @@ packages: dependency: transitive description: name: source_gen - sha256: ec37cc0e6694374cbef59ed79685572c870a54ede6fa30a3e420feb3adffea02 + sha256: a603f1fb984a7391ae5978d1b92bfaaa08b350dca5c825256f925818f7943bf5 url: "https://pub.dev" source: hosted - version: "4.2.3" + version: "4.2.4" source_map_stack_trace: dependency: transitive description: @@ -967,10 +967,10 @@ packages: dependency: transitive description: name: vector_math - sha256: "1d774bbdf6b72a0b12122fc1560c9c2d2a67db5a4a4cc2bd8a5c990ab20e3188" + sha256: f36f9f3be64c6198714492bb455c11056e33e2f85d9a0b676a48301e44fdcf47 url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.2" vm_service: dependency: transitive description: