Skip to content

Commit 7dd2edf

Browse files
authored
Adding @ActionImpl annotations to Run Menu actions. Refactoring and localizing. (#206)
1 parent 86a9a8e commit 7dd2edf

10 files changed

Lines changed: 162 additions & 87 deletions

File tree

java-debugger-api/src/main/resources/LOCALIZE-LIB/en_US/com.intellij.java.debugger.JavaDebuggerLocalize.yaml

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,18 @@ action.show.watches.text.hide:
3434
text: Hide Watches
3535
action.show.watches.text.show:
3636
text: Show Watches
37-
action.thread.dump.text:
38-
text: Get Thread Dump
3937
action.thread.dump.description:
4038
text: Get stacktraces of all the threads within JVM at current moment
39+
action.thread.dump.text:
40+
text: Get Thread Dump
41+
action.toggle.field.breakpoint.description:
42+
text: Toggle field watchpoint for the field at caret
43+
action.toggle.field.breakpoint.text:
44+
text: Toggle _Field Watchpoint
45+
action.toggle.method.breakpoint.description:
46+
text: Toggle method breakpoint for the method at caret
47+
action.toggle.method.breakpoint.text:
48+
text: Toggle _Method Breakpoint
4149
action.watch.method.return.value.description:
4250
text: Enables watching last executed method return value
4351
action.watches.method.return.value.disable:

java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ExportThreadsAction.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.intellij.java.debugger.impl.DebuggerManagerEx;
2020
import com.intellij.java.debugger.impl.DebuggerSession;
2121
import com.intellij.java.debugger.impl.ui.ExportDialog;
22+
import consulo.annotation.component.ActionImpl;
2223
import consulo.platform.Platform;
2324
import consulo.platform.base.icon.PlatformIconGroup;
2425
import consulo.platform.base.localize.ActionLocalize;
@@ -41,6 +42,7 @@
4142
/**
4243
* @author Jeka
4344
*/
45+
@ActionImpl(id = "ExportThreads")
4446
public class ExportThreadsAction extends AnAction {
4547
public ExportThreadsAction() {
4648
super(ActionLocalize.actionExportthreadsText(), ActionLocalize.actionExportthreadsDescription(), PlatformIconGroup.actionsExport());
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.intellij.java.debugger.impl.actions;
2+
3+
import consulo.annotation.component.ActionImpl;
4+
import consulo.annotation.component.ActionParentRef;
5+
import consulo.annotation.component.ActionRef;
6+
import consulo.application.dumb.DumbAware;
7+
import consulo.platform.base.localize.ActionLocalize;
8+
import consulo.ui.ex.action.DefaultActionGroup;
9+
10+
/**
11+
* @author UNV
12+
* @since 2025-09-06
13+
*/
14+
@ActionImpl(
15+
id = "JavaDebugMainMenu",
16+
children = {
17+
@ActionRef(type = ExportThreadsAction.class),
18+
@ActionRef(type = ThreadDumpAction.class)
19+
},
20+
parents = @ActionParentRef(value = @ActionRef(id = "DebugMainMenu"))
21+
)
22+
public class JavaDebugMainMenuGroup extends DefaultActionGroup implements DumbAware {
23+
public JavaDebugMainMenuGroup() {
24+
super(ActionLocalize.groupDebugmainmenuText(), false);
25+
}
26+
}

java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ThreadDumpAction.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import com.intellij.java.debugger.impl.jdi.VirtualMachineProxyImpl;
2525
import com.intellij.java.debugger.localize.JavaDebuggerLocalize;
2626
import com.intellij.java.execution.unscramble.ThreadDumpParser;
27+
import consulo.annotation.component.ActionImpl;
2728
import consulo.execution.debug.XDebugSession;
2829
import consulo.execution.unscramble.ThreadState;
2930
import consulo.internal.com.sun.jdi.*;
@@ -48,6 +49,7 @@
4849
* @author Eugene Zhuravlev
4950
* @author Sascha Weinreuter
5051
*/
52+
@ActionImpl(id = "DumpThreads")
5153
public class ThreadDumpAction extends AnAction {
5254
public ThreadDumpAction() {
5355
super(
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.intellij.java.debugger.impl.actions;
2+
3+
import consulo.annotation.component.ActionImpl;
4+
import consulo.annotation.component.ActionParentRef;
5+
import consulo.annotation.component.ActionRef;
6+
import consulo.annotation.component.ActionRefAnchor;
7+
import consulo.application.dumb.DumbAware;
8+
import consulo.platform.base.localize.ActionLocalize;
9+
import consulo.ui.ex.action.DefaultActionGroup;
10+
import consulo.ui.ex.action.IdeActions;
11+
12+
/**
13+
* @author UNV
14+
* @since 2025-09-06
15+
*/
16+
@ActionImpl(
17+
id = "ToggleBreakpointAction",
18+
children = {
19+
@ActionRef(type = ToggleMethodBreakpointAction.class),
20+
@ActionRef(type = ToggleFieldBreakpointAction.class)
21+
},
22+
parents = @ActionParentRef(
23+
value = @ActionRef(id = "DebugMainMenu"),
24+
anchor = ActionRefAnchor.AFTER,
25+
relatedToAction = @ActionRef(id = IdeActions.ACTION_TOGGLE_LINE_BREAKPOINT)
26+
)
27+
)
28+
public class ToggleBreakpointGroup extends DefaultActionGroup implements DumbAware {
29+
public ToggleBreakpointGroup() {
30+
super(ActionLocalize.groupDebugmainmenuText(), false);
31+
}
32+
}

java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ToggleFieldBreakpointAction.java

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535
import com.intellij.java.language.impl.JavaFileType;
3636
import com.intellij.java.language.psi.PsiClass;
3737
import com.intellij.java.language.psi.PsiField;
38+
import consulo.annotation.access.RequiredReadAction;
39+
import consulo.annotation.component.ActionImpl;
3840
import consulo.codeEditor.Editor;
3941
import consulo.dataContext.DataContext;
4042
import consulo.document.Document;
@@ -57,7 +59,20 @@
5759
import jakarta.annotation.Nonnull;
5860
import jakarta.annotation.Nullable;
5961

62+
import java.util.Set;
63+
64+
@ActionImpl(id = "ToggleFieldBreakpoint")
6065
public class ToggleFieldBreakpointAction extends AnAction {
66+
private static final Set<String> POPUP_PLACES = Set.of(
67+
ActionPlaces.PROJECT_VIEW_POPUP,
68+
ActionPlaces.STRUCTURE_VIEW_POPUP,
69+
ActionPlaces.FAVORITES_VIEW_POPUP
70+
);
71+
72+
public ToggleFieldBreakpointAction() {
73+
super(JavaDebuggerLocalize.actionToggleFieldBreakpointText(), JavaDebuggerLocalize.actionToggleFieldBreakpointDescription());
74+
}
75+
6176
@Override
6277
@RequiredUIAccess
6378
public void actionPerformed(AnActionEvent e) {
@@ -111,9 +126,7 @@ public void update(@Nonnull AnActionEvent event) {
111126
boolean toEnable = place != null;
112127

113128
Presentation presentation = event.getPresentation();
114-
if (ActionPlaces.PROJECT_VIEW_POPUP.equals(event.getPlace())
115-
|| ActionPlaces.STRUCTURE_VIEW_POPUP.equals(event.getPlace())
116-
|| ActionPlaces.FAVORITES_VIEW_POPUP.equals(event.getPlace())) {
129+
if (POPUP_PLACES.contains(event.getPlace())) {
117130
presentation.setVisible(toEnable);
118131
}
119132
else if (DebuggerAction.isContextView(event)) {
@@ -123,7 +136,7 @@ else if (DebuggerAction.isContextView(event)) {
123136
Document document = PsiDocumentManager.getInstance(project).getDocument(place.getFile());
124137
if (document != null) {
125138
int offset = place.getOffset();
126-
BreakpointManager breakpointManager = (DebuggerManagerEx.getInstanceEx(project)).getBreakpointManager();
139+
BreakpointManager breakpointManager = DebuggerManagerEx.getInstanceEx(project).getBreakpointManager();
127140
Breakpoint fieldBreakpoint =
128141
offset >= 0 ? breakpointManager.findBreakpoint(document, offset, FieldBreakpoint.CATEGORY) : null;
129142
if (fieldBreakpoint != null) {
@@ -137,15 +150,14 @@ else if (DebuggerAction.isContextView(event)) {
137150
}
138151

139152
@Nullable
153+
@RequiredReadAction
140154
public static SourcePosition getPlace(AnActionEvent event) {
141155
DataContext dataContext = event.getDataContext();
142156
Project project = event.getData(Project.KEY);
143157
if (project == null) {
144158
return null;
145159
}
146-
if (ActionPlaces.PROJECT_VIEW_POPUP.equals(event.getPlace())
147-
|| ActionPlaces.STRUCTURE_VIEW_POPUP.equals(event.getPlace())
148-
|| ActionPlaces.FAVORITES_VIEW_POPUP.equals(event.getPlace())) {
160+
if (POPUP_PLACES.contains(event.getPlace())) {
149161
return event.getData(PsiElement.KEY) instanceof PsiField field ? SourcePosition.createFromElement(field) : null;
150162
}
151163

@@ -178,14 +190,17 @@ public void threadAction() {
178190
if (DebuggerAction.isContextView(event)) {
179191
DebuggerTree tree = event.getData(DebuggerTree.DATA_KEY);
180192
if (tree != null && tree.getSelectionPath() != null) {
181-
DebuggerTreeNodeImpl node = ((DebuggerTreeNodeImpl)tree.getSelectionPath().getLastPathComponent());
193+
DebuggerTreeNodeImpl node = (DebuggerTreeNodeImpl) tree.getSelectionPath().getLastPathComponent();
182194
if (node != null && node.getDescriptor() instanceof FieldDescriptorImpl fieldDescriptor) {
183195
Field field = fieldDescriptor.getField();
184196
DebuggerSession session = tree.getDebuggerContext().getDebuggerSession();
185-
PsiClass psiClass = DebuggerUtils.findClass(field.declaringType().name(), project, (session != null)
186-
? session.getSearchScope() : GlobalSearchScope.allScope(project));
197+
PsiClass psiClass = DebuggerUtils.findClass(
198+
field.declaringType().name(),
199+
project,
200+
session != null ? session.getSearchScope() : GlobalSearchScope.allScope(project)
201+
);
187202
if (psiClass != null) {
188-
psiClass = (PsiClass)psiClass.getNavigationElement();
203+
psiClass = (PsiClass) psiClass.getNavigationElement();
189204
PsiField psiField = psiClass.findFieldByName(field.name(), true);
190205
if (psiField != null) {
191206
return SourcePosition.createFromElement(psiField);

java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ToggleMethodBreakpointAction.java

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,18 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
1716
package com.intellij.java.debugger.impl.actions;
1817

1918
import com.intellij.java.debugger.impl.DebuggerManagerEx;
2019
import com.intellij.java.debugger.impl.DebuggerUtilsEx;
2120
import com.intellij.java.debugger.impl.ui.breakpoints.Breakpoint;
2221
import com.intellij.java.debugger.impl.ui.breakpoints.BreakpointManager;
2322
import com.intellij.java.debugger.impl.ui.breakpoints.MethodBreakpoint;
23+
import com.intellij.java.debugger.localize.JavaDebuggerLocalize;
2424
import com.intellij.java.language.impl.JavaClassFileType;
2525
import com.intellij.java.language.impl.JavaFileType;
2626
import com.intellij.java.language.psi.PsiMethod;
27+
import consulo.annotation.component.ActionImpl;
2728
import consulo.codeEditor.Editor;
2829
import consulo.document.Document;
2930
import consulo.document.util.DocumentUtil;
@@ -42,7 +43,21 @@
4243
import jakarta.annotation.Nonnull;
4344
import jakarta.annotation.Nullable;
4445

46+
import java.util.Set;
47+
48+
@ActionImpl(id = "ToggleMethodBreakpoint")
4549
public class ToggleMethodBreakpointAction extends AnAction {
50+
private static final Set<String> POPUP_PLACES = Set.of(
51+
ActionPlaces.PROJECT_VIEW_POPUP,
52+
ActionPlaces.STRUCTURE_VIEW_POPUP,
53+
ActionPlaces.FAVORITES_VIEW_POPUP,
54+
ActionPlaces.NAVIGATION_BAR_POPUP
55+
);
56+
57+
public ToggleMethodBreakpointAction() {
58+
super(JavaDebuggerLocalize.actionToggleMethodBreakpointText(), JavaDebuggerLocalize.actionToggleMethodBreakpointDescription());
59+
}
60+
4661
@Override
4762
@RequiredUIAccess
4863
public void update(@Nonnull AnActionEvent event) {
@@ -89,10 +104,7 @@ private static PlaceInDocument getPlace(AnActionEvent event) {
89104
Document document = null;
90105

91106
String place = event.getPlace();
92-
if (ActionPlaces.PROJECT_VIEW_POPUP.equals(place)
93-
|| ActionPlaces.STRUCTURE_VIEW_POPUP.equals(place)
94-
|| ActionPlaces.FAVORITES_VIEW_POPUP.equals(place)
95-
|| ActionPlaces.NAVIGATION_BAR_POPUP.equals(place)) {
107+
if (POPUP_PLACES.contains(place)) {
96108
if (event.getData(PsiElement.KEY) instanceof PsiMethod m) {
97109
PsiFile containingFile = m.getContainingFile();
98110
if (containingFile != null) {
Lines changed: 47 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,57 @@
11
/**
22
* @author VISTALL
3-
* @since 05/12/2022
3+
* @since 2022-12-05
44
*/
55
open module consulo.java.debugger.impl {
6-
requires transitive consulo.java.debugger.api;
7-
requires consulo.java.language.impl;
8-
requires consulo.java.indexing.impl;
9-
requires consulo.java.analysis.impl;
10-
requires consulo.java.compiler.api;
11-
requires consulo.java.rt.common;
6+
requires transitive consulo.java.debugger.api;
7+
requires consulo.java.language.impl;
8+
requires consulo.java.indexing.impl;
9+
requires consulo.java.analysis.impl;
10+
requires consulo.java.compiler.api;
11+
requires consulo.java.rt.common;
1212

13-
// TODO remove in future
14-
requires java.desktop;
15-
// TODO remove in future
16-
requires consulo.ide.impl;
13+
// TODO remove in future
14+
requires java.desktop;
15+
// TODO remove in future
16+
requires consulo.ide.impl;
1717

18-
requires one.util.streamex;
18+
requires one.util.streamex;
1919

20-
requires consulo.internal.jdi;
21-
requires asm;
22-
requires asm.analysis;
23-
requires asm.commons;
24-
requires asm.tree;
25-
requires asm.util;
20+
requires consulo.internal.jdi;
21+
requires asm;
22+
requires asm.analysis;
23+
requires asm.commons;
24+
requires asm.tree;
25+
requires asm.util;
2626

27-
requires it.unimi.dsi.fastutil;
27+
requires it.unimi.dsi.fastutil;
2828

29-
exports com.intellij.java.debugger.impl;
30-
exports com.intellij.java.debugger.impl.actions;
31-
exports com.intellij.java.debugger.impl.apiAdapters;
32-
exports com.intellij.java.debugger.impl.breakpoints;
33-
exports com.intellij.java.debugger.impl.breakpoints.properties;
34-
exports com.intellij.java.debugger.impl.classFilter;
35-
exports com.intellij.java.debugger.impl.codeinsight;
36-
exports com.intellij.java.debugger.impl.descriptors.data;
37-
exports com.intellij.java.debugger.impl.engine;
38-
exports com.intellij.java.debugger.impl.engine.evaluation;
39-
exports com.intellij.java.debugger.impl.engine.evaluation.expression;
40-
exports com.intellij.java.debugger.impl.engine.events;
41-
exports com.intellij.java.debugger.impl.engine.requests;
42-
exports com.intellij.java.debugger.impl.externalSystem;
43-
exports com.intellij.java.debugger.impl.jdi;
44-
exports com.intellij.java.debugger.impl.settings;
45-
exports com.intellij.java.debugger.impl.ui;
46-
exports com.intellij.java.debugger.impl.ui.breakpoints;
47-
exports com.intellij.java.debugger.impl.ui.impl;
48-
exports com.intellij.java.debugger.impl.ui.impl.nodes;
49-
exports com.intellij.java.debugger.impl.ui.impl.tree;
50-
exports com.intellij.java.debugger.impl.ui.impl.watch;
51-
exports com.intellij.java.debugger.impl.ui.tree;
52-
exports com.intellij.java.debugger.impl.ui.tree.actions;
53-
exports com.intellij.java.debugger.impl.ui.tree.render;
54-
exports consulo.java.debugger.impl;
55-
exports consulo.java.debugger.impl.apiAdapters;
56-
exports consulo.java.debugger.impl.settings;
29+
exports com.intellij.java.debugger.impl;
30+
exports com.intellij.java.debugger.impl.actions;
31+
exports com.intellij.java.debugger.impl.apiAdapters;
32+
exports com.intellij.java.debugger.impl.breakpoints;
33+
exports com.intellij.java.debugger.impl.breakpoints.properties;
34+
exports com.intellij.java.debugger.impl.classFilter;
35+
exports com.intellij.java.debugger.impl.codeinsight;
36+
exports com.intellij.java.debugger.impl.descriptors.data;
37+
exports com.intellij.java.debugger.impl.engine;
38+
exports com.intellij.java.debugger.impl.engine.evaluation;
39+
exports com.intellij.java.debugger.impl.engine.evaluation.expression;
40+
exports com.intellij.java.debugger.impl.engine.events;
41+
exports com.intellij.java.debugger.impl.engine.requests;
42+
exports com.intellij.java.debugger.impl.externalSystem;
43+
exports com.intellij.java.debugger.impl.jdi;
44+
exports com.intellij.java.debugger.impl.settings;
45+
exports com.intellij.java.debugger.impl.ui;
46+
exports com.intellij.java.debugger.impl.ui.breakpoints;
47+
exports com.intellij.java.debugger.impl.ui.impl;
48+
exports com.intellij.java.debugger.impl.ui.impl.nodes;
49+
exports com.intellij.java.debugger.impl.ui.impl.tree;
50+
exports com.intellij.java.debugger.impl.ui.impl.watch;
51+
exports com.intellij.java.debugger.impl.ui.tree;
52+
exports com.intellij.java.debugger.impl.ui.tree.actions;
53+
exports com.intellij.java.debugger.impl.ui.tree.render;
54+
exports consulo.java.debugger.impl;
55+
exports consulo.java.debugger.impl.apiAdapters;
56+
exports consulo.java.debugger.impl.settings;
5757
}

plugin/src/main/resources/LOCALIZE-LIB/en_US/consulo.java.JavaLocalize.yaml

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -124,14 +124,6 @@ action.SliceForward.text:
124124
text: Analyze Data Flow _from Here
125125
action.SliceSliceForward.description:
126126
text: Search for values escaped from this location
127-
action.ToggleFieldBreakpoint.description:
128-
text: Toggle field watchpoint for the field at caret
129-
action.ToggleFieldBreakpoint.text:
130-
text: Toggle _Field Watchpoint
131-
action.ToggleMethodBreakpoint.description:
132-
text: Toggle method breakpoint for the method at caret
133-
action.ToggleMethodBreakpoint.text:
134-
text: Toggle _Method Breakpoint
135127
action.TurnRefsToSuper.description:
136128
text: Change usages of a class to those of its superclass or interface
137129
action.TurnRefsToSuper.text:

plugin/src/main/resources/META-INF/plugin.xml

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -123,20 +123,6 @@
123123
<add-to-group group-id="DebugMainMenu" anchor="before" relative-to-action="StepOver"/>
124124
</action>
125125

126-
<group id="ToggleBreakpointAction">
127-
<action id="ToggleMethodBreakpoint" class="com.intellij.java.debugger.impl.actions.ToggleMethodBreakpointAction"/>
128-
<action id="ToggleFieldBreakpoint" class="com.intellij.java.debugger.impl.actions.ToggleFieldBreakpointAction"/>
129-
<!--Moved to XDebugger <action id="ToggleBreakpointEnabled" class="com.intellij.debugger.actions.ToggleBreakpointEnabledAction"/>-->
130-
<add-to-group group-id="DebugMainMenu" anchor="after" relative-to-action="ToggleLineBreakpoint"/>
131-
</group>
132-
133-
<action id="ExportThreads" class="com.intellij.java.debugger.impl.actions.ExportThreadsAction">
134-
<add-to-group group-id="RunMenu" anchor="last"/>
135-
</action>
136-
<action id="DumpThreads" class="com.intellij.java.debugger.impl.actions.ThreadDumpAction">
137-
<add-to-group group-id="RunMenu" anchor="last"/>
138-
</action>
139-
140126
<action id="GenerateJavadoc" class="com.intellij.java.impl.javadoc.actions.GenerateJavadocAction" can-use-project-as-default="true" require-module-extensions="java">
141127
<add-to-group group-id="ToolsBasicGroup" anchor="after" relative-to-action="SaveFileAsTemplate"/>
142128
</action>

0 commit comments

Comments
 (0)