Skip to content

Commit 607e205

Browse files
committed
Resolve to descriptor: call safe version in background (~ isApplicable) #KT-12261 Fixed
Also #KT-11010 Fixed Also #KT-12881 Fixed Also #KT-16162 Fixed
1 parent 0000368 commit 607e205

19 files changed

+55
-51
lines changed

idea/idea-analysis/src/org/jetbrains/kotlin/idea/kdoc/KDocMissingDocumentationInspection.kt

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,26 +20,19 @@ import com.intellij.codeInsight.FileModificationService
2020
import com.intellij.codeInspection.LocalQuickFix
2121
import com.intellij.codeInspection.ProblemDescriptor
2222
import com.intellij.codeInspection.ProblemsHolder
23-
import com.intellij.openapi.editor.Editor
24-
import com.intellij.openapi.editor.EditorFactory
25-
import com.intellij.openapi.fileEditor.FileDocumentManager
2623
import com.intellij.openapi.project.Project
2724
import com.intellij.psi.PsiElement
2825
import com.intellij.psi.PsiElementVisitor
2926
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
3027
import org.jetbrains.kotlin.descriptors.MemberDescriptor
3128
import org.jetbrains.kotlin.descriptors.Visibilities
32-
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
29+
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
3330
import org.jetbrains.kotlin.idea.inspections.AbstractKotlinInspection
3431
import org.jetbrains.kotlin.idea.inspections.findExistingEditor
35-
import org.jetbrains.kotlin.kdoc.psi.impl.KDocImpl
36-
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
37-
import org.jetbrains.kotlin.lexer.KtTokens
38-
import org.jetbrains.kotlin.psi.KtModifierListOwner
3932
import org.jetbrains.kotlin.psi.KtNamedDeclaration
40-
import org.jetbrains.kotlin.psi.addRemoveModifier.removeModifier
4133
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
4234
import org.jetbrains.kotlin.psi.psiUtil.startOffset
35+
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
4336
import org.jetbrains.kotlin.resolve.source.getPsi
4437

4538
class KDocMissingDocumentationInspection(): AbstractKotlinInspection() {
@@ -51,7 +44,7 @@ class KDocMissingDocumentationInspection(): AbstractKotlinInspection() {
5144

5245
if (element is KtNamedDeclaration) {
5346
val nameIdentifier = element.nameIdentifier
54-
val descriptor = element.resolveToDescriptor() as? MemberDescriptor
47+
val descriptor = element.resolveToDescriptorIfAny(BodyResolveMode.FULL) as? MemberDescriptor
5548
if (nameIdentifier != null && descriptor?.visibility == Visibilities.PUBLIC) {
5649
val hasDocumentation = element.docComment != null ||
5750
(descriptor as? CallableMemberDescriptor)?.overriddenDescriptors

idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/OperatorReferenceSearcher.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import org.jetbrains.kotlin.descriptors.FunctionDescriptor
2828
import org.jetbrains.kotlin.idea.KotlinFileType
2929
import org.jetbrains.kotlin.idea.caches.resolve.getJavaOrKotlinMemberDescriptor
3030
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
31-
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
31+
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
3232
import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchOptions
3333
import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinRequestResultProcessor
3434
import org.jetbrains.kotlin.idea.search.restrictToKotlinSources
@@ -198,9 +198,9 @@ abstract class OperatorReferenceSearcher<TReferenceElement : KtElement>(
198198
}
199199
}
200200

201-
open protected fun resolveTargetToDescriptor(): FunctionDescriptor? {
201+
protected open fun resolveTargetToDescriptor(): FunctionDescriptor? {
202202
return when (targetDeclaration) {
203-
is KtDeclaration -> targetDeclaration.resolveToDescriptor()
203+
is KtDeclaration -> targetDeclaration.resolveToDescriptorIfAny(BodyResolveMode.FULL)
204204
is PsiMember -> targetDeclaration.getJavaOrKotlinMemberDescriptor()
205205
else -> null
206206
} as? FunctionDescriptor

idea/src/org/jetbrains/kotlin/idea/inspections/ConflictingExtensionPropertyInspection.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import org.jetbrains.kotlin.descriptors.PropertyDescriptor
3636
import org.jetbrains.kotlin.idea.caches.resolve.analyze
3737
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
3838
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
39+
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
3940
import org.jetbrains.kotlin.idea.core.targetDescriptors
4041
import org.jetbrains.kotlin.idea.imports.importableFqName
4142
import org.jetbrains.kotlin.idea.quickfix.KotlinQuickFixAction
@@ -69,7 +70,7 @@ class ConflictingExtensionPropertyInspection : AbstractKotlinInspection(), Clean
6970

7071
if (property.receiverTypeReference != null) {
7172
val nameElement = property.nameIdentifier ?: return
72-
val propertyDescriptor = property.resolveToDescriptor() as? PropertyDescriptor ?: return
73+
val propertyDescriptor = property.resolveToDescriptorIfAny() as? PropertyDescriptor ?: return
7374

7475
val syntheticScopes = resolutionFacade.frontendService<SyntheticScopes>()
7576
val conflictingExtension = conflictingSyntheticExtension(propertyDescriptor, syntheticScopes) ?: return

idea/src/org/jetbrains/kotlin/idea/inspections/OverridingDeprecatedMemberInspection.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import com.intellij.codeInspection.ProblemsHolder
2121
import com.intellij.psi.PsiElement
2222
import com.intellij.psi.PsiElementVisitor
2323
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
24-
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
24+
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
2525
import org.jetbrains.kotlin.idea.project.languageVersionSettings
2626
import org.jetbrains.kotlin.psi.*
2727
import org.jetbrains.kotlin.resolve.deprecatedByOverriddenMessage
@@ -39,8 +39,7 @@ class OverridingDeprecatedMemberInspection : AbstractKotlinInspection() {
3939
}
4040

4141
private fun registerProblemIfNeeded(declaration: KtDeclaration, targetForProblem: PsiElement) {
42-
if (declaration is KtDestructuringDeclarationEntry) return
43-
val accessorDescriptor = declaration.resolveToDescriptor() as? CallableMemberDescriptor ?: return
42+
val accessorDescriptor = declaration.resolveToDescriptorIfAny() as? CallableMemberDescriptor ?: return
4443

4544
val message = accessorDescriptor.getDeprecations(declaration.languageVersionSettings)
4645
.firstOrNull()

idea/src/org/jetbrains/kotlin/idea/intentions/AddOperatorModifierIntention.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,15 @@ package org.jetbrains.kotlin.idea.intentions
1919
import com.intellij.openapi.editor.Editor
2020
import com.intellij.openapi.util.TextRange
2121
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
22-
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
22+
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
2323
import org.jetbrains.kotlin.lexer.KtTokens
2424
import org.jetbrains.kotlin.psi.KtNamedFunction
25-
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
2625
import org.jetbrains.kotlin.util.OperatorChecks
2726

2827
class AddOperatorModifierIntention : SelfTargetingRangeIntention<KtNamedFunction>(KtNamedFunction::class.java, "Add 'operator' modifier") {
2928
override fun applicabilityRange(element: KtNamedFunction): TextRange? {
3029
val nameIdentifier = element.nameIdentifier ?: return null
31-
val functionDescriptor = element.resolveToDescriptor(BodyResolveMode.PARTIAL) as? FunctionDescriptor ?: return null
30+
val functionDescriptor = element.resolveToDescriptorIfAny() as? FunctionDescriptor ?: return null
3231
if (functionDescriptor.isOperator || !OperatorChecks.check(functionDescriptor).isSuccess) return null
3332
return nameIdentifier.textRange
3433
}

idea/src/org/jetbrains/kotlin/idea/intentions/ConvertSealedClassToEnumIntention.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import com.intellij.refactoring.util.CommonRefactoringUtil
2424
import com.intellij.refactoring.util.RefactoringDescriptionLocation
2525
import org.jetbrains.kotlin.asJava.unwrapped
2626
import org.jetbrains.kotlin.descriptors.ClassDescriptor
27-
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
27+
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
2828
import org.jetbrains.kotlin.idea.runSynchronouslyWithProgress
2929
import org.jetbrains.kotlin.idea.search.declarationsSearch.HierarchySearchRequest
3030
import org.jetbrains.kotlin.idea.search.declarationsSearch.searchInheritors
@@ -37,14 +37,13 @@ import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
3737
import org.jetbrains.kotlin.psi.psiUtil.endOffset
3838
import org.jetbrains.kotlin.psi.psiUtil.startOffset
3939
import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperClassNotAny
40-
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
4140

4241
class ConvertSealedClassToEnumIntention : SelfTargetingRangeIntention<KtClass>(KtClass::class.java, "Convert to enum class") {
4342
override fun applicabilityRange(element: KtClass): TextRange? {
4443
val nameIdentifier = element.nameIdentifier ?: return null
4544
val sealedKeyword = element.modifierList?.getModifier(KtTokens.SEALED_KEYWORD) ?: return null
4645

47-
val classDescriptor = element.resolveToDescriptor(BodyResolveMode.PARTIAL) as ClassDescriptor
46+
val classDescriptor = element.resolveToDescriptorIfAny() as? ClassDescriptor ?: return null
4847
if (classDescriptor.getSuperClassNotAny() != null) return null
4948

5049
return TextRange(sealedKeyword.startOffset, nameIdentifier.endOffset)

idea/src/org/jetbrains/kotlin/idea/intentions/ObjectLiteralToLambdaIntention.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import com.intellij.psi.search.searches.ReferencesSearch
2424
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
2525
import org.jetbrains.kotlin.descriptors.Modality
2626
import org.jetbrains.kotlin.idea.caches.resolve.analyze
27-
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
27+
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
2828
import org.jetbrains.kotlin.idea.core.ShortenReferences
2929
import org.jetbrains.kotlin.idea.core.moveFunctionLiteralOutsideParentheses
3030
import org.jetbrains.kotlin.idea.core.replaced
@@ -53,7 +53,7 @@ class ObjectLiteralToLambdaIntention : SelfTargetingRangeIntention<KtObjectLiter
5353

5454
if (!SingleAbstractMethodUtils.isSamType(baseType)) return null
5555

56-
val functionDescriptor = singleFunction.resolveToDescriptor() as? FunctionDescriptor ?: return null
56+
val functionDescriptor = singleFunction.resolveToDescriptorIfAny(BodyResolveMode.FULL) as? FunctionDescriptor ?: return null
5757
val overridden = functionDescriptor.overriddenDescriptors.singleOrNull() ?: return null
5858
if (overridden.modality != Modality.ABSTRACT) return null
5959

idea/src/org/jetbrains/kotlin/idea/quickfix/AddFunctionToSupertypeFix.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.builtins.KotlinBuiltIns
3030
import org.jetbrains.kotlin.descriptors.*
3131
import org.jetbrains.kotlin.diagnostics.Diagnostic
3232
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
33+
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
3334
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
3435
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
3536
import org.jetbrains.kotlin.idea.core.ShortenReferences
@@ -41,6 +42,7 @@ import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
4142
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
4243
import org.jetbrains.kotlin.psi.*
4344
import org.jetbrains.kotlin.psi.psiUtil.modalityModifier
45+
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
4446
import org.jetbrains.kotlin.types.KotlinType
4547
import org.jetbrains.kotlin.types.checker.KotlinTypeChecker
4648
import org.jetbrains.kotlin.types.typeUtil.supertypes
@@ -160,7 +162,8 @@ class AddFunctionToSupertypeFix private constructor(
160162
}
161163

162164
private fun generateFunctionsToAdd(functionElement: KtNamedFunction): List<FunctionDescriptor> {
163-
val functionDescriptor = functionElement.resolveToDescriptor() as FunctionDescriptor
165+
val functionDescriptor = functionElement.resolveToDescriptorIfAny(BodyResolveMode.FULL) as? FunctionDescriptor
166+
?: return emptyList()
164167

165168
val containingClass = functionDescriptor.containingDeclaration as? ClassDescriptor ?: return emptyList()
166169

idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeAccessorTypeFix.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import com.intellij.openapi.project.Project
2121
import com.intellij.psi.PsiFile
2222
import org.jetbrains.kotlin.descriptors.VariableDescriptor
2323
import org.jetbrains.kotlin.diagnostics.Diagnostic
24-
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
24+
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
2525
import org.jetbrains.kotlin.idea.core.replaced
2626
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
2727
import org.jetbrains.kotlin.idea.core.ShortenReferences
@@ -33,7 +33,7 @@ import org.jetbrains.kotlin.types.KotlinType
3333

3434
class ChangeAccessorTypeFix(element: KtPropertyAccessor) : KotlinQuickFixAction<KtPropertyAccessor>(element) {
3535
private fun getType(): KotlinType? {
36-
val type = (element!!.property.resolveToDescriptor() as VariableDescriptor).type
36+
val type = (element!!.property.resolveToDescriptorIfAny() as? VariableDescriptor)?.type ?: return null
3737
if (type.isError) return null
3838
return type
3939
}

idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeCallableReturnTypeFix.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import org.jetbrains.kotlin.diagnostics.Errors.COMPONENT_FUNCTION_RETURN_TYPE_MI
2929
import org.jetbrains.kotlin.idea.KotlinBundle
3030
import org.jetbrains.kotlin.idea.caches.resolve.analyze
3131
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
32+
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
3233
import org.jetbrains.kotlin.idea.core.ShortenReferences
3334
import org.jetbrains.kotlin.idea.core.quickfix.QuickFixUtil
3435
import org.jetbrains.kotlin.idea.project.builtIns
@@ -204,7 +205,7 @@ abstract class ChangeCallableReturnTypeFix(
204205

205206
val actions = LinkedList<IntentionAction>()
206207

207-
val descriptor = function.resolveToDescriptor() as FunctionDescriptor
208+
val descriptor = function.resolveToDescriptorIfAny(BodyResolveMode.FULL) as? FunctionDescriptor ?: return emptyList()
208209

209210
val matchingReturnType = QuickFixUtil.findLowerBoundOfOverriddenCallablesReturnTypes(descriptor)
210211
if (matchingReturnType != null) {

idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionLiteralSignatureFix.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import com.intellij.psi.PsiElement
2323
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
2424
import org.jetbrains.kotlin.diagnostics.Diagnostic
2525
import org.jetbrains.kotlin.diagnostics.Errors
26-
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
26+
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
2727
import org.jetbrains.kotlin.idea.core.CollectingNameValidator
2828
import org.jetbrains.kotlin.idea.core.KotlinNameSuggester
2929
import org.jetbrains.kotlin.idea.refactoring.changeSignature.*
@@ -72,7 +72,7 @@ class ChangeFunctionLiteralSignatureFix private constructor(
7272
}
7373

7474
override fun extractFixData(element: KtFunctionLiteral, diagnostic: Diagnostic): Data? {
75-
val descriptor = element.resolveToDescriptor() as? FunctionDescriptor ?: return null
75+
val descriptor = element.resolveToDescriptorIfAny() as? FunctionDescriptor ?: return null
7676
val parameterTypes = Errors.EXPECTED_PARAMETERS_NUMBER_MISMATCH.cast(diagnostic).b
7777
return Data(descriptor, parameterTypes)
7878
}

idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeMemberFunctionSignatureFix.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import org.jetbrains.kotlin.descriptors.*
3030
import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl
3131
import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl
3232
import org.jetbrains.kotlin.diagnostics.Diagnostic
33-
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
33+
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
3434
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
3535
import org.jetbrains.kotlin.idea.core.ShortenReferences
3636
import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
@@ -43,6 +43,7 @@ import org.jetbrains.kotlin.renderer.ClassifierNamePolicy
4343
import org.jetbrains.kotlin.renderer.DescriptorRenderer
4444
import org.jetbrains.kotlin.resolve.descriptorUtil.setSingleOverridden
4545
import org.jetbrains.kotlin.resolve.findMemberWithMaxVisibility
46+
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
4647
import org.jetbrains.kotlin.types.checker.KotlinTypeChecker
4748
import org.jetbrains.kotlin.types.typeUtil.supertypes
4849
import org.jetbrains.kotlin.utils.addToStdlib.check
@@ -97,7 +98,8 @@ class ChangeMemberFunctionSignatureFix private constructor(
9798
return emptyList()
9899
}
99100

100-
val functionDescriptor = functionElement.resolveToDescriptor() as FunctionDescriptor
101+
val functionDescriptor = functionElement.resolveToDescriptorIfAny(BodyResolveMode.FULL) as? FunctionDescriptor
102+
?: return emptyList()
101103
val superFunctions = getPossibleSuperFunctionsDescriptors(functionDescriptor)
102104

103105
return superFunctions

idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeVariableTypeFix.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,14 @@ import org.jetbrains.kotlin.diagnostics.Diagnostic
2727
import org.jetbrains.kotlin.idea.KotlinBundle
2828
import org.jetbrains.kotlin.idea.caches.resolve.analyze
2929
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
30+
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
3031
import org.jetbrains.kotlin.idea.core.ShortenReferences
3132
import org.jetbrains.kotlin.idea.core.quickfix.QuickFixUtil
3233
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
3334
import org.jetbrains.kotlin.psi.*
3435
import org.jetbrains.kotlin.resolve.BindingContext
3536
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
37+
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
3638
import org.jetbrains.kotlin.types.ErrorUtils
3739
import org.jetbrains.kotlin.types.KotlinType
3840
import org.jetbrains.kotlin.types.checker.KotlinTypeChecker
@@ -128,7 +130,7 @@ open class ChangeVariableTypeFix(element: KtVariableDeclaration, type: KotlinTyp
128130

129131
if (diagnostic.psiElement is KtProperty) {
130132
val property = diagnostic.psiElement as KtProperty
131-
val descriptor = property.resolveToDescriptor() as? PropertyDescriptor ?: return actions
133+
val descriptor = property.resolveToDescriptorIfAny(BodyResolveMode.FULL) as? PropertyDescriptor ?: return actions
132134

133135
var lowerBoundOfOverriddenPropertiesTypes = QuickFixUtil.findLowerBoundOfOverriddenCallablesReturnTypes(descriptor)
134136

idea/src/org/jetbrains/kotlin/idea/quickfix/MakeOverriddenMemberOpenFix.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
2525
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.*
2626
import org.jetbrains.kotlin.descriptors.isOverridable
2727
import org.jetbrains.kotlin.diagnostics.Diagnostic
28-
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
28+
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
2929
import org.jetbrains.kotlin.idea.refactoring.canRefactor
3030
import org.jetbrains.kotlin.lexer.KtTokens.OPEN_KEYWORD
3131
import org.jetbrains.kotlin.psi.KtCallableDeclaration
@@ -34,6 +34,7 @@ import org.jetbrains.kotlin.psi.KtFile
3434
import org.jetbrains.kotlin.psi.psiUtil.createSmartPointer
3535
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
3636
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
37+
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
3738
import java.util.*
3839

3940
class MakeOverriddenMemberOpenFix(declaration: KtDeclaration) : KotlinQuickFixAction<KtDeclaration>(declaration) {
@@ -51,11 +52,9 @@ class MakeOverriddenMemberOpenFix(declaration: KtDeclaration) : KotlinQuickFixAc
5152
overriddenNonOverridableMembers.clear()
5253
containingDeclarationsNames.clear()
5354

54-
val descriptor = element.resolveToDescriptor()
55-
if (descriptor !is CallableMemberDescriptor) return false
55+
val descriptor = element.resolveToDescriptorIfAny(BodyResolveMode.FULL) as? CallableMemberDescriptor ?: return false
5656

57-
for (overriddenDescriptor in getAllDeclaredNonOverridableOverriddenDescriptors(
58-
descriptor)) {
57+
for (overriddenDescriptor in getAllDeclaredNonOverridableOverriddenDescriptors(descriptor)) {
5958
assert(overriddenDescriptor.kind == DECLARATION) { "Can only be applied to declarations." }
6059
val overriddenMember = DescriptorToSourceUtils.descriptorToDeclaration(overriddenDescriptor)
6160
if (overriddenMember == null || !overriddenMember.canRefactor() || overriddenMember !is KtCallableDeclaration) {

0 commit comments

Comments
 (0)