Enable `ColumnData` and subclasses to be const (#9326)
diff --git a/packages/devtools_app/lib/src/screens/app_size/app_size_table.dart b/packages/devtools_app/lib/src/screens/app_size/app_size_table.dart index 88b76ab..9e06c28 100644 --- a/packages/devtools_app/lib/src/screens/app_size/app_size_table.dart +++ b/packages/devtools_app/lib/src/screens/app_size/app_size_table.dart
@@ -22,7 +22,7 @@ ? rootNode.children.first.level : rootNode.level, ); - final sizeColumn = _SizeColumn(); + const sizeColumn = _SizeColumn(); final columns = List<ColumnData<TreemapNode>>.unmodifiable([ treeColumn, sizeColumn, @@ -77,7 +77,8 @@ } class _NameColumn extends TreeColumnData<TreemapNode> { - _NameColumn({required this.currentRootLevel}) : super('Library or Class'); + const _NameColumn({required this.currentRootLevel}) + : super('Library or Class'); final int currentRootLevel; @@ -98,7 +99,7 @@ } class _SizeColumn extends ColumnData<TreemapNode> { - _SizeColumn() + const _SizeColumn() : super('Size', alignment: ColumnAlignment.right, fixedWidthPx: 100.0); @override @@ -118,7 +119,7 @@ } class _SizePercentageColumn extends ColumnData<TreemapNode> { - _SizePercentageColumn({required this.totalSize}) + const _SizePercentageColumn({required this.totalSize}) : super( '% of Total Size', alignment: ColumnAlignment.right, @@ -146,7 +147,7 @@ class AppSizeDiffTable extends StatelessWidget { factory AppSizeDiffTable({required TreemapNode rootNode}) { final treeColumn = _NameColumn(currentRootLevel: rootNode.level); - final diffColumn = _DiffColumn(); + const diffColumn = _DiffColumn(); final columns = List<ColumnData<TreemapNode>>.unmodifiable([ treeColumn, diffColumn, @@ -188,7 +189,7 @@ // TODO(peterdjlee): Add an opaque overlay / background to differentiate from // other columns. class _DiffColumn extends ColumnData<TreemapNode> { - _DiffColumn() + const _DiffColumn() : super('Change', alignment: ColumnAlignment.right, fixedWidthPx: 100.0); // Ensure sort by absolute size.
diff --git a/packages/devtools_app/lib/src/screens/app_size/code_size_attribution.dart b/packages/devtools_app/lib/src/screens/app_size/code_size_attribution.dart index b3c3668..739905b 100644 --- a/packages/devtools_app/lib/src/screens/app_size/code_size_attribution.dart +++ b/packages/devtools_app/lib/src/screens/app_size/code_size_attribution.dart
@@ -211,8 +211,8 @@ required this.onNodeSelected, }); - static final _toColumn = ToColumn(); - static final _fromColumn = FromColumn(); + static const _toColumn = ToColumn(); + static const _fromColumn = FromColumn(); final _CallGraphTableType tableType; @@ -240,14 +240,14 @@ } class FromColumn extends ColumnData<CallGraphNode> { - FromColumn() : super.wide('From'); + const FromColumn() : super.wide('From'); @override String getValue(CallGraphNode dataObject) => dataObject.display; } class ToColumn extends ColumnData<CallGraphNode> { - ToColumn() : super.wide('To'); + const ToColumn() : super.wide('To'); @override ColumnAlignment get alignment => ColumnAlignment.right; @@ -260,7 +260,7 @@ } class DominatorTree extends StatelessWidget { - DominatorTree({ + const DominatorTree({ super.key, required this.dominatorTreeRoot, required this.selectedNode, @@ -272,7 +272,7 @@ final CallGraphNode? selectedNode; - final _packageColumn = _PackageColumn(); + static const _packageColumn = _PackageColumn(); @override Widget build(BuildContext context) { @@ -283,7 +283,7 @@ dataRoots: [dominatorTreeRoot!], dataKey: 'dominator-tree', keyFactory: (node) => PageStorageKey<String>('${node.callGraphNode.id}'), - columns: [_packageColumn], + columns: const [_packageColumn], treeColumn: _packageColumn, defaultSortColumn: _packageColumn, defaultSortDirection: SortDirection.descending, @@ -304,7 +304,7 @@ } class _PackageColumn extends TreeColumnData<DominatorTreeNode> { - _PackageColumn() : super('Package'); + const _PackageColumn() : super('Package'); @override String getValue(DominatorTreeNode dataObject) =>
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 cb10ad5..56308e8 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
@@ -207,9 +207,9 @@ ...(() { switch (viewType) { case TableViewType.domainView: - return [domain, NumberOfAssociatedPathColumn()]; + return [domain, const NumberOfAssociatedPathColumn()]; case TableViewType.pathView: - return [path, NumberOfAssociatedDomainColumn()]; + return [path, const NumberOfAssociatedDomainColumn()]; case TableViewType.singleUrlView: return <ColumnData<LinkData>>[domain, path]; } @@ -218,7 +218,7 @@ OSColumn(controller), if (!controller.displayOptionsNotifier.value.showSplitScreen) ...[ StatusColumn(controller, viewType), - NavigationColumn(), + const NavigationColumn(), ], ], selectionNotifier: controller.selectedLink,
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 9eaf19a..0a2d4d5 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
@@ -672,7 +672,8 @@ } class NumberOfAssociatedPathColumn extends ColumnData<LinkData> { - NumberOfAssociatedPathColumn() : super.wide('Number of associated path'); + const NumberOfAssociatedPathColumn() + : super.wide('Number of associated path'); @override String getValue(LinkData dataObject) => @@ -680,7 +681,8 @@ } class NumberOfAssociatedDomainColumn extends ColumnData<LinkData> { - NumberOfAssociatedDomainColumn() : super.wide('Number of associated domain'); + const NumberOfAssociatedDomainColumn() + : super.wide('Number of associated domain'); @override String getValue(LinkData dataObject) => @@ -741,9 +743,9 @@ class OSColumn extends ColumnData<LinkData> implements ColumnRenderer<LinkData>, ColumnHeaderRenderer<LinkData> { - OSColumn(this.controller) : super.wide('OS'); + const OSColumn(this.controller) : super.wide('OS'); - DeepLinksController controller; + final DeepLinksController controller; @override bool get supportsSorting { @@ -874,7 +876,7 @@ class NavigationColumn extends ColumnData<LinkData> implements ColumnRenderer<LinkData> { - NavigationColumn() : super('', fixedWidthPx: 40); + const NavigationColumn() : super('', fixedWidthPx: 40); @override bool get supportsSorting => false;
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 f23edc2..0475919 100644 --- a/packages/devtools_app/lib/src/screens/logging/_logs_table.dart +++ b/packages/devtools_app/lib/src/screens/logging/_logs_table.dart
@@ -29,8 +29,8 @@ final ValueListenable<List<LogData>> searchMatchesNotifier; final ValueListenable<LogData?> activeSearchMatchNotifier; - static final whenColumn = WhenColumn(); - static final messageColumn = MessageColumn(); + static const whenColumn = WhenColumn(); + static const messageColumn = MessageColumn(); static final columns = [whenColumn, messageColumn]; @override
diff --git a/packages/devtools_app/lib/src/screens/logging/_message_column.dart b/packages/devtools_app/lib/src/screens/logging/_message_column.dart index 51277b2..6e806e9 100644 --- a/packages/devtools_app/lib/src/screens/logging/_message_column.dart +++ b/packages/devtools_app/lib/src/screens/logging/_message_column.dart
@@ -13,7 +13,7 @@ class MessageColumn extends ColumnData<LogData> implements ColumnRenderer<LogData> { - MessageColumn() : super.wide('Log'); + const MessageColumn() : super.wide('Log'); @override bool get supportsSorting => false;
diff --git a/packages/devtools_app/lib/src/screens/logging/_when_column.dart b/packages/devtools_app/lib/src/screens/logging/_when_column.dart index d929f1f..c213b6a 100644 --- a/packages/devtools_app/lib/src/screens/logging/_when_column.dart +++ b/packages/devtools_app/lib/src/screens/logging/_when_column.dart
@@ -6,7 +6,7 @@ import 'logging_controller.dart'; class WhenColumn extends ColumnData<LogData> { - WhenColumn() : super('When', fixedWidthPx: 80); + const WhenColumn() : super('When', fixedWidthPx: 80); @override bool get supportsSorting => false;
diff --git a/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/class_details/paths.dart b/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/class_details/paths.dart index 1408c90..638c87e 100644 --- a/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/class_details/paths.dart +++ b/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/class_details/paths.dart
@@ -15,7 +15,7 @@ import '../../controller/class_data.dart'; class _RetainingPathColumn extends ColumnData<PathData> { - _RetainingPathColumn(String className) + const _RetainingPathColumn(String className) : super.wide( 'Shortest Retaining Path for Instances of $className', titleTooltip: @@ -33,7 +33,7 @@ } class _InstanceColumn extends ColumnData<PathData> { - _InstanceColumn(bool isDiff) + const _InstanceColumn(bool isDiff) : super( isDiff ? 'Instance\nDelta' : 'Instances', titleTooltip:
diff --git a/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/classes_table_diff.dart b/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/classes_table_diff.dart index f2d4db2..c6a6f59 100644 --- a/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/classes_table_diff.dart +++ b/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/classes_table_diff.dart
@@ -25,7 +25,7 @@ implements ColumnRenderer<DiffClassData>, ColumnHeaderRenderer<DiffClassData> { - _ClassNameColumn(this.diffData) + const _ClassNameColumn(this.diffData) : super( 'Class', titleTooltip: 'Class name',
diff --git a/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/classes_table_single.dart b/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/classes_table_single.dart index fd18285..59b299f 100644 --- a/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/classes_table_single.dart +++ b/packages/devtools_app/lib/src/screens/memory/panes/diff/widgets/classes_table_single.dart
@@ -22,7 +22,7 @@ implements ColumnRenderer<SingleClassData>, ColumnHeaderRenderer<SingleClassData> { - _ClassNameColumn(this.data) + const _ClassNameColumn(this.data) : super( 'Class', titleTooltip: 'Class name', @@ -72,7 +72,7 @@ class _InstanceColumn extends ColumnData<SingleClassData> implements ColumnRenderer<SingleClassData> { - _InstanceColumn(this.classData) + const _InstanceColumn(this.classData) : super( 'Instances', titleTooltip: nonGcableInstancesColumnTooltip,
diff --git a/packages/devtools_app/lib/src/screens/memory/panes/profile/profile_view.dart b/packages/devtools_app/lib/src/screens/memory/panes/profile/profile_view.dart index b8ff82d..d424f87 100644 --- a/packages/devtools_app/lib/src/screens/memory/panes/profile/profile_view.dart +++ b/packages/devtools_app/lib/src/screens/memory/panes/profile/profile_view.dart
@@ -36,7 +36,7 @@ implements ColumnRenderer<ProfileRecord>, ColumnHeaderRenderer<ProfileRecord> { - _FieldClassNameColumn(this.classFilterData) + const _FieldClassNameColumn(this.classFilterData) : super('Class', fixedWidthPx: 200); @override @@ -103,7 +103,7 @@ class _FieldInstanceCountColumn extends ColumnData<ProfileRecord> implements ColumnRenderer<ProfileRecord> { - _FieldInstanceCountColumn({required this.heap}) + const _FieldInstanceCountColumn({required this.heap}) : super( 'Instances', titleTooltip: 'The number of instances of the class in the heap', @@ -146,8 +146,8 @@ } class _FieldExternalSizeColumn extends _FieldSizeColumn { - _FieldExternalSizeColumn({required super.heap}) - : super._( + const _FieldExternalSizeColumn({required super.heap}) + : super( title: 'External', titleTooltip: 'Non-Dart heap allocated memory associated with a Dart object', @@ -168,7 +168,7 @@ class _FieldDartHeapSizeColumn extends _FieldSizeColumn { _FieldDartHeapSizeColumn({required super.heap}) - : super._(title: 'Dart Heap', titleTooltip: SizeType.shallow.description); + : super(title: 'Dart Heap', titleTooltip: SizeType.shallow.description); @override int? getValue(ProfileRecord dataObject) { @@ -184,19 +184,12 @@ } class _FieldSizeColumn extends ColumnData<ProfileRecord> { - factory _FieldSizeColumn({required HeapGeneration heap}) => - _FieldSizeColumn._( - title: 'Total Size', - titleTooltip: - "The sum of the type's total shallow memory " - 'consumption in the Dart heap and associated external (e.g., ' - 'non-Dart heap) allocations', - heap: heap, - ); - - _FieldSizeColumn._({ - required String title, - required String titleTooltip, + const _FieldSizeColumn({ + String title = 'Total Size', + String titleTooltip = + "The sum of the type's total shallow memory " + 'consumption in the Dart heap and associated external (e.g., ' + 'non-Dart heap) allocations', required this.heap, }) : super( title, @@ -231,7 +224,7 @@ } abstract class _GCHeapStatsColumn extends ColumnData<AdaptedProfile> { - _GCHeapStatsColumn( + const _GCHeapStatsColumn( super.title, { required this.generation, required super.fixedWidthPx, @@ -254,7 +247,7 @@ } class _GCHeapNameColumn extends ColumnData<AdaptedProfile> { - _GCHeapNameColumn() : super('', fixedWidthPx: 200); + const _GCHeapNameColumn() : super('', fixedWidthPx: 200); @override String? getValue(AdaptedProfile dataObject) { @@ -381,7 +374,7 @@ ]; static final _columns = [ - _GCHeapNameColumn(), + const _GCHeapNameColumn(), for (final generation in [ HeapGeneration.total, HeapGeneration.newSpace, @@ -502,7 +495,7 @@ ), ]; - static final _fieldSizeColumn = _FieldSizeColumn(heap: HeapGeneration.total); + static const _fieldSizeColumn = _FieldSizeColumn(heap: HeapGeneration.total); late final _columns = <ColumnData<ProfileRecord>>[ _FieldClassNameColumn( @@ -512,21 +505,21 @@ rootPackage: controller.rootPackage, ), ), - _FieldInstanceCountColumn(heap: HeapGeneration.total), + const _FieldInstanceCountColumn(heap: HeapGeneration.total), _fieldSizeColumn, _FieldDartHeapSizeColumn(heap: HeapGeneration.total), ]; late final _advancedDeveloperModeColumns = [ - _FieldExternalSizeColumn(heap: HeapGeneration.total), - _FieldInstanceCountColumn(heap: HeapGeneration.newSpace), - _FieldSizeColumn(heap: HeapGeneration.newSpace), + const _FieldExternalSizeColumn(heap: HeapGeneration.total), + const _FieldInstanceCountColumn(heap: HeapGeneration.newSpace), + const _FieldSizeColumn(heap: HeapGeneration.newSpace), _FieldDartHeapSizeColumn(heap: HeapGeneration.newSpace), - _FieldExternalSizeColumn(heap: HeapGeneration.newSpace), - _FieldInstanceCountColumn(heap: HeapGeneration.oldSpace), - _FieldSizeColumn(heap: HeapGeneration.oldSpace), + const _FieldExternalSizeColumn(heap: HeapGeneration.newSpace), + const _FieldInstanceCountColumn(heap: HeapGeneration.oldSpace), + const _FieldSizeColumn(heap: HeapGeneration.oldSpace), _FieldDartHeapSizeColumn(heap: HeapGeneration.oldSpace), - _FieldExternalSizeColumn(heap: HeapGeneration.oldSpace), + const _FieldExternalSizeColumn(heap: HeapGeneration.oldSpace), ]; final ProfilePaneController controller;
diff --git a/packages/devtools_app/lib/src/screens/memory/panes/tracing/class_table.dart b/packages/devtools_app/lib/src/screens/memory/panes/tracing/class_table.dart index 136e224..e28a9f2 100644 --- a/packages/devtools_app/lib/src/screens/memory/panes/tracing/class_table.dart +++ b/packages/devtools_app/lib/src/screens/memory/panes/tracing/class_table.dart
@@ -22,7 +22,7 @@ class _TraceCheckBoxColumn extends ColumnData<TracedClass> implements ColumnRenderer<TracedClass> { - _TraceCheckBoxColumn({required this.controller}) + const _TraceCheckBoxColumn({required this.controller}) : super( 'Trace', titleTooltip: @@ -69,7 +69,7 @@ class _ClassNameColumn extends ColumnData<TracedClass> implements ColumnRenderer<TracedClass> { - _ClassNameColumn({required this.rootPackage}) : super.wide('Class'); + const _ClassNameColumn({required this.rootPackage}) : super.wide('Class'); @override String? getValue(TracedClass stats) => stats.clazz.name; @@ -98,7 +98,7 @@ } class _InstancesColumn extends ColumnData<TracedClass> { - _InstancesColumn() + const _InstancesColumn() : super( 'Delta', titleTooltip: @@ -127,7 +127,7 @@ class _AllocationTracingTableState extends State<AllocationTracingTable> { late final _TraceCheckBoxColumn _checkboxColumn; late final _ClassNameColumn _classNameColumn; - static final _instancesColumn = _InstancesColumn(); + static const _instancesColumn = _InstancesColumn(); late final List<ColumnData<TracedClass>> columns;
diff --git a/packages/devtools_app/lib/src/screens/memory/panes/tracing/tracing_tree.dart b/packages/devtools_app/lib/src/screens/memory/panes/tracing/tracing_tree.dart index caa2b3d..981ebf0 100644 --- a/packages/devtools_app/lib/src/screens/memory/panes/tracing/tracing_tree.dart +++ b/packages/devtools_app/lib/src/screens/memory/panes/tracing/tracing_tree.dart
@@ -225,7 +225,7 @@ } class _InclusiveCountColumn extends ColumnData<CpuStackFrame> { - _InclusiveCountColumn() + const _InclusiveCountColumn() : super( 'Inclusive', titleTooltip: _tooltip, @@ -258,7 +258,7 @@ } class _ExclusiveCountColumn extends ColumnData<CpuStackFrame> { - _ExclusiveCountColumn() + const _ExclusiveCountColumn() : super( 'Exclusive', titleTooltip: _tooltip, @@ -294,11 +294,11 @@ class TracingTable extends StatelessWidget { const TracingTable({super.key, required this.dataRoots}); - static final treeColumn = MethodAndSourceColumn(); - static final startingSortColumn = _InclusiveCountColumn(); + static const treeColumn = MethodAndSourceColumn(); + static const startingSortColumn = _InclusiveCountColumn(); static final columns = List<ColumnData<CpuStackFrame>>.unmodifiable([ startingSortColumn, - _ExclusiveCountColumn(), + const _ExclusiveCountColumn(), treeColumn, ]);
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 254f49d..4d830d2 100644 --- a/packages/devtools_app/lib/src/screens/network/network_screen.dart +++ b/packages/devtools_app/lib/src/screens/network/network_screen.dart
@@ -312,13 +312,13 @@ required this.activeSearchMatchNotifier, }); - static final methodColumn = MethodColumn(); + static const methodColumn = MethodColumn(); static final addressColumn = AddressColumn(); - static final statusColumn = StatusColumn(); - static final typeColumn = TypeColumn(); - static final durationColumn = DurationColumn(); + static const statusColumn = StatusColumn(); + static const typeColumn = TypeColumn(); + static const durationColumn = DurationColumn(); static final timestampColumn = TimestampColumn(); - static final actionsColumn = ActionsColumn(); + static const actionsColumn = ActionsColumn(); static final columns = <ColumnData<NetworkRequest>>[ methodColumn, addressColumn, @@ -396,7 +396,7 @@ } class MethodColumn extends ColumnData<NetworkRequest> { - MethodColumn() : super('Method', fixedWidthPx: 60); + const MethodColumn() : super('Method', fixedWidthPx: 60); @override String getValue(NetworkRequest dataObject) { @@ -406,7 +406,7 @@ class ActionsColumn extends ColumnData<NetworkRequest> implements ColumnRenderer<NetworkRequest> { - ActionsColumn() + const ActionsColumn() : super('', fixedWidthPx: 32, alignment: ColumnAlignment.right); @override @@ -465,7 +465,7 @@ class StatusColumn extends ColumnData<NetworkRequest> implements ColumnRenderer<NetworkRequest> { - StatusColumn() + const StatusColumn() : super( 'Status', alignment: ColumnAlignment.right, @@ -502,7 +502,7 @@ } class TypeColumn extends ColumnData<NetworkRequest> { - TypeColumn() + const TypeColumn() : super( 'Type', alignment: ColumnAlignment.right, @@ -522,7 +522,7 @@ } class DurationColumn extends ColumnData<NetworkRequest> { - DurationColumn() + const DurationColumn() : super( 'Duration', alignment: ColumnAlignment.right,
diff --git a/packages/devtools_app/lib/src/screens/performance/panes/rebuild_stats/rebuild_stats.dart b/packages/devtools_app/lib/src/screens/performance/panes/rebuild_stats/rebuild_stats.dart index b5ce564..a19d250 100644 --- a/packages/devtools_app/lib/src/screens/performance/panes/rebuild_stats/rebuild_stats.dart +++ b/packages/devtools_app/lib/src/screens/performance/panes/rebuild_stats/rebuild_stats.dart
@@ -193,8 +193,8 @@ return columns; } - static final _widgetColumn = _WidgetColumn(); - static final _locationColumn = _LocationColumn(); + static const _widgetColumn = _WidgetColumn(); + static const _locationColumn = _LocationColumn(); List<ColumnData<RebuildLocationStats>> get _columns => [ _widgetColumn, @@ -229,7 +229,7 @@ } class _WidgetColumn extends ColumnData<RebuildLocationStats> { - _WidgetColumn() : super('Widget', fixedWidthPx: 200); + const _WidgetColumn() : super('Widget', fixedWidthPx: 200); @override String getValue(RebuildLocationStats dataObject) { @@ -238,7 +238,7 @@ } class _LocationColumn extends ColumnData<RebuildLocationStats> { - _LocationColumn() : super.wide('Location'); + const _LocationColumn() : super.wide('Location'); @override String getValue(RebuildLocationStats dataObject) {
diff --git a/packages/devtools_app/lib/src/screens/profiler/panes/bottom_up.dart b/packages/devtools_app/lib/src/screens/profiler/panes/bottom_up.dart index d12cfe5..d240dfe 100644 --- a/packages/devtools_app/lib/src/screens/profiler/panes/bottom_up.dart +++ b/packages/devtools_app/lib/src/screens/profiler/panes/bottom_up.dart
@@ -15,7 +15,7 @@ class CpuBottomUpTable extends StatelessWidget { const CpuBottomUpTable({required this.bottomUpRoots, super.key}); - static final methodColumn = MethodAndSourceColumn(); + static const methodColumn = MethodAndSourceColumn(); static final selfTimeColumn = SelfTimeColumn( titleTooltip: selfTimeTooltip, dataTooltipProvider: (stackFrame, context) =>
diff --git a/packages/devtools_app/lib/src/screens/profiler/panes/call_tree.dart b/packages/devtools_app/lib/src/screens/profiler/panes/call_tree.dart index 32462db..1169427 100644 --- a/packages/devtools_app/lib/src/screens/profiler/panes/call_tree.dart +++ b/packages/devtools_app/lib/src/screens/profiler/panes/call_tree.dart
@@ -14,7 +14,7 @@ class CpuCallTreeTable extends StatelessWidget { const CpuCallTreeTable({required this.dataRoots, super.key}); - static final methodColumn = MethodAndSourceColumn(); + static const methodColumn = MethodAndSourceColumn(); static final selfTimeColumn = SelfTimeColumn(titleTooltip: selfTimeTooltip);
diff --git a/packages/devtools_app/lib/src/screens/profiler/panes/cpu_profile_columns.dart b/packages/devtools_app/lib/src/screens/profiler/panes/cpu_profile_columns.dart index 9bd4d52..4696bed 100644 --- a/packages/devtools_app/lib/src/screens/profiler/panes/cpu_profile_columns.dart +++ b/packages/devtools_app/lib/src/screens/profiler/panes/cpu_profile_columns.dart
@@ -37,7 +37,7 @@ class MethodAndSourceColumn extends TreeColumnData<CpuStackFrame> implements ColumnRenderer<CpuStackFrame> { - MethodAndSourceColumn() : super('Method'); + const MethodAndSourceColumn() : super('Method'); @override String getValue(CpuStackFrame dataObject) => dataObject.name;
diff --git a/packages/devtools_app/lib/src/screens/profiler/panes/method_table/method_table.dart b/packages/devtools_app/lib/src/screens/profiler/panes/method_table/method_table.dart index 3963ad6..55ddcee 100644 --- a/packages/devtools_app/lib/src/screens/profiler/panes/method_table/method_table.dart +++ b/packages/devtools_app/lib/src/screens/profiler/panes/method_table/method_table.dart
@@ -46,7 +46,7 @@ class MethodTable extends StatelessWidget { const MethodTable(this._methodTableController, this._methods, {super.key}); - static final methodColumn = _MethodColumn(); + static const methodColumn = _MethodColumn(); static final selfTimeColumn = _SelfTimeColumn(); static final totalTimeColumn = _TotalTimeColumn(); static final columns = List<ColumnData<MethodTableGraphNode>>.unmodifiable([ @@ -90,11 +90,12 @@ } class _MethodGraphState extends State<_MethodGraph> with AutoDisposeMixin { - MethodTableGraphNode? _selectedGraphNode; - - List<MethodTableGraphNode> _callers = []; - - List<MethodTableGraphNode> _callees = []; + ({ + MethodTableGraphNode graphNode, + List<MethodTableGraphNode> callers, + List<MethodTableGraphNode> callees, + })? + _selected; @override void initState() { @@ -109,30 +110,34 @@ } void _initGraphNodes() { - _selectedGraphNode = widget.methodTableController.selectedNode.value; - if (_selectedGraphNode == null) { - _callers = <MethodTableGraphNode>[]; - _callees = <MethodTableGraphNode>[]; + final selectedGraphNode = widget.methodTableController.selectedNode.value; + if (selectedGraphNode == null) { + _selected = null; } else { - _callers = _selectedGraphNode!.predecessors - .cast<MethodTableGraphNode>() - .toList(); - _callees = _selectedGraphNode!.successors - .cast<MethodTableGraphNode>() - .toList(); + _selected = ( + graphNode: selectedGraphNode, + callers: selectedGraphNode.predecessors + .cast<MethodTableGraphNode>() + .toList(), + callees: selectedGraphNode.successors + .cast<MethodTableGraphNode>() + .toList(), + ); } } @override Widget build(BuildContext context) { - final selectedNode = _selectedGraphNode; - if (selectedNode == null) { + final selected = _selected; + if (selected == null) { return OutlineDecoration.onlyLeft( child: const Center( child: Text('Select a method to view its call graph.'), ), ); } + + final selectedNode = selected.graphNode; final selectedNodeDisplay = selectedNode.display; return OutlineDecoration.onlyLeft( child: Column( @@ -140,7 +145,10 @@ children: [ Flexible( child: OutlineDecoration.onlyBottom( - child: _CallersTable(widget.methodTableController, _callers), + child: _CallersTable( + widget.methodTableController, + selected.callers, + ), ), ), DevToolsTooltip( @@ -160,7 +168,10 @@ ), Flexible( child: OutlineDecoration.onlyTop( - child: _CalleesTable(widget.methodTableController, _callees), + child: _CalleesTable( + widget.methodTableController, + selected.callees, + ), ), ), ], @@ -171,25 +182,16 @@ /// A table of predecessors (callers) for a single method in a method table. class _CallersTable extends StatelessWidget { - _CallersTable(this._methodTableController, this._callers) { - _callerTimeColumn = _CallerTimeColumn( - methodTableController: _methodTableController, - ); - columns = List<ColumnData<MethodTableGraphNode>>.unmodifiable([ - _callerTimeColumn, - methodColumn, - ]); - } - - static final methodColumn = _MethodColumn(); + _CallersTable(this._methodTableController, this._callers) + : _callerTimeColumn = _CallerTimeColumn( + methodTableController: _methodTableController, + ); final MethodTableController _methodTableController; final List<MethodTableGraphNode> _callers; - late final List<ColumnData<MethodTableGraphNode>> columns; - - late final _CallerTimeColumn _callerTimeColumn; + final _CallerTimeColumn _callerTimeColumn; @override Widget build(BuildContext context) { @@ -197,7 +199,7 @@ keyFactory: (node) => ValueKey('caller-${node.id}'), data: _callers, dataKey: 'cpu-profile-method-callers', - columns: columns, + columns: [_callerTimeColumn, const _MethodColumn()], defaultSortColumn: _callerTimeColumn, defaultSortDirection: SortDirection.descending, selectionNotifier: _methodTableController.selectedNode, @@ -208,25 +210,16 @@ /// A table of successors (callees) for a single method in a method table. class _CalleesTable extends StatelessWidget { - _CalleesTable(this._methodTableController, this._callees) { - _calleeTimeColumn = _CalleeTimeColumn( - methodTableController: _methodTableController, - ); - _columns = List<ColumnData<MethodTableGraphNode>>.unmodifiable([ - _calleeTimeColumn, - _methodColumn, - ]); - } - - static final _methodColumn = _MethodColumn(); + _CalleesTable(this._methodTableController, this._callees) + : _calleeTimeColumn = _CalleeTimeColumn( + methodTableController: _methodTableController, + ); final MethodTableController _methodTableController; final List<MethodTableGraphNode> _callees; - late final List<ColumnData<MethodTableGraphNode>> _columns; - - late final _CalleeTimeColumn _calleeTimeColumn; + final _CalleeTimeColumn _calleeTimeColumn; @override Widget build(BuildContext context) { @@ -234,7 +227,7 @@ keyFactory: (node) => ValueKey('callee-${node.id}'), data: _callees, dataKey: 'cpu-profile-method-callees', - columns: _columns, + columns: [_calleeTimeColumn, const _MethodColumn()], defaultSortColumn: _calleeTimeColumn, defaultSortDirection: SortDirection.descending, selectionNotifier: _methodTableController.selectedNode, @@ -245,7 +238,8 @@ class _MethodColumn extends ColumnData<MethodTableGraphNode> implements ColumnRenderer<MethodTableGraphNode> { - _MethodColumn() : super.wide('Method', minWidthPx: _methodColumnMinWidth); + const _MethodColumn() + : super.wide('Method', minWidthPx: _methodColumnMinWidth); @override String getValue(MethodTableGraphNode dataObject) => dataObject.name;
diff --git a/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/object_store.dart b/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/object_store.dart index 736b94f..73f3b57 100644 --- a/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/object_store.dart +++ b/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/object_store.dart
@@ -14,7 +14,7 @@ import 'object_store_controller.dart'; class _EntryColumn extends ColumnData<ObjectStoreEntry> { - _EntryColumn() : super.wide('Entry'); + const _EntryColumn() : super.wide('Entry'); @override bool get includeHeader => true; @@ -68,7 +68,7 @@ required this.controller, }); - static final _entryColumn = _EntryColumn(); + static const _entryColumn = _EntryColumn(); late final _objectColumn = _ObjectColumn(onTap: onLinkTapped); late final _columns = <ColumnData<ObjectStoreEntry>>[ _entryColumn,
diff --git a/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/vm_code_display.dart b/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/vm_code_display.dart index 52e1f54..4a5938f 100644 --- a/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/vm_code_display.dart +++ b/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/vm_code_display.dart
@@ -18,8 +18,8 @@ import 'vm_object_model.dart'; abstract class _CodeColumnData<T> extends ColumnData<T> { - _CodeColumnData(super.title, {required super.fixedWidthPx}); - _CodeColumnData.wide(super.title) : super.wide(); + const _CodeColumnData(super.title, {required super.fixedWidthPx}); + const _CodeColumnData.wide(super.title) : super.wide(); @override bool get supportsSorting => false;
diff --git a/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/vm_object_pool_display.dart b/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/vm_object_pool_display.dart index 2e01901..f1f7994 100644 --- a/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/vm_object_pool_display.dart +++ b/packages/devtools_app/lib/src/screens/vm_developer/object_inspector/vm_object_pool_display.dart
@@ -15,8 +15,8 @@ import 'vm_object_model.dart'; abstract class _ObjectPoolColumnData extends ColumnData<ObjectPoolEntry> { - _ObjectPoolColumnData(super.title, {required super.fixedWidthPx}); - _ObjectPoolColumnData.wide(super.title) : super.wide(); + const _ObjectPoolColumnData(super.title, {required super.fixedWidthPx}); + const _ObjectPoolColumnData.wide(super.title) : super.wide(); @override bool get supportsSorting => false;
diff --git a/packages/devtools_app/lib/src/screens/vm_developer/process_memory/process_memory_tree_columns.dart b/packages/devtools_app/lib/src/screens/vm_developer/process_memory/process_memory_tree_columns.dart index 80e02f4..71e6e2f 100644 --- a/packages/devtools_app/lib/src/screens/vm_developer/process_memory/process_memory_tree_columns.dart +++ b/packages/devtools_app/lib/src/screens/vm_developer/process_memory/process_memory_tree_columns.dart
@@ -7,7 +7,7 @@ import 'process_memory_view_controller.dart'; class CategoryColumn extends TreeColumnData<TreemapNode> { - CategoryColumn() : super('Category'); + const CategoryColumn() : super('Category'); @override String getValue(TreemapNode dataObject) => dataObject.name;
diff --git a/packages/devtools_app/lib/src/screens/vm_developer/process_memory/process_memory_view.dart b/packages/devtools_app/lib/src/screens/vm_developer/process_memory/process_memory_view.dart index ea9aa2d..1b453e0 100644 --- a/packages/devtools_app/lib/src/screens/vm_developer/process_memory/process_memory_view.dart +++ b/packages/devtools_app/lib/src/screens/vm_developer/process_memory/process_memory_view.dart
@@ -175,7 +175,7 @@ final VMProcessMemoryViewController controller; - static final categoryColumn = CategoryColumn(); + static const categoryColumn = CategoryColumn(); static final descriptionColumn = DescriptionColumn(); late final memoryColumn = MemoryColumn(controller: controller);
diff --git a/packages/devtools_app/lib/src/screens/vm_developer/vm_statistics/vm_statistics_view.dart b/packages/devtools_app/lib/src/screens/vm_developer/vm_statistics/vm_statistics_view.dart index 2845e46..a2b9d49 100644 --- a/packages/devtools_app/lib/src/screens/vm_developer/vm_statistics/vm_statistics_view.dart +++ b/packages/devtools_app/lib/src/screens/vm_developer/vm_statistics/vm_statistics_view.dart
@@ -184,7 +184,7 @@ } class _IsolateNameColumn extends ColumnData<Isolate> { - _IsolateNameColumn() : super.wide('Name'); + const _IsolateNameColumn() : super.wide('Name'); @override String getValue(Isolate i) => i.name!; @@ -261,7 +261,7 @@ this.systemIsolates = false, }); - static final name = _IsolateNameColumn(); + static const name = _IsolateNameColumn(); static final number = _IsolateIDColumn(); static final newSpace = _IsolateNewSpaceColumn(); static final oldSpace = _IsolateOldSpaceColumn();
diff --git a/packages/devtools_app/lib/src/shared/table/table_data.dart b/packages/devtools_app/lib/src/shared/table/table_data.dart index cf5b7ce..93baa7a 100644 --- a/packages/devtools_app/lib/src/shared/table/table_data.dart +++ b/packages/devtools_app/lib/src/shared/table/table_data.dart
@@ -21,7 +21,7 @@ /// The controller is expected to be alive for the duration of the app /// connection. abstract class ColumnData<T> { - ColumnData( + const ColumnData( this.title, { required double this.fixedWidthPx, this.titleTooltip, @@ -30,7 +30,7 @@ this.showTooltip = false, }) : minWidthPx = null; - ColumnData.wide( + const ColumnData.wide( this.title, { this.titleTooltip, this.minWidthPx, @@ -122,7 +122,7 @@ } abstract class TreeColumnData<T extends TreeNode<T>> extends ColumnData<T> { - TreeColumnData(super.title) : super.wide(); + const TreeColumnData(super.title) : super.wide(); static const treeToggleWidth = 14.0; @@ -212,15 +212,15 @@ static const _defaultTimeColumnWidth = 120.0; - Duration Function(T)? timeProvider; + final Duration Function(T)? timeProvider; - double Function(T) percentAsDoubleProvider; + final double Function(T) percentAsDoubleProvider; - String Function(T)? tooltipProvider; + final String Function(T)? tooltipProvider; - RichTooltipBuilder<T>? richTooltipProvider; + final RichTooltipBuilder<T>? richTooltipProvider; - Comparable Function(T)? secondaryCompare; + final Comparable Function(T)? secondaryCompare; final bool percentageOnly; @@ -293,15 +293,15 @@ static const _defaultMemoryColumnWidth = TimeAndPercentageColumn._defaultTimeColumnWidth; - int Function(T)? sizeProvider; + final int Function(T)? sizeProvider; - double Function(T) percentAsDoubleProvider; + final double Function(T) percentAsDoubleProvider; - String Function(T)? tooltipProvider; + final String Function(T)? tooltipProvider; - RichTooltipBuilder<T>? richTooltipProvider; + final RichTooltipBuilder<T>? richTooltipProvider; - Comparable Function(T)? secondaryCompare; + final Comparable Function(T)? secondaryCompare; final bool percentageOnly;
diff --git a/packages/devtools_app/lib/src/shared/ui/vm_flag_widgets.dart b/packages/devtools_app/lib/src/shared/ui/vm_flag_widgets.dart index a1ed1de..f04b40b 100644 --- a/packages/devtools_app/lib/src/shared/ui/vm_flag_widgets.dart +++ b/packages/devtools_app/lib/src/shared/ui/vm_flag_widgets.dart
@@ -224,9 +224,9 @@ final List<_DialogFlag> flags; - static final name = _NameColumn(); - static final description = _DescriptionColumn(); - static final value = _ValueColumn(); + static const name = _NameColumn(); + static const description = _DescriptionColumn(); + static const value = _ValueColumn(); static final columns = <ColumnData<_DialogFlag>>[name, description, value]; @override @@ -245,14 +245,14 @@ } class _NameColumn extends ColumnData<_DialogFlag> { - _NameColumn() : super('Name', fixedWidthPx: 180); + const _NameColumn() : super('Name', fixedWidthPx: 180); @override String getValue(_DialogFlag dataObject) => dataObject.name ?? ''; } class _DescriptionColumn extends ColumnData<_DialogFlag> { - _DescriptionColumn() : super.wide('Description', minWidthPx: 100); + const _DescriptionColumn() : super.wide('Description', minWidthPx: 100); @override String getValue(_DialogFlag dataObject) => dataObject.description ?? ''; @@ -265,7 +265,7 @@ } class _ValueColumn extends ColumnData<_DialogFlag> { - _ValueColumn() + const _ValueColumn() : super( 'Value', fixedWidthPx: 100,
diff --git a/packages/devtools_app/test/screens/logging/logging_screen_test.dart b/packages/devtools_app/test/screens/logging/logging_screen_test.dart index 8d2eb43..26eb88b 100644 --- a/packages/devtools_app/test/screens/logging/logging_screen_test.dart +++ b/packages/devtools_app/test/screens/logging/logging_screen_test.dart
@@ -206,7 +206,7 @@ late MessageColumn column; setUp(() { - column = MessageColumn(); + column = const MessageColumn(); }); test('compare sorts logs correctly', () {
diff --git a/packages/devtools_app/test/screens/network/network_table_test.dart b/packages/devtools_app/test/screens/network/network_table_test.dart index 7f37e56..e9191c3 100644 --- a/packages/devtools_app/test/screens/network/network_table_test.dart +++ b/packages/devtools_app/test/screens/network/network_table_test.dart
@@ -65,14 +65,14 @@ }); test('MethodColumn', () { - final column = MethodColumn(); + const column = MethodColumn(); for (final request in requests) { expect(column.getDisplayValue(request), request.method); } }); test('StatusColumn for http request', () { - final column = StatusColumn(); + const column = StatusColumn(); final getRequest = findRequestById('1'); expect(column.getDisplayValue(getRequest), httpGet.status); @@ -81,14 +81,14 @@ }); test('TypeColumn for http request', () { - final column = TypeColumn(); + const column = TypeColumn(); final getRequest = findRequestById('1'); expect(column.getDisplayValue(getRequest), 'json'); }); test('DurationColumn for http request', () { - final column = DurationColumn(); + const column = DurationColumn(); final getRequest = findRequestById('1'); expect(column.getDisplayValue(getRequest), '811 ms');