diff options
Diffstat (limited to 'platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui')
13 files changed, 72 insertions, 33 deletions
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerUIUtil.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerUIUtil.java index 0cca39833e54..d9a1fdbcf0af 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerUIUtil.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerUIUtil.java @@ -19,6 +19,8 @@ import com.intellij.codeInsight.hint.HintUtil; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.LogicalPosition; +import com.intellij.openapi.editor.colors.EditorColorsScheme; +import com.intellij.openapi.editor.colors.EditorColorsUtil; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.popup.*; import com.intellij.openapi.util.Computable; @@ -261,6 +263,16 @@ public class DebuggerUIUtil { return balloon; } + @NotNull + public static EditorColorsScheme getColorScheme() { + return EditorColorsUtil.getGlobalOrDefaultColorScheme(); + } + + @NotNull + public static EditorColorsScheme getColorScheme(@Nullable JComponent component) { + return EditorColorsUtil.getColorSchemeForComponent(component); + } + private static class FullValueEvaluationCallbackImpl implements XFullValueEvaluator.XFullValueEvaluationCallback { private final AtomicBoolean myObsolete = new AtomicBoolean(false); private final EditorTextField myTextArea; diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/ExecutionPointHighlighter.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/ExecutionPointHighlighter.java index 9fed59c966b0..0065a2843aac 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/ExecutionPointHighlighter.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/ExecutionPointHighlighter.java @@ -65,6 +65,7 @@ public class ExecutionPointHighlighter { mySourcePosition = position; + clearDescriptor(); myOpenFileDescriptor = XSourcePositionImpl.createOpenFileDescriptor(myProject, position); //see IDEA-125645 and IDEA-63459 //myOpenFileDescriptor.setUseCurrentWindow(true); @@ -84,13 +85,20 @@ public class ExecutionPointHighlighter { updateRequested.set(false); removeHighlighter(); - myOpenFileDescriptor = null; + clearDescriptor(); myEditor = null; myGutterIconRenderer = null; } }); } + private void clearDescriptor() { + if (myOpenFileDescriptor != null) { + myOpenFileDescriptor.dispose(); + myOpenFileDescriptor = null; + } + } + public void navigateTo() { if (myOpenFileDescriptor != null) { myOpenFileDescriptor.navigateInEditor(myProject, true); diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/TextViewer.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/TextViewer.java index 16a5a2ed96f8..0b0145948ecd 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/TextViewer.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/TextViewer.java @@ -46,6 +46,8 @@ public final class TextViewer extends EditorTextField { editor.setEmbeddedIntoDialogWrapper(myEmbeddedIntoDialogWrapper); editor.getComponent().setPreferredSize(null); editor.getSettings().setUseSoftWraps(myUseSoftWraps); + + editor.setColorsScheme(DebuggerUIUtil.getColorScheme()); return editor; } }
\ No newline at end of file diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java index ef0b72008cf7..2e5f8a337385 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java @@ -168,7 +168,8 @@ public class XDebugSessionTab extends DebuggerSessionTabBase { } DefaultActionGroup leftToolbar = new DefaultActionGroup(); - final Executor executor = DefaultDebugExecutor.getDebugExecutorInstance(); + final Executor debugExecutor = DefaultDebugExecutor.getDebugExecutorInstance(); + final Executor executor = environment != null ? environment.getExecutor() : debugExecutor; if (runner != null && environment != null) { RestartAction restartAction = new RestartAction(executor, runner, myRunContentDescriptor, environment); leftToolbar.add(restartAction); @@ -222,7 +223,7 @@ public class XDebugSessionTab extends DebuggerSessionTabBase { leftToolbar.add(PinToolwindowTabAction.getPinAction()); leftToolbar.add(new CloseAction(executor, myRunContentDescriptor, getProject())); - leftToolbar.add(new ContextHelpAction(executor.getHelpId())); + leftToolbar.add(new ContextHelpAction(debugExecutor.getHelpId())); DefaultActionGroup topToolbar = new DefaultActionGroup(); topToolbar.addAll(getCustomizedActionGroup(XDebuggerActions.TOOL_WINDOW_TOP_TOOLBAR_GROUP)); @@ -237,6 +238,10 @@ public class XDebugSessionTab extends DebuggerSessionTabBase { initLogConsoles(runConfiguration, myRunContentDescriptor.getProcessHandler(), myConsole); } + final DefaultActionGroup focus = new DefaultActionGroup(); + focus.add(ActionManager.getInstance().getAction(XDebuggerActions.FOCUS_ON_BREAKPOINT)); + myUi.getOptions().setAdditionalFocusActions(focus); + rebuildViews(); } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebuggerMultilineEditor.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebuggerMultilineEditor.java index 0c41a5d1015b..aa3445b4b421 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebuggerMultilineEditor.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebuggerMultilineEditor.java @@ -56,6 +56,7 @@ public class XDebuggerMultilineEditor extends XDebuggerEditorBase { return false; } }; + myEditorTextField.setFontInheritedFromLAF(false); } @Override diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/TreeInplaceEditor.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/TreeInplaceEditor.java index 3db287f84210..629385c9ad20 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/TreeInplaceEditor.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/TreeInplaceEditor.java @@ -69,14 +69,13 @@ public abstract class TreeInplaceEditor implements AWTEventListener { if (!isShown()) { return; } + myInplaceEditorComponent = null; onHidden(); for (Runnable action : myRemoveActions) { action.run(); } myRemoveActions.clear(); - myInplaceEditorComponent = null; - final JTree tree = getTree(); tree.repaint(); tree.requestFocus(); @@ -172,7 +171,7 @@ public abstract class TreeInplaceEditor implements AWTEventListener { @Override public void run() { tree.removeHierarchyListener(hierarchyListener); - tree.addComponentListener(componentListener); + tree.removeComponentListener(componentListener); rootPane.removeComponentListener(componentListener); } }); diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/XDebuggerTree.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/XDebuggerTree.java index 3b3a481f9870..afb22607d5d6 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/XDebuggerTree.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/XDebuggerTree.java @@ -27,6 +27,7 @@ import com.intellij.ui.PopupHandler; import com.intellij.ui.TreeSpeedSearch; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.Convertor; +import com.intellij.util.containers.TransferToEDTQueue; import com.intellij.util.ui.TextTransferable; import com.intellij.xdebugger.XSourcePosition; import com.intellij.xdebugger.evaluation.XDebuggerEditorsProvider; @@ -56,6 +57,8 @@ import java.util.List; * @author nik */ public class XDebuggerTree extends DnDAwareTree implements DataProvider, Disposable { + private final TransferToEDTQueue<Runnable> myLaterInvocator = TransferToEDTQueue.createRunnableMerger("XDebuggerTree later invocator", 100); + private static final DataKey<XDebuggerTree> XDEBUGGER_TREE_KEY = DataKey.create("xdebugger.tree"); private static final Convertor<TreePath, String> SPEED_SEARCH_CONVERTER = new Convertor<TreePath, String>() { @Override @@ -324,4 +327,8 @@ public class XDebuggerTree extends DnDAwareTree implements DataProvider, Disposa public static XDebuggerTree getTree(DataContext context) { return XDEBUGGER_TREE_KEY.getData(context); } + + public TransferToEDTQueue<Runnable> getLaterInvocator() { + return myLaterInvocator; + } } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/XAddToWatchesAction.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/XAddToWatchesAction.java index c4bb274400ea..66f22bbfd4f1 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/XAddToWatchesAction.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/XAddToWatchesAction.java @@ -55,9 +55,9 @@ class XAddToWatchesAction extends XDebuggerTreeActionBase { if (view == null && project != null) { XDebugSession session = XDebuggerManager.getInstance(project).getCurrentSession(); if (session != null) { - return ((XDebugSessionImpl)session).getSessionTab().getWatchesView(); + view = ((XDebugSessionImpl)session).getSessionTab().getWatchesView(); } } - return null; + return view; } }
\ No newline at end of file diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XDebuggerTreeNode.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XDebuggerTreeNode.java index dccd5fd4f3f2..e01d0ad7ce79 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XDebuggerTreeNode.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XDebuggerTreeNode.java @@ -189,4 +189,8 @@ public abstract class XDebuggerTreeNode implements TreeNode, TreeSpeedSearch.Pat component.append(link.getLinkText(), link.getTextAttributes(), link); } } + + void invokeNodeUpdate(Runnable runnable) { + myTree.getLaterInvocator().offer(runnable); + } } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValueContainerNode.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValueContainerNode.java index a7059a4a10e0..38d2547831fe 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValueContainerNode.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValueContainerNode.java @@ -22,7 +22,6 @@ import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.SortedList; import com.intellij.xdebugger.frame.*; import com.intellij.xdebugger.impl.settings.XDebuggerSettingsManager; -import com.intellij.xdebugger.impl.ui.DebuggerUIUtil; import com.intellij.xdebugger.impl.ui.XDebuggerUIConstants; import com.intellij.xdebugger.impl.ui.tree.XDebuggerTree; import org.jetbrains.annotations.NotNull; @@ -75,7 +74,7 @@ public abstract class XValueContainerNode<ValueContainer extends XValueContainer @Override public void addChildren(@NotNull final XValueChildrenList children, final boolean last) { - DebuggerUIUtil.invokeLater(new Runnable() { + invokeNodeUpdate(new Runnable() { @Override public void run() { if (myValueChildren == null) { @@ -125,7 +124,7 @@ public abstract class XValueContainerNode<ValueContainer extends XValueContainer @Override public void tooManyChildren(final int remaining) { - DebuggerUIUtil.invokeLater(new Runnable() { + invokeNodeUpdate(new Runnable() { @Override public void run() { setTemporaryMessageNode(MessageTreeNode.createEllipsisNode(myTree, XValueContainerNode.this, remaining)); @@ -162,7 +161,7 @@ public abstract class XValueContainerNode<ValueContainer extends XValueContainer @Override public void setMessage(@NotNull final String message, final Icon icon, @NotNull final SimpleTextAttributes attributes, @Nullable final XDebuggerTreeNodeHyperlink link) { - DebuggerUIUtil.invokeLater(new Runnable() { + invokeNodeUpdate(new Runnable() { @Override public void run() { setMessageNodes(MessageTreeNode.createMessages(myTree, XValueContainerNode.this, message, link, diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValueNodePresentationConfigurator.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValueNodePresentationConfigurator.java index 6bc3e56e0934..536822734d86 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValueNodePresentationConfigurator.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValueNodePresentationConfigurator.java @@ -94,12 +94,18 @@ public final class XValueNodePresentationConfigurator { node.applyPresentation(icon, presentation, hasChildren); } else { - application.invokeLater(new Runnable() { + Runnable updater = new Runnable() { @Override public void run() { node.applyPresentation(icon, presentation, hasChildren); } - }); + }; + if (node instanceof XDebuggerTreeNode) { + ((XDebuggerTreeNode)node).invokeNodeUpdate(updater); + } + else { + application.invokeLater(updater); + } } } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValuePresentationUtil.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValuePresentationUtil.java index 188b20d27da4..5f202d8de278 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValuePresentationUtil.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValuePresentationUtil.java @@ -16,16 +16,13 @@ package com.intellij.xdebugger.impl.ui.tree.nodes; import com.intellij.openapi.editor.DefaultLanguageHighlighterColors; -import com.intellij.openapi.editor.colors.EditorColorsManager; -import com.intellij.openapi.editor.colors.EditorColorsScheme; import com.intellij.openapi.editor.colors.TextAttributesKey; import com.intellij.openapi.editor.markup.TextAttributes; -import com.intellij.ui.ColorUtil; import com.intellij.ui.ColoredTextContainer; import com.intellij.ui.JBColor; import com.intellij.ui.SimpleTextAttributes; -import com.intellij.util.ui.UIUtil; import com.intellij.xdebugger.frame.presentation.XValuePresentation; +import com.intellij.xdebugger.impl.ui.DebuggerUIUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -49,7 +46,7 @@ public class XValuePresentationUtil { lastOffset = i + 1; if (escapeAttributes == null) { - TextAttributes fromHighlighter = getColorScheme().getAttributes(DefaultLanguageHighlighterColors.VALID_STRING_ESCAPE); + TextAttributes fromHighlighter = DebuggerUIUtil.getColorScheme().getAttributes(DefaultLanguageHighlighterColors.VALID_STRING_ESCAPE); if (fromHighlighter != null) { escapeAttributes = SimpleTextAttributes.fromTextAttributes(fromHighlighter); } @@ -123,6 +120,11 @@ public class XValuePresentationUtil { } @Override + public void renderError(@NotNull String error) { + myBuilder.append(error); + } + + @Override public void renderSpecialSymbol(@NotNull String symbol) { myBuilder.append(symbol); } @@ -131,16 +133,4 @@ public class XValuePresentationUtil { return myBuilder.toString(); } } - - @NotNull - public static EditorColorsScheme getColorScheme() { - EditorColorsScheme globalScheme = EditorColorsManager.getInstance().getGlobalScheme(); - if (UIUtil.isUnderDarcula() != ColorUtil.isDark(globalScheme.getDefaultBackground())) { - EditorColorsScheme scheme = EditorColorsManager.getInstance().getScheme(EditorColorsScheme.DEFAULT_SCHEME_NAME); - if (scheme != null) { - return scheme; - } - } - return globalScheme; - } } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValueTextRendererImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValueTextRendererImpl.java index 90fd00268724..e8b8616e6b69 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValueTextRendererImpl.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValueTextRendererImpl.java @@ -20,6 +20,7 @@ import com.intellij.openapi.editor.colors.TextAttributesKey; import com.intellij.openapi.editor.markup.TextAttributes; import com.intellij.ui.ColoredTextContainer; import com.intellij.ui.SimpleTextAttributes; +import com.intellij.xdebugger.impl.ui.DebuggerUIUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -40,14 +41,14 @@ class XValueTextRendererImpl extends XValueTextRendererBase { @Override protected void renderRawValue(@NotNull String value, @NotNull TextAttributesKey key) { - TextAttributes textAttributes = XValuePresentationUtil.getColorScheme().getAttributes(key); + TextAttributes textAttributes = DebuggerUIUtil.getColorScheme().getAttributes(key); SimpleTextAttributes attributes = SimpleTextAttributes.fromTextAttributes(textAttributes); myText.append(value, attributes); } @Override public void renderStringValue(@NotNull String value, @Nullable String additionalSpecialCharsToHighlight, int maxLength) { - TextAttributes textAttributes = XValuePresentationUtil.getColorScheme().getAttributes(DefaultLanguageHighlighterColors.STRING); + TextAttributes textAttributes = DebuggerUIUtil.getColorScheme().getAttributes(DefaultLanguageHighlighterColors.STRING); SimpleTextAttributes attributes = SimpleTextAttributes.fromTextAttributes(textAttributes); myText.append("\"", attributes); XValuePresentationUtil.renderValue(value, myText, attributes, maxLength, additionalSpecialCharsToHighlight); @@ -60,6 +61,11 @@ class XValueTextRendererImpl extends XValueTextRendererBase { } @Override + public void renderError(@NotNull String error) { + myText.append(error, SimpleTextAttributes.ERROR_ATTRIBUTES); + } + + @Override public void renderSpecialSymbol(@NotNull String symbol) { myText.append(symbol, SimpleTextAttributes.REGULAR_ATTRIBUTES); } |