Remove unused code in inspector files. (#9931)

* Remove unused code in inspector_service.dart

* Remove unused code in inspector controllers

* ignore diagnostics node warnings

* formatting

* review comments

* remove unused getter
diff --git a/analysis_options.yaml b/analysis_options.yaml
index 7438d8d..a50ef32 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -170,10 +170,6 @@
       # 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 9484ecb..b9049b0 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 @@
 
   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;
@@ -252,8 +245,6 @@
       _implementationWidgetsHidden;
   final _implementationWidgetsHidden = ValueNotifier<bool>(true);
 
-  InspectorTreeNode? lastExpanded;
-
   bool isActive = false;
 
   final valueToInspectorTreeNode = <InspectorInstanceRef, InspectorTreeNode>{};
@@ -262,8 +253,6 @@
   /// not perform any actions.
   bool visibleToUser = false;
 
-  bool highlightNodesShownInBothTrees = false;
-
   RemoteDiagnosticsNode? get selectedDiagnostic =>
       selectedNode.value?.diagnostic;
 
@@ -276,10 +265,6 @@
   /// inspector tree load timing.
   bool firstInspectorTreeLoadCompleted = false;
 
-  FlutterTreeType getTreeType() {
-    return treeType;
-  }
-
   Future<void> setVisibleToUser(bool visible) async {
     if (visibleToUser == visible) {
       return;
@@ -293,24 +278,12 @@
     }
   }
 
-  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 @@
     _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 @@
     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 @@
     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 @@
 
       selectionGroups.promoteNext();
 
-      subtreeRoot = newSelection;
-
       applyNewSelection(newSelection);
 
       await _maybeShowNotificationForSelectedNode(
@@ -804,7 +723,6 @@
 
     _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 de13f61..957364a 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 @@
     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 @@
 
   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;
@@ -527,6 +512,7 @@
     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 128f2cb..032080a 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 2d4e8a7..e983755 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 '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 @@
     );
   }
 
+  @visibleForTesting
   Future<bool> isWidgetCreationTracked() {
     return invokeBoolServiceMethodNoArgs(
       WidgetInspectorServiceExtensions.isWidgetCreationTracked.name,
@@ -536,6 +536,7 @@
           );
   }
 
+  // ignore: unused-code, this is used in g3.
   Future<RemoteDiagnosticsNode?> invokeServiceMethodWithArgReturningNode(
     String methodName,
     String arg,
@@ -834,27 +835,6 @@
     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,
@@ -1135,23 +1115,6 @@
     );
   }
 
-  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,
@@ -1203,15 +1166,6 @@
       ),
     );
   }
-
-  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 {
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 3f09b29..47eb492 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 @@
     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?>?);
+  }
+}
diff --git a/pubspec.lock b/pubspec.lock
index 71542ee..e746a9d 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -61,34 +61,34 @@
     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 @@
     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 @@
     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 @@
     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 @@
     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 @@
     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: