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 512af9a1f5..43997b5228 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 @@ -4,6 +4,8 @@ action.auto.variables.mode: text: Auto-Variables Mode action.auto.variables.mode.description: text: Show only variables used near the execution point +action.create.renderer.text: + text: Create... action.disable.text: text: Disable action.enable.text: @@ -20,6 +22,8 @@ action.kill.process.text: text: Kill Process action.maximizeContent.text: text: '' +action.mute.renderers.text: + text: Mute Renderers action.remove.text: text: Remove action.remove.watch.text: @@ -531,6 +535,8 @@ frame.panel.frames.not.available: text: Frames not available for unsuspended thread get.jpda.dialog.title: text: JPDA Libraries Missing +group.java.debugger.actions.text: + text: Java hotswap.dialog.hang.question: text: Would you like to reload changed classes anyway? hotswap.dialog.hang.warning: diff --git a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/AdjustArrayRangeAction.java b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/AdjustArrayRangeAction.java new file mode 100644 index 0000000000..59bf535246 --- /dev/null +++ b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/AdjustArrayRangeAction.java @@ -0,0 +1,53 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * 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.DebuggerContextImpl; +import com.intellij.java.debugger.impl.ui.tree.render.ArrayRenderer; +import consulo.annotation.component.ActionImpl; +import consulo.execution.debug.frame.XValueNode; +import consulo.execution.debug.localize.XDebuggerLocalize; +import consulo.ide.setting.ShowSettingsUtil; +import consulo.localize.LocalizeValue; +import consulo.ui.annotation.RequiredUIAccess; +import consulo.util.concurrent.AsyncResult; +import jakarta.annotation.Nonnull; + +@ActionImpl(id = "Debugger.AdjustArrayRange") +public class AdjustArrayRangeAction extends ArrayAction { + public AdjustArrayRangeAction() { + super(XDebuggerLocalize.actionAdjustArrayRangeText()); + } + + @Nonnull + @Override + @RequiredUIAccess + protected AsyncResult createNewRenderer( + XValueNode node, + ArrayRenderer original, + @Nonnull DebuggerContextImpl debuggerContext, + LocalizeValue title + ) { + ArrayRenderer clonedRenderer = original.clone(); + clonedRenderer.setForced(true); + AsyncResult result = AsyncResult.undefined(); + AsyncResult showResult = ShowSettingsUtil.getInstance() + .editConfigurable(debuggerContext.getProject(), new NamedArrayConfigurable(title, clonedRenderer)); + showResult.doWhenDone(() -> result.setDone(clonedRenderer)); + showResult.doWhenRejected((Runnable)result::setRejected); + return result; + } +} diff --git a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ArrayAction.java b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ArrayAction.java index 180389aaed..85362f38f4 100644 --- a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ArrayAction.java +++ b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ArrayAction.java @@ -41,6 +41,10 @@ import java.util.List; public abstract class ArrayAction extends DebuggerAction { + protected ArrayAction(@Nonnull LocalizeValue text) { + super(text); + } + @Override @RequiredUIAccess public void actionPerformed(@Nonnull AnActionEvent e) { @@ -163,7 +167,7 @@ private static String createNodeTitle(String prefix, DebuggerTreeNodeImpl node) return prefix; } - private static class NamedArrayConfigurable extends ArrayRendererConfigurable implements Configurable { + protected static class NamedArrayConfigurable extends ArrayRendererConfigurable implements Configurable { private final LocalizeValue myTitle; public NamedArrayConfigurable(LocalizeValue title, ArrayRenderer renderer) { @@ -182,39 +186,4 @@ public String getHelpTopic() { return null; } } - - public static class AdjustArrayRangeAction extends ArrayAction { - @Nonnull - @Override - @RequiredUIAccess - protected AsyncResult createNewRenderer( - XValueNode node, - ArrayRenderer original, - @Nonnull DebuggerContextImpl debuggerContext, - LocalizeValue title - ) { - ArrayRenderer clonedRenderer = original.clone(); - clonedRenderer.setForced(true); - AsyncResult result = AsyncResult.undefined(); - AsyncResult showResult = ShowSettingsUtil.getInstance() - .editConfigurable(debuggerContext.getProject(), new NamedArrayConfigurable(title, clonedRenderer)); - showResult.doWhenDone(() -> result.setDone(clonedRenderer)); - showResult.doWhenRejected((Runnable)result::setRejected); - return result; - } - } - - public static class FilterArrayAction extends ArrayAction { - @Nonnull - @Override - protected AsyncResult createNewRenderer( - XValueNode node, - ArrayRenderer original, - @Nonnull DebuggerContextImpl debuggerContext, - LocalizeValue title - ) { - //TODO [VISTALL] ArrayFilterInplaceEditor.editParent(node); - return AsyncResult.rejected(); - } - } } diff --git a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/AutoRendererAction.java b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/AutoRendererAction.java index 957a3e5899..8d2241b583 100644 --- a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/AutoRendererAction.java +++ b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/AutoRendererAction.java @@ -19,11 +19,18 @@ import com.intellij.java.debugger.impl.engine.events.DebuggerContextCommandImpl; import com.intellij.java.debugger.impl.ui.impl.watch.DebuggerTreeNodeImpl; import com.intellij.java.debugger.impl.ui.impl.watch.ValueDescriptorImpl; +import consulo.annotation.component.ActionImpl; +import consulo.execution.debug.localize.XDebuggerLocalize; import consulo.ui.annotation.RequiredUIAccess; import consulo.ui.ex.action.AnAction; import consulo.ui.ex.action.AnActionEvent; +@ActionImpl(id = "Debugger.AutoRenderer") public class AutoRendererAction extends AnAction { + public AutoRendererAction() { + super(XDebuggerLocalize.actionAutoRendererText()); + } + @Override @RequiredUIAccess public void actionPerformed(AnActionEvent e) { diff --git a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/CreateRendererAction.java b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/CreateRendererAction.java index 5c67f11e1c..f2fba1e028 100644 --- a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/CreateRendererAction.java +++ b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/CreateRendererAction.java @@ -23,6 +23,7 @@ import com.intellij.java.debugger.impl.settings.UserRenderersConfigurable; import com.intellij.java.debugger.impl.ui.tree.render.NodeRenderer; import com.intellij.java.debugger.localize.JavaDebuggerLocalize; +import consulo.annotation.component.ActionImpl; import consulo.application.Application; import consulo.configurable.IdeaConfigurableBase; import consulo.ide.impl.idea.openapi.options.ex.SingleConfigurableEditor; @@ -36,7 +37,12 @@ import java.util.List; +@ActionImpl(id = "Debugger.CreateRenderer") public class CreateRendererAction extends AnAction { + public CreateRendererAction() { + super(JavaDebuggerLocalize.actionCreateRendererText()); + } + @Override @RequiredUIAccess public void update(@Nonnull AnActionEvent e) { diff --git a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/CustomizeContextViewAction.java b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/CustomizeContextViewAction.java index 31c0472b06..3fa53537d8 100644 --- a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/CustomizeContextViewAction.java +++ b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/CustomizeContextViewAction.java @@ -19,6 +19,9 @@ import com.intellij.java.debugger.impl.settings.JavaDebuggerSettings; import com.intellij.java.debugger.impl.settings.NodeRendererSettings; import com.intellij.java.debugger.localize.JavaDebuggerLocalize; +import consulo.annotation.component.ActionImpl; +import consulo.annotation.component.ActionParentRef; +import consulo.annotation.component.ActionRef; import consulo.configurable.Configurable; import consulo.configurable.ConfigurationException; import consulo.disposer.Disposable; @@ -33,51 +36,67 @@ import consulo.ui.annotation.RequiredUIAccess; import consulo.ui.ex.action.AnActionEvent; import consulo.ui.ex.action.DumbAwareAction; +import jakarta.annotation.Nonnull; import javax.swing.*; import javax.swing.border.EmptyBorder; import java.util.List; +@ActionImpl( + id = "Debugger.CustomizeContextView", + parents = { + @ActionParentRef(@ActionRef(id = "XDebugger.Variables.Tree.Popup")), + @ActionParentRef(@ActionRef(id = "XDebugger.Watches.Tree.Popup")) + } +) public class CustomizeContextViewAction extends DumbAwareAction { + public CustomizeContextViewAction() { + super(XDebuggerLocalize.actionCustomizeContextViewText()); + } + @Override @RequiredUIAccess public void actionPerformed(AnActionEvent e) { Project project = e.getData(Project.KEY); Disposable disposable = Disposable.newDisposable(); - SingleConfigurableEditor editor = new SingleConfigurableEditor(project, new TabbedConfigurable(disposable) { - @Override - protected List createConfigurables() { - return JavaDebuggerSettings.createDataViewsConfigurable(); - } + SingleConfigurableEditor editor = new SingleConfigurableEditor( + project, + new TabbedConfigurable(disposable) { + @Override + protected List createConfigurables() { + return JavaDebuggerSettings.createDataViewsConfigurable(); + } - @Override - @RequiredUIAccess - public void apply() throws ConfigurationException { - super.apply(); - NodeRendererSettings.getInstance().fireRenderersChanged(); - } + @Override + @RequiredUIAccess + public void apply() throws ConfigurationException { + super.apply(); + NodeRendererSettings.getInstance().fireRenderersChanged(); + } - @Override - public LocalizeValue getDisplayName() { - return JavaDebuggerLocalize.titleCustomizeDataViews(); - } + @Nonnull + @Override + public LocalizeValue getDisplayName() { + return JavaDebuggerLocalize.titleCustomizeDataViews(); + } - @Override - public String getHelpTopic() { - return "reference.debug.customize.data.view"; - } + @Override + public String getHelpTopic() { + return "reference.debug.customize.data.view"; + } - @Override - @RequiredUIAccess - protected void createConfigurableTabs() { - for (Configurable configurable : getConfigurables()) { - JComponent component = configurable.createComponent(disposable); - assert component != null; - component.setBorder(new EmptyBorder(8, 8, 8, 8)); - myTabbedPane.addTab(configurable.getDisplayName().get(), component); + @Override + @RequiredUIAccess + protected void createConfigurableTabs() { + for (Configurable configurable : getConfigurables()) { + JComponent component = configurable.createComponent(disposable); + assert component != null; + component.setBorder(new EmptyBorder(8, 8, 8, 8)); + myTabbedPane.addTab(configurable.getDisplayName().get(), component); + } } } - }); + ); Disposer.register(editor.getDisposable(), disposable); editor.show(); } @@ -85,16 +104,9 @@ protected void createConfigurableTabs() { @Override @RequiredUIAccess public void update(AnActionEvent e) { - e.getPresentation().setTextValue(XDebuggerLocalize.actionCustomizeContextViewText()); - Project project = e.getData(Project.KEY); XDebuggerManager debuggerManager = project == null ? null : XDebuggerManager.getInstance(project); XDebugSession currentSession = debuggerManager == null ? null : debuggerManager.getCurrentSession(); - if (currentSession != null) { - e.getPresentation().setEnabledAndVisible(currentSession.getDebugProcess() instanceof JavaDebugProcess); - } - else { - e.getPresentation().setEnabledAndVisible(false); - } + e.getPresentation().setEnabledAndVisible(currentSession != null && currentSession.getDebugProcess() instanceof JavaDebugProcess); } } diff --git a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/CustomizeThreadsViewAction.java b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/CustomizeThreadsViewAction.java index 2f0886f8c1..8047e3f9ce 100644 --- a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/CustomizeThreadsViewAction.java +++ b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/CustomizeThreadsViewAction.java @@ -17,6 +17,9 @@ import com.intellij.java.debugger.impl.settings.ThreadsViewSettings; import com.intellij.java.debugger.localize.JavaDebuggerLocalize; +import consulo.annotation.component.ActionImpl; +import consulo.annotation.component.ActionParentRef; +import consulo.annotation.component.ActionRef; import consulo.execution.debug.localize.XDebuggerLocalize; import consulo.ide.setting.ShowSettingsUtil; import consulo.java.debugger.impl.settings.ThreadsViewConfigurable; @@ -29,7 +32,12 @@ * @author lex * @since 2003-09-26 */ +@ActionImpl(id = "Debugger.CustomizeThreadsView", parents = @ActionParentRef(@ActionRef(id = "XDebugger.Frames.Tree.Popup"))) public class CustomizeThreadsViewAction extends DebuggerAction { + public CustomizeThreadsViewAction() { + super(XDebuggerLocalize.actionCustomizeThreadsViewText()); + } + @Override @RequiredUIAccess public void actionPerformed(@Nonnull AnActionEvent e) { @@ -41,11 +49,4 @@ public void actionPerformed(@Nonnull AnActionEvent e) { new ThreadsViewConfigurable(ThreadsViewSettings::getInstance) ); } - - @Override - @RequiredUIAccess - public void update(@Nonnull AnActionEvent e) { - e.getPresentation().setVisible(true); - e.getPresentation().setTextValue(XDebuggerLocalize.actionCustomizeThreadsViewText()); - } } diff --git a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/DebuggerAction.java b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/DebuggerAction.java index 4cf8c165c3..9395e47cf8 100644 --- a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/DebuggerAction.java +++ b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/DebuggerAction.java @@ -28,6 +28,7 @@ import consulo.execution.debug.XDebugSession; import consulo.execution.debug.frame.XValueNode; import consulo.execution.debug.ui.XValueTree; +import consulo.localize.LocalizeValue; import consulo.project.Project; import consulo.ui.ex.action.ActionManager; import consulo.ui.ex.action.AnAction; @@ -42,6 +43,7 @@ import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.List; +import java.util.Set; /** * Class DebuggerAction @@ -49,8 +51,19 @@ * @author Jeka */ public abstract class DebuggerAction extends AnAction { + private static final Set POPUP_PLACES = Set.of( + DebuggerActions.EVALUATION_DIALOG_POPUP, + DebuggerActions.FRAME_PANEL_POPUP, + DebuggerActions.WATCH_PANEL_POPUP, + DebuggerActions.INSPECT_PANEL_POPUP + ); + private static final DebuggerTreeNodeImpl[] EMPTY_TREE_NODE_ARRAY = new DebuggerTreeNodeImpl[0]; + protected DebuggerAction(@Nonnull LocalizeValue text) { + super(text); + } + @Nullable public static DebuggerTree getTree(DataContext dataContext) { return dataContext.getData(DebuggerTree.DATA_KEY); @@ -117,10 +130,7 @@ public static DebuggerStateManager getContextManager(DataContext dataContext) { } public static boolean isContextView(AnActionEvent e) { - return DebuggerActions.EVALUATION_DIALOG_POPUP.equals(e.getPlace()) || - DebuggerActions.FRAME_PANEL_POPUP.equals(e.getPlace()) || - DebuggerActions.WATCH_PANEL_POPUP.equals(e.getPlace()) || - DebuggerActions.INSPECT_PANEL_POPUP.equals(e.getPlace()); + return POPUP_PLACES.contains(e.getPlace()); } public static Disposable installEditAction(JTree tree, String actionName) { @@ -148,7 +158,7 @@ protected boolean onDoubleClick(MouseEvent e) { public static boolean isFirstStart(AnActionEvent event) { //noinspection HardCodedStringLiteral - String key = "initalized"; + String key = "initialized"; if (event.getPresentation().getClientProperty(key) != null) { return false; } diff --git a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/EditFrameSourceAction.java b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/EditFrameSourceAction.java index 4f67ec4b41..57ecc73e50 100644 --- a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/EditFrameSourceAction.java +++ b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/EditFrameSourceAction.java @@ -15,6 +15,8 @@ */ package com.intellij.java.debugger.impl.actions; +import consulo.annotation.component.ActionImpl; +import consulo.execution.debug.localize.XDebuggerLocalize; import consulo.ui.annotation.RequiredUIAccess; import consulo.ui.ex.action.ActionManager; import consulo.ui.ex.action.AnActionEvent; @@ -23,12 +25,18 @@ /** * @author lex */ +@ActionImpl(id = DebuggerActions.EDIT_FRAME_SOURCE) public class EditFrameSourceAction extends GotoFrameSourceAction { + public EditFrameSourceAction() { + super(XDebuggerLocalize.actionEditFrameSourceText()); + } + @Override @RequiredUIAccess public void update(AnActionEvent e) { super.update(e); - e.getPresentation() - .setTextValue(ActionManager.getInstance().getAction(IdeActions.ACTION_EDIT_SOURCE).getTemplatePresentation().getTextValue()); + e.getPresentation().setTextValue( + ActionManager.getInstance().getAction(IdeActions.ACTION_EDIT_SOURCE).getTemplatePresentation().getTextValue() + ); } } diff --git a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/EditSourceAction.java b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/EditSourceAction.java index 59cc8b1c78..dbd16d4ddb 100644 --- a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/EditSourceAction.java +++ b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/EditSourceAction.java @@ -26,7 +26,9 @@ import com.intellij.java.debugger.impl.ui.impl.watch.DebuggerTreeNodeImpl; import com.intellij.java.debugger.impl.ui.impl.watch.NodeDescriptorImpl; import com.intellij.java.debugger.impl.ui.impl.watch.WatchItemDescriptor; -import consulo.application.AccessRule; +import consulo.annotation.component.ActionImpl; +import consulo.application.ReadAction; +import consulo.execution.debug.localize.XDebuggerLocalize; import consulo.project.Project; import consulo.ui.annotation.RequiredUIAccess; import consulo.ui.ex.action.ActionManager; @@ -34,7 +36,12 @@ import consulo.ui.ex.action.IdeActions; import consulo.ui.ex.action.Presentation; +@ActionImpl(id = DebuggerActions.EDIT_NODE_SOURCE) public class EditSourceAction extends DebuggerAction { + public EditSourceAction() { + super(XDebuggerLocalize.actionEditNodeSourceText()); + } + @Override @RequiredUIAccess public void actionPerformed(AnActionEvent e) { @@ -87,8 +94,8 @@ private static SourcePosition getSourcePosition(DebuggerTreeNodeImpl selectedNod } NodeDescriptorImpl nodeDescriptor1 = nodeDescriptor; - return AccessRule.read(() -> SourcePositionProvider.getSourcePosition(nodeDescriptor1, project, context)); - } + return ReadAction.compute(() -> SourcePositionProvider.getSourcePosition(nodeDescriptor1, project, context)); + } @Override @RequiredUIAccess @@ -114,7 +121,8 @@ public void threadAction() { else { presentation.setEnabled(false); } - e.getPresentation() - .setTextValue(ActionManager.getInstance().getAction(IdeActions.ACTION_EDIT_SOURCE).getTemplatePresentation().getTextValue()); + e.getPresentation().setTextValue( + ActionManager.getInstance().getAction(IdeActions.ACTION_EDIT_SOURCE).getTemplatePresentation().getTextValue() + ); } } diff --git a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/FreezeThreadAction.java b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/FreezeThreadAction.java index 9973ff64df..ff5d2478b3 100644 --- a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/FreezeThreadAction.java +++ b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/FreezeThreadAction.java @@ -20,15 +20,21 @@ import com.intellij.java.debugger.impl.DebuggerContextImpl; import com.intellij.java.debugger.impl.jdi.ThreadReferenceProxyImpl; import com.intellij.java.debugger.impl.ui.impl.watch.DebuggerTreeNodeImpl; -import com.intellij.java.debugger.impl.ui.impl.watch.NodeDescriptorImpl; import com.intellij.java.debugger.impl.ui.impl.watch.ThreadDescriptorImpl; +import consulo.annotation.component.ActionImpl; +import consulo.execution.debug.localize.XDebuggerLocalize; import consulo.ui.annotation.RequiredUIAccess; import consulo.ui.ex.action.AnActionEvent; /** * @author lex */ +@ActionImpl(id = "Debugger.FreezeThread") public class FreezeThreadAction extends DebuggerAction { + public FreezeThreadAction() { + super(XDebuggerLocalize.actionFreezeThreadText()); + } + @Override @RequiredUIAccess public void actionPerformed(AnActionEvent e) { @@ -40,7 +46,7 @@ public void actionPerformed(AnActionEvent e) { DebugProcessImpl debugProcess = debuggerContext.getDebugProcess(); for (DebuggerTreeNodeImpl debuggerTreeNode : selectedNode) { - ThreadDescriptorImpl threadDescriptor = ((ThreadDescriptorImpl)debuggerTreeNode.getDescriptor()); + ThreadDescriptorImpl threadDescriptor = (ThreadDescriptorImpl) debuggerTreeNode.getDescriptor(); ThreadReferenceProxyImpl thread = threadDescriptor.getThreadReference(); if (!threadDescriptor.isFrozen()) { diff --git a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/GotoFrameSourceAction.java b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/GotoFrameSourceAction.java index 397635f1f1..3ab6d54469 100644 --- a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/GotoFrameSourceAction.java +++ b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/GotoFrameSourceAction.java @@ -18,15 +18,21 @@ import com.intellij.java.debugger.impl.DebuggerContextUtil; import com.intellij.java.debugger.impl.ui.impl.watch.DebuggerTreeNodeImpl; import com.intellij.java.debugger.impl.ui.impl.watch.StackFrameDescriptorImpl; +import consulo.localize.LocalizeValue; import consulo.ui.annotation.RequiredUIAccess; import consulo.ui.ex.action.AnActionEvent; import consulo.dataContext.DataContext; import consulo.project.Project; +import jakarta.annotation.Nonnull; /** * @author lex */ public abstract class GotoFrameSourceAction extends DebuggerAction { + protected GotoFrameSourceAction(@Nonnull LocalizeValue text) { + super(text); + } + @Override @RequiredUIAccess public void actionPerformed(AnActionEvent e) { @@ -34,6 +40,7 @@ public void actionPerformed(AnActionEvent e) { doAction(dataContext); } + @RequiredUIAccess protected static void doAction(DataContext dataContext) { Project project = dataContext.getData(Project.KEY); if (project == null) { @@ -59,6 +66,6 @@ private static StackFrameDescriptorImpl getStackFrameDescriptor(DataContext data if (selectedNode.getDescriptor() == null || !(selectedNode.getDescriptor() instanceof StackFrameDescriptorImpl)) { return null; } - return (StackFrameDescriptorImpl)selectedNode.getDescriptor(); + return (StackFrameDescriptorImpl) selectedNode.getDescriptor(); } } diff --git a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/InterruptThreadAction.java b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/InterruptThreadAction.java index e195a35a2a..61add9a86b 100644 --- a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/InterruptThreadAction.java +++ b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/InterruptThreadAction.java @@ -19,9 +19,9 @@ import com.intellij.java.debugger.impl.engine.events.DebuggerCommandImpl; import com.intellij.java.debugger.impl.jdi.ThreadReferenceProxyImpl; import com.intellij.java.debugger.impl.ui.impl.watch.DebuggerTreeNodeImpl; -import com.intellij.java.debugger.impl.ui.impl.watch.NodeDescriptorImpl; import com.intellij.java.debugger.impl.ui.impl.watch.ThreadDescriptorImpl; import com.intellij.java.debugger.localize.JavaDebuggerLocalize; +import consulo.annotation.component.ActionImpl; import consulo.ui.annotation.RequiredUIAccess; import consulo.ui.ex.action.AnActionEvent; import consulo.ui.ex.action.Presentation; @@ -33,7 +33,12 @@ * @author lex * @since 2003-09-26 */ +@ActionImpl(id = "Debugger.InterruptThread") public class InterruptThreadAction extends DebuggerAction { + public InterruptThreadAction() { + super(JavaDebuggerLocalize.actionInterruptThreadText()); + } + @Override @RequiredUIAccess public void actionPerformed(AnActionEvent e) { @@ -83,7 +88,7 @@ public void update(AnActionEvent e) { if (visible) { for (DebuggerTreeNodeImpl selectedNode : selectedNodes) { - ThreadDescriptorImpl threadDescriptor = (ThreadDescriptorImpl)selectedNode.getDescriptor(); + ThreadDescriptorImpl threadDescriptor = (ThreadDescriptorImpl) selectedNode.getDescriptor(); if (threadDescriptor.isFrozen()) { enabled = false; break; diff --git a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/JavaDebuggerActionsGroup.java b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/JavaDebuggerActionsGroup.java new file mode 100644 index 0000000000..ffd405a80e --- /dev/null +++ b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/JavaDebuggerActionsGroup.java @@ -0,0 +1,56 @@ +/* + * Copyright 2013-2025 consulo.io + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * 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.ui.tree.actions.ForceOnDemandRenderersAction; +import com.intellij.java.debugger.localize.JavaDebuggerLocalize; +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.execution.debug.XDebuggerActions; +import consulo.ui.ex.action.DefaultActionGroup; + +/** + * @author UNV + * @since 2025-10-15 + */ +@ActionImpl( + id = "JavaDebuggerActions", + children = { + @ActionRef(type = CustomizeContextViewAction.class), + @ActionRef(type = CustomizeThreadsViewAction.class), + @ActionRef(type = EditFrameSourceAction.class), + @ActionRef(type = EditSourceAction.class), + @ActionRef(type = JumpToObjectAction.class), + @ActionRef(id = DebuggerActions.POP_FRAME), + @ActionRef(type = ViewAsGroup.class), + @ActionRef(type = AdjustArrayRangeAction.class), + @ActionRef(type = ResumeThreadAction.class), + @ActionRef(type = FreezeThreadAction.class), + @ActionRef(type = InterruptThreadAction.class), + @ActionRef(type = CreateRendererAction.class), + @ActionRef(type = AutoRendererAction.class), + @ActionRef(type = ForceOnDemandRenderersAction.class) + }, + parents = @ActionParentRef(value = @ActionRef(id = XDebuggerActions.KEYMAP_GROUP), anchor = ActionRefAnchor.FIRST) +) +public class JavaDebuggerActionsGroup extends DefaultActionGroup implements DumbAware { + public JavaDebuggerActionsGroup() { + super(JavaDebuggerLocalize.groupJavaDebuggerActionsText(), false); + } +} diff --git a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/JavaValueGroup.java b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/JavaValueGroup.java new file mode 100644 index 0000000000..fd580f6dec --- /dev/null +++ b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/JavaValueGroup.java @@ -0,0 +1,43 @@ +/* + * Copyright 2013-2025 consulo.io + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * 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.ui.tree.actions.ForceOnDemandRenderersAction; +import consulo.annotation.component.ActionImpl; +import consulo.annotation.component.ActionParentRef; +import consulo.annotation.component.ActionRef; +import consulo.application.dumb.DumbAware; +import consulo.localize.LocalizeValue; +import consulo.ui.ex.action.DefaultActionGroup; + +/** + * @author UNV + * @since 2025-10-08 + */ +@ActionImpl( + id = "Java.XDebugger.ValueGroup", + children = { + @ActionRef(type = ViewAsGroup.class), + @ActionRef(type = AdjustArrayRangeAction.class), + @ActionRef(type = ForceOnDemandRenderersAction.class) + }, + parents = @ActionParentRef(value = @ActionRef(id = "XDebugger.ValueGroup")) +) +public class JavaValueGroup extends DefaultActionGroup implements DumbAware { + public JavaValueGroup() { + super(LocalizeValue.empty(), false); + } +} diff --git a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/JumpToObjectAction.java b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/JumpToObjectAction.java index 88400ed0a8..827ca6bfdd 100644 --- a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/JumpToObjectAction.java +++ b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/JumpToObjectAction.java @@ -18,7 +18,9 @@ import java.util.List; import java.util.function.Supplier; +import consulo.annotation.component.ActionImpl; import consulo.application.Application; +import consulo.execution.debug.localize.XDebuggerLocalize; import consulo.ui.annotation.RequiredUIAccess; import jakarta.annotation.Nonnull; import jakarta.annotation.Nullable; @@ -32,9 +34,7 @@ import com.intellij.java.debugger.impl.ui.impl.watch.NodeDescriptorImpl; import com.intellij.java.debugger.impl.ui.tree.ValueDescriptor; import consulo.ui.ex.action.AnActionEvent; -import consulo.application.ApplicationManager; import consulo.logging.Logger; -import consulo.application.util.function.Computable; import com.intellij.java.language.psi.PsiClass; import consulo.internal.com.sun.jdi.AbsentInformationException; import consulo.internal.com.sun.jdi.ArrayType; @@ -46,9 +46,14 @@ import consulo.internal.com.sun.jdi.Type; import consulo.internal.com.sun.jdi.Value; +@ActionImpl(id = "Debugger.EditTypeSource") public class JumpToObjectAction extends DebuggerAction { private static final Logger LOG = Logger.getInstance(JumpToObjectAction.class); + public JumpToObjectAction() { + super(XDebuggerLocalize.actionEditTypeSourceText()); + } + @Override @RequiredUIAccess public void actionPerformed(AnActionEvent e) { diff --git a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ResumeThreadAction.java b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ResumeThreadAction.java index a7d8645fc0..4810486b7c 100644 --- a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ResumeThreadAction.java +++ b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ResumeThreadAction.java @@ -20,9 +20,10 @@ import com.intellij.java.debugger.impl.engine.events.SuspendContextCommandImpl; import com.intellij.java.debugger.impl.jdi.ThreadReferenceProxyImpl; import com.intellij.java.debugger.impl.ui.impl.watch.DebuggerTreeNodeImpl; -import com.intellij.java.debugger.impl.ui.impl.watch.NodeDescriptorImpl; import com.intellij.java.debugger.impl.ui.impl.watch.ThreadDescriptorImpl; import com.intellij.java.debugger.localize.JavaDebuggerLocalize; +import consulo.annotation.component.ActionImpl; +import consulo.execution.debug.localize.XDebuggerLocalize; import consulo.internal.com.sun.jdi.request.EventRequest; import consulo.localize.LocalizeValue; import consulo.ui.annotation.RequiredUIAccess; @@ -33,7 +34,12 @@ * @author lex * @since 2003-09-26 */ +@ActionImpl(id = "Debugger.ResumeThread") public class ResumeThreadAction extends DebuggerAction { + public ResumeThreadAction() { + super(XDebuggerLocalize.actionResumeThreadText()); + } + @Override @RequiredUIAccess public void actionPerformed(AnActionEvent e) { diff --git a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ViewAsGroup.java b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ViewAsGroup.java index d7b02ae25d..afca887789 100644 --- a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ViewAsGroup.java +++ b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/actions/ViewAsGroup.java @@ -23,9 +23,11 @@ import com.intellij.java.debugger.impl.settings.NodeRendererSettings; import com.intellij.java.debugger.impl.ui.impl.watch.ValueDescriptorImpl; import com.intellij.java.debugger.impl.ui.tree.render.NodeRenderer; +import consulo.annotation.component.ActionImpl; import consulo.application.dumb.DumbAware; import consulo.execution.debug.frame.XValue; import consulo.execution.debug.frame.XValueNode; +import consulo.execution.debug.localize.XDebuggerLocalize; import consulo.execution.debug.ui.XValueTree; import consulo.logging.Logger; import consulo.ui.annotation.RequiredUIAccess; @@ -36,13 +38,14 @@ import java.util.ArrayList; import java.util.List; +@ActionImpl(id = "Debugger.ViewAsGroup") public class ViewAsGroup extends ActionGroup implements DumbAware { private static final Logger LOG = Logger.getInstance(ViewAsGroup.class); private volatile AnAction[] myChildren = AnAction.EMPTY_ARRAY; public ViewAsGroup() { - setPopup(true); + super(XDebuggerLocalize.actionViewAsGroupText(), true); } private static class RendererAction extends ToggleAction { @@ -68,6 +71,7 @@ public boolean isSelected(@Nonnull AnActionEvent e) { } @Override + @RequiredUIAccess public void setSelected(@Nonnull AnActionEvent e, boolean state) { if (!state) { return; @@ -138,7 +142,7 @@ private static AnAction[] calcChildren(List values) { List children = new ArrayList<>(); AnAction[] viewAsActions = - ((DefaultActionGroup)ActionManager.getInstance().getAction(DebuggerActions.REPRESENTATION_LIST)).getChildren(null); + ((DefaultActionGroup) ActionManager.getInstance().getAction(DebuggerActions.REPRESENTATION_LIST)).getChildren(null); for (AnAction viewAsAction : viewAsActions) { if (viewAsAction instanceof AutoRendererAction) { if (renderers.size() > 1) { diff --git a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/engine/DebugProcessImpl.java b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/engine/DebugProcessImpl.java index 428fa1233d..8d84f227e8 100644 --- a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/engine/DebugProcessImpl.java +++ b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/engine/DebugProcessImpl.java @@ -1860,7 +1860,7 @@ public void threadAction(@Nonnull SuspendContextImpl suspendContext) { () -> Messages.showMessageDialog( myProject, JavaDebuggerLocalize.errorPopStackframe(e.getLocalizedMessage()).get(), - ActionsBundle.message("action." + DebuggerActions.POP_FRAME + ".text"), + XDebuggerLocalize.actionPopFrameText().get(), UIUtil.getErrorIcon() ) ); diff --git a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/ui/tree/actions/ForceOnDemandRenderersAction.java b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/ui/tree/actions/ForceOnDemandRenderersAction.java index 0415b3611f..9b4bb4a39e 100644 --- a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/ui/tree/actions/ForceOnDemandRenderersAction.java +++ b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/ui/tree/actions/ForceOnDemandRenderersAction.java @@ -13,11 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package com.intellij.java.debugger.impl.ui.tree.actions; import com.intellij.java.debugger.impl.DebuggerUtilsEx; import com.intellij.java.debugger.impl.settings.NodeRendererSettings; +import com.intellij.java.debugger.localize.JavaDebuggerLocalize; +import consulo.annotation.component.ActionImpl; import consulo.application.dumb.DumbAware; import consulo.execution.debug.XDebugSession; import consulo.execution.debug.XDebuggerManager; @@ -27,22 +28,26 @@ import consulo.ui.ex.action.AnActionEvent; import consulo.ui.ex.action.ToggleAction; import consulo.util.dataholder.Key; +import jakarta.annotation.Nonnull; /** * from kotlin */ +@ActionImpl(id = "Debugger.MuteRenderers") public class ForceOnDemandRenderersAction extends ToggleAction implements DumbAware { private static final Key RENDERERS_ONDEMAND_FORCED = Key.create("RENDERERS_ONDEMAND_FORCED"); + public ForceOnDemandRenderersAction() { + super(JavaDebuggerLocalize.actionMuteRenderersText()); + } + private static XDebugSessionData getSessionData(AnActionEvent e) { XDebugSessionData data = e.getData(XDebugSessionData.DATA_KEY); - if (data == null) { - Project project = e.getData(Project.KEY); - if (project != null) { - XDebugSession session = XDebuggerManager.getInstance(project).getCurrentSession(); - if (session != null) { - data = ((XDebugSession) session).getSessionData(); - } + Project project = e.getData(Project.KEY); + if (data == null && project != null) { + XDebugSession session = XDebuggerManager.getInstance(project).getCurrentSession(); + if (session != null) { + data = session.getSessionData(); } } return data; @@ -53,17 +58,17 @@ public static boolean isForcedOnDemand(XDebugSession session) { } @Override - public boolean isSelected(AnActionEvent e) { + public boolean isSelected(@Nonnull AnActionEvent e) { return RENDERERS_ONDEMAND_FORCED.get(getSessionData(e), false); } @Override - public void setSelected(AnActionEvent e, boolean state) { + @RequiredUIAccess + public void setSelected(@Nonnull AnActionEvent e, boolean state) { RENDERERS_ONDEMAND_FORCED.set(getSessionData(e), state); NodeRendererSettings.getInstance().fireRenderersChanged(); } - @RequiredUIAccess @Override public void update(AnActionEvent e) { e.getPresentation().setEnabledAndVisible(DebuggerUtilsEx.isInJavaSession(e)); 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 4197f57dc7..dcf4960807 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 @@ -6,14 +6,6 @@ action.ConvertToInstanceMethod.description: text: Convert static method to instance method and correct all references action.ConvertToInstanceMethod.text: text: C_onvert To Instance Method... -action.Debugger.AdjustArrayRange.text: - text: Adjust Range... -action.Debugger.PopFrame.description: - text: Moves execution point back to the method call dropping current method frames from the stack -action.Debugger.PopFrame.text: - text: Drop _Frame -action.Debugger.ViewAsGroup.text: - text: View as action.EncapsulateFields.description: text: Replace direct access to fields in the selected class with use of accessor methods action.EncapsulateFields.text: diff --git a/plugin/src/main/resources/META-INF/plugin.xml b/plugin/src/main/resources/META-INF/plugin.xml index 9cce1909e7..0261db29ac 100644 --- a/plugin/src/main/resources/META-INF/plugin.xml +++ b/plugin/src/main/resources/META-INF/plugin.xml @@ -96,38 +96,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -