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

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ jobs:
wget -qO- https://dcm.dev/pgp-key.public | sudo gpg --dearmor -o /usr/share/keyrings/dcm.gpg
echo 'deb [signed-by=/usr/share/keyrings/dcm.gpg arch=amd64] https://dcm.dev/debian stable main' | sudo tee /etc/apt/sources.list.d/dart_stable.list
sudo apt-get update
sudo apt-get install dcm=1.36.0-1 # To avoid errors add `-1` (build number) to the version
sudo apt-get install dcm=1.38.0-1 # To avoid errors add `-1` (build number) to the version
sudo chmod +x /usr/bin/dcm
echo "$(dcm --version)"
- name: Setup Dart SDK
Expand Down
2 changes: 2 additions & 0 deletions analysis_options.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,8 @@ dart_code_metrics:
- avoid-explicit-type-declaration
# - ban-name # TODO(polina-c): add configuration
# - binary-expression-operand-order Some nice catches but too many false positives to enable.
- dispose-class-fields
- dispose-fields
- double-literal-format
# - format-comment TODO(jacobr): enable this one after fixing violations.
# TODO(jacobr): enable member-ordering. This catches a bunch of real style
Expand Down
1 change: 1 addition & 0 deletions packages/devtools_app/lib/src/app.dart
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,7 @@ class DevToolsAppState extends State<DevToolsApp> with AutoDisposeMixin {
FrameworkCore.dispose();
// Workaround for https://github.com/flutter/flutter/issues/155265.
removeTextFieldFocusFixHandler();
routerDelegate.dispose();
super.dispose();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ class _EmbeddedExtensionState extends State<EmbeddedExtension>

@override
void dispose() {
_embeddedExtensionController.dispose();
iFrameController.dispose();
super.dispose();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,10 @@ class _NotificationsState extends State<_Notifications> with AutoDisposeMixin {

@override
void dispose() {
_overlayEntry!.remove();
_overlayEntry
?..remove()
..dispose();
_overlayEntry = null;
super.dispose();
}

Expand Down Expand Up @@ -218,6 +221,7 @@ class _NotificationState extends State<_Notification>
void dispose() {
controller.dispose();
_dismissTimer?.cancel();
curve.dispose();
super.dispose();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,8 @@ class DebuggerController extends DevToolsScreenController
_selectedBreakpoint.dispose();
_exceptionPauseMode.dispose();
_hasTruncatedFrames.dispose();
unawaited(_getStackOperation?.cancel());
_lastService = null;
super.dispose();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ class DeepLinkListView extends StatefulWidget {
}

class _DeepLinkListViewState extends State<DeepLinkListView> {
// ignore: dispose-fields, screen controller disposal is handled by the [ScreenControllers] class.
late DeepLinksController controller;

@override
Expand Down
1 change: 1 addition & 0 deletions packages/devtools_app/lib/src/screens/dtd/events.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import 'shared.dart';
/// Manages business logic for the [EventsView] widget, which displays
/// information about events sent and received over DTD event streams.
class EventsController extends FeatureController {
// ignore: dispose-class-fields, this class is not the owner of this object.
late DartToolingDaemon dtd;

@visibleForTesting
Expand Down
1 change: 1 addition & 0 deletions packages/devtools_app/lib/src/screens/dtd/services.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import 'dtd_tools_model.dart';
/// information about service methods registered on DTD and provides
/// functionality for calling them.
class ServicesController extends FeatureController {
// ignore: dispose-class-fields, this class is not the owner of this object.
late DartToolingDaemon dtd;

@visibleForTesting
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,9 @@ class InspectorController extends DisposableController
/// for now mainly to minimize risk.
static const refreshFramesPerSecond = 5.0;

// ignore: dispose-class-fields, set from the constructor. This class is not the owner of this object.
InspectorTreeController inspectorTree;

final FlutterTreeType treeType;

late RateLimiter _refreshRateLimiter;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -914,6 +914,8 @@ class _InspectorTreeState extends State<InspectorTree>
Rect? _currentAnimateTarget;

AnimationController? _constraintDisplayController;

// ignore: dispose-fields, false positive. Disposed via autoDisposeFocusNode.
late FocusNode _focusNode;

/// When autoscrolling, the number of rows to pad the target location with.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -394,6 +394,12 @@ class FlexLayoutExplorerWidgetState
),
);
}

@override
void dispose() {
scrollController.dispose();
super.dispose();
}
}

class VisualizeFlexChildren extends StatefulWidget {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,9 @@ abstract class LayoutExplorerWidgetState<
entranceController.dispose();
changeController.dispose();
_unregisterInspectorControllerService();
entranceCurve.dispose();
changeAnimation.dispose();
rateLimiter.dispose();
super.dispose();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,12 @@ class _LogDetailsState extends State<LogDetails>
unawaited(_computeLogDetails());
}

@override
void dispose() {
scrollController.dispose();
super.dispose();
}

@override
void didUpdateWidget(LogDetails oldWidget) {
super.didUpdateWidget(oldWidget);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,13 @@ class _ClassFilterDialogState extends State<ClassFilterDialog> {
_loadStateFromFilter(widget.classFilter);
}

@override
void dispose() {
_except.dispose();
_only.dispose();
super.dispose();
}

@override
void didUpdateWidget(covariant ClassFilterDialog oldWidget) {
super.didUpdateWidget(oldWidget);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,10 @@ class NetworkController extends DevToolsScreenController
selectedRequest.dispose();
_recordingNotifier.dispose();
_currentNetworkRequests.dispose();
for (final r in _httpRequests ?? <DartIOHttpRequestData>[]) {
r.dispose();
}
_httpRequests?.clear();
super.dispose();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,7 @@ class PerfettoControllerImpl extends PerfettoController {
await perfettoPostEventStream.close();
processor.dispose();
_activeScrollToTimeRange.dispose();
activeTrace.dispose();
super.dispose();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,14 @@ class Perfetto extends StatefulWidget {
}

class _PerfettoState extends State<Perfetto> with AutoDisposeMixin {
late final PerfettoControllerImpl _perfettoController;
PerfettoControllerImpl get _perfettoController =>
widget.perfettoController as PerfettoControllerImpl;

late final _PerfettoViewController _viewController;

@override
void initState() {
super.initState();
_perfettoController = widget.perfettoController as PerfettoControllerImpl;
_viewController = _PerfettoViewController(_perfettoController)..init();

// If [_perfettoController.activeTrace.trace] has a null value, the trace
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,16 @@ class PerformanceController extends DevToolsScreenController
@override
final screenId = ScreenMetaData.performance.id;

// ignore: dispose-class-fields, false positive. See `applyToFeatureControllers` in the dispose() method.
late final FlutterFramesController flutterFramesController;

// ignore: dispose-class-fields, false positive. See `applyToFeatureControllers` in the dispose() method.
late final TimelineEventsController timelineEventsController;

// ignore: dispose-class-fields, false positive. See `applyToFeatureControllers` in the dispose() method.
late final RebuildStatsController rebuildStatsController;

// ignore: dispose-class-fields, false positive. See `applyToFeatureControllers` in the dispose() method.
late List<PerformanceFeatureController> _featureControllers;

// TODO(jacobr): add the recount controller to [_featureControllers] once your
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import '../../shared/globals.dart';
import '../../shared/ui/common_widgets.dart';
import '../../shared/ui/tab.dart';
import 'panes/flutter_frames/flutter_frame_model.dart';
import 'panes/flutter_frames/flutter_frames_controller.dart';
import 'panes/frame_analysis/frame_analysis.dart';
import 'panes/rebuild_stats/rebuild_stats.dart';
import 'panes/timeline_events/timeline_events_view.dart';
Expand All @@ -32,20 +31,18 @@ class _TabbedPerformanceViewState extends State<TabbedPerformanceView>

late PerformanceController controller;

late FlutterFramesController _flutterFramesController;

FlutterFrame? _selectedFlutterFrame;

@override
void initState() {
super.initState();
controller = screenControllers.lookup<PerformanceController>();
_flutterFramesController = controller.flutterFramesController;
final flutterFramesController = controller.flutterFramesController;

_selectedFlutterFrame = _flutterFramesController.selectedFrame.value;
addAutoDisposeListener(_flutterFramesController.selectedFrame, () {
_selectedFlutterFrame = flutterFramesController.selectedFrame.value;
addAutoDisposeListener(flutterFramesController.selectedFrame, () {
setState(() {
_selectedFlutterFrame = _flutterFramesController.selectedFrame.value;
_selectedFlutterFrame = flutterFramesController.selectedFrame.value;
});
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -340,6 +340,12 @@ class _IsolatePortsWidgetState extends State<IsolatePortsWidget> {

final selectedPort = ValueNotifier<InstanceRef?>(null);

@override
void dispose() {
selectedPort.dispose();
super.dispose();
}

@override
Widget build(BuildContext context) {
final ports = widget.controller.ports;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ class ObjectInspectorSelector extends StatefulWidget {

class _ObjectInspectorSelectorState extends State<ObjectInspectorSelector> {
String value = ObjectInspectorSelector.kProgramExplorer;

late ObjectInspectorViewController controller;

@override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,16 @@ class _VMProcessMemoryViewBodyState extends State<VMProcessMemoryViewBody>
_initTabController();
}

@override
void dispose() {
if (_tabControllerInitialized) {
_tabController.removeListener(_onTabChanged);
_tabController.dispose();
}
controller.dispose();
super.dispose();
}

@override
void didUpdateWidget(VMProcessMemoryViewBody oldWidget) {
super.didUpdateWidget(oldWidget);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ class AppState extends DisposableController with AutoDisposeControllerMixin {
void dispose() {
_variables.dispose();
_currentFrame.dispose();
_dapVariables.dispose();
super.dispose();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -534,6 +534,13 @@ class _ServiceExtensionCheckboxState extends State<ServiceExtensionCheckbox>
_initExtensionState();
}

@override
void dispose() {
value.dispose();
extensionAvailable.dispose();
super.dispose();
}

@override
void _onMainIsolateChanged() => _initExtensionState();

Expand Down Expand Up @@ -704,6 +711,12 @@ class _ServiceExtensionCheckboxGroupButtonState
_initExtensionState();
}

@override
void dispose() {
_enabled.dispose();
super.dispose();
}

@override
void _onMainIsolateChanged() => _initExtensionState();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ abstract class FlameChartState<

final sections = <FlameChartSection>[];

// ignore: dispose-fields, false positive. Disposed via autoDisposeFocusNode.
final focusNode = FocusNode(debugLabel: 'flame-chart');

double? mouseHoverX;
Expand Down Expand Up @@ -277,6 +278,7 @@ abstract class FlameChartState<
void dispose() {
zoomController.dispose();
_verticalFlameChartScrollController.dispose();
_hoveredNodeNotifier.dispose();
super.dispose();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ abstract class DragAndDropManager {
@mustCallSuper
void dispose() {
_dragAndDropStates.clear();
activeState = null;
}

void registerDragAndDrop(DragAndDropState state) {
Expand Down Expand Up @@ -113,6 +114,7 @@ class DragAndDrop extends StatefulWidget {

class DragAndDropState extends State<DragAndDrop> {
final _dragging = ValueNotifier<bool>(false);

DragAndDropManager? _dragAndDropManager;

bool _isActive = false;
Expand Down Expand Up @@ -140,6 +142,8 @@ class DragAndDropState extends State<DragAndDrop> {
@override
void dispose() {
_dragAndDropManager?.unregisterDragAndDrop(this);
_dragAndDropManager = null;
_dragging.dispose();
super.dispose();
}

Expand Down
6 changes: 6 additions & 0 deletions packages/devtools_app/lib/src/shared/console/console.dart
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,12 @@ class _ConsoleOutputState extends State<_ConsoleOutput>
_initHelper();
}

@override
void dispose() {
_scroll.dispose();
super.dispose();
}

void _onScrollChanged() {
// Detect if the user has scrolled up and stop scrolling to the bottom if
// they have scrolled up.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,7 @@ class InspectorService extends InspectorServiceBase {
void dispose() {
_cachedSelectionGroups?.clear(false);
_cachedSelectionGroups = null;
_rootDirectories.dispose();
super.dispose();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,15 @@ class EditorClient extends DisposableController
}
}

@override
void dispose() {
_editableArgumentsApiIsRegistered.dispose();
unawaited(_activeLocationChangedController.close());
unawaited(_eventController.close());
unawaited(_editorServiceChangedController.close());
super.dispose();
}

void _handleServiceRegistration({
required String service,
required String method,
Expand Down
Loading
Loading