From 75c56d58ae1c9dce823266ebd095465fddaf9e9e Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Mon, 13 Feb 2017 14:39:49 +0300 Subject: [PATCH] Line Markers: Do not attempt to resolve suspend call candidates which are not call-like expressions --- .../KotlinSuspendCallLineMarkerProvider.kt | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/highlighter/KotlinSuspendCallLineMarkerProvider.kt b/idea/src/org/jetbrains/kotlin/idea/highlighter/KotlinSuspendCallLineMarkerProvider.kt index dbdf69629b8..b88014a65ba 100644 --- a/idea/src/org/jetbrains/kotlin/idea/highlighter/KotlinSuspendCallLineMarkerProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/highlighter/KotlinSuspendCallLineMarkerProvider.kt @@ -26,7 +26,10 @@ import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.idea.KotlinIcons import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.refactoring.getLineNumber +import org.jetbrains.kotlin.psi.KtCallExpression import org.jetbrains.kotlin.psi.KtElement +import org.jetbrains.kotlin.psi.KtExpression +import org.jetbrains.kotlin.psi.KtOperationReferenceExpression import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode @@ -49,6 +52,13 @@ class KotlinSuspendCallLineMarkerProvider : LineMarkerProvider { override fun getLineMarkerInfo(element: PsiElement) = null + private fun isValidCandidateExpression(expression: KtExpression): Boolean { + if (expression is KtOperationReferenceExpression) return true + val parent = expression.parent + if (parent is KtCallExpression && parent.calleeExpression == expression) return true + return false + } + override fun collectSlowLineMarkers( elements: MutableList, result: MutableCollection> @@ -58,7 +68,8 @@ class KotlinSuspendCallLineMarkerProvider : LineMarkerProvider { for (element in elements) { ProgressManager.checkCanceled() - if (element !is KtElement) continue + if (element !is KtExpression) continue + if (!isValidCandidateExpression(element)) continue val lineNumber = element.getLineNumber() if (lineNumber in markedLineNumbers) continue