RecursiveMethodCallMarkerInfo and SuspendCallMarkerInfo forced to target Leaf-elements

because of restriction added in IDEA 173
This commit is contained in:
Nicolay Mitropolsky
2017-10-25 19:44:51 +03:00
committed by Nikolay Krasko
parent 34bdc04fbe
commit dd45780de9
3 changed files with 18 additions and 9 deletions
@@ -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<KtElement>(
private class RecursiveMethodCallMarkerInfo(callElement: PsiElement)
: LineMarkerInfo<PsiElement>(
callElement,
callElement.textRange,
AllIcons.Gutter.RecursiveMethod,
@@ -125,7 +125,7 @@ class KotlinRecursiveCallLineMarkerProvider : LineMarkerProvider {
) {
override fun createGutterRenderer(): GutterIconRenderer? {
return object : LineMarkerInfo.LineMarkerGutterIconRenderer<KtElement>(this) {
return object : LineMarkerInfo.LineMarkerGutterIconRenderer<PsiElement>(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)
}
@@ -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<KtElement>(
private class SuspendCallMarkerInfo(callElement: PsiElement, message: String) : LineMarkerInfo<PsiElement>(
callElement,
callElement.textRange,
KotlinIcons.SUSPEND_CALL,
@@ -35,7 +35,7 @@ class KotlinSuspendCallLineMarkerProvider : LineMarkerProvider {
GutterIconRenderer.Alignment.RIGHT
) {
override fun createGutterRenderer(): GutterIconRenderer? {
return object : LineMarkerInfo.LineMarkerGutterIconRenderer<KtElement>(this) {
return object : LineMarkerInfo.LineMarkerGutterIconRenderer<PsiElement>(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")
}
}
}
@@ -1,6 +1,6 @@
operator fun Any.get(a: Int) {
if (a > 0) {
<lineMarker descr="Recursive call">this[a - 1]</lineMarker>
<lineMarker descr="Recursive call">this</lineMarker>[a - 1]
}
}