diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/kdoc/KDocMissingDocumentationInspection.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/kdoc/KDocMissingDocumentationInspection.kt index 9d2399fdd59..93997e4e25a 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/kdoc/KDocMissingDocumentationInspection.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/kdoc/KDocMissingDocumentationInspection.kt @@ -20,26 +20,19 @@ import com.intellij.codeInsight.FileModificationService import com.intellij.codeInspection.LocalQuickFix import com.intellij.codeInspection.ProblemDescriptor import com.intellij.codeInspection.ProblemsHolder -import com.intellij.openapi.editor.Editor -import com.intellij.openapi.editor.EditorFactory -import com.intellij.openapi.fileEditor.FileDocumentManager import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement import com.intellij.psi.PsiElementVisitor import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor import org.jetbrains.kotlin.descriptors.MemberDescriptor import org.jetbrains.kotlin.descriptors.Visibilities -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.inspections.findExistingEditor -import org.jetbrains.kotlin.kdoc.psi.impl.KDocImpl -import org.jetbrains.kotlin.lexer.KtModifierKeywordToken -import org.jetbrains.kotlin.lexer.KtTokens -import org.jetbrains.kotlin.psi.KtModifierListOwner import org.jetbrains.kotlin.psi.KtNamedDeclaration -import org.jetbrains.kotlin.psi.addRemoveModifier.removeModifier import org.jetbrains.kotlin.psi.psiUtil.getParentOfType import org.jetbrains.kotlin.psi.psiUtil.startOffset +import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.source.getPsi class KDocMissingDocumentationInspection(): AbstractKotlinInspection() { @@ -51,7 +44,7 @@ class KDocMissingDocumentationInspection(): AbstractKotlinInspection() { if (element is KtNamedDeclaration) { val nameIdentifier = element.nameIdentifier - val descriptor = element.resolveToDescriptor() as? MemberDescriptor + val descriptor = element.resolveToDescriptorIfAny(BodyResolveMode.FULL) as? MemberDescriptor if (nameIdentifier != null && descriptor?.visibility == Visibilities.PUBLIC) { val hasDocumentation = element.docComment != null || (descriptor as? CallableMemberDescriptor)?.overriddenDescriptors diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/OperatorReferenceSearcher.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/OperatorReferenceSearcher.kt index 1fe6ee763c1..bb0000bd5ad 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/OperatorReferenceSearcher.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/OperatorReferenceSearcher.kt @@ -28,7 +28,7 @@ import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.idea.KotlinFileType import org.jetbrains.kotlin.idea.caches.resolve.getJavaOrKotlinMemberDescriptor import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade -import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchOptions import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinRequestResultProcessor import org.jetbrains.kotlin.idea.search.restrictToKotlinSources @@ -198,9 +198,9 @@ abstract class OperatorReferenceSearcher( } } - open protected fun resolveTargetToDescriptor(): FunctionDescriptor? { + protected open fun resolveTargetToDescriptor(): FunctionDescriptor? { return when (targetDeclaration) { - is KtDeclaration -> targetDeclaration.resolveToDescriptor() + is KtDeclaration -> targetDeclaration.resolveToDescriptorIfAny(BodyResolveMode.FULL) is PsiMember -> targetDeclaration.getJavaOrKotlinMemberDescriptor() else -> null } as? FunctionDescriptor diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/ConflictingExtensionPropertyInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/ConflictingExtensionPropertyInspection.kt index 6d482b05555..5b66d870098 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/ConflictingExtensionPropertyInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/ConflictingExtensionPropertyInspection.kt @@ -36,6 +36,7 @@ import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.core.targetDescriptors import org.jetbrains.kotlin.idea.imports.importableFqName import org.jetbrains.kotlin.idea.quickfix.KotlinQuickFixAction @@ -69,7 +70,7 @@ class ConflictingExtensionPropertyInspection : AbstractKotlinInspection(), Clean if (property.receiverTypeReference != null) { val nameElement = property.nameIdentifier ?: return - val propertyDescriptor = property.resolveToDescriptor() as? PropertyDescriptor ?: return + val propertyDescriptor = property.resolveToDescriptorIfAny() as? PropertyDescriptor ?: return val syntheticScopes = resolutionFacade.frontendService() val conflictingExtension = conflictingSyntheticExtension(propertyDescriptor, syntheticScopes) ?: return diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/OverridingDeprecatedMemberInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/OverridingDeprecatedMemberInspection.kt index 01c41838909..9da0a017d3f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/OverridingDeprecatedMemberInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/OverridingDeprecatedMemberInspection.kt @@ -21,7 +21,7 @@ import com.intellij.codeInspection.ProblemsHolder import com.intellij.psi.PsiElement import com.intellij.psi.PsiElementVisitor import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor -import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.project.languageVersionSettings import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.deprecatedByOverriddenMessage @@ -39,8 +39,7 @@ class OverridingDeprecatedMemberInspection : AbstractKotlinInspection() { } private fun registerProblemIfNeeded(declaration: KtDeclaration, targetForProblem: PsiElement) { - if (declaration is KtDestructuringDeclarationEntry) return - val accessorDescriptor = declaration.resolveToDescriptor() as? CallableMemberDescriptor ?: return + val accessorDescriptor = declaration.resolveToDescriptorIfAny() as? CallableMemberDescriptor ?: return val message = accessorDescriptor.getDeprecations(declaration.languageVersionSettings) .firstOrNull() diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/AddOperatorModifierIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/AddOperatorModifierIntention.kt index df3f2feadc5..b75ee13e921 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/AddOperatorModifierIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/AddOperatorModifierIntention.kt @@ -19,16 +19,15 @@ package org.jetbrains.kotlin.idea.intentions import com.intellij.openapi.editor.Editor import com.intellij.openapi.util.TextRange import org.jetbrains.kotlin.descriptors.FunctionDescriptor -import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.KtNamedFunction -import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.util.OperatorChecks class AddOperatorModifierIntention : SelfTargetingRangeIntention(KtNamedFunction::class.java, "Add 'operator' modifier") { override fun applicabilityRange(element: KtNamedFunction): TextRange? { val nameIdentifier = element.nameIdentifier ?: return null - val functionDescriptor = element.resolveToDescriptor(BodyResolveMode.PARTIAL) as? FunctionDescriptor ?: return null + val functionDescriptor = element.resolveToDescriptorIfAny() as? FunctionDescriptor ?: return null if (functionDescriptor.isOperator || !OperatorChecks.check(functionDescriptor).isSuccess) return null return nameIdentifier.textRange } diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertSealedClassToEnumIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertSealedClassToEnumIntention.kt index fa55ca0d84d..416f0823f29 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertSealedClassToEnumIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertSealedClassToEnumIntention.kt @@ -24,7 +24,7 @@ import com.intellij.refactoring.util.CommonRefactoringUtil import com.intellij.refactoring.util.RefactoringDescriptionLocation import org.jetbrains.kotlin.asJava.unwrapped import org.jetbrains.kotlin.descriptors.ClassDescriptor -import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.runSynchronouslyWithProgress import org.jetbrains.kotlin.idea.search.declarationsSearch.HierarchySearchRequest import org.jetbrains.kotlin.idea.search.declarationsSearch.searchInheritors @@ -37,14 +37,13 @@ import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.startOffset import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperClassNotAny -import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode class ConvertSealedClassToEnumIntention : SelfTargetingRangeIntention(KtClass::class.java, "Convert to enum class") { override fun applicabilityRange(element: KtClass): TextRange? { val nameIdentifier = element.nameIdentifier ?: return null val sealedKeyword = element.modifierList?.getModifier(KtTokens.SEALED_KEYWORD) ?: return null - val classDescriptor = element.resolveToDescriptor(BodyResolveMode.PARTIAL) as ClassDescriptor + val classDescriptor = element.resolveToDescriptorIfAny() as? ClassDescriptor ?: return null if (classDescriptor.getSuperClassNotAny() != null) return null return TextRange(sealedKeyword.startOffset, nameIdentifier.endOffset) diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ObjectLiteralToLambdaIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ObjectLiteralToLambdaIntention.kt index d0b95967e42..6c7c4b2bd58 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ObjectLiteralToLambdaIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ObjectLiteralToLambdaIntention.kt @@ -24,7 +24,7 @@ import com.intellij.psi.search.searches.ReferencesSearch import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.idea.caches.resolve.analyze -import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.core.ShortenReferences import org.jetbrains.kotlin.idea.core.moveFunctionLiteralOutsideParentheses import org.jetbrains.kotlin.idea.core.replaced @@ -53,7 +53,7 @@ class ObjectLiteralToLambdaIntention : SelfTargetingRangeIntention { - val functionDescriptor = functionElement.resolveToDescriptor() as FunctionDescriptor + val functionDescriptor = functionElement.resolveToDescriptorIfAny(BodyResolveMode.FULL) as? FunctionDescriptor + ?: return emptyList() val containingClass = functionDescriptor.containingDeclaration as? ClassDescriptor ?: return emptyList() diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeAccessorTypeFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeAccessorTypeFix.kt index 38a914b2736..bdde7acfe52 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeAccessorTypeFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeAccessorTypeFix.kt @@ -21,7 +21,7 @@ import com.intellij.openapi.project.Project import com.intellij.psi.PsiFile import org.jetbrains.kotlin.descriptors.VariableDescriptor import org.jetbrains.kotlin.diagnostics.Diagnostic -import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.core.replaced import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers import org.jetbrains.kotlin.idea.core.ShortenReferences @@ -33,7 +33,7 @@ import org.jetbrains.kotlin.types.KotlinType class ChangeAccessorTypeFix(element: KtPropertyAccessor) : KotlinQuickFixAction(element) { private fun getType(): KotlinType? { - val type = (element!!.property.resolveToDescriptor() as VariableDescriptor).type + val type = (element!!.property.resolveToDescriptorIfAny() as? VariableDescriptor)?.type ?: return null if (type.isError) return null return type } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeCallableReturnTypeFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeCallableReturnTypeFix.kt index eeac30ecf32..68b43d4c558 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeCallableReturnTypeFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeCallableReturnTypeFix.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.diagnostics.Errors.COMPONENT_FUNCTION_RETURN_TYPE_MI import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.core.ShortenReferences import org.jetbrains.kotlin.idea.core.quickfix.QuickFixUtil import org.jetbrains.kotlin.idea.project.builtIns @@ -204,7 +205,7 @@ abstract class ChangeCallableReturnTypeFix( val actions = LinkedList() - val descriptor = function.resolveToDescriptor() as FunctionDescriptor + val descriptor = function.resolveToDescriptorIfAny(BodyResolveMode.FULL) as? FunctionDescriptor ?: return emptyList() val matchingReturnType = QuickFixUtil.findLowerBoundOfOverriddenCallablesReturnTypes(descriptor) if (matchingReturnType != null) { diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionLiteralSignatureFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionLiteralSignatureFix.kt index 02b5bdf3715..c6f03aa5589 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionLiteralSignatureFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionLiteralSignatureFix.kt @@ -23,7 +23,7 @@ import com.intellij.psi.PsiElement import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.diagnostics.Errors -import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.core.CollectingNameValidator import org.jetbrains.kotlin.idea.core.KotlinNameSuggester import org.jetbrains.kotlin.idea.refactoring.changeSignature.* @@ -72,7 +72,7 @@ class ChangeFunctionLiteralSignatureFix private constructor( } override fun extractFixData(element: KtFunctionLiteral, diagnostic: Diagnostic): Data? { - val descriptor = element.resolveToDescriptor() as? FunctionDescriptor ?: return null + val descriptor = element.resolveToDescriptorIfAny() as? FunctionDescriptor ?: return null val parameterTypes = Errors.EXPECTED_PARAMETERS_NUMBER_MISMATCH.cast(diagnostic).b return Data(descriptor, parameterTypes) } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeMemberFunctionSignatureFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeMemberFunctionSignatureFix.kt index 1663fceb303..f1d0893aa11 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeMemberFunctionSignatureFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeMemberFunctionSignatureFix.kt @@ -30,7 +30,7 @@ import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl import org.jetbrains.kotlin.diagnostics.Diagnostic -import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers import org.jetbrains.kotlin.idea.core.ShortenReferences import org.jetbrains.kotlin.idea.util.application.executeWriteCommand @@ -43,6 +43,7 @@ import org.jetbrains.kotlin.renderer.ClassifierNamePolicy import org.jetbrains.kotlin.renderer.DescriptorRenderer import org.jetbrains.kotlin.resolve.descriptorUtil.setSingleOverridden import org.jetbrains.kotlin.resolve.findMemberWithMaxVisibility +import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.checker.KotlinTypeChecker import org.jetbrains.kotlin.types.typeUtil.supertypes import org.jetbrains.kotlin.utils.addToStdlib.check @@ -97,7 +98,8 @@ class ChangeMemberFunctionSignatureFix private constructor( return emptyList() } - val functionDescriptor = functionElement.resolveToDescriptor() as FunctionDescriptor + val functionDescriptor = functionElement.resolveToDescriptorIfAny(BodyResolveMode.FULL) as? FunctionDescriptor + ?: return emptyList() val superFunctions = getPossibleSuperFunctionsDescriptors(functionDescriptor) return superFunctions diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeVariableTypeFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeVariableTypeFix.kt index d9b4f35840d..b3d121e8a72 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeVariableTypeFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeVariableTypeFix.kt @@ -27,12 +27,14 @@ import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.core.ShortenReferences import org.jetbrains.kotlin.idea.core.quickfix.QuickFixUtil import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils +import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.ErrorUtils import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.checker.KotlinTypeChecker @@ -128,7 +130,7 @@ open class ChangeVariableTypeFix(element: KtVariableDeclaration, type: KotlinTyp if (diagnostic.psiElement is KtProperty) { val property = diagnostic.psiElement as KtProperty - val descriptor = property.resolveToDescriptor() as? PropertyDescriptor ?: return actions + val descriptor = property.resolveToDescriptorIfAny(BodyResolveMode.FULL) as? PropertyDescriptor ?: return actions var lowerBoundOfOverriddenPropertiesTypes = QuickFixUtil.findLowerBoundOfOverriddenCallablesReturnTypes(descriptor) diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/MakeOverriddenMemberOpenFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/MakeOverriddenMemberOpenFix.kt index a5afbd47a49..39906ca2664 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/MakeOverriddenMemberOpenFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/MakeOverriddenMemberOpenFix.kt @@ -25,7 +25,7 @@ import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.* import org.jetbrains.kotlin.descriptors.isOverridable import org.jetbrains.kotlin.diagnostics.Diagnostic -import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.refactoring.canRefactor import org.jetbrains.kotlin.lexer.KtTokens.OPEN_KEYWORD import org.jetbrains.kotlin.psi.KtCallableDeclaration @@ -34,6 +34,7 @@ import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.psiUtil.createSmartPointer import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils +import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import java.util.* class MakeOverriddenMemberOpenFix(declaration: KtDeclaration) : KotlinQuickFixAction(declaration) { @@ -51,11 +52,9 @@ class MakeOverriddenMemberOpenFix(declaration: KtDeclaration) : KotlinQuickFixAc overriddenNonOverridableMembers.clear() containingDeclarationsNames.clear() - val descriptor = element.resolveToDescriptor() - if (descriptor !is CallableMemberDescriptor) return false + val descriptor = element.resolveToDescriptorIfAny(BodyResolveMode.FULL) as? CallableMemberDescriptor ?: return false - for (overriddenDescriptor in getAllDeclaredNonOverridableOverriddenDescriptors( - descriptor)) { + for (overriddenDescriptor in getAllDeclaredNonOverridableOverriddenDescriptors(descriptor)) { assert(overriddenDescriptor.kind == DECLARATION) { "Can only be applied to declarations." } val overriddenMember = DescriptorToSourceUtils.descriptorToDeclaration(overriddenDescriptor) if (overriddenMember == null || !overriddenMember.canRefactor() || overriddenMember !is KtCallableDeclaration) { diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/RenameParameterToMatchOverriddenMethodFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/RenameParameterToMatchOverriddenMethodFix.kt index 781804518b0..ca6c2bafccd 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/RenameParameterToMatchOverriddenMethodFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/RenameParameterToMatchOverriddenMethodFix.kt @@ -22,10 +22,11 @@ import com.intellij.openapi.project.Project import com.intellij.refactoring.rename.RenameProcessor import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor import org.jetbrains.kotlin.diagnostics.Diagnostic -import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtParameter import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType +import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode class RenameParameterToMatchOverriddenMethodFix( parameter: KtParameter, @@ -44,7 +45,8 @@ class RenameParameterToMatchOverriddenMethodFix( companion object : KotlinSingleIntentionActionFactory() { override fun createAction(diagnostic: Diagnostic): IntentionAction? { val parameter = diagnostic.psiElement.getNonStrictParentOfType() ?: return null - val parameterDescriptor = parameter.resolveToDescriptor() as ValueParameterDescriptor + val parameterDescriptor = parameter.resolveToDescriptorIfAny(BodyResolveMode.FULL) as? ValueParameterDescriptor + ?: return null val parameterFromSuperclassName = parameterDescriptor .overriddenDescriptors .map { it.name.asString() } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/SuperClassNotInitialized.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/SuperClassNotInitialized.kt index 3bdfcae8154..a4bfc0660f5 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/SuperClassNotInitialized.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/SuperClassNotInitialized.kt @@ -27,7 +27,7 @@ import org.jetbrains.kotlin.descriptors.ConstructorDescriptor import org.jetbrains.kotlin.descriptors.VariableDescriptor import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.idea.caches.resolve.analyze -import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.core.ShortenReferences import org.jetbrains.kotlin.idea.core.isVisible import org.jetbrains.kotlin.idea.core.moveCaret @@ -39,6 +39,7 @@ import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.renderer.DescriptorRenderer import org.jetbrains.kotlin.renderer.render import org.jetbrains.kotlin.resolve.BindingContext +import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.TypeConstructorSubstitution import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf @@ -57,7 +58,8 @@ object SuperClassNotInitialized : KotlinIntentionActionsFactory() { if (type.isError) return emptyList() val superClass = (type.constructor.declarationDescriptor as? ClassDescriptor) ?: return emptyList() - val classDescriptor = classOrObjectDeclaration.resolveToDescriptor() as ClassDescriptor + val classDescriptor = classOrObjectDeclaration.resolveToDescriptorIfAny(BodyResolveMode.FULL) as? ClassDescriptor + ?: return emptyList() val constructors = superClass.constructors.filter { it.isVisible(classDescriptor) } if (constructors.isEmpty()) return emptyList() // no accessible constructor @@ -164,7 +166,8 @@ object SuperClassNotInitialized : KotlinIntentionActionsFactory() { val nameString = parameter.name.asString() val existingParameter = oldParameters.firstOrNull { it.name == nameString } if (existingParameter != null) { - val type = (existingParameter.resolveToDescriptor() as VariableDescriptor).type + val type = (existingParameter.resolveToDescriptorIfAny() as? VariableDescriptor)?.type + ?: return null if (type.isSubtypeOf(parameter.type)) continue // use existing parameter } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createTypeParameter/CreateTypeParameterByUnresolvedRefActionFactory.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createTypeParameter/CreateTypeParameterByUnresolvedRefActionFactory.kt index aea8f325867..986e1766293 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createTypeParameter/CreateTypeParameterByUnresolvedRefActionFactory.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createTypeParameter/CreateTypeParameterByUnresolvedRefActionFactory.kt @@ -23,7 +23,7 @@ import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.descriptors.impl.TypeParameterDescriptorImpl import org.jetbrains.kotlin.diagnostics.Diagnostic -import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.quickfix.KotlinIntentionActionFactoryWithDelegate import org.jetbrains.kotlin.idea.quickfix.QuickFixWithDelegateFactory import org.jetbrains.kotlin.idea.quickfix.createFromUsage.createClass.getUnsubstitutedTypeConstraintInfo @@ -61,7 +61,7 @@ object CreateTypeParameterByUnresolvedRefActionFactory : KotlinIntentionActionFa val declaration = element.parents.firstOrNull { it is KtProperty || it is KtNamedFunction || it is KtClass } as? KtTypeParameterListOwner ?: return null - val containingDescriptor = declaration.resolveToDescriptor() + val containingDescriptor = declaration.resolveToDescriptorIfAny() ?: return null val fakeTypeParameter = createFakeTypeParameterDescriptor(containingDescriptor, newName) val upperBoundType = getUnsubstitutedTypeConstraintInfo(element)?.let { it.performSubstitution(it.typeParameter.typeConstructor to TypeProjectionImpl(fakeTypeParameter.defaultType))?.upperBound diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/SafeDeleteImportDirectiveUsageInfo.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/SafeDeleteImportDirectiveUsageInfo.kt index 401b3cf91ea..75e97a159c6 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/SafeDeleteImportDirectiveUsageInfo.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/SafeDeleteImportDirectiveUsageInfo.kt @@ -21,10 +21,11 @@ import com.intellij.psi.PsiMember import com.intellij.refactoring.safeDelete.usageInfo.SafeDeleteReferenceSimpleDeleteUsageInfo import org.jetbrains.kotlin.asJava.unwrapped import org.jetbrains.kotlin.idea.caches.resolve.getJavaMemberDescriptor -import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.core.targetDescriptors import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtImportDirective +import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode class SafeDeleteImportDirectiveUsageInfo( importDirective: KtImportDirective, declaration: PsiElement @@ -34,7 +35,7 @@ private fun KtImportDirective.isSafeToDelete(element: PsiElement): Boolean { val referencedDescriptor = targetDescriptors().singleOrNull() ?: return false val unwrappedElement = element.unwrapped val declarationDescriptor = when (unwrappedElement) { - is KtDeclaration -> unwrappedElement.resolveToDescriptor() + is KtDeclaration -> unwrappedElement.resolveToDescriptorIfAny(BodyResolveMode.FULL) is PsiMember -> unwrappedElement.getJavaMemberDescriptor() else -> return false } diff --git a/ultimate/src/org/jetbrains/kotlin/idea/spring/inspections/KotlinFinalClassOrFunSpringInspection.kt b/ultimate/src/org/jetbrains/kotlin/idea/spring/inspections/KotlinFinalClassOrFunSpringInspection.kt index d830be262d6..c511d075759 100644 --- a/ultimate/src/org/jetbrains/kotlin/idea/spring/inspections/KotlinFinalClassOrFunSpringInspection.kt +++ b/ultimate/src/org/jetbrains/kotlin/idea/spring/inspections/KotlinFinalClassOrFunSpringInspection.kt @@ -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(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 }