summaryrefslogtreecommitdiff
path: root/platform/xdebugger-impl/src/com/intellij/xdebugger/impl
diff options
context:
space:
mode:
Diffstat (limited to 'platform/xdebugger-impl/src/com/intellij/xdebugger/impl')
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/DebuggerSupport.java32
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java2
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerManagerImpl.java50
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/actions/handlers/XMarkObjectActionHandler.java4
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/XDebuggerEditorLinePainter.java32
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/XDebuggerEvaluationDialog.java2
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/XValueHint.java45
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/common/AbstractValueHint.java6
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/common/DebuggerTreeWithHistoryContainer.java4
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/common/DebuggerTreeWithHistoryPopup.java18
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/WatchInplaceEditor.java6
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugView.java14
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugViewSessionListener.java7
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebuggerFramesList.java19
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XFramesView.java45
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XVariablesViewBase.java119
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XWatchesViewImpl.java18
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerConfigurable.java3
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerConfigurableProvider.java34
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerSessionTabBase.java57
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java62
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/ValueMarkerPresentationDialog.java6
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/ValueMarkerPresentationDialogBase.java4
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/WatchesRootNode.java4
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValueContainerNode.java4
25 files changed, 354 insertions, 243 deletions
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/DebuggerSupport.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/DebuggerSupport.java
index b09c7388748f..d76d60410648 100644
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/DebuggerSupport.java
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/DebuggerSupport.java
@@ -16,6 +16,7 @@
package com.intellij.xdebugger.impl;
import com.intellij.openapi.actionSystem.AnActionEvent;
+import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.project.Project;
@@ -25,11 +26,15 @@ import com.intellij.xdebugger.impl.actions.DebuggerToggleActionHandler;
import com.intellij.xdebugger.impl.actions.EditBreakpointActionHandler;
import com.intellij.xdebugger.impl.actions.MarkObjectActionHandler;
import com.intellij.xdebugger.impl.breakpoints.ui.BreakpointPanelProvider;
+import com.intellij.xdebugger.impl.evaluate.quick.common.AbstractValueHint;
import com.intellij.xdebugger.impl.evaluate.quick.common.QuickEvaluateHandler;
+import com.intellij.xdebugger.impl.evaluate.quick.common.ValueHintType;
import com.intellij.xdebugger.impl.settings.DebuggerSettingsPanelProvider;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import java.awt.*;
+
/**
* @author nik
*/
@@ -118,7 +123,32 @@ public abstract class DebuggerSupport {
public abstract DebuggerActionHandler getEvaluateHandler();
@NotNull
- public abstract QuickEvaluateHandler getQuickEvaluateHandler();
+ public QuickEvaluateHandler getQuickEvaluateHandler() {
+ return DISABLED_QUICK_EVALUATE;
+ }
+
+ private static final QuickEvaluateHandler DISABLED_QUICK_EVALUATE = new QuickEvaluateHandler() {
+ @Override
+ public boolean isEnabled(@NotNull Project project) {
+ return false;
+ }
+
+ @Nullable
+ @Override
+ public AbstractValueHint createValueHint(@NotNull Project project, @NotNull Editor editor, @NotNull Point point, ValueHintType type) {
+ return null;
+ }
+
+ @Override
+ public boolean canShowHint(@NotNull Project project) {
+ return false;
+ }
+
+ @Override
+ public int getValueLookupDelay(Project project) {
+ return 0;
+ }
+ };
@NotNull
public abstract DebuggerActionHandler getAddToWatchesActionHandler();
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java
index 1b0f0ca69a59..ddc28745934a 100644
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java
@@ -98,7 +98,7 @@ public class XDebugSessionImpl implements XDebugSession {
private XExecutionStack myCurrentExecutionStack;
private XStackFrame myCurrentStackFrame;
private boolean myIsTopFrame;
- private XSourcePosition myTopFramePosition;
+ private volatile XSourcePosition myTopFramePosition;
private final AtomicBoolean myPaused = new AtomicBoolean();
private MyDependentBreakpointListener myDependentBreakpointListener;
private XValueMarkers<?, ?> myValueMarkers;
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerManagerImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerManagerImpl.java
index 2e6f91d43924..6ef4ca6a1252 100644
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerManagerImpl.java
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerManagerImpl.java
@@ -24,7 +24,11 @@ import com.intellij.execution.process.ProcessHandler;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.execution.runners.ProgramRunner;
import com.intellij.execution.runners.RunContentBuilder;
-import com.intellij.execution.ui.*;
+import com.intellij.execution.ui.ExecutionConsole;
+import com.intellij.execution.ui.RunContentDescriptor;
+import com.intellij.execution.ui.RunContentManager;
+import com.intellij.execution.ui.RunContentWithExecutorListener;
+import com.intellij.ide.DataManager;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.components.*;
@@ -49,7 +53,6 @@ import com.intellij.xdebugger.impl.settings.XDebuggerSettingsManager;
import com.intellij.xdebugger.impl.ui.ExecutionPointHighlighter;
import com.intellij.xdebugger.impl.ui.XDebugSessionData;
import com.intellij.xdebugger.impl.ui.XDebugSessionTab;
-import gnu.trove.THashMap;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -70,8 +73,6 @@ public class XDebuggerManagerImpl extends XDebuggerManager
private final Project myProject;
private final XBreakpointManagerImpl myBreakpointManager;
private final XDebuggerWatchesManager myWatchesManager;
- private final Map<RunContentDescriptor, XDebugSessionData> mySessionData;
- private final Map<RunContentDescriptor, XDebugSessionTab> mySessionTabs;
private final Map<ProcessHandler, XDebugSessionImpl> mySessions;
private final ExecutionPointHighlighter myExecutionPointHighlighter;
private XDebugSessionImpl myActiveSession;
@@ -80,8 +81,6 @@ public class XDebuggerManagerImpl extends XDebuggerManager
myProject = project;
myBreakpointManager = new XBreakpointManagerImpl(project, this, startupManager);
myWatchesManager = new XDebuggerWatchesManager();
- mySessionData = new THashMap<RunContentDescriptor, XDebugSessionData>();
- mySessionTabs = new THashMap<RunContentDescriptor, XDebugSessionTab>();
mySessions = new LinkedHashMap<ProcessHandler, XDebugSessionImpl>();
myExecutionPointHighlighter = new ExecutionPointHighlighter(project);
@@ -135,11 +134,6 @@ public class XDebuggerManagerImpl extends XDebuggerManager
public void contentRemoved(@Nullable RunContentDescriptor descriptor, @NotNull Executor executor) {
if (descriptor != null && executor.equals(DefaultDebugExecutor.getDebugExecutorInstance())) {
mySessions.remove(descriptor.getProcessHandler());
- mySessionData.remove(descriptor);
- XDebugSessionTab tab = mySessionTabs.remove(descriptor);
- if (tab != null) {
- Disposer.dispose(tab);
- }
}
}
});
@@ -218,7 +212,13 @@ public class XDebuggerManagerImpl extends XDebuggerManager
XDebugProcess process = processStarter.start(session);
myProject.getMessageBus().syncPublisher(TOPIC).processStarted(process);
- XDebugSessionData oldSessionData = contentToReuse != null ? mySessionData.get(contentToReuse) : null;
+ XDebugSessionData oldSessionData = null;
+ if (contentToReuse != null) {
+ JComponent component = contentToReuse.getComponent();
+ if (component != null) {
+ oldSessionData = XDebugSessionData.DATA_KEY.getData(DataManager.getInstance().getDataContext(component));
+ }
+ }
if (oldSessionData == null) {
oldSessionData = new XDebugSessionData(session.getWatchExpressions());
}
@@ -240,21 +240,17 @@ public class XDebuggerManagerImpl extends XDebuggerManager
XDebugSessionTab sessionTab = session.getSessionTab();
mySessions.remove(session.getDebugProcess().getProcessHandler());
if (sessionTab != null) {
- final RunContentDescriptor descriptor = sessionTab.getRunContentDescriptor();
- mySessionData.put(descriptor, session.getSessionData());
- mySessionTabs.put(descriptor, sessionTab);
-
- // in test-mode RunContentWithExecutorListener.contentRemoved events are not sent (see RunContentManagerImpl.showRunContent)
- // so we make sure the mySessions and mySessionData are cleared correctly when session is disposed
-
- Disposer.register(sessionTab, new Disposable() {
- @Override
- public void dispose() {
- mySessionData.remove(descriptor);
- mySessionTabs.remove(descriptor);
- mySessions.remove(session.getDebugProcess().getProcessHandler());
- }
- });
+ RunContentDescriptor descriptor = sessionTab.getRunContentDescriptor();
+ if (descriptor != null) {
+ // in test-mode RunContentWithExecutorListener.contentRemoved events are not sent (see RunContentManagerImpl.showRunContent)
+ // so we make sure the mySessions and mySessionData are cleared correctly when session is disposed
+ Disposer.register(descriptor, new Disposable() {
+ @Override
+ public void dispose() {
+ mySessions.remove(session.getDebugProcess().getProcessHandler());
+ }
+ });
+ }
if (!myProject.isDisposed() && !ApplicationManager.getApplication().isUnitTestMode() && XDebuggerSettingsManager.getInstanceImpl().getGeneralSettings().isHideDebuggerOnProcessTermination()) {
ExecutionManager.getInstance(myProject).getContentManager().hideRunContent(DefaultDebugExecutor.getDebugExecutorInstance(), descriptor);
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/actions/handlers/XMarkObjectActionHandler.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/actions/handlers/XMarkObjectActionHandler.java
index c3a9b9842661..c83b07fa09ff 100644
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/actions/handlers/XMarkObjectActionHandler.java
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/actions/handlers/XMarkObjectActionHandler.java
@@ -30,6 +30,8 @@ import com.intellij.xdebugger.impl.ui.tree.nodes.XValueNodeImpl;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import static com.intellij.openapi.actionSystem.PlatformDataKeys.CONTEXT_COMPONENT;
+
/**
* @author nik
*/
@@ -49,7 +51,7 @@ public class XMarkObjectActionHandler extends MarkObjectActionHandler {
markers.unmarkValue(value);
}
else {
- ValueMarkerPresentationDialog dialog = new ValueMarkerPresentationDialog(node.getName());
+ ValueMarkerPresentationDialog dialog = new ValueMarkerPresentationDialog(event.getData(CONTEXT_COMPONENT), node.getName());
dialog.show();
ValueMarkup markup = dialog.getConfiguredMarkup();
if (dialog.isOK() && markup != null) {
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/XDebuggerEditorLinePainter.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/XDebuggerEditorLinePainter.java
index e73564095b21..b9a58844585a 100644
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/XDebuggerEditorLinePainter.java
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/XDebuggerEditorLinePainter.java
@@ -18,6 +18,7 @@ package com.intellij.xdebugger.impl.evaluate;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.EditorLinePainter;
import com.intellij.openapi.editor.LineExtensionInfo;
+import com.intellij.openapi.editor.colors.EditorColorsManager;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Key;
@@ -25,10 +26,8 @@ import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.ui.Gray;
-import com.intellij.ui.JBColor;
-import com.intellij.ui.SimpleColoredText;
-import com.intellij.ui.SimpleTextAttributes;
+import com.intellij.ui.*;
+import com.intellij.util.NotNullProducer;
import com.intellij.xdebugger.XDebugSession;
import com.intellij.xdebugger.XSourcePosition;
import com.intellij.xdebugger.frame.presentation.XValuePresentation;
@@ -142,12 +141,33 @@ public class XDebuggerEditorLinePainter extends EditorLinePainter {
return -1;
}
+ private static boolean isDarkEditor() {
+ Color bg = EditorColorsManager.getInstance().getGlobalScheme().getDefaultBackground();
+ return ColorUtil.isDark(bg);
+ }
+
public static JBColor getForeground() {
- return new JBColor(new Color(61, 128, 101), new Color(61, 128, 101));
+ return new JBColor(new NotNullProducer<Color>() {
+ @SuppressWarnings("UseJBColor")
+ @NotNull
+ @Override
+ public Color produce() {
+ return isDarkEditor() ? Registry.getColor("ide.debugger.inline.dark.fg.color", new Color(0x3d8065))
+ : Registry.getColor("ide.debugger.inline.fg.color", new Color(0x3d8065));
+ }
+ });
}
public static JBColor getChangedForeground() {
- return new JBColor(new Color(202, 128, 33), new Color(161, 131, 10));
+ return new JBColor(new NotNullProducer<Color>() {
+ @SuppressWarnings("UseJBColor")
+ @NotNull
+ @Override
+ public Color produce() {
+ return isDarkEditor() ? Registry.getColor("ide.debugger.inline.dark.fg.modified.color", new Color(0xa1830a))
+ : Registry.getColor("ide.debugger.inline.fg.modified.color", new Color(0xca8021));
+ }
+ });
}
static class Variable {
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/XDebuggerEvaluationDialog.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/XDebuggerEvaluationDialog.java
index 74b3b5202dbd..5a6d19de3234 100644
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/XDebuggerEvaluationDialog.java
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/XDebuggerEvaluationDialog.java
@@ -295,7 +295,7 @@ public class XDebuggerEvaluationDialog extends DialogWrapper {
evaluationCallback.errorOccurred(XDebuggerBundle.message("xdebugger.evaluate.stack.frame.has.not.evaluator"));
}
else {
- evaluator.evaluate(expression, evaluationCallback, null, inputEditor.getMode());
+ evaluator.evaluate(expression, evaluationCallback, null);
}
}
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/XValueHint.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/XValueHint.java
index ca78932701d2..37b641e1042e 100644
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/XValueHint.java
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/XValueHint.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -20,15 +20,23 @@ import com.intellij.execution.console.LanguageConsoleImpl;
import com.intellij.execution.console.LanguageConsoleView;
import com.intellij.execution.impl.ConsoleViewImpl;
import com.intellij.execution.ui.ConsoleView;
+import com.intellij.openapi.Disposable;
+import com.intellij.openapi.actionSystem.ActionManager;
+import com.intellij.openapi.actionSystem.AnActionEvent;
+import com.intellij.openapi.actionSystem.ShortcutSet;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.fileEditor.FileDocumentManager;
+import com.intellij.openapi.keymap.KeymapUtil;
+import com.intellij.openapi.project.DumbAwareAction;
import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.vcs.changes.issueLinks.LinkMouseListenerBase;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.ui.SimpleColoredComponent;
import com.intellij.ui.SimpleColoredText;
+import com.intellij.ui.SimpleTextAttributes;
import com.intellij.util.Consumer;
import com.intellij.xdebugger.XDebugSession;
import com.intellij.xdebugger.XDebuggerUtil;
@@ -68,6 +76,8 @@ public class XValueHint extends AbstractValueHint {
private final String myExpression;
private final String myValueName;
private final @Nullable XSourcePosition myExpressionPosition;
+ private final ExpressionInfo myExpressionInfo;
+ private Disposable myDisposable;
public XValueHint(@NotNull Project project, @NotNull Editor editor, @NotNull Point point, @NotNull ValueHintType type,
@NotNull ExpressionInfo expressionInfo, @NotNull XDebuggerEvaluator evaluator,
@@ -78,6 +88,7 @@ public class XValueHint extends AbstractValueHint {
myDebugSession = session;
myExpression = XDebuggerEvaluateActionHandler.getExpressionText(expressionInfo, editor.getDocument());
myValueName = XDebuggerEvaluateActionHandler.getDisplayText(expressionInfo, editor.getDocument());
+ myExpressionInfo = expressionInfo;
VirtualFile file;
ConsoleView consoleView = ConsoleViewImpl.CONSOLE_VIEW_IN_EDITOR_VIEW.get(editor);
@@ -98,6 +109,33 @@ public class XValueHint extends AbstractValueHint {
}
@Override
+ protected boolean showHint(final JComponent component) {
+ boolean result = super.showHint(component);
+ if (result && getType() == ValueHintType.MOUSE_OVER_HINT) {
+ myDisposable = Disposer.newDisposable();
+ ShortcutSet shortcut = ActionManager.getInstance().getAction("ShowErrorDescription").getShortcutSet();
+ new DumbAwareAction() {
+ @Override
+ public void actionPerformed(@NotNull AnActionEvent e) {
+ hideHint();
+ final Point point = new Point(myPoint.x, myPoint.y + getEditor().getLineHeight());
+ new XValueHint(getProject(), getEditor(), point, ValueHintType.MOUSE_CLICK_HINT, myExpressionInfo, myEvaluator, myDebugSession).invokeHint();
+ }
+ }.registerCustomShortcutSet(shortcut, getEditor().getContentComponent(), myDisposable);
+ }
+ return result;
+ }
+
+ @Override
+ public void hideHint() {
+ super.hideHint();
+ if (myDisposable != null) {
+ Disposer.dispose(myDisposable);
+
+ }
+ }
+
+ @Override
protected void evaluateAndShowHint() {
myEvaluator.evaluate(myExpression, new XEvaluationCallbackBase() {
@Override
@@ -136,6 +174,11 @@ public class XValueHint extends AbstractValueHint {
showTree(result);
}
else {
+ if (getType() == ValueHintType.MOUSE_OVER_HINT) {
+ text.insert(0, "(" + KeymapUtil.getFirstKeyboardShortcutText("ShowErrorDescription") + ") ",
+ SimpleTextAttributes.GRAYED_ATTRIBUTES);
+ }
+
JComponent component = createExpandableHintComponent(text, new Runnable() {
@Override
public void run() {
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/common/AbstractValueHint.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/common/AbstractValueHint.java
index 7b860b49d255..c24ce74df1c6 100644
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/common/AbstractValueHint.java
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/common/AbstractValueHint.java
@@ -65,7 +65,7 @@ public abstract class AbstractValueHint {
private final Project myProject;
private final Editor myEditor;
private final ValueHintType myType;
- private final Point myPoint;
+ protected final Point myPoint;
private LightweightHint myCurrentHint;
private boolean myHintHidden;
private TextRange myCurrentRange;
@@ -132,6 +132,10 @@ public abstract class AbstractValueHint {
}
}
+ public void invokeHint() {
+ invokeHint(null);
+ }
+
public void invokeHint(Runnable hideRunnable) {
myHideRunnable = hideRunnable;
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/common/DebuggerTreeWithHistoryContainer.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/common/DebuggerTreeWithHistoryContainer.java
index c7c5af9f6fb4..2851c701ef70 100644
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/common/DebuggerTreeWithHistoryContainer.java
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/common/DebuggerTreeWithHistoryContainer.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -170,7 +170,7 @@ abstract class DebuggerTreeWithHistoryContainer<D> {
}
@Override
- public void onFailure(Throwable t) {
+ public void onFailure(@NotNull Throwable t) {
LOG.debug(t);
}
});
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/common/DebuggerTreeWithHistoryPopup.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/common/DebuggerTreeWithHistoryPopup.java
index e4ea46b69ea9..97edec9133ba 100644
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/common/DebuggerTreeWithHistoryPopup.java
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/common/DebuggerTreeWithHistoryPopup.java
@@ -20,6 +20,7 @@ import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.popup.JBPopup;
import com.intellij.openapi.ui.popup.JBPopupFactory;
+import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.Disposer;
import com.intellij.ui.ScreenUtil;
import com.intellij.ui.awt.RelativePoint;
@@ -64,7 +65,7 @@ class DebuggerTreeWithHistoryPopup<D> extends DebuggerTreeWithHistoryContainer<D
}
@Override
- protected void updateContainer(Tree tree, String title) {
+ protected void updateContainer(final Tree tree, String title) {
if (myPopup != null) {
myPopup.cancel();
}
@@ -75,6 +76,21 @@ class DebuggerTreeWithHistoryPopup<D> extends DebuggerTreeWithHistoryContainer<D
.setResizable(true)
.setMovable(true)
.setDimensionServiceKey(myProject, DIMENSION_SERVICE_KEY, false)
+ .setMayBeParent(true)
+ .setCancelCallback(new Computable<Boolean>() {
+ @Override
+ public Boolean compute() {
+ Window parent = SwingUtilities.getWindowAncestor(tree);
+ if (parent != null) {
+ for (Window child : parent.getOwnedWindows()) {
+ if (child.isShowing()) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+ })
.createPopup();
if (tree instanceof Disposable) {
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/WatchInplaceEditor.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/WatchInplaceEditor.java
index 683c27e30e18..00ceef568c21 100644
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/WatchInplaceEditor.java
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/WatchInplaceEditor.java
@@ -39,7 +39,7 @@ public class WatchInplaceEditor extends XDebuggerTreeInplaceEditor {
@Nullable private final WatchNode myOldNode;
public WatchInplaceEditor(@NotNull WatchesRootNode rootNode,
- @NotNull XDebugSession session, XWatchesView watchesView, final WatchNode node,
+ @Nullable XDebugSession session, XWatchesView watchesView, final WatchNode node,
@NonNls final String historyId,
final @Nullable WatchNode oldNode) {
super((XDebuggerTreeNode)node, historyId);
@@ -47,7 +47,9 @@ public class WatchInplaceEditor extends XDebuggerTreeInplaceEditor {
myWatchesView = watchesView;
myOldNode = oldNode;
myExpressionEditor.setExpression(oldNode != null ? oldNode.getExpression() : null);
- new WatchEditorSessionListener(session).install();
+ if (session != null) {
+ new WatchEditorSessionListener(session).install();
+ }
}
@Override
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugView.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugView.java
index 0007ec2f9997..847dd9004a49 100644
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugView.java
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugView.java
@@ -19,6 +19,7 @@ import com.intellij.execution.ui.layout.ViewContext;
import com.intellij.ide.DataManager;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.DataContext;
+import com.intellij.openapi.actionSystem.DataKey;
import com.intellij.ui.content.ContentManager;
import com.intellij.util.SingleAlarm;
import com.intellij.xdebugger.XDebugSession;
@@ -66,15 +67,20 @@ public abstract class XDebugView implements Disposable {
@Nullable
public static XDebugSession getSession(@NotNull Component component) {
+ return getData(XDebugSession.DATA_KEY, component);
+ }
+
+ @Nullable
+ public static <T> T getData(DataKey<T> key, @NotNull Component component) {
DataContext dataContext = DataManager.getInstance().getDataContext(component);
ViewContext viewContext = ViewContext.CONTEXT_KEY.getData(dataContext);
ContentManager contentManager = viewContext == null ? null : viewContext.getContentManager();
if (contentManager != null) {
- XDebugSession session = XDebugSession.DATA_KEY.getData(DataManager.getInstance().getDataContext(contentManager.getComponent()));
- if (session != null) {
- return session;
+ T data = key.getData(DataManager.getInstance().getDataContext(contentManager.getComponent()));
+ if (data != null) {
+ return data;
}
}
- return XDebugSession.DATA_KEY.getData(dataContext);
+ return key.getData(dataContext);
}
}
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugViewSessionListener.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugViewSessionListener.java
index d790113b1816..f124078f5a57 100644
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugViewSessionListener.java
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugViewSessionListener.java
@@ -16,7 +16,6 @@
package com.intellij.xdebugger.impl.frame;
import com.intellij.ui.AppUIUtil;
-import com.intellij.xdebugger.XDebugSession;
import com.intellij.xdebugger.XDebugSessionAdapter;
import org.jetbrains.annotations.NotNull;
@@ -25,15 +24,13 @@ import org.jetbrains.annotations.NotNull;
*/
public class XDebugViewSessionListener extends XDebugSessionAdapter {
private final XDebugView myDebugView;
- private final XDebugSession session;
- public XDebugViewSessionListener(@NotNull XDebugView debugView, @NotNull XDebugSession session) {
+ public XDebugViewSessionListener(@NotNull XDebugView debugView) {
myDebugView = debugView;
- this.session = session;
}
private void onSessionEvent(final @NotNull XDebugView.SessionEvent event) {
- AppUIUtil.invokeLaterIfProjectAlive(session.getProject(), new Runnable() {
+ AppUIUtil.invokeOnEdt(new Runnable() {
@Override
public void run() {
myDebugView.processSessionEvent(event);
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebuggerFramesList.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebuggerFramesList.java
index 9b39ad63deb8..63a1cfeea6af 100644
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebuggerFramesList.java
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebuggerFramesList.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -15,6 +15,8 @@
*/
package com.intellij.xdebugger.impl.frame;
+import com.intellij.openapi.actionSystem.CommonDataKeys;
+import com.intellij.openapi.actionSystem.DataProvider;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
@@ -27,7 +29,9 @@ import com.intellij.util.ui.UIUtil;
import com.intellij.xdebugger.XDebuggerBundle;
import com.intellij.xdebugger.XSourcePosition;
import com.intellij.xdebugger.frame.XStackFrame;
+import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.*;
@@ -78,7 +82,7 @@ public class XDebuggerFramesList extends DebuggerFramesList {
}
@Override
- public int getSourceActions(JComponent c) {
+ public int getSourceActions(@NotNull JComponent c) {
return COPY;
}
};
@@ -90,6 +94,17 @@ public class XDebuggerFramesList extends DebuggerFramesList {
doInit();
setTransferHandler(DEFAULT_TRANSFER_HANDLER);
+ setDataProvider(new DataProvider() {
+ @Nullable
+ @Override
+ public Object getData(@NonNls String dataId) {
+ if (CommonDataKeys.VIRTUAL_FILE.is(dataId) && mySelectedFrame != null) {
+ XSourcePosition position = mySelectedFrame.getSourcePosition();
+ return position != null ? position.getFile() : null;
+ }
+ return null;
+ }
+ });
}
@Override
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XFramesView.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XFramesView.java
index 9999ac015b77..cd1fee38b074 100644
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XFramesView.java
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XFramesView.java
@@ -61,6 +61,7 @@ public class XFramesView extends XDebugView {
private final ComboBox myThreadComboBox;
private final Set<XExecutionStack> myExecutionStacks = ContainerUtil.newHashSet();
private XExecutionStack mySelectedStack;
+ private int mySelectedFrameIndex;
private boolean myListenersEnabled;
private final Map<XExecutionStack, StackFramesListBuilder> myBuilders = new HashMap<XExecutionStack, StackFramesListBuilder>();
private final ActionToolbarImpl myToolbar;
@@ -76,7 +77,7 @@ public class XFramesView extends XDebugView {
@Override
public void valueChanged(ListSelectionEvent e) {
if (myListenersEnabled && !e.getValueIsAdjusting()) {
- processFrameSelection(e);
+ processFrameSelection(getSession(e));
}
}
});
@@ -86,7 +87,7 @@ public class XFramesView extends XDebugView {
if (myListenersEnabled) {
int i = myFramesList.locationToIndex(e.getPoint());
if (i != -1 && myFramesList.isSelectedIndex(i)) {
- processFrameSelection(e);
+ processFrameSelection(getSession(e));
}
}
}
@@ -115,9 +116,10 @@ public class XFramesView extends XDebugView {
if (e.getStateChange() == ItemEvent.SELECTED) {
Object item = e.getItem();
- if (item instanceof XExecutionStack) {
+ if (item != mySelectedStack && item instanceof XExecutionStack) {
XDebugSession session = getSession(e);
if (session != null) {
+ mySelectedFrameIndex = 0;
updateFrames((XExecutionStack)item, session);
}
}
@@ -209,16 +211,21 @@ public class XFramesView extends XDebugView {
XStackFrame currentStackFrame = session == null ? null : session.getCurrentStackFrame();
if (currentStackFrame != null) {
myFramesList.setSelectedValue(currentStackFrame, true);
+ mySelectedFrameIndex = myFramesList.getSelectedIndex();
}
return;
}
+ if (event != SessionEvent.SETTINGS_CHANGED) {
+ mySelectedFrameIndex = 0;
+ mySelectedStack = null;
+ }
+
myListenersEnabled = false;
for (StackFramesListBuilder builder : myBuilders.values()) {
builder.dispose();
}
myBuilders.clear();
- mySelectedStack = null;
XSuspendContext suspendContext = session == null ? null : session.getSuspendContext();
if (suspendContext == null) {
requestClear();
@@ -234,7 +241,7 @@ public class XFramesView extends XDebugView {
XExecutionStack[] executionStacks = suspendContext.getExecutionStacks();
addExecutionStacks(Arrays.asList(executionStacks));
- XExecutionStack activeExecutionStack = suspendContext.getActiveExecutionStack();
+ XExecutionStack activeExecutionStack = mySelectedStack != null ? mySelectedStack : suspendContext.getActiveExecutionStack();
myThreadComboBox.setSelectedItem(activeExecutionStack);
myThreadsPanel.removeAll();
myThreadsPanel.add(myToolbar.getComponent(), BorderLayout.EAST);
@@ -265,9 +272,6 @@ public class XFramesView extends XDebugView {
}
private void updateFrames(final XExecutionStack executionStack, @NotNull XDebugSession session) {
- if (mySelectedStack == executionStack) {
- return;
- }
if (mySelectedStack != null) {
getOrCreateBuilder(mySelectedStack, session).stop();
}
@@ -275,6 +279,7 @@ public class XFramesView extends XDebugView {
mySelectedStack = executionStack;
if (executionStack != null) {
StackFramesListBuilder builder = getOrCreateBuilder(executionStack, session);
+ myListenersEnabled = false;
builder.initModel(myFramesList.getModel());
builder.start();
}
@@ -292,12 +297,12 @@ public class XFramesView extends XDebugView {
return myMainPanel;
}
- private void processFrameSelection(@NotNull EventObject e) {
+ private void processFrameSelection(XDebugSession session) {
+ mySelectedFrameIndex = myFramesList.getSelectedIndex();
Object selected = myFramesList.getSelectedValue();
if (selected instanceof XStackFrame) {
- XDebugSession session = getSession(e);
if (session != null) {
- session.setCurrentStackFrame(mySelectedStack, (XStackFrame)selected, myFramesList.getSelectedIndex() == 0);
+ session.setCurrentStackFrame(mySelectedStack, (XStackFrame)selected, mySelectedFrameIndex == 0);
}
}
}
@@ -324,9 +329,7 @@ public class XFramesView extends XDebugView {
public void run() {
myStackFrames.addAll(stackFrames);
addFrameListElements(stackFrames, last);
- if (myNextFrameIndex == 0) {
- selectTopFrame();
- }
+ selectCurrentFrame();
myNextFrameIndex += stackFrames.size();
myAllFramesLoaded = last;
if (last) {
@@ -390,11 +393,13 @@ public class XFramesView extends XDebugView {
myRunning = false;
}
- private void selectTopFrame() {
- if (!myStackFrames.isEmpty() && mySelectedStack != null) {
- XStackFrame topFrame = myStackFrames.get(0);
- myFramesList.setSelectedValue(topFrame, true);
- mySession.setCurrentStackFrame(mySelectedStack, topFrame, true);
+ private void selectCurrentFrame() {
+ if (mySelectedStack != null &&
+ myFramesList.getSelectedIndex() != mySelectedFrameIndex &&
+ myFramesList.getElementCount() > mySelectedFrameIndex &&
+ myFramesList.getModel().get(mySelectedFrameIndex) != null) {
+ myFramesList.setSelectedIndex(mySelectedFrameIndex);
+ processFrameSelection(mySession);
myListenersEnabled = true;
}
}
@@ -411,7 +416,7 @@ public class XFramesView extends XDebugView {
else if (!myAllFramesLoaded) {
model.addElement(null);
}
- selectTopFrame();
+ selectCurrentFrame();
}
}
}
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XVariablesViewBase.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XVariablesViewBase.java
index d4bd27c30d9b..4bfcfa58855f 100644
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XVariablesViewBase.java
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XVariablesViewBase.java
@@ -15,34 +15,34 @@
*/
package com.intellij.xdebugger.impl.frame;
-import com.intellij.codeInsight.hint.HintManager;
-import com.intellij.codeInsight.hint.HintUtil;
import com.intellij.ide.dnd.DnDManager;
-import com.intellij.openapi.Disposable;
+import com.intellij.openapi.application.AccessToken;
+import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.editor.Editor;
+import com.intellij.openapi.editor.LogicalPosition;
import com.intellij.openapi.editor.event.SelectionEvent;
import com.intellij.openapi.editor.event.SelectionListener;
+import com.intellij.openapi.editor.impl.SelectionModelImpl;
import com.intellij.openapi.fileEditor.FileEditor;
import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx;
import com.intellij.openapi.fileEditor.impl.text.PsiAwareTextEditorImpl;
import com.intellij.openapi.project.Project;
-import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.Pair;
+import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.ui.SimpleColoredComponent;
-import com.intellij.ui.SimpleColoredText;
+import com.intellij.xdebugger.XDebugSession;
import com.intellij.xdebugger.XDebuggerBundle;
import com.intellij.xdebugger.XSourcePosition;
+import com.intellij.xdebugger.evaluation.ExpressionInfo;
import com.intellij.xdebugger.evaluation.XDebuggerEditorsProvider;
import com.intellij.xdebugger.evaluation.XDebuggerEvaluator;
-import com.intellij.xdebugger.frame.XFullValueEvaluator;
import com.intellij.xdebugger.frame.XStackFrame;
import com.intellij.xdebugger.frame.XValue;
-import com.intellij.xdebugger.frame.XValuePlace;
-import com.intellij.xdebugger.frame.presentation.XValuePresentation;
import com.intellij.xdebugger.impl.actions.XDebuggerActions;
+import com.intellij.xdebugger.impl.evaluate.quick.XValueHint;
+import com.intellij.xdebugger.impl.evaluate.quick.common.ValueHintType;
import com.intellij.xdebugger.impl.ui.tree.XDebuggerTree;
import com.intellij.xdebugger.impl.ui.tree.XDebuggerTreePanel;
import com.intellij.xdebugger.impl.ui.tree.XDebuggerTreeRestorer;
@@ -50,11 +50,11 @@ import com.intellij.xdebugger.impl.ui.tree.XDebuggerTreeState;
import com.intellij.xdebugger.impl.ui.tree.nodes.XEvaluationCallbackBase;
import com.intellij.xdebugger.impl.ui.tree.nodes.XStackFrameNode;
import com.intellij.xdebugger.impl.ui.tree.nodes.XValueNodeImpl;
-import com.intellij.xdebugger.impl.ui.tree.nodes.XValueNodePresentationConfigurator;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
+import java.awt.*;
import java.util.HashMap;
import java.util.Set;
@@ -88,68 +88,53 @@ public abstract class XVariablesViewBase extends XDebugView {
myTreeRestorer = myTreeState.restoreState(tree);
}
if (position != null && Registry.is("ide.debugger.inline")) {
- final VirtualFile file = position.getFile();
- final FileEditor fileEditor = FileEditorManagerEx.getInstanceEx(project).getSelectedEditor(file);
- if (fileEditor instanceof PsiAwareTextEditorImpl) {
- final Editor editor = ((PsiAwareTextEditorImpl)fileEditor).getEditor();
- final SelectionListener listener = new SelectionListener() {
- @Override
- public void selectionChanged(SelectionEvent e) {
- final String text = editor.getDocument().getText(e.getNewRange());
- final XDebuggerEvaluator evaluator = stackFrame.getEvaluator();
- if (evaluator != null && !StringUtil.isEmpty(text)
- && !(text.contains("exec(") || text.contains("++") || text.contains("--") || text.contains("="))) {
- evaluator.evaluate(text, new XEvaluationCallbackBase() {
- @Override
- public void evaluated(@NotNull XValue result) {
- result.computePresentation(new XValueNodePresentationConfigurator.ConfigurableXValueNodeImpl() {
- @Override
- public void applyPresentation(@Nullable Icon icon,
- @NotNull XValuePresentation valuePresenter,
- boolean hasChildren) {
- SimpleColoredText text = new SimpleColoredText();
- XValueNodeImpl.buildText(valuePresenter, text, false);
- SimpleColoredComponent component = HintUtil.createInformationComponent();
- text.appendToComponent(component);
- String str = text.toString();
- if ("undefined".equals(str) || str.startsWith("Cannot find local variable")
- || str.startsWith("Invalid expression")) {
- return; //todo[kb] this is temporary solution
- }
- HintManager.getInstance().hideAllHints();
- HintManager.getInstance().showInformationHint(editor, component);
- }
+ registerInlineEvaluator(stackFrame, tree, position, project);
+ }
+ }
- @Override
- public void setFullValueEvaluator(@NotNull XFullValueEvaluator fullValueEvaluator) {
- }
+ private void registerInlineEvaluator(final XStackFrame stackFrame,
+ XDebuggerTree tree,
+ final XSourcePosition position,
+ final Project project) {
+ final VirtualFile file = position.getFile();
+ final FileEditor fileEditor = FileEditorManagerEx.getInstanceEx(project).getSelectedEditor(file);
+ if (fileEditor instanceof PsiAwareTextEditorImpl) {
+ final Editor editor = ((PsiAwareTextEditorImpl)fileEditor).getEditor();
+ final SelectionListener listener = new SelectionListener() {
+ @Override
+ public void selectionChanged(final SelectionEvent e) {
+ final String text = editor.getDocument().getText(e.getNewRange());
+ final XDebuggerEvaluator evaluator = stackFrame.getEvaluator();
+ if (evaluator != null && !StringUtil.isEmpty(text)
+ && !(text.contains("exec(") || text.contains("++") || text.contains("--") || text.contains("="))) {
+ evaluator.evaluate(text, new XEvaluationCallbackBase() {
+ @Override
+ public void evaluated(@NotNull XValue result) {
+ final AccessToken token = ApplicationManager.getApplication().acquireReadActionLock();
+ try {
+ final XDebugSession session = getSession(getTree());
+ if (session == null) return;
+ final TextRange range = e.getNewRange();
+ final ExpressionInfo info = new ExpressionInfo(range);
+ final int offset = range.getStartOffset();
+ final LogicalPosition pos = editor.offsetToLogicalPosition(offset);
+ final Point point = editor.logicalPositionToXY(pos);
- @Override
- public boolean isObsolete() {
- return true;
- }
- }, XValuePlace.TOOLTIP);
+ new XValueHint(project, editor, point, ValueHintType.MOUSE_OVER_HINT, info, evaluator, session).invokeHint();
}
-
- @Override
- public void errorOccurred(@NotNull String errorMessage) {
- System.out.println(errorMessage);
+ finally {
+ token.finish();
}
- }, position);
- }
- }
- };
- editor.getSelectionModel().addSelectionListener(listener);
- Disposer.register(tree, new Disposable() {
- @Override
- public void dispose() {
- final FileEditor fileEditor = FileEditorManagerEx.getInstanceEx(project).getSelectedEditor(file);
- if (fileEditor instanceof PsiAwareTextEditorImpl) {
- ((PsiAwareTextEditorImpl)fileEditor).getEditor().getSelectionModel().removeSelectionListener(listener);
- }
+ }
+
+ @Override
+ public void errorOccurred(@NotNull String errorMessage) {
+ }
+ }, position);
}
- });
- }
+ }
+ };
+ ((SelectionModelImpl)editor.getSelectionModel()).addSelectionListener(listener, tree);
}
}
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XWatchesViewImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XWatchesViewImpl.java
index c510cd17c90a..8b94e2c4858a 100644
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XWatchesViewImpl.java
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XWatchesViewImpl.java
@@ -40,6 +40,7 @@ import com.intellij.xdebugger.frame.XStackFrame;
import com.intellij.xdebugger.impl.XDebugSessionImpl;
import com.intellij.xdebugger.impl.actions.XDebuggerActions;
import com.intellij.xdebugger.impl.breakpoints.XExpressionImpl;
+import com.intellij.xdebugger.impl.ui.XDebugSessionData;
import com.intellij.xdebugger.impl.ui.XDebugSessionTab;
import com.intellij.xdebugger.impl.ui.tree.XDebuggerTree;
import com.intellij.xdebugger.impl.ui.tree.XDebuggerTreePanel;
@@ -220,13 +221,9 @@ public class XWatchesViewImpl extends XDebugView implements DnDNativeTarget, XWa
@Override
public void addWatchExpression(@NotNull XExpression expression, int index, final boolean navigateToWatchNode) {
XDebugSession session = getSession(getTree());
- if (session == null) {
- return;
- }
-
- myRootNode.addWatchExpression(session.getDebugProcess().getEvaluator(), expression, index, navigateToWatchNode);
+ myRootNode.addWatchExpression(session != null ? session.getDebugProcess().getEvaluator() : null, expression, index, navigateToWatchNode);
updateSessionData();
- if (navigateToWatchNode) {
+ if (navigateToWatchNode && session != null) {
showWatchesTab((XDebugSessionImpl)session);
}
}
@@ -342,8 +339,15 @@ public class XWatchesViewImpl extends XDebugView implements DnDNativeTarget, XWa
}
XDebugSession session = getSession(getTree());
+ XExpression[] expressions = watchExpressions.toArray(new XExpression[watchExpressions.size()]);
if (session != null) {
- ((XDebugSessionImpl)session).setWatchExpressions(watchExpressions.toArray(new XExpression[watchExpressions.size()]));
+ ((XDebugSessionImpl)session).setWatchExpressions(expressions);
+ }
+ else {
+ XDebugSessionData data = getData(XDebugSessionData.DATA_KEY, getTree());
+ if (data != null) {
+ data.setWatchExpressions(expressions);
+ }
}
}
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerConfigurable.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerConfigurable.java
index 58896a87f596..3d0db0abc7fb 100644
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerConfigurable.java
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerConfigurable.java
@@ -22,6 +22,7 @@ import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.SmartList;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.xdebugger.XDebuggerBundle;
+import com.intellij.xdebugger.breakpoints.XBreakpointType;
import com.intellij.xdebugger.impl.DebuggerSupport;
import com.intellij.xdebugger.settings.DebuggerConfigurableProvider;
import com.intellij.xdebugger.settings.DebuggerSettingsCategory;
@@ -159,7 +160,7 @@ public class DebuggerConfigurable implements SearchableConfigurable.Parent {
@Override
public boolean isVisible() {
- return true;
+ return XBreakpointType.EXTENSION_POINT_NAME.getExtensions().length != 0;
}
@Override
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerConfigurableProvider.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerConfigurableProvider.java
new file mode 100644
index 000000000000..bb747f92eab7
--- /dev/null
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerConfigurableProvider.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2000-2014 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.xdebugger.impl.settings;
+
+import com.intellij.openapi.options.Configurable;
+import com.intellij.openapi.options.ConfigurableProvider;
+import com.intellij.xdebugger.breakpoints.XBreakpointType;
+import org.jetbrains.annotations.NotNull;
+
+public final class DebuggerConfigurableProvider extends ConfigurableProvider {
+ @NotNull
+ @Override
+ public Configurable createConfigurable() {
+ return new DebuggerConfigurable();
+ }
+
+ @Override
+ public boolean canCreateConfigurable() {
+ return XBreakpointType.EXTENSION_POINT_NAME.getExtensions().length != 0;
+ }
+}
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerSessionTabBase.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerSessionTabBase.java
index 053f18dd14bf..2bdbb7faa80d 100644
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerSessionTabBase.java
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerSessionTabBase.java
@@ -16,26 +16,22 @@
package com.intellij.xdebugger.impl.ui;
import com.intellij.debugger.ui.DebuggerContentInfo;
-import com.intellij.diagnostic.logging.AdditionalTabComponent;
-import com.intellij.diagnostic.logging.DebuggerLogConsoleManager;
import com.intellij.execution.ExecutionManager;
import com.intellij.execution.configurations.RunConfigurationBase;
import com.intellij.execution.configurations.RunProfile;
import com.intellij.execution.executors.DefaultDebugExecutor;
-import com.intellij.execution.process.ProcessHandler;
-import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.execution.runners.RunContentBuilder;
import com.intellij.execution.runners.RunTab;
-import com.intellij.execution.ui.*;
+import com.intellij.execution.ui.ConsoleViewContentType;
+import com.intellij.execution.ui.ExecutionConsole;
+import com.intellij.execution.ui.ObservableConsoleView;
import com.intellij.execution.ui.layout.LayoutAttractionPolicy;
import com.intellij.execution.ui.layout.LayoutViewOptions;
-import com.intellij.icons.AllIcons;
import com.intellij.ide.impl.ProjectUtil;
import com.intellij.ide.ui.customization.CustomActionsSchema;
import com.intellij.openapi.actionSystem.ActionGroup;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.project.Project;
-import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.ui.AppIcon;
@@ -44,20 +40,17 @@ import com.intellij.xdebugger.XDebuggerBundle;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import javax.swing.*;
import java.util.Collection;
/**
* @author nik
*/
-public abstract class DebuggerSessionTabBase extends RunTab implements DebuggerLogConsoleManager {
+public abstract class DebuggerSessionTabBase extends RunTab {
protected ExecutionConsole myConsole;
public DebuggerSessionTabBase(@NotNull Project project, @NotNull String runnerId, @NotNull String sessionName, @NotNull GlobalSearchScope searchScope) {
super(project, searchScope, runnerId, XDebuggerBundle.message("xdebugger.default.content.title"), sessionName);
- Disposer.register(project, this);
-
myUi.getDefaults()
.initTabDefaults(0, XDebuggerBundle.message("xdebugger.debugger.tab.title"), null)
.initFocusContent(DebuggerContentInfo.FRAME_CONTENT, XDebuggerUIConstants.LAYOUT_VIEW_BREAKPOINT_CONDITION)
@@ -68,32 +61,6 @@ public abstract class DebuggerSessionTabBase extends RunTab implements DebuggerL
return (ActionGroup)CustomActionsSchema.getInstance().getCorrectedAction(id);
}
- public abstract RunContentDescriptor getRunContentDescriptor();
-
- @Override
- public ProcessHandler getProcessHandler() {
- return getRunContentDescriptor().getProcessHandler();
- }
-
- @Override
- protected Content createLogContent(AdditionalTabComponent tabComponent, String id, Icon icon) {
- Content result = super.createLogContent(tabComponent, id, icon);
- result.setCloseable(false);
- result.setDescription(tabComponent.getTooltip());
- return result;
- }
-
- @Override
- protected Icon getDefaultIcon() {
- return AllIcons.FileTypes.Text;
- }
-
- @Override
- @NotNull
- public RunnerLayoutUi getUi() {
- return myUi;
- }
-
protected void attachNotificationTo(final Content content) {
if (myConsole instanceof ObservableConsoleView) {
ObservableConsoleView observable = (ObservableConsoleView)myConsole;
@@ -107,12 +74,11 @@ public abstract class DebuggerSessionTabBase extends RunTab implements DebuggerL
}, content);
RunProfile profile = getRunProfile();
if (profile instanceof RunConfigurationBase && !ApplicationManager.getApplication().isUnitTestMode()) {
- final RunConfigurationBase runConfigurationBase = (RunConfigurationBase)profile;
- observable.addChangeListener(new RunContentBuilder.ConsoleToFrontListener(runConfigurationBase,
- getProject(),
+ observable.addChangeListener(new RunContentBuilder.ConsoleToFrontListener((RunConfigurationBase)profile,
+ myProject,
DefaultDebugExecutor.getDebugExecutorInstance(),
myRunContentDescriptor,
- getUi()),
+ myUi),
content);
}
}
@@ -120,21 +86,20 @@ public abstract class DebuggerSessionTabBase extends RunTab implements DebuggerL
@Nullable
protected RunProfile getRunProfile() {
- ExecutionEnvironment environment = getEnvironment();
- return environment != null ? environment.getRunProfile() : null;
+ return myEnvironment != null ? myEnvironment.getRunProfile() : null;
}
public void toFront(boolean focus) {
if (!ApplicationManager.getApplication().isUnitTestMode()) {
- ExecutionManager.getInstance(getProject()).getContentManager().toFrontRunContent(DefaultDebugExecutor.getDebugExecutorInstance(), myRunContentDescriptor);
+ ExecutionManager.getInstance(myProject).getContentManager().toFrontRunContent(DefaultDebugExecutor.getDebugExecutorInstance(), myRunContentDescriptor);
if (focus) {
ApplicationManager.getApplication().invokeLater(new Runnable() {
@Override
public void run() {
boolean focusWnd = Registry.is("debugger.mayBringFrameToFrontOnBreakpoint");
- ProjectUtil.focusProjectWindow(getProject(), focusWnd);
+ ProjectUtil.focusProjectWindow(myProject, focusWnd);
if (!focusWnd) {
- AppIcon.getInstance().requestAttention(getProject(), true);
+ AppIcon.getInstance().requestAttention(myProject, true);
}
}
});
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 1a4505f6d85b..881ed56bad3d 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
@@ -20,8 +20,8 @@ import com.intellij.execution.Executor;
import com.intellij.execution.executors.DefaultDebugExecutor;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.execution.runners.RunContentBuilder;
-import com.intellij.execution.ui.ExecutionConsole;
import com.intellij.execution.ui.RunContentDescriptor;
+import com.intellij.execution.ui.RunnerLayoutUi;
import com.intellij.execution.ui.actions.CloseAction;
import com.intellij.execution.ui.layout.PlaceInGrid;
import com.intellij.execution.ui.layout.impl.ViewImpl;
@@ -83,6 +83,11 @@ public class XDebugSessionTab extends DebuggerSessionTabBase {
return new XDebugSessionTab(session, icon, environment);
}
+ @NotNull
+ public RunnerLayoutUi getUi() {
+ return myUi;
+ }
+
private XDebugSessionTab(@NotNull XDebugSessionImpl session,
@Nullable Icon icon,
@Nullable ExecutionEnvironment environment) {
@@ -95,7 +100,7 @@ public class XDebugSessionTab extends DebuggerSessionTabBase {
myUi.addContent(createWatchesContent(session), 0, PlaceInGrid.right, false);
for (XDebugView view : myViews) {
- Disposer.register(this, view);
+ Disposer.register(myRunContentDescriptor, view);
}
attachToSession(session);
@@ -115,20 +120,19 @@ public class XDebugSessionTab extends DebuggerSessionTabBase {
}
}
}
- }, this);
+ }, myRunContentDescriptor);
rebuildViews();
}
private void setSession(@NotNull XDebugSessionImpl session, @Nullable ExecutionEnvironment environment, @Nullable Icon icon) {
- if (environment != null) {
- setEnvironment(environment);
- }
-
+ myEnvironment = environment;
mySession = session;
mySessionData = session.getSessionData();
myConsole = session.getConsoleView();
myRunContentDescriptor = new RunContentDescriptor(myConsole, session.getDebugProcess().getProcessHandler(), myUi.getComponent(), session.getSessionName(), icon);
+ Disposer.register(myRunContentDescriptor, this);
+ Disposer.register(myProject, myRunContentDescriptor);
}
@Nullable
@@ -180,7 +184,7 @@ public class XDebugSessionTab extends DebuggerSessionTabBase {
@NotNull
private Content createFramesContent() {
- XFramesView framesView = new XFramesView(getProject());
+ XFramesView framesView = new XFramesView(myProject);
myViews.add(framesView);
Content framesContent = myUi.createContent(DebuggerContentInfo.FRAME_CONTENT, framesView.getMainPanel(),
XDebuggerBundle.message("debugger.session.tab.frames.title"), AllIcons.Debugger.Frame, null);
@@ -188,12 +192,8 @@ public class XDebugSessionTab extends DebuggerSessionTabBase {
return framesContent;
}
- public ExecutionConsole getConsole() {
- return myConsole;
- }
-
public void rebuildViews() {
- AppUIUtil.invokeLaterIfProjectAlive(getProject(), new Runnable() {
+ AppUIUtil.invokeLaterIfProjectAlive(myProject, new Runnable() {
@Override
public void run() {
for (XDebugView view : myViews) {
@@ -209,7 +209,7 @@ public class XDebugSessionTab extends DebuggerSessionTabBase {
private void attachToSession(@NotNull XDebugSessionImpl session) {
for (XDebugView view : myViews) {
- session.addSessionListener(new XDebugViewSessionListener(view, session), this);
+ session.addSessionListener(new XDebugViewSessionListener(view), myRunContentDescriptor);
}
XDebugTabLayouter layouter = session.getDebugProcess().createTabLayouter();
@@ -225,8 +225,7 @@ public class XDebugSessionTab extends DebuggerSessionTabBase {
DefaultActionGroup leftToolbar = new DefaultActionGroup();
final Executor debugExecutor = DefaultDebugExecutor.getDebugExecutorInstance();
- ExecutionEnvironment environment = getEnvironment();
- if (environment != null) {
+ if (myEnvironment != null) {
leftToolbar.add(ActionManager.getInstance().getAction(IdeActions.ACTION_RERUN));
List<AnAction> additionalRestartActions = session.getRestartActions();
if (!additionalRestartActions.isEmpty()) {
@@ -247,24 +246,12 @@ public class XDebugSessionTab extends DebuggerSessionTabBase {
leftToolbar.add(myUi.getOptions().getLayoutActions());
final AnAction[] commonSettings = myUi.getOptions().getSettingsActionsList();
- final AnAction commonSettingsList = myUi.getOptions().getSettingsActions();
-
- final DefaultActionGroup settings = new DefaultActionGroup("DebuggerSettings", commonSettings.length > 0) {
- @Override
- public void update(AnActionEvent e) {
- e.getPresentation().setText(ActionsBundle.message("group.XDebugger.settings.text"));
- e.getPresentation().setIcon(commonSettingsList.getTemplatePresentation().getIcon());
- }
-
- @Override
- public boolean isDumbAware() {
- return true;
- }
- };
- for (AnAction each : commonSettings) {
- settings.add(each);
- }
+ DefaultActionGroup settings = new DefaultActionGroup(ActionsBundle.message("group.XDebugger.settings.text"), true);
+ settings.getTemplatePresentation().setIcon(myUi.getOptions().getSettingsActions().getTemplatePresentation().getIcon());
if (commonSettings.length > 0) {
+ for (AnAction each : commonSettings) {
+ settings.add(each);
+ }
settings.addSeparator();
}
if (!session.getDebugProcess().isValuesCustomSorted()) {
@@ -276,18 +263,18 @@ public class XDebugSessionTab extends DebuggerSessionTabBase {
leftToolbar.addSeparator();
leftToolbar.add(PinToolwindowTabAction.getPinAction());
- leftToolbar.add(new CloseAction(environment != null ? environment.getExecutor() : debugExecutor, myRunContentDescriptor, getProject()));
+ leftToolbar.add(new CloseAction(myEnvironment != null ? myEnvironment.getExecutor() : debugExecutor, myRunContentDescriptor, myProject));
leftToolbar.add(new ContextHelpAction(debugExecutor.getHelpId()));
DefaultActionGroup topToolbar = new DefaultActionGroup();
topToolbar.addAll(getCustomizedActionGroup(XDebuggerActions.TOOL_WINDOW_TOP_TOOLBAR_GROUP));
- session.getDebugProcess().registerAdditionalActions(leftToolbar, topToolbar);
+ session.getDebugProcess().registerAdditionalActions(leftToolbar, topToolbar, settings);
myUi.getOptions().setLeftToolbar(leftToolbar, ActionPlaces.DEBUGGER_TOOLBAR);
myUi.getOptions().setTopToolbar(topToolbar, ActionPlaces.DEBUGGER_TOOLBAR);
- if (environment != null) {
- initLogConsoles(environment.getRunProfile(), myRunContentDescriptor.getProcessHandler(), myConsole);
+ if (myEnvironment != null) {
+ initLogConsoles(myEnvironment.getRunProfile(), myRunContentDescriptor, myConsole);
}
}
@@ -296,7 +283,6 @@ public class XDebugSessionTab extends DebuggerSessionTabBase {
mySession = null;
}
- @Override
@Nullable
public RunContentDescriptor getRunContentDescriptor() {
return myRunContentDescriptor;
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/ValueMarkerPresentationDialog.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/ValueMarkerPresentationDialog.java
index 4e164cc7fd15..e135bb1f4629 100644
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/ValueMarkerPresentationDialog.java
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/ValueMarkerPresentationDialog.java
@@ -17,12 +17,14 @@ package com.intellij.xdebugger.impl.ui.tree;
import org.jetbrains.annotations.Nullable;
+import java.awt.Component;
+
/**
* @author nik
*/
public class ValueMarkerPresentationDialog extends ValueMarkerPresentationDialogBase {
- public ValueMarkerPresentationDialog(@Nullable String defaultText) {
- super(defaultText);
+ public ValueMarkerPresentationDialog(@Nullable Component parent, @Nullable String defaultText) {
+ super(parent, defaultText);
init();
}
}
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/ValueMarkerPresentationDialogBase.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/ValueMarkerPresentationDialogBase.java
index 8bb4327e36ff..fc7303460cbf 100644
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/ValueMarkerPresentationDialogBase.java
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/ValueMarkerPresentationDialogBase.java
@@ -38,8 +38,8 @@ public abstract class ValueMarkerPresentationDialogBase extends DialogWrapper {
private FixedSizeButton myChooseColorButton;
private JPanel mySamplePanel;
- public ValueMarkerPresentationDialogBase(final @Nullable String defaultText) {
- super(true);
+ public ValueMarkerPresentationDialogBase(@Nullable Component parent, final @Nullable String defaultText) {
+ super(parent, true);
setTitle("Select Object Label");
setModal(true);
myLabelField.getDocument().addDocumentListener(new DocumentAdapter() {
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/WatchesRootNode.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/WatchesRootNode.java
index cf67f7d5fdb5..2e4e168b8d84 100644
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/WatchesRootNode.java
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/WatchesRootNode.java
@@ -188,9 +188,7 @@ public class WatchesRootNode extends XDebuggerTreeNode {
fireNodeStructureChanged(messageNode);
}
XDebugSession session = XDebugView.getSession(myTree);
- if (session != null) {
- new WatchInplaceEditor(this, session, myWatchesView, messageNode, "watch", node).show();
- }
+ new WatchInplaceEditor(this, session, myWatchesView, messageNode, "watch", node).show();
}
private class MyEvaluationCallback extends XEvaluationCallbackBase {
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 a2fb3d51d253..5a7c4bb6d0d8 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
@@ -187,14 +187,14 @@ public abstract class XValueContainerNode<ValueContainer extends XValueContainer
myTemporaryMessageChildren != null ? myTemporaryMessageChildren : Collections.<MessageTreeNode>emptyList());
final int[] indices = getNodesIndices(allMessageChildren);
final TreeNode[] nodes = getChildNodes(indices);
- myMessageChildren = null;
- myTemporaryMessageChildren = null;
fireNodesRemoved(indices, nodes);
if (!temporary) {
myMessageChildren = messages;
+ myTemporaryMessageChildren = null;
}
else {
myTemporaryMessageChildren = messages;
+ myMessageChildren = null;
}
myCachedAllChildren = null;
fireNodesInserted(messages);