From f8e2be2ba90feaccf3ab2048ac30a10d2fd2f6de Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Thu, 5 Jun 2014 18:20:43 +0400 Subject: [PATCH] do not recreate breakpoint highlighter if not requested implicitly, this fixes jumping breakpoints on several quick line insertions --- .../impl/breakpoints/XLineBreakpointImpl.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XLineBreakpointImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XLineBreakpointImpl.java index 852d239538e7..d86970b463f4 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XLineBreakpointImpl.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XLineBreakpointImpl.java @@ -91,10 +91,11 @@ public class XLineBreakpointImpl

extends XBreak RangeHighlighterEx highlighter = myHighlighter; if (highlighter != null && (!highlighter.isValid() || - highlighter.getStartOffset() >= document.getTextLength() || - document.getLineNumber(highlighter.getStartOffset()) != getLine())) { - highlighter.dispose(); - myHighlighter = null; + highlighter.getStartOffset() >= document.getTextLength() + // it seems that this check is not needed - we always update line number from the highlighter + // and highlighter is removed on line and file change anyway + /*|| document.getLineNumber(highlighter.getStartOffset()) != getLine()*/)) { + removeHighlighter(); highlighter = null; } @@ -213,7 +214,7 @@ public class XLineBreakpointImpl

extends XBreak public boolean copy(int line, VirtualFile file) { if (canMoveTo(line, file)) { setFileUrl(file.getUrl()); - setLine(line); + setLine(line, true); return true; } return false; @@ -232,7 +233,7 @@ public class XLineBreakpointImpl

extends XBreak public void updatePosition() { if (myHighlighter != null && myHighlighter.isValid()) { - setLine(myHighlighter.getDocument().getLineNumber(myHighlighter.getStartOffset())); + setLine(myHighlighter.getDocument().getLineNumber(myHighlighter.getStartOffset()), false); } } @@ -240,14 +241,18 @@ public class XLineBreakpointImpl

extends XBreak if (!Comparing.equal(getFileUrl(), newUrl)) { myState.setFileUrl(newUrl); mySourcePosition = null; + removeHighlighter(); fireBreakpointChanged(); } } - private void setLine(final int line) { + private void setLine(final int line, boolean removeHighlighter) { if (getLine() != line) { myState.setLine(line); mySourcePosition = null; + if (removeHighlighter) { + removeHighlighter(); + } fireBreakpointChanged(); } }