Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions analysis_options.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<InspectorTreeNode?> get selectedNode => _selectedNode;
Expand All @@ -252,8 +245,6 @@ class InspectorController extends DisposableController
_implementationWidgetsHidden;
final _implementationWidgetsHidden = ValueNotifier<bool>(true);

InspectorTreeNode? lastExpanded;

bool isActive = false;

final valueToInspectorTreeNode = <InspectorInstanceRef, InspectorTreeNode>{};
Expand All @@ -262,8 +253,6 @@ class InspectorController extends DisposableController
/// not perform any actions.
bool visibleToUser = false;

bool highlightNodesShownInBothTrees = false;

RemoteDiagnosticsNode? get selectedDiagnostic =>
selectedNode.value?.diagnostic;

Expand All @@ -276,10 +265,6 @@ class InspectorController extends DisposableController
/// inspector tree load timing.
bool firstInspectorTreeLoadCompleted = false;

FlutterTreeType getTreeType() {
return treeType;
}

Future<void> setVisibleToUser(bool visible) async {
if (visibleToUser == visible) {
return;
Expand All @@ -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;
}

Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand All @@ -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;
Expand Down Expand Up @@ -754,8 +675,6 @@ class InspectorController extends DisposableController

selectionGroups.promoteNext();

subtreeRoot = newSelection;

applyNewSelection(newSelection);

await _maybeShowNotificationForSelectedNode(
Expand Down Expand Up @@ -804,7 +723,6 @@ class InspectorController extends DisposableController

_selectedNode.value = newSelection;

lastExpanded = null; // New selected node takes precedence.
endShowNode();

_updateSelectedErrorFromNode(_selectedNode.value);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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<InspectorTreeNode> getPathFromSelectedRowToRoot() {
final selectedItem = _cachedSelectedRow?.node;
if (selectedItem == null) return [];

final pathToRoot = <InspectorTreeNode>[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;
Expand Down Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -466,6 +465,7 @@ class InspectorService extends InspectorServiceBase {
);
}

@visibleForTesting
Future<bool> isWidgetCreationTracked() {
return invokeBoolServiceMethodNoArgs(
WidgetInspectorServiceExtensions.isWidgetCreationTracked.name,
Expand Down Expand Up @@ -536,6 +536,7 @@ abstract class InspectorObjectGroupBase
);
}

// ignore: unused-code, this is used in g3.
Future<RemoteDiagnosticsNode?> invokeServiceMethodWithArgReturningNode(
String methodName,
String arg,
Expand Down Expand Up @@ -834,27 +835,6 @@ abstract class InspectorObjectGroupBase
return properties;
}

Future<SourcePosition?> 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<List<RemoteDiagnosticsNode>> getListHelper(
InspectorInstanceRef? instanceRef,
String methodName,
Expand Down Expand Up @@ -1135,23 +1115,6 @@ class ObjectGroup extends InspectorObjectGroupBase {
);
}

Future<RemoteDiagnosticsNode?> 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<String, Object?>?);
}

Future<void> invokeSetFlexProperties(
InspectorInstanceRef ref,
MainAxisAlignment? mainAxisAlignment,
Expand Down Expand Up @@ -1203,15 +1166,6 @@ class ObjectGroup extends InspectorObjectGroupBase {
),
);
}

Future<List<String>> getPubRootDirectories() async {
final invocationResult = await invokeServiceMethodDaemonParams(
WidgetInspectorServiceExtensions.getPubRootDirectories.name,
{},
);
final directories = (invocationResult as List?)?.cast<Object>();
return List.from(directories ?? []);
}
}

abstract class InspectorServiceClient {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -708,3 +708,22 @@ Future<void> _resetPubRootDirectories(InspectorService inspectorService) async {
await inspectorService.addPubRootDirectories([rootLibrary]);
}
}

extension _ObjectGroupTestExtension on ObjectGroup {
Future<RemoteDiagnosticsNode?> 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<String, Object?>?);
}
}
Loading
Loading