diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/PositionHighlighter.java b/java/debugger/impl/src/com/intellij/debugger/ui/PositionHighlighter.java index 1339e9c9bc0d..fa91c9b60141 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/PositionHighlighter.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/PositionHighlighter.java @@ -15,7 +15,6 @@ */ package com.intellij.debugger.ui; -import com.intellij.codeInsight.daemon.impl.DaemonListeners; import com.intellij.debugger.DebuggerBundle; import com.intellij.debugger.DebuggerInvocationUtil; import com.intellij.debugger.SourcePosition; @@ -131,9 +130,9 @@ public class PositionHighlighter { private static void adjustCounter(@NotNull Editor editor, int increment) { JComponent component = editor.getComponent(); - Object o = component.getClientProperty(DaemonListeners.IGNORE_MOUSE_TRACKING); + Object o = component.getClientProperty(Editor.IGNORE_MOUSE_TRACKING); Integer value = ((o instanceof Integer) ? (Integer)o : 0) + increment; - component.putClientProperty(DaemonListeners.IGNORE_MOUSE_TRACKING, value > 0 ? value : null); + component.putClientProperty(Editor.IGNORE_MOUSE_TRACKING, value > 0 ? value : null); } public void remove() { diff --git a/platform/editor-ui-api/src/com/intellij/openapi/editor/Editor.java b/platform/editor-ui-api/src/com/intellij/openapi/editor/Editor.java index bd63b43f1af3..1b2dcbb29d63 100644 --- a/platform/editor-ui-api/src/com/intellij/openapi/editor/Editor.java +++ b/platform/editor-ui-api/src/com/intellij/openapi/editor/Editor.java @@ -22,6 +22,7 @@ import com.intellij.openapi.editor.event.EditorMouseMotionListener; import com.intellij.openapi.editor.markup.MarkupModel; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.UserDataHolder; +import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -37,6 +38,7 @@ import java.awt.event.MouseEvent; * @see EditorFactory#createViewer(Document) */ public interface Editor extends UserDataHolder { + @NonNls Object IGNORE_MOUSE_TRACKING = "ignore_mouse_tracking"; Editor[] EMPTY_ARRAY = new Editor[0]; /** diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonListeners.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonListeners.java index 5efc48614154..24f1716c9d48 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonListeners.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonListeners.java @@ -92,7 +92,6 @@ import java.util.List; */ public class DaemonListeners implements Disposable { private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.daemon.impl.DaemonListeners"); - @NonNls public static final Object IGNORE_MOUSE_TRACKING = "ignore_mouse_tracking"; private final Project myProject; private final DaemonCodeAnalyzerImpl myDaemonCodeAnalyzer; @@ -582,7 +581,7 @@ public class DaemonListeners implements Disposable { public void mouseMoved(EditorMouseEvent e) { Editor editor = e.getEditor(); if (myProject != editor.getProject()) return; - if (editor.getComponent().getClientProperty(IGNORE_MOUSE_TRACKING) != null) return; + if (editor.getComponent().getClientProperty(Editor.IGNORE_MOUSE_TRACKING) != null) return; boolean shown = false; try { 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 905e7f92b6d2..00f64af0ed20 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java @@ -38,10 +38,14 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ReadAction; import com.intellij.openapi.application.Result; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.markup.GutterIconRenderer; +import com.intellij.openapi.fileEditor.FileEditorManager; +import com.intellij.openapi.fileEditor.OpenFileDescriptor; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.MessageType; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.wm.ToolWindowId; import com.intellij.ui.AppUIUtil; import com.intellij.util.EventDispatcher; @@ -489,6 +493,7 @@ public class XDebugSessionImpl implements XDebugSession { private void doResume() { if (!myPaused.getAndSet(false)) return; + final XSourcePosition oldPosition = myCurrentPosition; myDispatcher.getMulticaster().beforeSessionResume(); myDebuggerManager.setActiveSession(this, null, false, null); mySuspendContext = null; @@ -502,6 +507,9 @@ public class XDebugSessionImpl implements XDebugSession { if (mySessionTab != null) { mySessionTab.getUi().clearAttractionBy(XDebuggerUIConstants.LAYOUT_VIEW_BREAKPOINT_CONDITION); } + if (oldPosition != null) { + adjustMouseTrackingCounter(oldPosition, -1); + } } }); myDispatcher.getMulticaster().sessionResumed(); @@ -730,11 +738,39 @@ public class XDebugSessionImpl implements XDebugSession { } mySessionTab.toFront(); mySessionTab.getUi().attractBy(XDebuggerUIConstants.LAYOUT_VIEW_BREAKPOINT_CONDITION); + if (myCurrentPosition != null) { + adjustMouseTrackingCounter(myCurrentPosition, 1); + } } }); myDispatcher.getMulticaster().sessionPaused(); } + private Editor getEditor(@NotNull XSourcePosition position) { + final VirtualFile psiFile = position.getFile(); + if (!psiFile.isValid()) { + return null; + } + + final int offset = position.getOffset(); + if (offset < 0 || offset > psiFile.getLength()) { + LOG.error("Incorrect offset " + offset + " in file " + psiFile.getName()); + return null; + } + + return FileEditorManager.getInstance(myProject).openTextEditor(new OpenFileDescriptor(myProject, psiFile, offset), false); + } + + private void adjustMouseTrackingCounter(@NotNull XSourcePosition position, int increment) { + final Editor editor = getEditor(position); + if (editor != null) { + JComponent component = editor.getComponent(); + Object o = component.getClientProperty(Editor.IGNORE_MOUSE_TRACKING); + Integer value = ((o instanceof Integer) ? (Integer)o : 0) + increment; + component.putClientProperty(Editor.IGNORE_MOUSE_TRACKING, value > 0 ? value : null); + } + } + @Override public void sessionResumed() { doResume();