Skip to content

Commit 3619437

Browse files
committed
Expose Flutter debug toolbar extension group
1 parent cb14614 commit 3619437

5 files changed

Lines changed: 52 additions & 0 deletions

File tree

resources/META-INF/plugin.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,9 @@
7474
<add-to-group anchor="before" group-id="ToolbarRunGroup" relative-to-action="RunConfiguration"/>
7575
</group>
7676

77+
<!-- Allows dependent plugins to contribute inline actions to Flutter run/debug content toolbars. -->
78+
<group id="Flutter.DebugProcess.TopToolbar" popup="false"/>
79+
7780
<!--suppress PluginXmlCapitalization -->
7881
<group id="FlutterToolsActionGroup" class="io.flutter.actions.FlutterToolsActionGroup" popup="true"
7982
text="Flutter" description="Flutter Tools" icon="FlutterIcons.Flutter">

src/io/flutter/run/FlutterDebugProcess.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ public void registerAdditionalActions(@NotNull final DefaultActionGroup leftTool
111111
topToolbar.addAction(new RestartFlutterApp(app, canReload));
112112
topToolbar.addSeparator();
113113
topToolbar.addAction(new OpenDevToolsAction(app, debugUrlAvailable));
114+
FlutterDebugProcessActions.addTopToolbarExtensionActions(topToolbar);
114115

115116
settings.addAction(new ReloadAllFlutterApps(app, canReload));
116117
settings.addAction(new RestartAllFlutterApps(app, canReload));
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/*
2+
* Copyright 2026 The Chromium Authors. All rights reserved.
3+
* Use of this source code is governed by a BSD-style license that can be
4+
* found in the LICENSE file.
5+
*/
6+
package io.flutter.run;
7+
8+
import com.intellij.openapi.actionSystem.ActionGroup;
9+
import com.intellij.openapi.actionSystem.ActionManager;
10+
import com.intellij.openapi.actionSystem.AnAction;
11+
import com.intellij.openapi.actionSystem.DefaultActionGroup;
12+
import org.jetbrains.annotations.NotNull;
13+
14+
/**
15+
* Shared action groups for Flutter-specific run and debug toolbars.
16+
*/
17+
public final class FlutterDebugProcessActions {
18+
/**
19+
* Third-party plugins can contribute inline toolbar actions with:
20+
* {@code <add-to-group group-id="Flutter.DebugProcess.TopToolbar" anchor="last" />}.
21+
*/
22+
public static final @NotNull String TOP_TOOLBAR_EXTENSION_GROUP_ID = "Flutter.DebugProcess.TopToolbar";
23+
24+
private FlutterDebugProcessActions() {
25+
}
26+
27+
public static void addTopToolbarExtensionActions(@NotNull DefaultActionGroup topToolbar) {
28+
final AnAction action = ActionManager.getInstance().getAction(TOP_TOOLBAR_EXTENSION_GROUP_ID);
29+
if (!(action instanceof ActionGroup actionGroup) || isEmpty(actionGroup)) {
30+
return;
31+
}
32+
33+
topToolbar.addSeparator();
34+
topToolbar.addAction(action);
35+
}
36+
37+
private static boolean isEmpty(@NotNull ActionGroup actionGroup) {
38+
if (actionGroup instanceof DefaultActionGroup defaultActionGroup) {
39+
return defaultActionGroup.getChildActionsOrStubs().length == 0;
40+
}
41+
42+
return actionGroup.getChildren(null).length == 0;
43+
}
44+
}

src/io/flutter/run/bazelTest/BazelTestDebugProcess.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import com.intellij.xdebugger.XDebugSession;
1212
import com.jetbrains.lang.dart.util.DartUrlResolver;
1313
import io.flutter.ObservatoryConnector;
14+
import io.flutter.run.FlutterDebugProcessActions;
1415
import io.flutter.run.FlutterPopFrameAction;
1516
import io.flutter.run.OpenDevToolsAction;
1617
import io.flutter.vmService.DartVmServiceDebugProcess;
@@ -40,6 +41,7 @@ public void registerAdditionalActions(@NotNull DefaultActionGroup leftToolbar,
4041
topToolbar.addSeparator();
4142
topToolbar.addAction(new FlutterPopFrameAction());
4243
topToolbar.addAction(new OpenDevToolsAction(connector, this::isActive));
44+
FlutterDebugProcessActions.addTopToolbarExtensionActions(topToolbar);
4345
}
4446

4547
private boolean isActive() {

src/io/flutter/run/test/TestDebugProcess.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import com.intellij.xdebugger.XDebugSession;
1212
import com.jetbrains.lang.dart.util.DartUrlResolver;
1313
import io.flutter.ObservatoryConnector;
14+
import io.flutter.run.FlutterDebugProcessActions;
1415
import io.flutter.run.FlutterPopFrameAction;
1516
import io.flutter.run.OpenDevToolsAction;
1617
import io.flutter.vmService.DartVmServiceDebugProcess;
@@ -40,6 +41,7 @@ public void registerAdditionalActions(@NotNull DefaultActionGroup leftToolbar,
4041
topToolbar.addSeparator();
4142
topToolbar.addAction(new FlutterPopFrameAction());
4243
topToolbar.addAction(new OpenDevToolsAction(connector, this::isActive));
44+
FlutterDebugProcessActions.addTopToolbarExtensionActions(topToolbar);
4345
}
4446

4547
private boolean isActive() {

0 commit comments

Comments
 (0)