Make overridden member open: invalidate cached state on PSI modification
Before, waiting for inspection rerun was necessary Also rename: computeState --> computeInfo Related to KT-17740
This commit is contained in:
committed by
Mikhail Glukhikh
parent
289286c8cd
commit
81f5a29526
@@ -21,11 +21,15 @@ import com.intellij.openapi.editor.Editor
|
|||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.PsiFile
|
import com.intellij.psi.PsiFile
|
||||||
import com.intellij.psi.SmartPsiElementPointer
|
import com.intellij.psi.SmartPsiElementPointer
|
||||||
|
import com.intellij.psi.util.CachedValueProvider
|
||||||
|
import com.intellij.psi.util.PsiModificationTracker
|
||||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.*
|
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.*
|
||||||
import org.jetbrains.kotlin.descriptors.isOverridable
|
import org.jetbrains.kotlin.descriptors.isOverridable
|
||||||
import org.jetbrains.kotlin.diagnostics.Diagnostic
|
import org.jetbrains.kotlin.diagnostics.Diagnostic
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
|
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
|
||||||
|
import org.jetbrains.kotlin.idea.core.util.CachedValue
|
||||||
|
import org.jetbrains.kotlin.idea.core.util.getValue
|
||||||
import org.jetbrains.kotlin.idea.refactoring.canRefactor
|
import org.jetbrains.kotlin.idea.refactoring.canRefactor
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens.OPEN_KEYWORD
|
import org.jetbrains.kotlin.lexer.KtTokens.OPEN_KEYWORD
|
||||||
import org.jetbrains.kotlin.psi.KtCallableDeclaration
|
import org.jetbrains.kotlin.psi.KtCallableDeclaration
|
||||||
@@ -39,8 +43,8 @@ import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
|||||||
private typealias DeclPtr = SmartPsiElementPointer<KtCallableDeclaration>
|
private typealias DeclPtr = SmartPsiElementPointer<KtCallableDeclaration>
|
||||||
class MakeOverriddenMemberOpenFix(declaration: KtDeclaration) : KotlinQuickFixAction<KtDeclaration>(declaration) {
|
class MakeOverriddenMemberOpenFix(declaration: KtDeclaration) : KotlinQuickFixAction<KtDeclaration>(declaration) {
|
||||||
|
|
||||||
private val myQuickFixInfo: QuickFixInfo by lazy {
|
private val myQuickFixInfo: QuickFixInfo by CachedValue(declaration.project) {
|
||||||
computeState()
|
CachedValueProvider.Result.createSingleDependency(computeInfo(), PsiModificationTracker.MODIFICATION_COUNT)
|
||||||
}
|
}
|
||||||
|
|
||||||
private val containingDeclarationsNames
|
private val containingDeclarationsNames
|
||||||
@@ -49,7 +53,7 @@ class MakeOverriddenMemberOpenFix(declaration: KtDeclaration) : KotlinQuickFixAc
|
|||||||
private val overriddenNonOverridableMembers
|
private val overriddenNonOverridableMembers
|
||||||
get() = myQuickFixInfo.declarations
|
get() = myQuickFixInfo.declarations
|
||||||
|
|
||||||
private fun computeState(): QuickFixInfo {
|
private fun computeInfo(): QuickFixInfo {
|
||||||
val element = element ?: return QUICKFIX_UNAVAILABLE
|
val element = element ?: return QUICKFIX_UNAVAILABLE
|
||||||
val overriddenNonOverridableMembers = mutableListOf<DeclPtr>()
|
val overriddenNonOverridableMembers = mutableListOf<DeclPtr>()
|
||||||
val containingDeclarationsNames = mutableListOf<String>()
|
val containingDeclarationsNames = mutableListOf<String>()
|
||||||
|
|||||||
Reference in New Issue
Block a user