diff --git a/java-debugger-api/src/main/resources/LOCALIZE-LIB/en_US/com.intellij.java.debugger.JavaDebuggerLocalize.yaml b/java-debugger-api/src/main/resources/LOCALIZE-LIB/en_US/com.intellij.java.debugger.JavaDebuggerLocalize.yaml index d52db7a57..512af9a1f 100644 --- a/java-debugger-api/src/main/resources/LOCALIZE-LIB/en_US/com.intellij.java.debugger.JavaDebuggerLocalize.yaml +++ b/java-debugger-api/src/main/resources/LOCALIZE-LIB/en_US/com.intellij.java.debugger.JavaDebuggerLocalize.yaml @@ -34,10 +34,18 @@ action.show.watches.text.hide: text: Hide Watches action.show.watches.text.show: text: Show Watches -action.thread.dump.text: - text: Get Thread Dump action.thread.dump.description: text: Get stacktraces of all the threads within JVM at current moment +action.thread.dump.text: + text: Get Thread Dump +action.toggle.field.breakpoint.description: + text: Toggle field watchpoint for the field at caret +action.toggle.field.breakpoint.text: + text: Toggle _Field Watchpoint +action.toggle.method.breakpoint.description: + text: Toggle method breakpoint for the method at caret +action.toggle.method.breakpoint.text: + text: Toggle _Method Breakpoint action.watch.method.return.value.description: text: Enables watching last executed method return value action.watches.method.return.value.disable: diff --git a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ExportThreadsAction.java b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ExportThreadsAction.java index e6edc0494..bbbb4ef88 100644 --- a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ExportThreadsAction.java +++ b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ExportThreadsAction.java @@ -19,6 +19,7 @@ import com.intellij.java.debugger.impl.DebuggerManagerEx; import com.intellij.java.debugger.impl.DebuggerSession; import com.intellij.java.debugger.impl.ui.ExportDialog; +import consulo.annotation.component.ActionImpl; import consulo.platform.Platform; import consulo.platform.base.icon.PlatformIconGroup; import consulo.platform.base.localize.ActionLocalize; @@ -41,6 +42,7 @@ /** * @author Jeka */ +@ActionImpl(id = "ExportThreads") public class ExportThreadsAction extends AnAction { public ExportThreadsAction() { super(ActionLocalize.actionExportthreadsText(), ActionLocalize.actionExportthreadsDescription(), PlatformIconGroup.actionsExport()); diff --git a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/JavaDebugMainMenuGroup.java b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/JavaDebugMainMenuGroup.java new file mode 100644 index 000000000..a5bf47d36 --- /dev/null +++ b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/JavaDebugMainMenuGroup.java @@ -0,0 +1,26 @@ +package com.intellij.java.debugger.impl.actions; + +import consulo.annotation.component.ActionImpl; +import consulo.annotation.component.ActionParentRef; +import consulo.annotation.component.ActionRef; +import consulo.application.dumb.DumbAware; +import consulo.platform.base.localize.ActionLocalize; +import consulo.ui.ex.action.DefaultActionGroup; + +/** + * @author UNV + * @since 2025-09-06 + */ +@ActionImpl( + id = "JavaDebugMainMenu", + children = { + @ActionRef(type = ExportThreadsAction.class), + @ActionRef(type = ThreadDumpAction.class) + }, + parents = @ActionParentRef(value = @ActionRef(id = "DebugMainMenu")) +) +public class JavaDebugMainMenuGroup extends DefaultActionGroup implements DumbAware { + public JavaDebugMainMenuGroup() { + super(ActionLocalize.groupDebugmainmenuText(), false); + } +} diff --git a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ThreadDumpAction.java b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ThreadDumpAction.java index 7e9ac0eb3..a71b7002d 100644 --- a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ThreadDumpAction.java +++ b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ThreadDumpAction.java @@ -24,6 +24,7 @@ import com.intellij.java.debugger.impl.jdi.VirtualMachineProxyImpl; import com.intellij.java.debugger.localize.JavaDebuggerLocalize; import com.intellij.java.execution.unscramble.ThreadDumpParser; +import consulo.annotation.component.ActionImpl; import consulo.execution.debug.XDebugSession; import consulo.execution.unscramble.ThreadState; import consulo.internal.com.sun.jdi.*; @@ -48,6 +49,7 @@ * @author Eugene Zhuravlev * @author Sascha Weinreuter */ +@ActionImpl(id = "DumpThreads") public class ThreadDumpAction extends AnAction { public ThreadDumpAction() { super( diff --git a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ToggleBreakpointGroup.java b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ToggleBreakpointGroup.java new file mode 100644 index 000000000..04cd915b8 --- /dev/null +++ b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ToggleBreakpointGroup.java @@ -0,0 +1,32 @@ +package com.intellij.java.debugger.impl.actions; + +import consulo.annotation.component.ActionImpl; +import consulo.annotation.component.ActionParentRef; +import consulo.annotation.component.ActionRef; +import consulo.annotation.component.ActionRefAnchor; +import consulo.application.dumb.DumbAware; +import consulo.platform.base.localize.ActionLocalize; +import consulo.ui.ex.action.DefaultActionGroup; +import consulo.ui.ex.action.IdeActions; + +/** + * @author UNV + * @since 2025-09-06 + */ +@ActionImpl( + id = "ToggleBreakpointAction", + children = { + @ActionRef(type = ToggleMethodBreakpointAction.class), + @ActionRef(type = ToggleFieldBreakpointAction.class) + }, + parents = @ActionParentRef( + value = @ActionRef(id = "DebugMainMenu"), + anchor = ActionRefAnchor.AFTER, + relatedToAction = @ActionRef(id = IdeActions.ACTION_TOGGLE_LINE_BREAKPOINT) + ) +) +public class ToggleBreakpointGroup extends DefaultActionGroup implements DumbAware { + public ToggleBreakpointGroup() { + super(ActionLocalize.groupDebugmainmenuText(), false); + } +} diff --git a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ToggleFieldBreakpointAction.java b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ToggleFieldBreakpointAction.java index 6d9b7733d..42a1235c6 100644 --- a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ToggleFieldBreakpointAction.java +++ b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ToggleFieldBreakpointAction.java @@ -35,6 +35,8 @@ import com.intellij.java.language.impl.JavaFileType; import com.intellij.java.language.psi.PsiClass; import com.intellij.java.language.psi.PsiField; +import consulo.annotation.access.RequiredReadAction; +import consulo.annotation.component.ActionImpl; import consulo.codeEditor.Editor; import consulo.dataContext.DataContext; import consulo.document.Document; @@ -57,7 +59,20 @@ import jakarta.annotation.Nonnull; import jakarta.annotation.Nullable; +import java.util.Set; + +@ActionImpl(id = "ToggleFieldBreakpoint") public class ToggleFieldBreakpointAction extends AnAction { + private static final Set POPUP_PLACES = Set.of( + ActionPlaces.PROJECT_VIEW_POPUP, + ActionPlaces.STRUCTURE_VIEW_POPUP, + ActionPlaces.FAVORITES_VIEW_POPUP + ); + + public ToggleFieldBreakpointAction() { + super(JavaDebuggerLocalize.actionToggleFieldBreakpointText(), JavaDebuggerLocalize.actionToggleFieldBreakpointDescription()); + } + @Override @RequiredUIAccess public void actionPerformed(AnActionEvent e) { @@ -111,9 +126,7 @@ public void update(@Nonnull AnActionEvent event) { boolean toEnable = place != null; Presentation presentation = event.getPresentation(); - if (ActionPlaces.PROJECT_VIEW_POPUP.equals(event.getPlace()) - || ActionPlaces.STRUCTURE_VIEW_POPUP.equals(event.getPlace()) - || ActionPlaces.FAVORITES_VIEW_POPUP.equals(event.getPlace())) { + if (POPUP_PLACES.contains(event.getPlace())) { presentation.setVisible(toEnable); } else if (DebuggerAction.isContextView(event)) { @@ -123,7 +136,7 @@ else if (DebuggerAction.isContextView(event)) { Document document = PsiDocumentManager.getInstance(project).getDocument(place.getFile()); if (document != null) { int offset = place.getOffset(); - BreakpointManager breakpointManager = (DebuggerManagerEx.getInstanceEx(project)).getBreakpointManager(); + BreakpointManager breakpointManager = DebuggerManagerEx.getInstanceEx(project).getBreakpointManager(); Breakpoint fieldBreakpoint = offset >= 0 ? breakpointManager.findBreakpoint(document, offset, FieldBreakpoint.CATEGORY) : null; if (fieldBreakpoint != null) { @@ -137,15 +150,14 @@ else if (DebuggerAction.isContextView(event)) { } @Nullable + @RequiredReadAction public static SourcePosition getPlace(AnActionEvent event) { DataContext dataContext = event.getDataContext(); Project project = event.getData(Project.KEY); if (project == null) { return null; } - if (ActionPlaces.PROJECT_VIEW_POPUP.equals(event.getPlace()) - || ActionPlaces.STRUCTURE_VIEW_POPUP.equals(event.getPlace()) - || ActionPlaces.FAVORITES_VIEW_POPUP.equals(event.getPlace())) { + if (POPUP_PLACES.contains(event.getPlace())) { return event.getData(PsiElement.KEY) instanceof PsiField field ? SourcePosition.createFromElement(field) : null; } @@ -178,14 +190,17 @@ public void threadAction() { if (DebuggerAction.isContextView(event)) { DebuggerTree tree = event.getData(DebuggerTree.DATA_KEY); if (tree != null && tree.getSelectionPath() != null) { - DebuggerTreeNodeImpl node = ((DebuggerTreeNodeImpl)tree.getSelectionPath().getLastPathComponent()); + DebuggerTreeNodeImpl node = (DebuggerTreeNodeImpl) tree.getSelectionPath().getLastPathComponent(); if (node != null && node.getDescriptor() instanceof FieldDescriptorImpl fieldDescriptor) { Field field = fieldDescriptor.getField(); DebuggerSession session = tree.getDebuggerContext().getDebuggerSession(); - PsiClass psiClass = DebuggerUtils.findClass(field.declaringType().name(), project, (session != null) - ? session.getSearchScope() : GlobalSearchScope.allScope(project)); + PsiClass psiClass = DebuggerUtils.findClass( + field.declaringType().name(), + project, + session != null ? session.getSearchScope() : GlobalSearchScope.allScope(project) + ); if (psiClass != null) { - psiClass = (PsiClass)psiClass.getNavigationElement(); + psiClass = (PsiClass) psiClass.getNavigationElement(); PsiField psiField = psiClass.findFieldByName(field.name(), true); if (psiField != null) { return SourcePosition.createFromElement(psiField); diff --git a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ToggleMethodBreakpointAction.java b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ToggleMethodBreakpointAction.java index 8c06a06c4..8c7b35646 100644 --- a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ToggleMethodBreakpointAction.java +++ b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ToggleMethodBreakpointAction.java @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package com.intellij.java.debugger.impl.actions; import com.intellij.java.debugger.impl.DebuggerManagerEx; @@ -21,9 +20,11 @@ import com.intellij.java.debugger.impl.ui.breakpoints.Breakpoint; import com.intellij.java.debugger.impl.ui.breakpoints.BreakpointManager; import com.intellij.java.debugger.impl.ui.breakpoints.MethodBreakpoint; +import com.intellij.java.debugger.localize.JavaDebuggerLocalize; import com.intellij.java.language.impl.JavaClassFileType; import com.intellij.java.language.impl.JavaFileType; import com.intellij.java.language.psi.PsiMethod; +import consulo.annotation.component.ActionImpl; import consulo.codeEditor.Editor; import consulo.document.Document; import consulo.document.util.DocumentUtil; @@ -42,7 +43,21 @@ import jakarta.annotation.Nonnull; import jakarta.annotation.Nullable; +import java.util.Set; + +@ActionImpl(id = "ToggleMethodBreakpoint") public class ToggleMethodBreakpointAction extends AnAction { + private static final Set POPUP_PLACES = Set.of( + ActionPlaces.PROJECT_VIEW_POPUP, + ActionPlaces.STRUCTURE_VIEW_POPUP, + ActionPlaces.FAVORITES_VIEW_POPUP, + ActionPlaces.NAVIGATION_BAR_POPUP + ); + + public ToggleMethodBreakpointAction() { + super(JavaDebuggerLocalize.actionToggleMethodBreakpointText(), JavaDebuggerLocalize.actionToggleMethodBreakpointDescription()); + } + @Override @RequiredUIAccess public void update(@Nonnull AnActionEvent event) { @@ -89,10 +104,7 @@ private static PlaceInDocument getPlace(AnActionEvent event) { Document document = null; String place = event.getPlace(); - if (ActionPlaces.PROJECT_VIEW_POPUP.equals(place) - || ActionPlaces.STRUCTURE_VIEW_POPUP.equals(place) - || ActionPlaces.FAVORITES_VIEW_POPUP.equals(place) - || ActionPlaces.NAVIGATION_BAR_POPUP.equals(place)) { + if (POPUP_PLACES.contains(place)) { if (event.getData(PsiElement.KEY) instanceof PsiMethod m) { PsiFile containingFile = m.getContainingFile(); if (containingFile != null) { diff --git a/java-debugger-impl/src/main/java/module-info.java b/java-debugger-impl/src/main/java/module-info.java index b22d66301..22f429f8c 100644 --- a/java-debugger-impl/src/main/java/module-info.java +++ b/java-debugger-impl/src/main/java/module-info.java @@ -1,57 +1,57 @@ /** * @author VISTALL - * @since 05/12/2022 + * @since 2022-12-05 */ open module consulo.java.debugger.impl { - requires transitive consulo.java.debugger.api; - requires consulo.java.language.impl; - requires consulo.java.indexing.impl; - requires consulo.java.analysis.impl; - requires consulo.java.compiler.api; - requires consulo.java.rt.common; + requires transitive consulo.java.debugger.api; + requires consulo.java.language.impl; + requires consulo.java.indexing.impl; + requires consulo.java.analysis.impl; + requires consulo.java.compiler.api; + requires consulo.java.rt.common; - // TODO remove in future - requires java.desktop; - // TODO remove in future - requires consulo.ide.impl; + // TODO remove in future + requires java.desktop; + // TODO remove in future + requires consulo.ide.impl; - requires one.util.streamex; + requires one.util.streamex; - requires consulo.internal.jdi; - requires asm; - requires asm.analysis; - requires asm.commons; - requires asm.tree; - requires asm.util; + requires consulo.internal.jdi; + requires asm; + requires asm.analysis; + requires asm.commons; + requires asm.tree; + requires asm.util; - requires it.unimi.dsi.fastutil; + requires it.unimi.dsi.fastutil; - exports com.intellij.java.debugger.impl; - exports com.intellij.java.debugger.impl.actions; - exports com.intellij.java.debugger.impl.apiAdapters; - exports com.intellij.java.debugger.impl.breakpoints; - exports com.intellij.java.debugger.impl.breakpoints.properties; - exports com.intellij.java.debugger.impl.classFilter; - exports com.intellij.java.debugger.impl.codeinsight; - exports com.intellij.java.debugger.impl.descriptors.data; - exports com.intellij.java.debugger.impl.engine; - exports com.intellij.java.debugger.impl.engine.evaluation; - exports com.intellij.java.debugger.impl.engine.evaluation.expression; - exports com.intellij.java.debugger.impl.engine.events; - exports com.intellij.java.debugger.impl.engine.requests; - exports com.intellij.java.debugger.impl.externalSystem; - exports com.intellij.java.debugger.impl.jdi; - exports com.intellij.java.debugger.impl.settings; - exports com.intellij.java.debugger.impl.ui; - exports com.intellij.java.debugger.impl.ui.breakpoints; - exports com.intellij.java.debugger.impl.ui.impl; - exports com.intellij.java.debugger.impl.ui.impl.nodes; - exports com.intellij.java.debugger.impl.ui.impl.tree; - exports com.intellij.java.debugger.impl.ui.impl.watch; - exports com.intellij.java.debugger.impl.ui.tree; - exports com.intellij.java.debugger.impl.ui.tree.actions; - exports com.intellij.java.debugger.impl.ui.tree.render; - exports consulo.java.debugger.impl; - exports consulo.java.debugger.impl.apiAdapters; - exports consulo.java.debugger.impl.settings; + exports com.intellij.java.debugger.impl; + exports com.intellij.java.debugger.impl.actions; + exports com.intellij.java.debugger.impl.apiAdapters; + exports com.intellij.java.debugger.impl.breakpoints; + exports com.intellij.java.debugger.impl.breakpoints.properties; + exports com.intellij.java.debugger.impl.classFilter; + exports com.intellij.java.debugger.impl.codeinsight; + exports com.intellij.java.debugger.impl.descriptors.data; + exports com.intellij.java.debugger.impl.engine; + exports com.intellij.java.debugger.impl.engine.evaluation; + exports com.intellij.java.debugger.impl.engine.evaluation.expression; + exports com.intellij.java.debugger.impl.engine.events; + exports com.intellij.java.debugger.impl.engine.requests; + exports com.intellij.java.debugger.impl.externalSystem; + exports com.intellij.java.debugger.impl.jdi; + exports com.intellij.java.debugger.impl.settings; + exports com.intellij.java.debugger.impl.ui; + exports com.intellij.java.debugger.impl.ui.breakpoints; + exports com.intellij.java.debugger.impl.ui.impl; + exports com.intellij.java.debugger.impl.ui.impl.nodes; + exports com.intellij.java.debugger.impl.ui.impl.tree; + exports com.intellij.java.debugger.impl.ui.impl.watch; + exports com.intellij.java.debugger.impl.ui.tree; + exports com.intellij.java.debugger.impl.ui.tree.actions; + exports com.intellij.java.debugger.impl.ui.tree.render; + exports consulo.java.debugger.impl; + exports consulo.java.debugger.impl.apiAdapters; + exports consulo.java.debugger.impl.settings; } \ No newline at end of file diff --git a/plugin/src/main/resources/LOCALIZE-LIB/en_US/consulo.java.JavaLocalize.yaml b/plugin/src/main/resources/LOCALIZE-LIB/en_US/consulo.java.JavaLocalize.yaml index d1a7ecd72..793ad6e51 100644 --- a/plugin/src/main/resources/LOCALIZE-LIB/en_US/consulo.java.JavaLocalize.yaml +++ b/plugin/src/main/resources/LOCALIZE-LIB/en_US/consulo.java.JavaLocalize.yaml @@ -124,14 +124,6 @@ action.SliceForward.text: text: Analyze Data Flow _from Here action.SliceSliceForward.description: text: Search for values escaped from this location -action.ToggleFieldBreakpoint.description: - text: Toggle field watchpoint for the field at caret -action.ToggleFieldBreakpoint.text: - text: Toggle _Field Watchpoint -action.ToggleMethodBreakpoint.description: - text: Toggle method breakpoint for the method at caret -action.ToggleMethodBreakpoint.text: - text: Toggle _Method Breakpoint action.TurnRefsToSuper.description: text: Change usages of a class to those of its superclass or interface action.TurnRefsToSuper.text: diff --git a/plugin/src/main/resources/META-INF/plugin.xml b/plugin/src/main/resources/META-INF/plugin.xml index 8bc40dd12..e06a733e1 100644 --- a/plugin/src/main/resources/META-INF/plugin.xml +++ b/plugin/src/main/resources/META-INF/plugin.xml @@ -123,20 +123,6 @@ - - - - - - - - - - - - - -