From 76916b08770118e58e05e2d32847f0c93e3d93ea Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Mon, 5 Dec 2016 21:30:58 +0300 Subject: [PATCH] Avoid requesting line number for bad offset (EA-87678) Example of stack trace: java.lang.IndexOutOfBoundsException: Wrong offset: 14847. Should be in range: [0, 14846] at com.intellij.openapi.editor.impl.LineSet.findLineIndex(LineSet.java:141) at com.intellij.openapi.editor.impl.DocumentImpl.getLineNumber(DocumentImpl.java:919) at org.jetbrains.kotlin.idea.refactoring.KotlinRefactoringUtilKt.getLineCount(kotlinRefactoringUtil.kt:344) at org.jetbrains.kotlin.idea.debugger.KotlinPositionManager.getSourcePosition(KotlinPositionManager.kt:125) --- .../kotlin/idea/refactoring/kotlinRefactoringUtil.kt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/kotlinRefactoringUtil.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/kotlinRefactoringUtil.kt index c38de6fabcf..0751a376960 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/kotlinRefactoringUtil.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/kotlinRefactoringUtil.kt @@ -340,10 +340,12 @@ fun PsiElement.getLineCount(): Int { if (doc != null) { val spaceRange = textRange ?: TextRange.EMPTY_RANGE - val startLine = doc.getLineNumber(spaceRange.startOffset) - val endLine = doc.getLineNumber(spaceRange.endOffset) + if (spaceRange.endOffset <= doc.textLength) { + val startLine = doc.getLineNumber(spaceRange.startOffset) + val endLine = doc.getLineNumber(spaceRange.endOffset) - return endLine - startLine + return endLine - startLine + } } return (text ?: "").count { it == '\n' } + 1