diff --git a/analysis_options.yaml b/analysis_options.yaml index d6dd068cd84..919d5d3c4ce 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -164,9 +164,10 @@ dart_code_metrics: # TODO(https://github.com/flutter/devtools/issues/9906) remove these # excludes as findings are resolved. - integration_test/** + # Investigate internal usages of inspector_controller before removing. + - lib/src/screens/inspector/**_controller.dart - lib/src/extensions/** - lib/src/framework/** - - lib/src/screens/** - lib/src/service/** - lib/src/shared/** - lib/src/standalone_ui/** diff --git a/packages/devtools_app/lib/src/extensions/embedded/_controller_web.dart b/packages/devtools_app/lib/src/extensions/embedded/_controller_web.dart index 388fe7ab9d8..bdcc3f16bf0 100644 --- a/packages/devtools_app/lib/src/extensions/embedded/_controller_web.dart +++ b/packages/devtools_app/lib/src/extensions/embedded/_controller_web.dart @@ -78,6 +78,7 @@ class EmbeddedExtensionControllerImpl extends EmbeddedExtensionController final extensionPostEventStream = StreamController.broadcast(); + // ignore: unused-code, TODO(https://github.com/flutter/devtools/issues/9907): false positive. bool _initialized = false; @override diff --git a/packages/devtools_app/lib/src/extensions/embedded/_view_desktop.dart b/packages/devtools_app/lib/src/extensions/embedded/_view_desktop.dart index 5d9403f6ce8..051461bbbe0 100644 --- a/packages/devtools_app/lib/src/extensions/embedded/_view_desktop.dart +++ b/packages/devtools_app/lib/src/extensions/embedded/_view_desktop.dart @@ -7,9 +7,10 @@ import 'package:flutter/material.dart'; import 'controller.dart'; class EmbeddedExtension extends StatelessWidget { - const EmbeddedExtension({super.key, required this.controller}); - - final EmbeddedExtensionController controller; + const EmbeddedExtension({ + super.key, + required EmbeddedExtensionController controller, + }); @override Widget build(BuildContext context) { diff --git a/packages/devtools_app/lib/src/extensions/extension_service.dart b/packages/devtools_app/lib/src/extensions/extension_service.dart index 2c7513b48ca..ae49a3b7022 100644 --- a/packages/devtools_app/lib/src/extensions/extension_service.dart +++ b/packages/devtools_app/lib/src/extensions/extension_service.dart @@ -70,6 +70,7 @@ class ExtensionService extends DisposableController /// /// This set of extensions will include one version of a DevTools extension /// per package. + @visibleForTesting List get availableExtensions => _currentExtensions.value.availableExtensions; diff --git a/packages/devtools_app/lib/src/framework/home_screen.dart b/packages/devtools_app/lib/src/framework/home_screen.dart index 7b02646f24e..c3fceb32168 100644 --- a/packages/devtools_app/lib/src/framework/home_screen.dart +++ b/packages/devtools_app/lib/src/framework/home_screen.dart @@ -32,8 +32,6 @@ class HomeScreen extends Screen { titleGenerator: () => devToolsTitle.value, ); - static final id = ScreenMetaData.home.id; - final List sampleData; @override @@ -165,10 +163,7 @@ class _ConnectInputState extends State with BlockingActionMixin { void initState() { super.initState(); connectDialogController = TextEditingController(); - assert(() { - _debugInitVmServiceCache(); - return true; - }()); + if (kDebugMode) _debugInitVmServiceCache(); } void _debugInitVmServiceCache() async { diff --git a/packages/devtools_app/lib/src/framework/release_notes.dart b/packages/devtools_app/lib/src/framework/release_notes.dart index f6ea52ca9aa..f7632c6eaf0 100644 --- a/packages/devtools_app/lib/src/framework/release_notes.dart +++ b/packages/devtools_app/lib/src/framework/release_notes.dart @@ -28,6 +28,7 @@ bool debugTestReleaseNotes = false; // from the flutter/website PR, which has a GitHub action that automatically // stages commits to firebase. Example: // https://flutter-docs-prod--pr12652-devtools-release-notes-2-52-3bbb8c0u.web.app/tools/devtools/release-notes/release-notes-2.52.0.md. +// ignore: unused-code, debug-only feature. String? _debugReleaseNotesUrl; const releaseNotesKey = Key('release_notes'); diff --git a/packages/devtools_app/lib/src/framework/scaffold/status_line.dart b/packages/devtools_app/lib/src/framework/scaffold/status_line.dart index 16133d36a29..54e78dc2954 100644 --- a/packages/devtools_app/lib/src/framework/scaffold/status_line.dart +++ b/packages/devtools_app/lib/src/framework/scaffold/status_line.dart @@ -37,8 +37,6 @@ class StatusLine extends StatelessWidget { /// Whether to highlight the footer when DevTools is connected to an app. final bool highlightForConnection; - static const deviceInfoTooltip = 'Device Info'; - /// The padding around the footer in the DevTools UI. EdgeInsets get padding => const EdgeInsets.symmetric( horizontal: defaultSpacing, diff --git a/packages/devtools_app/lib/src/screens/accessibility/accessibility_screen.dart b/packages/devtools_app/lib/src/screens/accessibility/accessibility_screen.dart index fc387547b58..9fe59bacf4a 100644 --- a/packages/devtools_app/lib/src/screens/accessibility/accessibility_screen.dart +++ b/packages/devtools_app/lib/src/screens/accessibility/accessibility_screen.dart @@ -19,8 +19,6 @@ export 'semantics_tree_pane.dart'; class AccessibilityScreen extends Screen { AccessibilityScreen() : super.fromMetaData(ScreenMetaData.accessibility); - static final id = ScreenMetaData.accessibility.id; - @override Widget buildScreenBody(BuildContext context) => const AccessibilityScreenBody(); @@ -36,11 +34,13 @@ class AccessibilityScreenBody extends StatefulWidget { class _AccessibilityScreenBodyState extends State with AutoDisposeMixin { + // ignore: unused-code, temporarily ignore since this screen is under active development. late AccessibilityController controller; @override void initState() { super.initState(); + // ignore: unused-code, temporarily ignore since this screen is under active development. controller = screenControllers.lookup(); } diff --git a/packages/devtools_app/lib/src/screens/app_size/app_size_screen.dart b/packages/devtools_app/lib/src/screens/app_size/app_size_screen.dart index ff9deef67f9..d2cc641a2bb 100644 --- a/packages/devtools_app/lib/src/screens/app_size/app_size_screen.dart +++ b/packages/devtools_app/lib/src/screens/app_size/app_size_screen.dart @@ -212,7 +212,6 @@ class _AppSizeBodyState extends State if (currentTab.key == AppSizeScreen.diffTabKey) ...[ const SizedBox(width: defaultSpacing), DiffTreeTypeDropdown( - value: controller.activeDiffTreeType.value, onChanged: (newDiffTreeType) { controller.changeActiveDiffTreeType(newDiffTreeType!); }, @@ -279,11 +278,9 @@ class AppUnitDropdown extends StatelessWidget { class DiffTreeTypeDropdown extends StatelessWidget { const DiffTreeTypeDropdown({ super.key, - required this.value, required this.onChanged, }); - final DiffTreeType value; final ValueChanged? onChanged; @override diff --git a/packages/devtools_app/lib/src/screens/debugger/breakpoint_manager.dart b/packages/devtools_app/lib/src/screens/debugger/breakpoint_manager.dart index 646fffa5d4b..b8207bc08d4 100644 --- a/packages/devtools_app/lib/src/screens/debugger/breakpoint_manager.dart +++ b/packages/devtools_app/lib/src/screens/debugger/breakpoint_manager.dart @@ -23,7 +23,6 @@ class BreakpointManager with DisposerMixin { final _breakPositionsMap = >{}; - ValueListenable> get breakpoints => _breakpoints; final _breakpoints = ValueNotifier>([]); ValueListenable> diff --git a/packages/devtools_app/lib/src/screens/debugger/codeview_controller.dart b/packages/devtools_app/lib/src/screens/debugger/codeview_controller.dart index befe39d175b..8f7abe4e6de 100644 --- a/packages/devtools_app/lib/src/screens/debugger/codeview_controller.dart +++ b/packages/devtools_app/lib/src/screens/debugger/codeview_controller.dart @@ -533,6 +533,7 @@ class CodeViewSourceLocationNavigationState extends DevToolsNavigationState { DevToolsNavigationState state, ) : super(kind: type, state: state.state); + @visibleForTesting static CodeViewSourceLocationNavigationState? fromState( DevToolsNavigationState? state, ) { diff --git a/packages/devtools_app/lib/src/screens/debugger/span_parser.dart b/packages/devtools_app/lib/src/screens/debugger/span_parser.dart index 69c96c48ffc..74cbe0137ad 100644 --- a/packages/devtools_app/lib/src/screens/debugger/span_parser.dart +++ b/packages/devtools_app/lib/src/screens/debugger/span_parser.dart @@ -589,19 +589,6 @@ class ScopeStack { /// Location where the next produced span should begin. ScopeStackLocation _nextLocation = ScopeStackLocation.zero; - /// Adds a scope for a given region. - /// - /// This method is the same as calling [push] and then [pop] with the same - /// args. - void add( - String? scope, { - required ScopeStackLocation start, - required ScopeStackLocation end, - }) { - push(scope, start); - pop(scope, end); - } - /// Pushes a new scope onto the stack starting at [location]. void push(String? scope, ScopeStackLocation location) { if (scope == null) return; @@ -721,6 +708,8 @@ class ScopeStackItem { ScopeStackItem(this.scope, this.location); final String scope; + + // ignore: unused-code, foundational to this data class. final ScopeStackLocation location; } diff --git a/packages/devtools_app/lib/src/screens/debugger/syntax_highlighter.dart b/packages/devtools_app/lib/src/screens/debugger/syntax_highlighter.dart index 4899a83f72f..82d2c785022 100644 --- a/packages/devtools_app/lib/src/screens/debugger/syntax_highlighter.dart +++ b/packages/devtools_app/lib/src/screens/debugger/syntax_highlighter.dart @@ -18,6 +18,7 @@ final _log = Logger('syntax_highlighter'); class SyntaxHighlighter { SyntaxHighlighter({String? source}) : source = source ?? ''; + @visibleForTesting SyntaxHighlighter.withGrammar({Grammar? grammar, String? source}) : source = source ?? '' { _grammar = grammar; diff --git a/packages/devtools_app/lib/src/screens/deep_link_validation/deep_link_list_view.dart b/packages/devtools_app/lib/src/screens/deep_link_validation/deep_link_list_view.dart index 75a90841656..30ef0e59793 100644 --- a/packages/devtools_app/lib/src/screens/deep_link_validation/deep_link_list_view.dart +++ b/packages/devtools_app/lib/src/screens/deep_link_validation/deep_link_list_view.dart @@ -33,13 +33,12 @@ class DeepLinkListView extends StatefulWidget { } class _DeepLinkListViewState extends State { - late DeepLinksController controller; - @override void initState() { super.initState(); - controller = screenControllers.lookup() - ..firstLoadWithDefaultConfigurations(); + screenControllers + .lookup() + .firstLoadWithDefaultConfigurations(); } @override diff --git a/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_model.dart b/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_model.dart index feaed091a20..7d035f1b04e 100644 --- a/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_model.dart +++ b/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_model.dart @@ -219,14 +219,6 @@ class AASAfileFormatSubCheck extends CommonError { ), ); - static final defaultsCaseSensitiveFormat = AASAfileFormatSubCheck( - 'Applinks defaults case sensitive format', - propertyTypeMessage( - property: 'applinks.defaults.caseSensitive', - expectedType: 'boolean', - ), - ); - static const detailsFormat = AASAfileFormatSubCheck( 'Applinks details format', 'This test checks that the `applinks.details` property is formatted properly. Ref - ' @@ -402,6 +394,7 @@ class Path { final String path; // TODO(hangyujin): display queryParams in path table. + // ignore: unused-code, outstanding TODO. final Map queryParams; /// A Boolean value that indicates whether to stop pattern matching and prevent the universal diff --git a/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_screen.dart b/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_screen.dart index 07520397476..a54110953f7 100644 --- a/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_screen.dart +++ b/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_screen.dart @@ -18,9 +18,8 @@ class DeepLinksScreen extends Screen { static final id = ScreenMetaData.deepLinks.id; - // TODO(https://github.com/flutter/devtools/issues/6013): write documentation. - // @override - // String get docPageId => id; + @override + String get docPageId => id; @override String get docsUrl => 'https://flutter.dev/to/deep-link-tool'; diff --git a/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_services.dart b/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_services.dart index b260c74fe0c..e16accc0afb 100644 --- a/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_services.dart +++ b/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_services.dart @@ -109,6 +109,7 @@ final aasaFileFormatSubCheck = { class ValidateIosDomainResult { ValidateIosDomainResult(this.errorCode, this.domainErrors, this.paths); + // ignore: unused-code, this is addressed in a TODO below. final String errorCode; final Map> domainErrors; final Map> paths; diff --git a/packages/devtools_app/lib/src/screens/dtd/dtd_tools_model.dart b/packages/devtools_app/lib/src/screens/dtd/dtd_tools_model.dart index caeb1758ae8..a3303152419 100644 --- a/packages/devtools_app/lib/src/screens/dtd/dtd_tools_model.dart +++ b/packages/devtools_app/lib/src/screens/dtd/dtd_tools_model.dart @@ -21,12 +21,10 @@ class DtdServiceMethod implements Comparable { const DtdServiceMethod({ required this.service, required this.method, - this.capabilities, }); final String? service; final String method; - final Map? capabilities; String get displayName => [service, method].nonNulls.join('.'); diff --git a/packages/devtools_app/lib/src/screens/dtd/dtd_tools_screen.dart b/packages/devtools_app/lib/src/screens/dtd/dtd_tools_screen.dart index 774871f46a7..46779d295af 100644 --- a/packages/devtools_app/lib/src/screens/dtd/dtd_tools_screen.dart +++ b/packages/devtools_app/lib/src/screens/dtd/dtd_tools_screen.dart @@ -27,8 +27,6 @@ import 'shared.dart'; class DTDToolsScreen extends Screen { DTDToolsScreen() : super.fromMetaData(ScreenMetaData.dtdTools); - static final id = ScreenMetaData.dtdTools.id; - @override Widget buildScreenBody(BuildContext _) => const DTDToolsScreenBody(); } diff --git a/packages/devtools_app/lib/src/screens/dtd/services.dart b/packages/devtools_app/lib/src/screens/dtd/services.dart index a9dc28da97b..8a47a7a52cc 100644 --- a/packages/devtools_app/lib/src/screens/dtd/services.dart +++ b/packages/devtools_app/lib/src/screens/dtd/services.dart @@ -60,7 +60,6 @@ class ServicesController extends FeatureController { DtdServiceMethod( service: service.name, method: method.name, - capabilities: method.capabilities, ), ], ]; diff --git a/packages/devtools_app/lib/src/screens/inspector/inspector_screen.dart b/packages/devtools_app/lib/src/screens/inspector/inspector_screen.dart index 6b8a1179b36..9db58faf8b8 100644 --- a/packages/devtools_app/lib/src/screens/inspector/inspector_screen.dart +++ b/packages/devtools_app/lib/src/screens/inspector/inspector_screen.dart @@ -13,8 +13,6 @@ import 'inspector_screen_controller.dart'; class InspectorScreen extends Screen { InspectorScreen() : super.fromMetaData(ScreenMetaData.inspector); - static const minScreenWidthForText = 900.0; - static final id = ScreenMetaData.inspector.id; // There is not enough room to safely show the console in the embed view of diff --git a/packages/devtools_app/lib/src/screens/inspector/inspector_screen_body.dart b/packages/devtools_app/lib/src/screens/inspector/inspector_screen_body.dart index a112e94250a..f61c22f8106 100644 --- a/packages/devtools_app/lib/src/screens/inspector/inspector_screen_body.dart +++ b/packages/devtools_app/lib/src/screens/inspector/inspector_screen_body.dart @@ -53,7 +53,6 @@ class InspectorScreenBodyState extends State SearchTargetType searchTarget = SearchTargetType.widget; static const inspectorTreeKey = Key('Inspector Tree'); - static const minScreenWidthForText = 900.0; @override void initState() { diff --git a/packages/devtools_app/lib/src/screens/inspector/layout_explorer/box/box.dart b/packages/devtools_app/lib/src/screens/inspector/layout_explorer/box/box.dart index bfd22ddd984..b11a6ff2aa7 100644 --- a/packages/devtools_app/lib/src/screens/inspector/layout_explorer/box/box.dart +++ b/packages/devtools_app/lib/src/screens/inspector/layout_explorer/box/box.dart @@ -6,7 +6,6 @@ import 'package:flutter/material.dart'; import '../../../../shared/diagnostics/diagnostics_node.dart'; import '../../../../shared/primitives/utils.dart'; -import '../../inspector_controller.dart'; import '../../inspector_data_models.dart'; import '../ui/free_space.dart'; import '../ui/theme.dart'; @@ -15,14 +14,12 @@ import '../ui/widget_constraints.dart'; import '../ui/widgets_theme.dart'; class BoxLayoutExplorerWidget extends StatelessWidget { - const BoxLayoutExplorerWidget( - this.inspectorController, { + const BoxLayoutExplorerWidget({ super.key, required this.layoutProperties, required this.selectedNode, }); - final InspectorController inspectorController; final LayoutProperties? layoutProperties; final RemoteDiagnosticsNode? selectedNode; @@ -230,56 +227,6 @@ class BoxLayoutExplorerWidget extends StatelessWidget { String _describeBoxName(LayoutProperties properties) => properties.node.description ?? ''; -/// Represents a box widget and its surrounding padding. -class BoxChildAndPaddingVisualizer extends StatelessWidget { - const BoxChildAndPaddingVisualizer({ - super.key, - required this.layoutProperties, - required this.renderProperties, - required this.isSelected, - }); - - final bool isSelected; - final LayoutProperties layoutProperties; - final RenderProperties renderProperties; - - LayoutProperties? get properties => renderProperties.layoutProperties; - - @override - Widget build(BuildContext context) { - final renderSize = renderProperties.size; - final renderOffset = renderProperties.offset; - - final propertiesLocal = properties!; - - return Positioned( - top: renderOffset.dy, - left: renderOffset.dx, - child: SizedBox( - width: safePositiveDouble(renderSize.width), - height: safePositiveDouble(renderSize.height), - child: WidgetVisualizer( - isSelected: isSelected, - layoutProperties: layoutProperties, - title: _describeBoxName(propertiesLocal), - // TODO(jacobr): consider surfacing the overflow size information - // if we determine - // overflowSide: properties.overflowSide, - - // We only show one child at a time so a large title is safe. - largeTitle: true, - child: VisualizeWidthAndHeightWithConstraints( - arrowHeadSize: arrowHeadSize, - properties: propertiesLocal, - warnIfUnconstrained: false, - child: const SizedBox.shrink(), - ), - ), - ), - ); - } -} - /// Widget that represents and visualize a direct child of Flex widget. class BoxChildVisualizer extends StatelessWidget { const BoxChildVisualizer({ diff --git a/packages/devtools_app/lib/src/screens/inspector/layout_explorer/ui/theme.dart b/packages/devtools_app/lib/src/screens/inspector/layout_explorer/ui/theme.dart index 666a6d902ca..4a1b947a931 100644 --- a/packages/devtools_app/lib/src/screens/inspector/layout_explorer/ui/theme.dart +++ b/packages/devtools_app/lib/src/screens/inspector/layout_explorer/ui/theme.dart @@ -68,11 +68,6 @@ const overflowBackgroundColorLight = Color(0xFFB00020); const overflowTextColorDark = Color(0xfff5846b); const overflowTextColorLight = Color(0xffdea089); -const backgroundColorSelectedDark = Color( - 0x4d474747, -); // TODO(jacobr): we would like Color(0x4dedeeef) but that makes the background show through. -const backgroundColorSelectedLight = Color(0x4dedeeef); - extension LayoutExplorerColorScheme on ColorScheme { Color get mainAxisColor => isLight ? mainAxisLightColor : mainAxisDarkColor; @@ -93,16 +88,10 @@ extension LayoutExplorerColorScheme on ColorScheme { Color get overflowTextColor => isLight ? overflowTextColorLight : overflowTextColorDark; - Color get backgroundColorSelected => - isLight ? backgroundColorSelectedLight : backgroundColorSelectedDark; - Color get unconstrainedColor => isLight ? unconstrainedLightColor : unconstrainedDarkColor; } -const backgroundColorDark = Color(0xff30302f); -const backgroundColorLight = Color(0xffffffff); - const unconstrainedDarkColor = Color(0xffdea089); const unconstrainedLightColor = Color(0xfff5846b); diff --git a/packages/devtools_app/lib/src/screens/inspector/layout_explorer/ui/widgets_theme.dart b/packages/devtools_app/lib/src/screens/inspector/layout_explorer/ui/widgets_theme.dart index a492a1cddbb..c0a76886c8a 100644 --- a/packages/devtools_app/lib/src/screens/inspector/layout_explorer/ui/widgets_theme.dart +++ b/packages/devtools_app/lib/src/screens/inspector/layout_explorer/ui/widgets_theme.dart @@ -198,7 +198,6 @@ class WidgetTheme { class WidgetIcons { static const root = 'icons/inspector/widget_icons/root.png'; static const text = 'icons/inspector/widget_icons/text.png'; - static const icon = 'icons/inspector/widget_icons/icon.png'; static const image = 'icons/inspector/widget_icons/image.png'; static const floatingActionButton = 'icons/inspector/widget_icons/floatingab.png'; diff --git a/packages/devtools_app/lib/src/screens/inspector/widget_details.dart b/packages/devtools_app/lib/src/screens/inspector/widget_details.dart index 7f12ed522c0..369c657ce73 100644 --- a/packages/devtools_app/lib/src/screens/inspector/widget_details.dart +++ b/packages/devtools_app/lib/src/screens/inspector/widget_details.dart @@ -50,7 +50,7 @@ class _WidgetDetailsState extends State with AutoDisposeMixin { ); } - return DetailsTable(controller: controller, node: node); + return DetailsTable(controller: controller); }, ); } diff --git a/packages/devtools_app/lib/src/screens/inspector/widget_properties/properties_view.dart b/packages/devtools_app/lib/src/screens/inspector/widget_properties/properties_view.dart index 1822d718819..e33624c42e0 100644 --- a/packages/devtools_app/lib/src/screens/inspector/widget_properties/properties_view.dart +++ b/packages/devtools_app/lib/src/screens/inspector/widget_properties/properties_view.dart @@ -23,15 +23,11 @@ class DetailsTable extends StatefulWidget { const DetailsTable({ super.key, required this.controller, - required this.node, - this.extraTabs, }); static const gaPrefix = 'inspectorDetailsTable'; final InspectorController controller; - final RemoteDiagnosticsNode node; - final List? extraTabs; @override State createState() => _DetailsTableState(); @@ -44,9 +40,6 @@ class _DetailsTableState extends State { RemoteDiagnosticsNode? get selectedNode => widget.controller.selectedDiagnostic; - LayoutProperties? get layoutProperties => - widget.controller.selectedNodeProperties.value.layoutProperties; - final _widgetPropertiesTab = DevToolsTab.create( tabName: 'Widget properties', gaPrefix: DetailsTable.gaPrefix, @@ -269,7 +262,6 @@ class _PropertiesViewState extends State { height: PropertiesView.layoutExplorerHeight, width: PropertiesView.layoutExplorerWidth, child: BoxLayoutExplorerWidget( - widget.controller, selectedNode: selectedNode, layoutProperties: widget.layoutProperties, ), diff --git a/packages/devtools_app/lib/src/screens/logging/_logs_table.dart b/packages/devtools_app/lib/src/screens/logging/_logs_table.dart index c406a428d45..2643f2f06a6 100644 --- a/packages/devtools_app/lib/src/screens/logging/_logs_table.dart +++ b/packages/devtools_app/lib/src/screens/logging/_logs_table.dart @@ -2,7 +2,6 @@ // 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. -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import '../../shared/primitives/utils.dart'; @@ -17,8 +16,6 @@ class LogsTable extends StatelessWidget { required this.controller, required this.data, required this.selectionNotifier, - required this.searchMatchesNotifier, - required this.activeSearchMatchNotifier, }); static const _logRowHeight = 45.0; @@ -26,8 +23,6 @@ class LogsTable extends StatelessWidget { final LoggingController controller; final List data; final ValueNotifier selectionNotifier; - final ValueListenable> searchMatchesNotifier; - final ValueListenable activeSearchMatchNotifier; static const whenColumn = WhenColumn(); static const messageColumn = MessageColumn(); diff --git a/packages/devtools_app/lib/src/screens/logging/logging_controller.dart b/packages/devtools_app/lib/src/screens/logging/logging_controller.dart index da6f1cedf8f..85cfe71e4b4 100644 --- a/packages/devtools_app/lib/src/screens/logging/logging_controller.dart +++ b/packages/devtools_app/lib/src/screens/logging/logging_controller.dart @@ -27,7 +27,6 @@ import '../../shared/primitives/message_bus.dart'; import '../../shared/primitives/utils.dart'; import '../../shared/ui/filter.dart'; import '../../shared/ui/search.dart'; -import '../inspector/inspector_tree_controller.dart'; import 'log_details_controller.dart'; import 'logging_screen.dart'; import 'metadata.dart'; @@ -40,12 +39,6 @@ final dateTimeFormat = DateFormat('HH:mm:ss.SSS (MM/dd/yy)'); bool _verboseDebugging = false; -typedef OnShowDetails = - void Function({String? text, InspectorTreeController? tree}); - -typedef CreateLoggingTree = - InspectorTreeController Function({VoidCallback? onSelectionChange}); - typedef ZoneDescription = ({String? name, int? identityHashCode}); Future _retrieveFullStringValue( @@ -820,8 +813,6 @@ class LoggingController extends DevToolsScreenController } extension type _LogRecord(Map json) { - int? get sequenceNumber => json['sequenceNumber']; - int? get level => json['level']; Map get loggerName => json['loggerName']; @@ -934,12 +925,6 @@ class StdoutEventHandler { } }); } - - @visibleForTesting - LogData? get buffer => _buffer; - - @visibleForTesting - Timer? get timer => _timer; } bool _isNotNull(InstanceRef? serviceRef) { @@ -977,7 +962,6 @@ class LogData with SearchableDataMixin { int? level, this.isError = false, this.detailsComputer, - this.node, this.isolateRef, this.zone, }) : level = level ?? (isError ? Level.SEVERE.value : Level.INFO.value) { @@ -1008,7 +992,6 @@ class LogData with SearchableDataMixin { _levelName ??= LogLevelMetadataChip.generateLogLevel(level).name; String? _levelName; - final RemoteDiagnosticsNode? node; String? _details; Future Function()? detailsComputer; diff --git a/packages/devtools_app/lib/src/screens/logging/logging_screen.dart b/packages/devtools_app/lib/src/screens/logging/logging_screen.dart index 79d2c7cfbe2..87adecacab6 100644 --- a/packages/devtools_app/lib/src/screens/logging/logging_screen.dart +++ b/packages/devtools_app/lib/src/screens/logging/logging_screen.dart @@ -80,8 +80,6 @@ class _LoggingScreenState extends State controller: controller, data: controller.filteredData.value, selectionNotifier: controller.selectedLog, - searchMatchesNotifier: controller.searchMatches, - activeSearchMatchNotifier: controller.activeSearchMatch, ), ), ValueListenableBuilder( diff --git a/packages/devtools_app/lib/src/screens/memory/panes/chart/data/charts.dart b/packages/devtools_app/lib/src/screens/memory/panes/chart/data/charts.dart index 35d74718e76..08273b61b4b 100644 --- a/packages/devtools_app/lib/src/screens/memory/panes/chart/data/charts.dart +++ b/packages/devtools_app/lib/src/screens/memory/panes/chart/data/charts.dart @@ -9,7 +9,6 @@ import 'package:flutter/material.dart'; import '../../../../../shared/charts/chart_trace.dart'; import '../../../../../shared/primitives/byte_utils.dart'; -import '../../../../../shared/primitives/utils.dart'; import '../../../shared/primitives/memory_timeline.dart'; /// Name of each trace being charted, index order is the trace index @@ -48,13 +47,6 @@ const customEvent = 'custom'; const customEventName = 'name'; const customEventData = 'data'; -const indexPayloadJson = 'index'; -const timestampPayloadJson = 'timestamp'; -const prettyTimestampPayloadJson = 'prettyTimestamp'; -const eventPayloadJson = 'event'; -const vmPayloadJson = 'vm'; -const androidPayloadJson = 'android'; - /// VM Data const rssJsonName = 'rss'; const capacityJsonName = 'capacity'; @@ -156,17 +148,6 @@ class ChartsValues { final _android = {}; - Map toJson() { - return { - indexPayloadJson: index, - timestampPayloadJson: timestamp, - prettyTimestampPayloadJson: prettyTimestamp(timestamp), - eventPayloadJson: _event, - vmPayloadJson: _vm, - androidPayloadJson: _android, - }; - } - int get eventCount => _event.entries.length - (extensionEventsLength > 0 ? 1 : 0) + diff --git a/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/instances.dart b/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/instances.dart index 38a1af79c46..eb2b1b61774 100644 --- a/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/instances.dart +++ b/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/instances.dart @@ -66,8 +66,7 @@ class _StoreAllAsVariableMenu extends StatelessWidget { final SnapshotClassSampler sampler; - // TODO(https://github.com/flutter/devtools/issues/7905): this is a bug that - // this is unused. + // ignore: unused-code, TODO(https://github.com/flutter/devtools/issues/7905) this is a bug that this is unused. final bool liveItemsEnabled; @override diff --git a/packages/devtools_app/lib/src/screens/memory/panes/profile/instances.dart b/packages/devtools_app/lib/src/screens/memory/panes/profile/instances.dart index 4c11d85e80b..9aa189480b3 100644 --- a/packages/devtools_app/lib/src/screens/memory/panes/profile/instances.dart +++ b/packages/devtools_app/lib/src/screens/memory/panes/profile/instances.dart @@ -25,8 +25,7 @@ class ProfileInstanceTableCell extends StatelessWidget { required this.count, }) : _shouldShowMenu = isSelected && count > 0; - // TODO(https://github.com/flutter/devtools/issues/7905): this is a bug that - // this is unused. + // ignore: unused-code, TODO(https://github.com/flutter/devtools/issues/7905): this is a bug that this is unused. final MemoryAreas gaContext; final int count; final bool _shouldShowMenu; diff --git a/packages/devtools_app/lib/src/screens/memory/panes/tracing/tracing_pane_controller.dart b/packages/devtools_app/lib/src/screens/memory/panes/tracing/tracing_pane_controller.dart index 675da928e4f..93f3fa3ec37 100644 --- a/packages/devtools_app/lib/src/screens/memory/panes/tracing/tracing_pane_controller.dart +++ b/packages/devtools_app/lib/src/screens/memory/panes/tracing/tracing_pane_controller.dart @@ -68,6 +68,7 @@ class TracePaneController extends DisposableController ); /// A Future tracking whether the controller has been initialized. + @visibleForTesting Future get initialized => _initialized.future; final _initialized = Completer(); diff --git a/packages/devtools_app/lib/src/screens/memory/shared/primitives/memory_timeline.dart b/packages/devtools_app/lib/src/screens/memory/shared/primitives/memory_timeline.dart index 8300073fd8f..45925c1f838 100644 --- a/packages/devtools_app/lib/src/screens/memory/shared/primitives/memory_timeline.dart +++ b/packages/devtools_app/lib/src/screens/memory/shared/primitives/memory_timeline.dart @@ -30,8 +30,6 @@ class MemoryTimeline extends Disposable with Serializable { static const _jsonData = 'data'; - int get endingIndex => data.isNotEmpty ? data.length - 1 : -1; - /// Raw Heap sampling data from the VM. late final List data; diff --git a/packages/devtools_app/lib/src/screens/network/constants.dart b/packages/devtools_app/lib/src/screens/network/constants.dart index e8fa703e4be..be66652e00d 100644 --- a/packages/devtools_app/lib/src/screens/network/constants.dart +++ b/packages/devtools_app/lib/src/screens/network/constants.dart @@ -7,15 +7,8 @@ enum NetworkEventKeys { version, creator, name, - pages, startedDateTime, - id, - title, - pageTimings, - onContentLoad, - onLoad, entries, - pageref, time, request, method, @@ -44,7 +37,6 @@ enum NetworkEventKeys { wait, receive, ssl, - serverIPAddress, connection, comment, value, @@ -62,8 +54,6 @@ enum NetworkEventKeys { class NetworkEventDefaults { static const logVersion = '1.2'; static const creatorName = 'devtools'; - static const onContentLoad = -1; - static const onLoad = -1; static const httpVersion = 'HTTP/1.1'; static const responseHttpVersion = 'http/2.0'; static const blocked = -1; diff --git a/packages/devtools_app/lib/src/screens/network/har_network_data.dart b/packages/devtools_app/lib/src/screens/network/har_network_data.dart index 7895e008e04..f8519bcf91b 100644 --- a/packages/devtools_app/lib/src/screens/network/har_network_data.dart +++ b/packages/devtools_app/lib/src/screens/network/har_network_data.dart @@ -3,6 +3,7 @@ // found in the LICENSE file or at https://developers.google.com/open-source/licenses/bsd. import 'package:devtools_shared/devtools_shared.dart'; +import 'package:meta/meta.dart'; import '../../shared/http/http_request_data.dart'; import 'constants.dart'; import 'har_builder.dart'; @@ -28,6 +29,7 @@ class HarNetworkData with Serializable { /// ```dart /// final harData = HarNetworkData.fromJson(json); /// ``` + @visibleForTesting factory HarNetworkData.fromJson(Map json) { final entries = ((json[NetworkEventKeys.log.name] diff --git a/packages/devtools_app/lib/src/screens/network/network_model.dart b/packages/devtools_app/lib/src/screens/network/network_model.dart index 9ccc3c5217a..3d7fa035607 100644 --- a/packages/devtools_app/lib/src/screens/network/network_model.dart +++ b/packages/devtools_app/lib/src/screens/network/network_model.dart @@ -192,8 +192,6 @@ class Socket extends NetworkRequest { @override int get hashCode => id.hashCode; - SocketStatistic get socketData => _socket; - @override Map toJson() { return { diff --git a/packages/devtools_app/lib/src/screens/network/network_screen.dart b/packages/devtools_app/lib/src/screens/network/network_screen.dart index 81202fb34e6..8230e002baa 100644 --- a/packages/devtools_app/lib/src/screens/network/network_screen.dart +++ b/packages/devtools_app/lib/src/screens/network/network_screen.dart @@ -6,7 +6,6 @@ import 'dart:async'; import 'package:devtools_app_shared/ui.dart'; import 'package:devtools_app_shared/utils.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -321,9 +320,7 @@ class _NetworkProfilerBody extends StatelessWidget { valueListenable: controller.filteredData, builder: (context, filteredRequests, _) { return NetworkRequestsTable( - requests: filteredRequests, - searchMatchesNotifier: controller.searchMatches, - activeSearchMatchNotifier: controller.activeSearchMatch, + requests: filteredRequests ); }, ), @@ -337,8 +334,6 @@ class NetworkRequestsTable extends StatelessWidget { const NetworkRequestsTable({ super.key, required this.requests, - required this.searchMatchesNotifier, - required this.activeSearchMatchNotifier, }); static const methodColumn = MethodColumn(); @@ -361,8 +356,6 @@ class NetworkRequestsTable extends StatelessWidget { ]; final List requests; - final ValueListenable> searchMatchesNotifier; - final ValueListenable activeSearchMatchNotifier; @override Widget build(BuildContext context) { diff --git a/packages/devtools_app/lib/src/screens/network/offline_network_data.dart b/packages/devtools_app/lib/src/screens/network/offline_network_data.dart index ce6855ac382..2a7cc91aa57 100644 --- a/packages/devtools_app/lib/src/screens/network/offline_network_data.dart +++ b/packages/devtools_app/lib/src/screens/network/offline_network_data.dart @@ -3,6 +3,7 @@ // found in the LICENSE file or at https://developers.google.com/open-source/licenses/bsd. import 'package:devtools_shared/devtools_shared.dart'; +import 'package:meta/meta.dart'; import '../../shared/http/http_request_data.dart'; import '../network/network_controller.dart'; @@ -65,6 +66,7 @@ class OfflineNetworkData with Serializable { ); } + @visibleForTesting bool get isEmpty => httpRequestData.isEmpty && socketData.isEmpty; /// List of current [DartIOHttpRequestData] network requests. diff --git a/packages/devtools_app/lib/src/screens/performance/panes/flutter_frames/flutter_frame_model.dart b/packages/devtools_app/lib/src/screens/performance/panes/flutter_frames/flutter_frame_model.dart index 9b199dbea87..04b4cf790a5 100644 --- a/packages/devtools_app/lib/src/screens/performance/panes/flutter_frames/flutter_frame_model.dart +++ b/packages/devtools_app/lib/src/screens/performance/panes/flutter_frames/flutter_frame_model.dart @@ -165,10 +165,6 @@ class FlutterFrame { timelineEventData.rasterEvent?.writeTrackEventsToBuffer(buf); return buf.toString(); } - - FlutterFrame shallowCopy() { - return FlutterFrame.fromJson(json); - } } class FrameTimelineEventData { diff --git a/packages/devtools_app/lib/src/screens/performance/panes/flutter_frames/flutter_frames_controller.dart b/packages/devtools_app/lib/src/screens/performance/panes/flutter_frames/flutter_frames_controller.dart index ff970282c2c..309b5c7b4a4 100644 --- a/packages/devtools_app/lib/src/screens/performance/panes/flutter_frames/flutter_frames_controller.dart +++ b/packages/devtools_app/lib/src/screens/performance/panes/flutter_frames/flutter_frames_controller.dart @@ -61,11 +61,6 @@ class FlutterFramesController extends PerformanceFeatureController { /// frame id in the corresponding [FlutterTimelineEvent]s. final _unassignedFlutterFrames = {}; - /// Tracks the current frame undergoing selection so that we can equality - /// check after async operations and bail out early if another frame has been - /// selected during awaits. - FlutterFrame? currentFrameBeingSelected; - @override Future init() async { if (!offlineDataController.showingOfflineData.value) { @@ -184,8 +179,6 @@ class FlutterFramesController extends PerformanceFeatureController { @override void handleSelectedFrame(FlutterFrame frame) { - currentFrameBeingSelected = frame; - // Unselect [frame] if is already selected. if (_selectedFrameNotifier.value == frame) { _selectedFrameNotifier.value = null; diff --git a/packages/devtools_app/lib/src/screens/performance/panes/frame_analysis/frame_analysis_model.dart b/packages/devtools_app/lib/src/screens/performance/panes/frame_analysis/frame_analysis_model.dart index 0e82e25d060..b2495ef211d 100644 --- a/packages/devtools_app/lib/src/screens/performance/panes/frame_analysis/frame_analysis_model.dart +++ b/packages/devtools_app/lib/src/screens/performance/panes/frame_analysis/frame_analysis_model.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. +import 'package:meta/meta.dart'; + import '../../../../shared/primitives/trees.dart'; import '../../../../shared/primitives/utils.dart'; import '../../performance_model.dart'; @@ -128,6 +130,7 @@ class FrameAnalysis { return longest; } + @visibleForTesting bool get hasExpensiveOperations => saveLayerCount + intrinsicOperationsCount > 0; diff --git a/packages/devtools_app/lib/src/screens/performance/panes/rebuild_stats/rebuild_stats_model.dart b/packages/devtools_app/lib/src/screens/performance/panes/rebuild_stats/rebuild_stats_model.dart index 153778fa520..91c1d0a63c4 100644 --- a/packages/devtools_app/lib/src/screens/performance/panes/rebuild_stats/rebuild_stats_model.dart +++ b/packages/devtools_app/lib/src/screens/performance/panes/rebuild_stats/rebuild_stats_model.dart @@ -211,8 +211,6 @@ class RebuildCountModel { return _rebuildsForFrame[frameNumber]; } - bool get isNotEmpty => _rebuildsForFrame.isNotEmpty; - Map? toJson() { if (_rebuildsForFrame.isEmpty) { // No need to encode data unless there were actually rebuilds reported. diff --git a/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/perfetto/_perfetto_controller_web.dart b/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/perfetto/_perfetto_controller_web.dart index c032ba10887..e284d9d2ebf 100644 --- a/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/perfetto/_perfetto_controller_web.dart +++ b/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/perfetto/_perfetto_controller_web.dart @@ -159,6 +159,7 @@ class PerfettoControllerImpl extends PerfettoController { final perfettoPostEventStream = StreamController.broadcast(); + // ignore: unused-code, TODO(https://github.com/flutter/devtools/issues/9907) false positive. bool _initialized = false; @override diff --git a/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/perfetto/_perfetto_desktop.dart b/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/perfetto/_perfetto_desktop.dart index 1315d9589b2..7f0881ab4b4 100644 --- a/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/perfetto/_perfetto_desktop.dart +++ b/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/perfetto/_perfetto_desktop.dart @@ -7,9 +7,7 @@ import 'package:flutter/material.dart'; import 'perfetto_controller.dart'; class Perfetto extends StatelessWidget { - const Perfetto({super.key, required this.perfettoController}); - - final PerfettoController perfettoController; + const Perfetto({super.key, required PerfettoController perfettoController}); @override Widget build(BuildContext context) { diff --git a/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/perfetto/tracing/model.dart b/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/perfetto/tracing/model.dart index c2ec2f4d12b..e3ddac11beb 100644 --- a/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/perfetto/tracing/model.dart +++ b/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/perfetto/tracing/model.dart @@ -101,6 +101,7 @@ class PerfettoTrackEvent extends _PerfettoTracePacket ].nonNulls, ); + @visibleForTesting List get categories => event.categories; /// The id of the Perfetto track that this event is included in. diff --git a/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/timeline_events_controller.dart b/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/timeline_events_controller.dart index 53830788d5d..c37291140d6 100644 --- a/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/timeline_events_controller.dart +++ b/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/timeline_events_controller.dart @@ -49,7 +49,6 @@ class TimelineEventsController extends PerformanceFeatureController static const uiThreadSuffix = '.ui'; static const rasterThreadSuffix = '.raster'; - static const gpuThreadSuffix = '.gpu'; static const platformThreadSuffix = '.platform'; static const flutterTestThreadSuffix = '.flutter.test..ui'; static final _refreshWorkTrackerDelay = const Duration( diff --git a/packages/devtools_app/lib/src/screens/performance/performance_model.dart b/packages/devtools_app/lib/src/screens/performance/performance_model.dart index a965879822c..89c310747ff 100644 --- a/packages/devtools_app/lib/src/screens/performance/performance_model.dart +++ b/packages/devtools_app/lib/src/screens/performance/performance_model.dart @@ -163,16 +163,6 @@ class FlutterTimelineEvent extends TreeNode { timeBuilder: _timeBuilder.copy(), ); - @visibleForTesting - FlutterTimelineEvent deepCopy() { - final copy = shallowCopy(); - copy.parent = parent; - for (final child in children) { - copy.addChild(child.deepCopy()); - } - return copy; - } - @override String toString() { final buf = StringBuffer(); diff --git a/packages/devtools_app/lib/src/screens/profiler/cpu_profile_model.dart b/packages/devtools_app/lib/src/screens/profiler/cpu_profile_model.dart index f1eb442f8e4..82b0f1fc975 100644 --- a/packages/devtools_app/lib/src/screens/profiler/cpu_profile_model.dart +++ b/packages/devtools_app/lib/src/screens/profiler/cpu_profile_model.dart @@ -577,7 +577,6 @@ class CpuProfileData with Serializable { final stackFrames = await _CpuStackFrameGenerator( isolateId: isolateId, - cpuSamples: cpuSamples, profileMetaData: profileMetaData, ).generate( treeRoot: _CpuProfileTimelineTree.fromCpuSamples( @@ -1175,11 +1174,6 @@ class CpuProfileStore { _profilesByTime.clear(); _profilesByLabel.clear(); } - - void debugPrintKeys() { - _log.info('_profilesByLabel: ${_profilesByLabel.keys}'); - _log.info('_profilesByTime: ${_profilesByTime.keys}'); - } } class _CpuProfileTimelineTree { @@ -1329,7 +1323,7 @@ class _CpuProfileTimelineTree { } /// A generator class for creating a set of [CpuStackFrame]s from a -/// [vm_service.CpuSamples] object. +/// [_CpuProfileTimelineTree] object. /// /// This class is responsible for traversing the call stacks of a CPU profile, /// creating a [CpuStackFrame] for each unique frame, and assigning a unique @@ -1339,12 +1333,10 @@ class _CpuProfileTimelineTree { class _CpuStackFrameGenerator { _CpuStackFrameGenerator({ required this.isolateId, - required this.cpuSamples, required this.profileMetaData, }); final String isolateId; - final vm_service.CpuSamples cpuSamples; final CpuProfileMetaData profileMetaData; final _stackFrames = {}; diff --git a/packages/devtools_app/lib/src/screens/profiler/cpu_profiler_controller.dart b/packages/devtools_app/lib/src/screens/profiler/cpu_profiler_controller.dart index 4caea9b1072..4274eb2422f 100644 --- a/packages/devtools_app/lib/src/screens/profiler/cpu_profiler_controller.dart +++ b/packages/devtools_app/lib/src/screens/profiler/cpu_profiler_controller.dart @@ -411,6 +411,7 @@ class CpuProfilerController extends DisposableController return '$label${filterTag.isNotEmpty ? '-$filterTag' : ''}'; } + // ignore: unused-code, TODO(https://github.com/flutter/devtools/issues/9910) seems like a bug. Future loadAppStartUpProfile() async { Future loadAppStartUpProfileHelper() async { // Look up the stored app start up profiles before calling [reset]. This diff --git a/packages/devtools_app/lib/src/screens/profiler/panes/controls/profiler_screen_controls.dart b/packages/devtools_app/lib/src/screens/profiler/panes/controls/profiler_screen_controls.dart index fbc7cb06d38..c1c5b244514 100644 --- a/packages/devtools_app/lib/src/screens/profiler/panes/controls/profiler_screen_controls.dart +++ b/packages/devtools_app/lib/src/screens/profiler/panes/controls/profiler_screen_controls.dart @@ -18,7 +18,6 @@ class ProfilerScreenControls extends StatelessWidget { required this.controller, required this.recording, required this.processing, - required this.offline, }); final ProfilerScreenController controller; @@ -27,8 +26,6 @@ class ProfilerScreenControls extends StatelessWidget { final bool processing; - final bool offline; - @override Widget build(BuildContext context) { return OfflineAwareControls( diff --git a/packages/devtools_app/lib/src/screens/profiler/panes/method_table/method_table_model.dart b/packages/devtools_app/lib/src/screens/profiler/panes/method_table/method_table_model.dart index d7e78bed259..93b7cc9c236 100644 --- a/packages/devtools_app/lib/src/screens/profiler/panes/method_table/method_table_model.dart +++ b/packages/devtools_app/lib/src/screens/profiler/panes/method_table/method_table_model.dart @@ -3,6 +3,7 @@ // found in the LICENSE file or at https://developers.google.com/open-source/licenses/bsd. import 'package:collection/collection.dart'; +import 'package:meta/meta.dart'; import '../../../../shared/primitives/graph.dart'; import '../../../../shared/primitives/utils.dart'; @@ -136,6 +137,7 @@ $display ($totalCount samples) '''; } + @visibleForTesting MethodTableGraphNode copy() { return MethodTableGraphNode( name: name, diff --git a/packages/devtools_app/lib/src/screens/profiler/profiler_screen.dart b/packages/devtools_app/lib/src/screens/profiler/profiler_screen.dart index cf473f55f24..ae60c9aa1c8 100644 --- a/packages/devtools_app/lib/src/screens/profiler/profiler_screen.dart +++ b/packages/devtools_app/lib/src/screens/profiler/profiler_screen.dart @@ -142,7 +142,6 @@ class _ProfilerScreenBodyState extends State controller: controller, recording: recording, processing: profilerBusy, - offline: offlineDataController.showingOfflineData.value, ), const SizedBox(height: intermediateSpacing), Expanded( diff --git a/packages/devtools_app/lib/src/screens/provider/provider_screen.dart b/packages/devtools_app/lib/src/screens/provider/provider_screen.dart index e4f077ad8f2..027ee4eda19 100644 --- a/packages/devtools_app/lib/src/screens/provider/provider_screen.dart +++ b/packages/devtools_app/lib/src/screens/provider/provider_screen.dart @@ -11,8 +11,6 @@ import '../../shared/ui/common_widgets.dart'; class ProviderScreen extends Screen { ProviderScreen() : super.fromMetaData(ScreenMetaData.provider); - static final id = ScreenMetaData.provider.id; - @override Widget buildScreenBody(BuildContext context) { return CenteredMessage( diff --git a/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/inbound_references_tree.dart b/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/inbound_references_tree.dart index c48c3c32a83..56d31243d55 100644 --- a/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/inbound_references_tree.dart +++ b/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/inbound_references_tree.dart @@ -26,6 +26,7 @@ class InboundReferencesTreeNode extends TreeNode { @override bool get isExpandable => ref.source != null; + // ignore: unused-code, TODO(https://github.com/flutter/devtools/issues/9910) this seems like a bug. late final description = _inboundRefDescription(ref, null); /// Wrapper to get the name of an [ObjRef] depending on its type. diff --git a/packages/devtools_app/lib/src/screens/vm_developer/vm_developer_tools_screen.dart b/packages/devtools_app/lib/src/screens/vm_developer/vm_developer_tools_screen.dart index e30f8cdae62..e544efde766 100644 --- a/packages/devtools_app/lib/src/screens/vm_developer/vm_developer_tools_screen.dart +++ b/packages/devtools_app/lib/src/screens/vm_developer/vm_developer_tools_screen.dart @@ -37,8 +37,6 @@ abstract class VMDeveloperView { class VMDeveloperToolsScreen extends Screen { VMDeveloperToolsScreen() : super.fromMetaData(ScreenMetaData.vmTools); - static final id = ScreenMetaData.vmTools.id; - @override ValueListenable get showIsolateSelector => VMDeveloperToolsController.showIsolateSelector; diff --git a/packages/devtools_app/lib/src/screens/vm_developer/vm_service_private_extensions.dart b/packages/devtools_app/lib/src/screens/vm_developer/vm_service_private_extensions.dart index 7b8c3c4d9fb..9a77b16fd30 100644 --- a/packages/devtools_app/lib/src/screens/vm_developer/vm_service_private_extensions.dart +++ b/packages/devtools_app/lib/src/screens/vm_developer/vm_service_private_extensions.dart @@ -55,33 +55,7 @@ extension IsolatePrivateViewExtension on Isolate { (json!['_heaps'] as Map).cast(); } -/// An extension on [Class] which allows for access to VM internal fields. -extension ClassPrivateViewExtension on Class { - /// The internal name of the [Class]. - String get vmName => json![_vmNameKey]; -} - -/// An extension on [InboundReferences] which allows for access to -/// VM internal fields. -extension InboundReferenceExtension on InboundReferences { - static const _referencesKey = 'references'; - static const _parentWordOffsetKey = '_parentWordOffset'; - - int? parentWordOffset(int inboundReferenceIndex) { - final references = (json![_referencesKey] as List?)?.cast(); - final inboundReference = (references?[inboundReferenceIndex] as Map?) - ?.cast(); - return inboundReference?[_parentWordOffsetKey] as int?; - } -} - class HeapStats { - const HeapStats({ - required this.count, - required this.size, - required this.externalSize, - }); - const HeapStats.empty() : count = 0, size = 0, externalSize = 0; HeapStats.parse(List stats) @@ -172,10 +146,6 @@ extension ObjRefPrivateViewExtension on ObjRef { /// `true` if this object is an instance of [SubtypeTestCacheRef]. bool get isSubtypeTestCache => vmType == _subtypeTestCache; - /// Casts the current [ObjRef] into an instance of [SubtypeTestCacheRef]. - SubtypeTestCacheRef get asSubtypeTestCache => - SubtypeTestCacheRef.fromJson(json!); - /// `true` if this object is an instance of [WeakArrayRef]. bool get isWeakArray => vmType == _weakArrayType; @@ -273,9 +243,6 @@ class WeakArray extends WeakArrayRef implements Obj { class SubtypeTestCacheRef implements ObjRef { SubtypeTestCacheRef({required this.id, required this.json}); - factory SubtypeTestCacheRef.fromJson(Map json) => - SubtypeTestCacheRef(id: json['id'], json: json); - @override bool? fixedId; @@ -540,22 +507,15 @@ enum FunctionKind { /// An extension on [Code] which allows for access to VM internal fields. extension CodePrivateViewExtension on Code { static const _disassemblyKey = '_disassembly'; - static const _kindKey = 'kind'; static const _objectPoolKey = '_objectPool'; /// Returns the disassembly of the [Code], which is the generated assembly /// instructions for the code's function. Disassembly get disassembly => Disassembly.parse(json![_disassemblyKey]); + @visibleForTesting set disassembly(Disassembly disassembly) => json![_disassemblyKey] = disassembly.toJson(); - /// The kind of code object represented by this instance. - /// - /// Can be one of: - /// - Dart - /// - Stub - String get kind => json![_kindKey]; - ObjectPoolRef get objectPool => ObjectPoolRef.parse(json![_objectPoolKey]); bool get hasInliningData => json!.containsKey(InliningData.kInlinedFunctions); @@ -676,20 +636,6 @@ enum ObjectPoolEntryKind { static const _kObject = 'Object'; static const _kImm = 'Immediate'; - static const _kNativeFunction = 'NativeFunction'; - - static ObjectPoolEntryKind fromString(String type) { - switch (type) { - case _kObject: - return object; - case _kImm: - return immediate; - case _kNativeFunction: - return nativeFunction; - default: - throw UnsupportedError('Unsupported ObjectPoolType: $type'); - } - } @override String toString() { @@ -707,24 +653,19 @@ enum ObjectPoolEntryKind { class ObjectPoolEntry { const ObjectPoolEntry({ required this.offset, - required this.kind, required this.value, }); static const _offsetKey = 'offset'; - static const _kindKey = 'kind'; static const _valueKey = 'value'; static ObjectPoolEntry parse(Map json) => ObjectPoolEntry( offset: json[_offsetKey], - kind: ObjectPoolEntryKind.fromString(json[_kindKey]), value: createServiceObject(json[_valueKey], [])!, ); final int offset; - final ObjectPoolEntryKind kind; - final Object value; } @@ -850,14 +791,6 @@ class ObjectStore { /// /// See [CpuSamples]. class ProfileCode { - ProfileCode({ - this.kind, - this.inclusiveTicks, - this.exclusiveTicks, - this.code, - this.ticks, - }); - ProfileCode._fromJson(Map json) { kind = json['kind'] ?? ''; inclusiveTicks = json['inclusiveTicks'] ?? -1; @@ -883,6 +816,7 @@ class ProfileCode { List? ticks; + // ignore: unused-code, TODO(https://github.com/flutter/devtools/issues/9910) seems like a bug. Map toJson() { final json = {}; json.addAll({ @@ -915,10 +849,6 @@ extension CpuSamplesPrivateView on CpuSamples { static const _kCodesKey = '_codes'; - bool get hasCodes { - return _expando[this] != null || json!.containsKey(_kCodesKey); - } - List get codes { return _expando[this] ??= (json![_kCodesKey] as List) .cast>() @@ -936,13 +866,11 @@ extension ProfileDataRanges on SourceReport { class ProfileReportEntry { const ProfileReportEntry({ required this.sampleCount, - required this.line, required this.inclusive, required this.exclusive, }); final int sampleCount; - final int line; final int inclusive; final int exclusive; @@ -970,7 +898,6 @@ class ProfileReportRange { final line = lines[i]; entries[line] = ProfileReportEntry( sampleCount: json.sampleCount, - line: line, inclusive: inclusiveTicks[i], exclusive: exclusiveTicks[i], ); diff --git a/packages/devtools_app/test/screens/debugger/debugger_screen_breakpoints_test.dart b/packages/devtools_app/test/screens/debugger/debugger_screen_breakpoints_test.dart index 7470497d0f9..90594f9ccc1 100644 --- a/packages/devtools_app/test/screens/debugger/debugger_screen_breakpoints_test.dart +++ b/packages/devtools_app/test/screens/debugger/debugger_screen_breakpoints_test.dart @@ -56,9 +56,6 @@ void main() { ), ]; final codeViewController = debuggerController.codeViewController; - when( - mockBreakpointManager.breakpoints, - ).thenReturn(ValueNotifier(breakpoints)); when( mockBreakpointManager.breakpointsWithLocation, ).thenReturn(ValueNotifier(breakpointsWithLocation)); diff --git a/packages/devtools_app/test/screens/vm_developer/object_inspector/vm_object_pool_display_test.dart b/packages/devtools_app/test/screens/vm_developer/object_inspector/vm_object_pool_display_test.dart index d0541ed1505..3c9c4eae83a 100644 --- a/packages/devtools_app/test/screens/vm_developer/object_inspector/vm_object_pool_display_test.dart +++ b/packages/devtools_app/test/screens/vm_developer/object_inspector/vm_object_pool_display_test.dart @@ -37,7 +37,6 @@ void main() { final objectPoolEntries = [ ObjectPoolEntry( offset: 0, - kind: ObjectPoolEntryKind.object, value: InstanceRef( id: 'fake-inst', kind: InstanceKind.kList, @@ -46,12 +45,10 @@ void main() { ), const ObjectPoolEntry( offset: 10, - kind: ObjectPoolEntryKind.immediate, value: 42, ), ObjectPoolEntry( offset: 20, - kind: ObjectPoolEntryKind.nativeFunction, value: FuncRef(id: 'func-id', name: 'Foo'), ), ]; diff --git a/packages/devtools_test/lib/src/helpers/utils.dart b/packages/devtools_test/lib/src/helpers/utils.dart index a11e3657368..510471bb1b9 100644 --- a/packages/devtools_test/lib/src/helpers/utils.dart +++ b/packages/devtools_test/lib/src/helpers/utils.dart @@ -35,21 +35,6 @@ const safePumpDuration = Duration(seconds: 3); const longPumpDuration = Duration(seconds: 6); const veryLongPumpDuration = Duration(seconds: 9); -final screenIds = [ - AppSizeScreen.id, - DebuggerScreen.id, - DeepLinksScreen.id, - InspectorScreen.id, - LoggingScreen.id, - MemoryScreen.id, - NetworkScreen.id, - PerformanceScreen.id, - ProfilerScreen.id, - ProviderScreen.id, - VMDeveloperToolsScreen.id, - DTDToolsScreen.id, -]; - /// Scoping method which registers `listener` as a listener for `listenable`, /// invokes `callback`, and then removes the `listener`. /// diff --git a/packages/devtools_test/lib/src/mocks/fake_service_manager.dart b/packages/devtools_test/lib/src/mocks/fake_service_manager.dart index 35efaa85615..1b4027fedea 100644 --- a/packages/devtools_test/lib/src/mocks/fake_service_manager.dart +++ b/packages/devtools_test/lib/src/mocks/fake_service_manager.dart @@ -13,7 +13,6 @@ import 'package:flutter/foundation.dart'; import 'package:mockito/mockito.dart'; import 'package:vm_service/vm_service.dart'; -import '../helpers/utils.dart'; import 'fake_isolate_manager.dart'; import 'fake_service_extension_manager.dart'; import 'fake_vm_service_wrapper.dart'; @@ -39,7 +38,8 @@ class FakeServiceConnectionManager extends Fake availableServices: availableServices, rootLibrary: rootLibrary, ); - for (final screenId in screenIds) { + for (final screen in ScreenMetaData.values) { + final screenId = screen.id; when(errorBadgeManager.erroredItemsForPage(screenId)).thenReturn( FixedValueListenable(LinkedHashMap()), ); diff --git a/packages/devtools_test/lib/src/mocks/mocks.dart b/packages/devtools_test/lib/src/mocks/mocks.dart index d4fd88878fb..ca204b350f6 100644 --- a/packages/devtools_test/lib/src/mocks/mocks.dart +++ b/packages/devtools_test/lib/src/mocks/mocks.dart @@ -237,6 +237,7 @@ Script? _loadScript(String scriptName) { return Script.parse(jsonDecode(script.readAsStringSync())); } +// ignore: invalid_use_of_visible_for_testing_member, devtools_test is only used in tests. final mockSyntaxHighlighter = SyntaxHighlighter.withGrammar( grammar: mockGrammar, source: mockScript!.source, @@ -249,10 +250,10 @@ const coverageMissLines = {2, 5}; const executableLines = {...coverageHitLines, ...coverageMissLines}; const profilerEntries = { - 1: ProfileReportEntry(sampleCount: 5, line: 1, inclusive: 2, exclusive: 2), - 3: ProfileReportEntry(sampleCount: 5, line: 3, inclusive: 1, exclusive: 1), - 4: ProfileReportEntry(sampleCount: 5, line: 4, inclusive: 1, exclusive: 1), - 7: ProfileReportEntry(sampleCount: 5, line: 7, inclusive: 1, exclusive: 1), + 1: ProfileReportEntry(sampleCount: 5, inclusive: 2, exclusive: 2), + 3: ProfileReportEntry(sampleCount: 5, inclusive: 1, exclusive: 1), + 4: ProfileReportEntry(sampleCount: 5, inclusive: 1, exclusive: 1), + 7: ProfileReportEntry(sampleCount: 5, inclusive: 1, exclusive: 1), }; final mockParsedScript = ParsedScript(