RecursiveMethodCallMarkerInfo and SuspendCallMarkerInfo forced to target Leaf-elements
because of restriction added in IDEA 173
This commit is contained in:
committed by
Nikolay Krasko
parent
34bdc04fbe
commit
dd45780de9
+13
-4
@@ -53,7 +53,7 @@ class KotlinRecursiveCallLineMarkerProvider : LineMarkerProvider {
|
|||||||
val lineNumber = element.getLineNumber()
|
val lineNumber = element.getLineNumber()
|
||||||
if (lineNumber !in markedLineNumbers && isRecursiveCall(element)) {
|
if (lineNumber !in markedLineNumbers && isRecursiveCall(element)) {
|
||||||
markedLineNumbers.add(lineNumber)
|
markedLineNumbers.add(lineNumber)
|
||||||
result.add(RecursiveMethodCallMarkerInfo(element))
|
result.add(RecursiveMethodCallMarkerInfo(getElementForLineMark(element)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -113,8 +113,8 @@ class KotlinRecursiveCallLineMarkerProvider : LineMarkerProvider {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
private class RecursiveMethodCallMarkerInfo(callElement: KtElement)
|
private class RecursiveMethodCallMarkerInfo(callElement: PsiElement)
|
||||||
: LineMarkerInfo<KtElement>(
|
: LineMarkerInfo<PsiElement>(
|
||||||
callElement,
|
callElement,
|
||||||
callElement.textRange,
|
callElement.textRange,
|
||||||
AllIcons.Gutter.RecursiveMethod,
|
AllIcons.Gutter.RecursiveMethod,
|
||||||
@@ -125,7 +125,7 @@ class KotlinRecursiveCallLineMarkerProvider : LineMarkerProvider {
|
|||||||
) {
|
) {
|
||||||
|
|
||||||
override fun createGutterRenderer(): GutterIconRenderer? {
|
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
|
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 {
|
private fun PsiElement.getLineNumber(): Int {
|
||||||
return PsiDocumentManager.getInstance(project).getDocument(containingFile)!!.getLineNumber(textOffset)
|
return PsiDocumentManager.getInstance(project).getDocument(containingFile)!!.getLineNumber(textOffset)
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-4
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
|||||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||||
|
|
||||||
class KotlinSuspendCallLineMarkerProvider : LineMarkerProvider {
|
class KotlinSuspendCallLineMarkerProvider : LineMarkerProvider {
|
||||||
private class SuspendCallMarkerInfo(callElement: KtElement, message: String) : LineMarkerInfo<KtElement>(
|
private class SuspendCallMarkerInfo(callElement: PsiElement, message: String) : LineMarkerInfo<PsiElement>(
|
||||||
callElement,
|
callElement,
|
||||||
callElement.textRange,
|
callElement.textRange,
|
||||||
KotlinIcons.SUSPEND_CALL,
|
KotlinIcons.SUSPEND_CALL,
|
||||||
@@ -35,7 +35,7 @@ class KotlinSuspendCallLineMarkerProvider : LineMarkerProvider {
|
|||||||
GutterIconRenderer.Alignment.RIGHT
|
GutterIconRenderer.Alignment.RIGHT
|
||||||
) {
|
) {
|
||||||
override fun createGutterRenderer(): GutterIconRenderer? {
|
override fun createGutterRenderer(): GutterIconRenderer? {
|
||||||
return object : LineMarkerInfo.LineMarkerGutterIconRenderer<KtElement>(this) {
|
return object : LineMarkerInfo.LineMarkerGutterIconRenderer<PsiElement>(this) {
|
||||||
override fun getClickAction(): AnAction? = null
|
override fun getClickAction(): AnAction? = null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -59,9 +59,9 @@ class KotlinSuspendCallLineMarkerProvider : LineMarkerProvider {
|
|||||||
|
|
||||||
markedLineNumbers += lineNumber
|
markedLineNumbers += lineNumber
|
||||||
result += if (element is KtForExpression) {
|
result += if (element is KtForExpression) {
|
||||||
SuspendCallMarkerInfo(element.loopRange!!, "Suspending iteration")
|
SuspendCallMarkerInfo(getElementForLineMark(element.loopRange!!), "Suspending iteration")
|
||||||
} else {
|
} else {
|
||||||
SuspendCallMarkerInfo(element, "Suspend function call")
|
SuspendCallMarkerInfo(getElementForLineMark(element), "Suspend function call")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
operator fun Any.get(a: Int) {
|
operator fun Any.get(a: Int) {
|
||||||
if (a > 0) {
|
if (a > 0) {
|
||||||
<lineMarker descr="Recursive call">this[a - 1]</lineMarker>
|
<lineMarker descr="Recursive call">this</lineMarker>[a - 1]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user