diff --git a/java/debugger/impl/debugger-impl.iml b/java/debugger/impl/debugger-impl.iml index 8b9d2657bee0..bb86d4ebc985 100644 --- a/java/debugger/impl/debugger-impl.iml +++ b/java/debugger/impl/debugger-impl.iml @@ -18,6 +18,7 @@ + diff --git a/java/debugger/impl/src/com/intellij/debugger/actions/JvmSmartStepIntoHandler.java b/java/debugger/impl/src/com/intellij/debugger/actions/JvmSmartStepIntoHandler.java index 8f5b109c459e..159b439c4c02 100644 --- a/java/debugger/impl/src/com/intellij/debugger/actions/JvmSmartStepIntoHandler.java +++ b/java/debugger/impl/src/com/intellij/debugger/actions/JvmSmartStepIntoHandler.java @@ -21,21 +21,28 @@ import com.intellij.debugger.engine.BasicStepMethodFilter; import com.intellij.debugger.engine.LambdaMethodFilter; import com.intellij.debugger.engine.MethodFilter; import com.intellij.debugger.impl.DebuggerSession; +import com.intellij.openapi.actionSystem.ActionManager; +import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.openapi.actionSystem.ShortcutSet; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.openapi.fileEditor.TextEditor; -import com.intellij.openapi.ui.popup.JBPopupFactory; +import com.intellij.openapi.keymap.KeymapUtil; import com.intellij.openapi.ui.popup.ListPopup; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiMethod; import com.intellij.ui.awt.RelativePoint; import com.intellij.ui.components.JBList; +import com.intellij.ui.popup.list.ListPopupImpl; +import com.intellij.xdebugger.impl.actions.XDebuggerActions; import com.intellij.xdebugger.impl.ui.DebuggerUIUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import javax.swing.*; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; +import java.awt.event.ActionEvent; import java.util.Arrays; import java.util.List; @@ -72,7 +79,28 @@ public abstract class JvmSmartStepIntoHandler { session.stepInto(true, createMethodFilter(chosenTarget)); } }); - final ListPopup popup = JBPopupFactory.getInstance().createListPopup(popupStep); + final ListPopup popup = new ListPopupImpl(popupStep) { + @Override + protected JComponent createContent() { + final AnAction stepIntoAction = ActionManager.getInstance().getAction(XDebuggerActions.STEP_INTO); + registerExtraHandleShortcuts(stepIntoAction.getShortcutSet()); + final AnAction smartStepIntoAction = ActionManager.getInstance().getAction(XDebuggerActions.SMART_STEP_INTO); + registerExtraHandleShortcuts(smartStepIntoAction.getShortcutSet()); + return super.createContent(); + } + + private void registerExtraHandleShortcuts(ShortcutSet shortcuts) { + KeyStroke stroke = KeymapUtil.getKeyStroke(shortcuts); + if (stroke != null) { + registerAction("handleSelection " + stroke, stroke, new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + handleSelect(true); + } + }); + } + } + }; popup.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent e) { popupStep.getScopeHighlighter().dropHighlight(); diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/actions/XDebuggerActions.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/actions/XDebuggerActions.java index 859638482aa6..50c5d8d2d8ac 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/actions/XDebuggerActions.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/actions/XDebuggerActions.java @@ -28,6 +28,7 @@ public interface XDebuggerActions { @NonNls String STEP_OVER = "StepOver"; @NonNls String STEP_INTO = "StepInto"; + @NonNls String SMART_STEP_INTO = "SmartStepInto"; @NonNls String FORCE_STEP_INTO = "ForceStepInto"; @NonNls String STEP_OUT = "StepOut";