Line Markers: Do not attempt to resolve suspend call candidates which are not call-like expressions
This commit is contained in:
+12
-1
@@ -26,7 +26,10 @@ import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
|||||||
import org.jetbrains.kotlin.idea.KotlinIcons
|
import org.jetbrains.kotlin.idea.KotlinIcons
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||||
import org.jetbrains.kotlin.idea.refactoring.getLineNumber
|
import org.jetbrains.kotlin.idea.refactoring.getLineNumber
|
||||||
|
import org.jetbrains.kotlin.psi.KtCallExpression
|
||||||
import org.jetbrains.kotlin.psi.KtElement
|
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.calls.callUtil.getResolvedCall
|
||||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||||
|
|
||||||
@@ -49,6 +52,13 @@ class KotlinSuspendCallLineMarkerProvider : LineMarkerProvider {
|
|||||||
|
|
||||||
override fun getLineMarkerInfo(element: PsiElement) = null
|
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(
|
override fun collectSlowLineMarkers(
|
||||||
elements: MutableList<PsiElement>,
|
elements: MutableList<PsiElement>,
|
||||||
result: MutableCollection<LineMarkerInfo<*>>
|
result: MutableCollection<LineMarkerInfo<*>>
|
||||||
@@ -58,7 +68,8 @@ class KotlinSuspendCallLineMarkerProvider : LineMarkerProvider {
|
|||||||
for (element in elements) {
|
for (element in elements) {
|
||||||
ProgressManager.checkCanceled()
|
ProgressManager.checkCanceled()
|
||||||
|
|
||||||
if (element !is KtElement) continue
|
if (element !is KtExpression) continue
|
||||||
|
if (!isValidCandidateExpression(element)) continue
|
||||||
|
|
||||||
val lineNumber = element.getLineNumber()
|
val lineNumber = element.getLineNumber()
|
||||||
if (lineNumber in markedLineNumbers) continue
|
if (lineNumber in markedLineNumbers) continue
|
||||||
|
|||||||
Reference in New Issue
Block a user