Resolve to descriptor: call safe version in background (~ isApplicable) #KT-12261 Fixed

Also #KT-11010 Fixed
Also #KT-12881 Fixed
Also #KT-16162 Fixed
This commit is contained in:
Mikhail Glukhikh
2017-02-02 22:43:55 +03:00
parent 00003684e8
commit 607e205ad4
19 changed files with 55 additions and 51 deletions
@@ -32,7 +32,7 @@ import org.jetbrains.kotlin.asJava.toLightClass
import org.jetbrains.kotlin.asJava.toLightMethods
import org.jetbrains.kotlin.descriptors.MemberDescriptor
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
import org.jetbrains.kotlin.idea.inspections.AbstractKotlinInspection
import org.jetbrains.kotlin.idea.spring.isAnnotatedWith
import org.jetbrains.kotlin.lexer.KtTokens
@@ -40,7 +40,6 @@ import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
import org.jetbrains.kotlin.psi.psiUtil.isInheritable
import org.jetbrains.kotlin.psi.psiUtil.isOverridable
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
class KotlinFinalClassOrFunSpringInspection : AbstractKotlinInspection() {
class QuickFix<T: KtModifierListOwner>(private val element: T) : LocalQuickFix {
@@ -87,9 +86,10 @@ class KotlinFinalClassOrFunSpringInspection : AbstractKotlinInspection() {
is KtClass -> if (isInheritable()) return true
is KtObjectDeclaration -> return false
is KtNamedFunction -> if (isOverridable()) return true
else -> return true
}
val descriptor = resolveToDescriptor(BodyResolveMode.PARTIAL) as? MemberDescriptor
val descriptor = resolveToDescriptorIfAny() as? MemberDescriptor
return descriptor?.modality != Modality.FINAL
}