BlockingMethodInNonBlockingContextInspection: resolve mode switched to partial & coroutine "released" status check
This commit is contained in:
committed by
Mikhail Glukhikh
parent
90529dfda4
commit
d66619b1c2
+2
-5
@@ -13,10 +13,8 @@ import org.jetbrains.kotlin.builtins.getReceiverTypeFromFunctionType
|
||||
import org.jetbrains.kotlin.builtins.isBuiltinFunctionalType
|
||||
import org.jetbrains.kotlin.builtins.isSuspendFunctionType
|
||||
import org.jetbrains.kotlin.config.LanguageFeature
|
||||
import org.jetbrains.kotlin.config.LanguageVersion
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall
|
||||
import org.jetbrains.kotlin.idea.project.getLanguageVersionSettings
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
@@ -32,8 +30,7 @@ class CoroutineNonBlockingContextChecker : NonBlockingContextChecker {
|
||||
|
||||
override fun isApplicable(file: PsiFile): Boolean {
|
||||
val languageVersionSettings = file.project.getLanguageVersionSettings()
|
||||
return languageVersionSettings.supportsFeature(LanguageFeature.Coroutines) &&
|
||||
languageVersionSettings.languageVersion >= LanguageVersion.KOTLIN_1_3
|
||||
return languageVersionSettings.supportsFeature(LanguageFeature.ReleaseCoroutines)
|
||||
}
|
||||
|
||||
override fun isContextNonBlockingFor(element: PsiElement): Boolean {
|
||||
@@ -45,7 +42,7 @@ class CoroutineNonBlockingContextChecker : NonBlockingContextChecker {
|
||||
val containingArgument = PsiTreeUtil.getParentOfType(containingLambda, KtValueArgument::class.java)
|
||||
if (containingArgument != null) {
|
||||
val callExpression = PsiTreeUtil.getParentOfType(containingArgument, KtCallExpression::class.java) ?: return false
|
||||
val call = callExpression.resolveToCall(BodyResolveMode.FULL) ?: return false
|
||||
val call = callExpression.resolveToCall(BodyResolveMode.PARTIAL) ?: return false
|
||||
|
||||
val hasBlockingAnnotation = call.getFirstArgument()?.resolveToCall()
|
||||
?.resultingDescriptor?.annotations?.hasAnnotation(FqName(BLOCKING_CONTEXT_ANNOTATION))
|
||||
|
||||
Reference in New Issue
Block a user