From 7cec5f7c06af75f7f34036039b50bba65c7f2017 Mon Sep 17 00:00:00 2001 From: Pavel Dolgov Date: Wed, 11 Apr 2018 19:17:00 +0300 Subject: [PATCH] Java: Prevent IOOBE in extract method preview diff (IDEA-189384) --- .../refactoring/extractMethod/preview/PreviewDiffPanel.java | 5 +++-- .../extractMethod/preview/PreviewDiffRequest.java | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/java/java-impl/src/com/intellij/refactoring/extractMethod/preview/PreviewDiffPanel.java b/java/java-impl/src/com/intellij/refactoring/extractMethod/preview/PreviewDiffPanel.java index 373d90d92cc8..2cff7cab3af9 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractMethod/preview/PreviewDiffPanel.java +++ b/java/java-impl/src/com/intellij/refactoring/extractMethod/preview/PreviewDiffPanel.java @@ -273,8 +273,9 @@ class PreviewDiffPanel extends BorderLayoutPanel implements Disposable, PreviewT @NotNull private static TextRange getLinesRange(@NotNull TextRange textRange, @NotNull Document document) { - return new TextRange(document.getLineStartOffset(document.getLineNumber(textRange.getStartOffset())), - document.getLineEndOffset(document.getLineNumber(textRange.getEndOffset())) + 1); + int startLine = document.getLineNumber(textRange.getStartOffset()); + int endLine = document.getLineNumber(Math.min(textRange.getEndOffset(), document.getTextLength())); + return new TextRange(document.getLineStartOffset(startLine), document.getLineEndOffset(endLine)); } private static void doExtractImpl(@NotNull JavaDuplicatesExtractMethodProcessor processor, diff --git a/java/java-impl/src/com/intellij/refactoring/extractMethod/preview/PreviewDiffRequest.java b/java/java-impl/src/com/intellij/refactoring/extractMethod/preview/PreviewDiffRequest.java index 40ba3e8ae5fb..126f1ed10dd1 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractMethod/preview/PreviewDiffRequest.java +++ b/java/java-impl/src/com/intellij/refactoring/extractMethod/preview/PreviewDiffRequest.java @@ -99,7 +99,7 @@ class PreviewDiffRequest extends SimpleDiffRequest { int newOffset = e.getEditor().logicalPositionToOffset(e.getNewPosition()); for (Map.Entry> entry : myLinesBounds.entrySet()) { TextRange range = mySideGetter.apply(entry.getValue()); - if (range.contains(newOffset)) { + if (range.containsOffset(newOffset)) { mySelectNode.consume(entry.getKey()); break; }