diff --git a/idea/src/org/jetbrains/kotlin/idea/highlighter/KotlinRecursiveCallLineMarkerProvider.kt b/idea/src/org/jetbrains/kotlin/idea/highlighter/KotlinRecursiveCallLineMarkerProvider.kt index 231be8d8fc5..53d0f29d2b0 100644 --- a/idea/src/org/jetbrains/kotlin/idea/highlighter/KotlinRecursiveCallLineMarkerProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/highlighter/KotlinRecursiveCallLineMarkerProvider.kt @@ -53,7 +53,7 @@ class KotlinRecursiveCallLineMarkerProvider : LineMarkerProvider { val lineNumber = element.getLineNumber() if (lineNumber !in markedLineNumbers && isRecursiveCall(element)) { markedLineNumbers.add(lineNumber) - result.add(RecursiveMethodCallMarkerInfo(element)) + result.add(RecursiveMethodCallMarkerInfo(getElementForLineMark(element))) } } } @@ -113,8 +113,8 @@ class KotlinRecursiveCallLineMarkerProvider : LineMarkerProvider { return true } - private class RecursiveMethodCallMarkerInfo(callElement: KtElement) - : LineMarkerInfo( + private class RecursiveMethodCallMarkerInfo(callElement: PsiElement) + : LineMarkerInfo( callElement, callElement.textRange, AllIcons.Gutter.RecursiveMethod, @@ -125,7 +125,7 @@ class KotlinRecursiveCallLineMarkerProvider : LineMarkerProvider { ) { override fun createGutterRenderer(): GutterIconRenderer? { - return object : LineMarkerInfo.LineMarkerGutterIconRenderer(this) { + return object : LineMarkerInfo.LineMarkerGutterIconRenderer(this) { override fun getClickAction() = null // to place breakpoint on mouse click } } @@ -133,6 +133,15 @@ class KotlinRecursiveCallLineMarkerProvider : LineMarkerProvider { } +internal fun getElementForLineMark(callElement: PsiElement): PsiElement = + when (callElement) { + is KtSimpleNameExpression -> callElement.getReferencedNameElement() + else -> + // a fallback, + //but who knows what to reference in KtArrayAccessExpression ? + generateSequence(callElement, { it.firstChild }).last() + } + private fun PsiElement.getLineNumber(): Int { return PsiDocumentManager.getInstance(project).getDocument(containingFile)!!.getLineNumber(textOffset) } diff --git a/idea/src/org/jetbrains/kotlin/idea/highlighter/KotlinSuspendCallLineMarkerProvider.kt b/idea/src/org/jetbrains/kotlin/idea/highlighter/KotlinSuspendCallLineMarkerProvider.kt index 5f7951d4159..a0f03bfca46 100644 --- a/idea/src/org/jetbrains/kotlin/idea/highlighter/KotlinSuspendCallLineMarkerProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/highlighter/KotlinSuspendCallLineMarkerProvider.kt @@ -25,7 +25,7 @@ import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode class KotlinSuspendCallLineMarkerProvider : LineMarkerProvider { - private class SuspendCallMarkerInfo(callElement: KtElement, message: String) : LineMarkerInfo( + private class SuspendCallMarkerInfo(callElement: PsiElement, message: String) : LineMarkerInfo( callElement, callElement.textRange, KotlinIcons.SUSPEND_CALL, @@ -35,7 +35,7 @@ class KotlinSuspendCallLineMarkerProvider : LineMarkerProvider { GutterIconRenderer.Alignment.RIGHT ) { override fun createGutterRenderer(): GutterIconRenderer? { - return object : LineMarkerInfo.LineMarkerGutterIconRenderer(this) { + return object : LineMarkerInfo.LineMarkerGutterIconRenderer(this) { override fun getClickAction(): AnAction? = null } } @@ -59,9 +59,9 @@ class KotlinSuspendCallLineMarkerProvider : LineMarkerProvider { markedLineNumbers += lineNumber result += if (element is KtForExpression) { - SuspendCallMarkerInfo(element.loopRange!!, "Suspending iteration") + SuspendCallMarkerInfo(getElementForLineMark(element.loopRange!!), "Suspending iteration") } else { - SuspendCallMarkerInfo(element, "Suspend function call") + SuspendCallMarkerInfo(getElementForLineMark(element), "Suspend function call") } } } diff --git a/idea/testData/codeInsight/lineMarker/recursiveCall/conventionCall.kt b/idea/testData/codeInsight/lineMarker/recursiveCall/conventionCall.kt index 573b62766e8..e0db57f6762 100644 --- a/idea/testData/codeInsight/lineMarker/recursiveCall/conventionCall.kt +++ b/idea/testData/codeInsight/lineMarker/recursiveCall/conventionCall.kt @@ -1,6 +1,6 @@ operator fun Any.get(a: Int) { if (a > 0) { - this[a - 1] + this[a - 1] } }