java debugger cleanup

This commit is contained in:
Egor.Ushakov
2015-02-24 21:04:53 +03:00
parent e1523bb377
commit 370b81adb8
8 changed files with 4 additions and 673 deletions
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2009 JetBrains s.r.o.
* Copyright 2000-2015 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.
@@ -78,7 +78,7 @@ public class AddToWatchActionHandler extends DebuggerActionHandler {
if(session == null) {
return;
}
final MainWatchPanel watchPanel = DebuggerPanelsManager.getInstance(debuggerContext.getProject()).getWatchPanel();
final MainWatchPanel watchPanel = null;// DebuggerPanelsManager.getInstance(debuggerContext.getProject()).getWatchPanel();
if(watchPanel == null) {
return;
@@ -1,143 +0,0 @@
/*
* Copyright 2000-2009 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.
*/
/*
* Class EvaluateAction
* @author Jeka
*/
package com.intellij.debugger.actions;
import com.intellij.debugger.DebuggerInvocationUtil;
import com.intellij.debugger.engine.evaluation.CodeFragmentKind;
import com.intellij.debugger.engine.evaluation.EvaluateException;
import com.intellij.debugger.engine.evaluation.TextWithImports;
import com.intellij.debugger.engine.evaluation.TextWithImportsImpl;
import com.intellij.debugger.engine.events.DebuggerContextCommandImpl;
import com.intellij.debugger.impl.DebuggerContextImpl;
import com.intellij.debugger.impl.DebuggerSession;
import com.intellij.debugger.impl.DebuggerUtilsEx;
import com.intellij.debugger.settings.DebuggerSettings;
import com.intellij.debugger.ui.ExpressionEvaluationDialog;
import com.intellij.debugger.ui.StatementEvaluationDialog;
import com.intellij.debugger.ui.impl.watch.DebuggerTreeNodeExpression;
import com.intellij.debugger.ui.impl.watch.DebuggerTreeNodeImpl;
import com.intellij.debugger.ui.impl.watch.ValueDescriptorImpl;
import com.intellij.debugger.ui.impl.watch.WatchItemDescriptor;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.actionSystem.DataKeys;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.ui.Messages;
import com.intellij.xdebugger.impl.actions.DebuggerActionHandler;
import org.jetbrains.annotations.NotNull;
public class EvaluateActionHandler extends DebuggerActionHandler {
public boolean isEnabled(@NotNull final Project project, final AnActionEvent event) {
DebuggerContextImpl context = DebuggerAction.getDebuggerContext(event.getDataContext());
if(context != null) {
DebuggerSession debuggerSession = context.getDebuggerSession();
return debuggerSession != null && debuggerSession.isPaused();
}
return false;
}
public void perform(@NotNull final Project project, final AnActionEvent event) {
final DataContext dataContext = event.getDataContext();
final DebuggerContextImpl context = DebuggerAction.getDebuggerContext(dataContext);
if(context == null) {
return;
}
final Editor editor = event.getData(DataKeys.EDITOR);
TextWithImports editorText = DebuggerUtilsEx.getEditorText(editor);
if (editorText == null) {
final DebuggerTreeNodeImpl selectedNode = DebuggerAction.getSelectedNode(dataContext);
final String actionName = event.getPresentation().getText();
if (selectedNode != null && selectedNode.getDescriptor() instanceof ValueDescriptorImpl) {
context.getDebugProcess().getManagerThread().schedule(new DebuggerContextCommandImpl(context) {
public void threadAction() {
try {
final TextWithImports evaluationText = DebuggerTreeNodeExpression.createEvaluationText(selectedNode, context);
DebuggerInvocationUtil.swingInvokeLater(project, new Runnable() {
public void run() {
showEvaluationDialog(project, evaluationText);
}
});
}
catch (final EvaluateException e1) {
DebuggerInvocationUtil.swingInvokeLater(project, new Runnable() {
public void run() {
Messages.showErrorDialog(project, e1.getMessage(), actionName);
}
});
}
}
protected void commandCancelled() {
DebuggerInvocationUtil.swingInvokeLater(project, new Runnable() {
public void run() {
if(selectedNode.getDescriptor() instanceof WatchItemDescriptor) {
try {
TextWithImports editorText = DebuggerTreeNodeExpression.createEvaluationText(selectedNode, context);
showEvaluationDialog(project, editorText);
}
catch (EvaluateException e1) {
Messages.showErrorDialog(project, e1.getMessage(), actionName);
}
}
}
});
}
});
return;
}
}
showEvaluationDialog(project, editorText);
}
public static void showEvaluationDialog(Project project, TextWithImports defaultExpression, String dialogType) {
if(defaultExpression == null) {
defaultExpression = new TextWithImportsImpl(CodeFragmentKind.EXPRESSION, "");
}
CodeFragmentKind kind = DebuggerSettings.EVALUATE_FRAGMENT.equals(dialogType) ? CodeFragmentKind.CODE_BLOCK : CodeFragmentKind.EXPRESSION;
DebuggerSettings.getInstance().EVALUATION_DIALOG_TYPE = dialogType;
TextWithImportsImpl text = new TextWithImportsImpl(kind, defaultExpression.getText(), defaultExpression.getImports(), defaultExpression.getFileType());
final DialogWrapper dialog;
if(DebuggerSettings.EVALUATE_FRAGMENT.equals(dialogType)) {
dialog = new StatementEvaluationDialog(project, text);
}
else {
dialog = new ExpressionEvaluationDialog(project, text);
}
dialog.show();
}
public static void showEvaluationDialog(Project project, TextWithImports text) {
showEvaluationDialog(project, text, DebuggerSettings.getInstance().EVALUATION_DIALOG_TYPE);
}
}
@@ -1,42 +0,0 @@
/*
* Copyright 2000-2009 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.debugger.actions;
import com.intellij.debugger.impl.DebuggerContextImpl;
import com.intellij.debugger.impl.DebuggerStateManager;
import com.intellij.debugger.impl.DebuggerContextImpl;
import com.intellij.debugger.impl.DebuggerSession;
import com.intellij.debugger.ui.DebuggerPanelsManager;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.DataConstants;
import com.intellij.openapi.project.Project;
/**
* User: lex
* Date: Sep 26, 2003
* Time: 7:45:21 PM
*/
public class ShowFrameAction extends GotoFrameSourceAction {
public void actionPerformed(AnActionEvent e) {
super.actionPerformed(e);
DebuggerStateManager stateManager = getContextManager(e.getDataContext());
DebuggerContextImpl context = stateManager.getContext();
if(context != null) {
DebuggerPanelsManager.getInstance(context.getProject()).showFramePanel();
}
}
}
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2014 JetBrains s.r.o.
* Copyright 2000-2015 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.
@@ -27,7 +27,6 @@ import com.intellij.debugger.jdi.ThreadReferenceProxyImpl;
import com.intellij.debugger.jdi.VirtualMachineProxyImpl;
import com.intellij.debugger.requests.Requestor;
import com.intellij.debugger.settings.DebuggerSettings;
import com.intellij.debugger.ui.DebuggerPanelsManager;
import com.intellij.debugger.ui.breakpoints.Breakpoint;
import com.intellij.debugger.ui.breakpoints.LineBreakpoint;
import com.intellij.execution.configurations.RemoteConnection;
@@ -452,7 +451,6 @@ public class DebugProcessEvents extends DebugProcessImpl {
DebuggerInvocationUtil.invokeAndWait(getProject(), new Runnable() {
@Override
public void run() {
DebuggerPanelsManager.getInstance(getProject()).toFront(mySession);
final String displayName = requestor instanceof Breakpoint? ((Breakpoint)requestor).getDisplayName() : requestor.getClass().getSimpleName();
final String message = DebuggerBundle.message("error.evaluating.breakpoint.condition.or.action", displayName, ex.getMessage());
considerRequestHit[0] = Messages.showYesNoDialog(getProject(), message, ex.getTitle(), Messages.getQuestionIcon()) == Messages.YES;
@@ -24,10 +24,8 @@ import com.intellij.debugger.engine.JavaDebugProcess;
import com.intellij.debugger.impl.DebuggerContextImpl;
import com.intellij.debugger.impl.DebuggerSession;
import com.intellij.debugger.impl.DebuggerStateManager;
import com.intellij.debugger.ui.impl.MainWatchPanel;
import com.intellij.debugger.ui.tree.render.BatchEvaluator;
import com.intellij.execution.ExecutionException;
import com.intellij.execution.ExecutionManager;
import com.intellij.execution.Executor;
import com.intellij.execution.configurations.RemoteConnection;
import com.intellij.execution.configurations.RunProfileState;
@@ -39,8 +37,6 @@ import com.intellij.execution.ui.RunContentDescriptor;
import com.intellij.execution.ui.RunContentManager;
import com.intellij.execution.ui.RunContentWithExecutorListener;
import com.intellij.openapi.components.ProjectComponent;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.colors.EditorColorsManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Comparing;
import com.intellij.xdebugger.XDebugProcess;
@@ -51,43 +47,10 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class DebuggerPanelsManager implements ProjectComponent {
private static final Logger LOG = Logger.getInstance("#com.intellij.debugger.ui.DebuggerPanelsManager");
private final Project myProject;
private final ExecutionManager myExecutionManager;
//private final PositionHighlighter myEditorManager;
//private final HashMap<ProcessHandler, DebuggerSessionTab> mySessionTabs = new HashMap<ProcessHandler, DebuggerSessionTab>();
public DebuggerPanelsManager(Project project, final EditorColorsManager colorsManager, ExecutionManager executionManager) {
public DebuggerPanelsManager(Project project) {
myProject = project;
myExecutionManager = executionManager;
//myEditorManager = new PositionHighlighter(myProject, getContextManager());
//
//final EditorColorsListener myColorsListener = new EditorColorsListener() {
// public void globalSchemeChange(EditorColorsScheme scheme) {
// myEditorManager.updateContextPointDescription();
// }
//};
//colorsManager.addEditorColorsListener(myColorsListener);
//Disposer.register(project, new Disposable() {
// public void dispose() {
// colorsManager.removeEditorColorsListener(myColorsListener);
// }
//});
//
//getContextManager().addListener(new DebuggerContextListener() {
// public void changeEvent(final DebuggerContextImpl newContext, int event) {
// if (event == DebuggerSession.EVENT_PAUSE) {
// DebuggerInvocationUtil.invokeLater(myProject, new Runnable() {
// public void run() {
// toFront(newContext.getDebuggerSession());
// }
// });
// }
// }
//});
}
private DebuggerStateManager getContextManager() {
@@ -196,32 +159,6 @@ public class DebuggerPanelsManager implements ProjectComponent {
return project.getComponent(DebuggerPanelsManager.class);
}
@Nullable
public MainWatchPanel getWatchPanel() {
DebuggerSessionTab sessionTab = getSessionTab();
return sessionTab != null ? sessionTab.getWatchPanel() : null;
}
@Nullable
public DebuggerSessionTab getSessionTab() {
DebuggerContextImpl context = DebuggerManagerEx.getInstanceEx(myProject).getContext();
return getSessionTab(context.getDebuggerSession());
}
public void showFramePanel() {
DebuggerSessionTab sessionTab = getSessionTab();
if (sessionTab != null) {
sessionTab.showFramePanel();
}
}
public void toFront(DebuggerSession session) {
DebuggerSessionTab sessionTab = getSessionTab(session);
if (sessionTab != null) {
sessionTab.toFront(true, null);
}
}
private static DebuggerSession getSession(Project project, RunContentDescriptor descriptor) {
for (JavaDebugProcess process : XDebuggerManager.getInstance(project).getDebugProcesses(JavaDebugProcess.class)) {
if (Comparing.equal(process.getProcessHandler(), descriptor.getProcessHandler())) {
@@ -230,11 +167,4 @@ public class DebuggerPanelsManager implements ProjectComponent {
}
return null;
}
@Nullable
private DebuggerSessionTab getSessionTab(DebuggerSession session) {
//return session != null ? getSessionTab(session.getProcess().getExecutionResult().getProcessHandler()) : null;
return null;
}
}
@@ -1,190 +0,0 @@
/*
* Copyright 2000-2009 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.debugger.ui;
import com.intellij.debugger.DebuggerBundle;
import com.intellij.debugger.DebuggerInvocationUtil;
import com.intellij.debugger.HelpID;
import com.intellij.debugger.actions.EvaluateActionHandler;
import com.intellij.debugger.engine.evaluation.CodeFragmentFactory;
import com.intellij.debugger.engine.evaluation.TextWithImports;
import com.intellij.debugger.impl.PositionUtil;
import com.intellij.debugger.settings.DebuggerSettings;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.CustomShortcutSet;
import com.intellij.openapi.help.HelpManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.wm.ex.AbstractDelegatingToRootTraversalPolicy;
import com.intellij.ui.IdeBorderFactory;
import com.intellij.ui.components.JBLabel;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
public class ExpressionEvaluationDialog extends EvaluationDialog {
public ExpressionEvaluationDialog(Project project, TextWithImports defaultExpression) {
super(project, defaultExpression);
setTitle(DebuggerBundle.message("evaluate.expression.dialog.title"));
final KeyStroke expressionStroke = KeyStroke.getKeyStroke(KeyEvent.VK_E, InputEvent.ALT_MASK);
final KeyStroke resultStroke = KeyStroke.getKeyStroke(KeyEvent.VK_R, InputEvent.ALT_MASK);
final JRootPane rootPane = getRootPane();
final AnAction anAction = new AnAction() {
public void actionPerformed(AnActionEvent e) {
getExpressionCombo().requestFocus();
}
};
anAction.registerCustomShortcutSet(new CustomShortcutSet(expressionStroke), rootPane);
addDisposeRunnable(new Runnable() {
public void run() {
anAction.unregisterCustomShortcutSet(rootPane);
}
});
final AnAction anAction2 = new AnAction() {
public void actionPerformed(AnActionEvent e) {
getEvaluationPanel().getWatchTree().requestFocus();
}
};
anAction2.registerCustomShortcutSet(new CustomShortcutSet(resultStroke), rootPane);
addDisposeRunnable(new Runnable() {
public void run() {
anAction2.unregisterCustomShortcutSet(rootPane);
}
});
init();
}
protected DebuggerExpressionComboBox createEditor(final CodeFragmentFactory factory) {
return new DebuggerExpressionComboBox(getProject(), PositionUtil.getContextElement(getDebuggerContext()), "evaluation", factory);
}
protected JComponent createCenterPanel() {
final JPanel panel = new JPanel(new BorderLayout());
final JPanel exprPanel = new JPanel(new BorderLayout(UIUtil.DEFAULT_HGAP, 0));
exprPanel.add(new JLabel(DebuggerBundle.message("label.evaluate.dialog.expression")), BorderLayout.WEST);
exprPanel.add(getExpressionCombo(), BorderLayout.CENTER);
final JBLabel help = new JBLabel("Press Enter to Evaluate or Control+Enter to evaluate and add to the Watches", SwingConstants.RIGHT);
help.setBorder(IdeBorderFactory.createEmptyBorder(2,0,6,0));
help.setComponentStyle(UIUtil.ComponentStyle.SMALL);
help.setFontColor(UIUtil.FontColor.BRIGHTER);
exprPanel.add(help, BorderLayout.SOUTH);
final JPanel resultPanel = new JPanel(new BorderLayout());
//resultPanel.add(new JLabel(DebuggerBundle.message("label.evaluate.dialog.result")), BorderLayout.NORTH);
resultPanel.add(getEvaluationPanel(), BorderLayout.CENTER);
panel.add(exprPanel, BorderLayout.NORTH);
panel.add(resultPanel, BorderLayout.CENTER);
panel.setFocusTraversalPolicyProvider(true);
panel.setFocusTraversalPolicy(new AbstractDelegatingToRootTraversalPolicy() {
@Override
public Component getComponentBefore(Container aContainer, Component aComponent) {
boolean focusExpressionCombo = isParent(aComponent, getEvaluationPanel());
return focusExpressionCombo ? getExpressionCombo().getEditorComponent() : super.getComponentBefore(aContainer, aComponent);
}
@Override
public Component getComponentAfter(Container aContainer, Component aComponent) {
boolean focusEvaluationPanel = isParent(aComponent, exprPanel);
return focusEvaluationPanel ? getEvaluationPanel().getTree() : super.getComponentAfter(aContainer, aComponent);
}
private boolean isParent(@NotNull Component component, @NotNull Container parent) {
for (Component c = component; c != null; c = c.getParent()) {
if (c == parent) {
return true;
}
}
return false;
}
});
return panel;
}
protected void initDialogData(TextWithImports text) {
super.initDialogData(text);
getExpressionCombo().selectAll();
}
private DebuggerExpressionComboBox getExpressionCombo() {
return (DebuggerExpressionComboBox)getEditor();
}
@NotNull
protected Action[] createActions() {
return new Action[] { getOKAction(), getCancelAction(), new SwitchAction(), getHelpAction() } ;
}
@Override
protected void createDefaultActions() {
super.createDefaultActions();
myOKAction = new OkAction(){
@Override
public void actionPerformed(ActionEvent e) {
super.actionPerformed(e);
if ((e.getModifiers() & InputEvent.CTRL_MASK) != 0) {
addCurrentExpressionToWatches();
}
}
};
}
private void addCurrentExpressionToWatches() {
final DebuggerSessionTab tab = DebuggerPanelsManager.getInstance(getProject()).getSessionTab();
if (tab != null) {
final TextWithImports evaluate = getCodeToEvaluate();
if (evaluate != null) {
tab.getWatchPanel().getWatchTree().addWatch(evaluate, null);
}
}
}
protected void doHelpAction() {
HelpManager.getInstance().invokeHelp(HelpID.EVALUATE);
}
private class SwitchAction extends AbstractAction {
public SwitchAction() {
putValue(Action.NAME, DebuggerBundle.message("action.evaluate.expression.dialog.switch.mode.description"));
}
public void actionPerformed(ActionEvent e) {
final TextWithImports text = getEditor().getText();
doCancelAction();
DebuggerInvocationUtil.invokeLater(getProject(), new Runnable() {
public void run() {
EvaluateActionHandler.showEvaluationDialog(getProject(), text, DebuggerSettings.EVALUATE_FRAGMENT);
}
});
}
}
}
@@ -1,221 +0,0 @@
/*
* Copyright 2000-2009 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.debugger.ui;
import com.intellij.debugger.DebuggerBundle;
import com.intellij.debugger.DebuggerInvocationUtil;
import com.intellij.debugger.HelpID;
import com.intellij.debugger.actions.EvaluateActionHandler;
import com.intellij.debugger.engine.evaluation.CodeFragmentFactory;
import com.intellij.debugger.engine.evaluation.TextWithImports;
import com.intellij.debugger.impl.PositionUtil;
import com.intellij.debugger.settings.DebuggerSettings;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.CustomShortcutSet;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.event.DocumentAdapter;
import com.intellij.openapi.editor.event.DocumentEvent;
import com.intellij.openapi.help.HelpManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Splitter;
import com.intellij.openapi.util.DimensionService;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiWhiteSpace;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
/**
* @author lex
*/
public class StatementEvaluationDialog extends EvaluationDialog{
private final JPanel myPanel;
private final Action mySwitchAction = new SwitchAction();
private static final @NonNls String STATEMENT_EDITOR_DIMENSION_KEY = "#com.intellij.debugger.ui.StatementEvaluationDialog.StatementEditor";
private static final @NonNls String EVALUATION_PANEL_DIMENSION_KEY = "#com.intellij.debugger.ui.StatementEvaluationDialog.EvaluationPanel";
public StatementEvaluationDialog(final Project project, TextWithImports text) {
super(project, text);
setTitle(DebuggerBundle.message("evaluate.statement.dialog.title"));
myPanel = new JPanel(new BorderLayout());
final Splitter splitter = new Splitter(true);
splitter.setHonorComponentsMinimumSize(true);
final JPanel editorPanel = new JPanel(new GridBagLayout());
final JLabel statementsLabel = new JLabel(DebuggerBundle.message("label.evaluation.dialog.statements"));
editorPanel.add(statementsLabel, new GridBagConstraints(0, GridBagConstraints.RELATIVE, 2, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 0, 0, 0), 0, 0));
editorPanel.add(getStatementEditor(), new GridBagConstraints(0, GridBagConstraints.RELATIVE, 2, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(2, 0, 0, 0), 0, 0));
splitter.setFirstComponent(editorPanel);
final MyEvaluationPanel evaluationPanel = getEvaluationPanel();
final JPanel ep = new JPanel(new BorderLayout());
//final JLabel resultLabel = new JLabel(DebuggerBundle.message("label.evaluate.dialog.result"));
//ep.add(resultLabel, BorderLayout.NORTH);
ep.add(evaluationPanel, BorderLayout.CENTER);
splitter.setSecondComponent(ep);
final Dimension statementSize = DimensionService.getInstance().getSize(STATEMENT_EDITOR_DIMENSION_KEY, project);
final Dimension evaluationSize = DimensionService.getInstance().getSize(EVALUATION_PANEL_DIMENSION_KEY, project);
if (statementSize != null && evaluationSize != null) {
final float proportion = (float)statementSize.height / (float)(statementSize.height + evaluationSize.height);
splitter.setProportion(proportion);
}
myPanel.add(splitter, BorderLayout.CENTER);
setDebuggerContext(getDebuggerContext());
final KeyStroke codeFragment = KeyStroke.getKeyStroke(KeyEvent.VK_E, KeyEvent.ALT_MASK);
final KeyStroke resultStroke = KeyStroke.getKeyStroke(KeyEvent.VK_R, KeyEvent.ALT_MASK);
final KeyStroke altEnter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, KeyEvent.CTRL_MASK);
final JRootPane rootPane = getRootPane();
final AnAction toStatementAction = new AnAction() {
public void actionPerformed(AnActionEvent e) {
getStatementEditor().requestFocus();
}
};
toStatementAction.registerCustomShortcutSet(new CustomShortcutSet(codeFragment), rootPane);
addDisposeRunnable(new Runnable() {
public void run() {
toStatementAction.unregisterCustomShortcutSet(rootPane);
}
});
final AnAction toEvaluationAction = new AnAction() {
public void actionPerformed(AnActionEvent e) {
getEvaluationPanel().getWatchTree().requestFocus();
}
};
toEvaluationAction.registerCustomShortcutSet(new CustomShortcutSet(resultStroke), rootPane);
addDisposeRunnable(new Runnable() {
public void run() {
toEvaluationAction.unregisterCustomShortcutSet(rootPane);
}
});
final AnAction okAction = new AnAction() {
public void actionPerformed(AnActionEvent e) {
doOKAction();
}
};
okAction.registerCustomShortcutSet(new CustomShortcutSet(altEnter), rootPane);
addDisposeRunnable(new Runnable() {
public void run() {
okAction.unregisterCustomShortcutSet(rootPane);
}
});
final DebuggerEditorImpl editor = getEditor();
final DocumentAdapter docListener = new DocumentAdapter() {
public void documentChanged(final DocumentEvent e) {
DebuggerInvocationUtil.invokeLater(getProject(), new Runnable() {
public void run() {
updateSwitchButton(e.getDocument());
}
});
}
};
editor.addDocumentListener(docListener);
addDisposeRunnable(new Runnable() {
public void run() {
editor.removeDocumentListener(docListener);
}
});
init();
}
private void updateSwitchButton(Document document) {
PsiDocumentManager.getInstance(getProject()).commitDocument(document);
PsiFile psiFile = PsiDocumentManager.getInstance(getProject()).getPsiFile(document);
if (psiFile == null) {
return;
}
PsiElement[] children = psiFile.getChildren();
int nonWhite = 0;
for (PsiElement child : children) {
if (!(child instanceof PsiWhiteSpace)) {
nonWhite++;
if (nonWhite > 1) {
mySwitchAction.setEnabled(false);
return;
}
}
}
mySwitchAction.setEnabled(true);
}
@NotNull
protected Action[] createActions(){
return new Action[]{getOKAction(), getCancelAction(), mySwitchAction, getHelpAction() };
}
protected void doHelpAction() {
HelpManager.getInstance().invokeHelp(HelpID.EVALUATE);
}
protected DebuggerEditorImpl createEditor(final CodeFragmentFactory factory) {
return new DebuggerStatementEditor(getProject(), PositionUtil.getContextElement(getDebuggerContext()), "evaluation", factory);
}
public void dispose() {
try {
final DebuggerEditorImpl editor = getEditor();
final DimensionService dimensionService = DimensionService.getInstance();
dimensionService.setSize(STATEMENT_EDITOR_DIMENSION_KEY, editor.getSize(null), getProject());
dimensionService.setSize(EVALUATION_PANEL_DIMENSION_KEY, getEvaluationPanel().getSize(), getProject());
}
finally {
super.dispose();
}
}
protected JComponent createCenterPanel() {
return myPanel;
}
private DebuggerStatementEditor getStatementEditor() {
return (DebuggerStatementEditor)getEditor();
}
private class SwitchAction extends AbstractAction {
public SwitchAction() {
putValue(NAME, DebuggerBundle.message("action.evaluate.statement.dialog.switch.mode.description"));
}
public void actionPerformed(ActionEvent e) {
final TextWithImports text = getEditor().getText();
doCancelAction();
DebuggerInvocationUtil.invokeLater(getProject(), new Runnable() {
public void run() {
EvaluateActionHandler.showEvaluationDialog(getProject(), text, DebuggerSettings.EVALUATE_EXPRESSION);
}
});
}
}
}