From 71c2489ade97313a40e023dda1d2d1b788101796 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 11 Sep 2017 11:48:42 +0300 Subject: [PATCH] Use safe resolveToDescriptorIfAny() when possible (related to EA-105681) --- .../navigation/SourceNavigationHelper.kt | 2 +- .../structureView/KotlinStructureViewElement.kt | 4 ++-- .../idea/completion/smart/SmartCompletion.kt | 5 ++--- .../OverrideImplementMembersHandler.kt | 5 +++-- .../kotlin/idea/core/psiModificationUtils.kt | 8 ++++---- .../stepping/KotlinBasicStepMethodFilter.kt | 6 +++--- .../idea/goto/SearchEverywherePsiRenderer.kt | 14 ++++++++------ .../highlighter/markers/DeclaredHeaderMarker.kt | 6 +++--- .../idea/intentions/AddJvmStaticIntention.kt | 4 ++-- .../idea/intentions/InvertIfConditionIntention.kt | 5 ++--- .../MovePropertyToConstructorIntention.kt | 4 ++-- .../intentions/SpecifyTypeExplicitlyIntention.kt | 6 ++---- .../kotlin/idea/j2k/IdeaResolverForConverter.kt | 5 +++-- .../macro/SuggestVariableNameMacro.kt | 4 ++-- .../callableBuilder/CallableBuilder.kt | 4 ++-- .../callableBuilder/CallableInfo.kt | 4 ++-- ...teConstructorFromDelegationCallActionFactory.kt | 4 ++-- .../idea/refactoring/kotlinRefactoringUtil.kt | 3 ++- 18 files changed, 47 insertions(+), 46 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/SourceNavigationHelper.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/SourceNavigationHelper.kt index 1322b6e977c..07bcca75a49 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/SourceNavigationHelper.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/navigation/SourceNavigationHelper.kt @@ -159,7 +159,7 @@ object SourceNavigationHelper { } for (candidate in candidates) { - val candidateDescriptor = candidate.resolveToDescriptor() as CallableDescriptor + val candidateDescriptor = candidate.resolveToDescriptorIfAny() as? CallableDescriptor ?: continue if (receiversMatch(declaration, candidateDescriptor) && valueParametersTypesMatch(declaration, candidateDescriptor) && typeParametersMatch(declaration as KtTypeParameterListOwner, candidateDescriptor.typeParameters)) { diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/structureView/KotlinStructureViewElement.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/structureView/KotlinStructureViewElement.kt index b9c6cfb8d35..868de382c33 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/structureView/KotlinStructureViewElement.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/structureView/KotlinStructureViewElement.kt @@ -27,7 +27,7 @@ import org.jetbrains.annotations.TestOnly import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithVisibility 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.util.application.runReadAction import org.jetbrains.kotlin.psi.* @@ -81,7 +81,7 @@ class KotlinStructureViewElement(val element: NavigatablePsiElement, return runReadAction { if (!DumbService.isDumb(element.getProject())) { - return@runReadAction element.resolveToDescriptor() + return@runReadAction element.resolveToDescriptorIfAny() } null } diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/SmartCompletion.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/SmartCompletion.kt index 5cc69ed1892..d1f8148c835 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/SmartCompletion.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/SmartCompletion.kt @@ -25,7 +25,7 @@ import com.intellij.psi.search.GlobalSearchScope import com.intellij.util.SmartList import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.idea.KotlinIcons -import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.completion.* import org.jetbrains.kotlin.idea.completion.handlers.WithTailInsertHandler import org.jetbrains.kotlin.idea.core.* @@ -39,7 +39,6 @@ import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.renderer.render import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.DescriptorUtils -import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.TypeUtils import org.jetbrains.kotlin.types.isError @@ -340,7 +339,7 @@ class SmartCompletion( if (declaration != null) { val originalDeclaration = toFromOriginalFileMapper.toOriginalFile(declaration) if (originalDeclaration != null) { - val originalDescriptor = originalDeclaration.resolveToDescriptor(BodyResolveMode.PARTIAL) as? CallableDescriptor + val originalDescriptor = originalDeclaration.resolveToDescriptorIfAny() as? CallableDescriptor val returnType = originalDescriptor?.returnType if (returnType != null && !returnType.isError) { return listOf(ExpectedInfo(returnType, declaration.name, null)) diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideImplementMembersHandler.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideImplementMembersHandler.kt index 15955b2bf0d..8952dbf32d4 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideImplementMembersHandler.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/overrideImplement/OverrideImplementMembersHandler.kt @@ -27,16 +27,17 @@ import com.intellij.openapi.ui.DialogWrapper import com.intellij.psi.PsiDocumentManager import com.intellij.psi.PsiFile 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.core.insertMembersAfter import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType +import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode abstract class OverrideImplementMembersHandler : LanguageCodeInsightActionHandler { fun collectMembersToGenerate(classOrObject: KtClassOrObject): Collection { - val descriptor = classOrObject.resolveToDescriptor() as? ClassDescriptor ?: return emptySet() + val descriptor = classOrObject.resolveToDescriptorIfAny(BodyResolveMode.FULL) as? ClassDescriptor ?: return emptySet() return collectMembersToGenerate(descriptor, classOrObject.project) } diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/psiModificationUtils.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/psiModificationUtils.kt index bfea6fb75ea..c279cdad4d7 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/psiModificationUtils.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/psiModificationUtils.kt @@ -24,7 +24,7 @@ import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.extensions.DeclarationAttributeAltererExtension 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.references.mainReference import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers import org.jetbrains.kotlin.lexer.KtModifierKeywordToken @@ -188,7 +188,7 @@ fun KtDeclaration.toDescriptor(): DeclarationDescriptor? { val bindingContext = analyze() // TODO: temporary code if (this is KtPrimaryConstructor) { - return (this.getContainingClassOrObject().resolveToDescriptor() as ClassDescriptor).unsubstitutedPrimaryConstructor + return (this.getContainingClassOrObject().resolveToDescriptorIfAny() as? ClassDescriptor)?.unsubstitutedPrimaryConstructor } val descriptor = bindingContext[BindingContext.DECLARATION_TO_DESCRIPTOR, this] @@ -220,7 +220,7 @@ fun KtDeclaration.implicitVisibility(): KtModifierKeywordToken? = else KtTokens.DEFAULT_VISIBILITY_KEYWORD } hasModifier(KtTokens.OVERRIDE_KEYWORD) -> { - (resolveToDescriptor(BodyResolveMode.PARTIAL) as? CallableMemberDescriptor) + (resolveToDescriptorIfAny() as? CallableMemberDescriptor) ?.overriddenDescriptors ?.let { OverridingUtil.findMaxVisibility(it) } ?.toKeywordToken() @@ -271,7 +271,7 @@ fun KtDeclaration.isOverridable(): Boolean { } fun KtDeclaration.getModalityFromDescriptor(): KtModifierKeywordToken? { - val descriptor = this.resolveToDescriptor(BodyResolveMode.PARTIAL) + val descriptor = this.resolveToDescriptorIfAny() if (descriptor is MemberDescriptor) { return mapModality(descriptor.modality) } diff --git a/idea/src/org/jetbrains/kotlin/idea/debugger/stepping/KotlinBasicStepMethodFilter.kt b/idea/src/org/jetbrains/kotlin/idea/debugger/stepping/KotlinBasicStepMethodFilter.kt index dc551bb2578..5d3b0ee6c59 100644 --- a/idea/src/org/jetbrains/kotlin/idea/debugger/stepping/KotlinBasicStepMethodFilter.kt +++ b/idea/src/org/jetbrains/kotlin/idea/debugger/stepping/KotlinBasicStepMethodFilter.kt @@ -24,7 +24,7 @@ import com.sun.jdi.Location import org.jetbrains.kotlin.builtins.functions.FunctionInvokeDescriptor import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.* -import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.core.getDirectlyOverriddenDeclarations import org.jetbrains.kotlin.idea.util.application.runReadAction import org.jetbrains.kotlin.load.java.JvmAbi @@ -66,9 +66,9 @@ class KotlinBasicStepMethodFilter( } if (declaration is KtClass && method.name() == "") { - (declaration.resolveToDescriptor() as? ClassDescriptor)?.unsubstitutedPrimaryConstructor + (declaration.resolveToDescriptorIfAny() as? ClassDescriptor)?.unsubstitutedPrimaryConstructor } else { - declaration?.resolveToDescriptor() + declaration?.resolveToDescriptorIfAny() } } ?: return false // TODO: Check that we can always find a descriptor (libraries with sources, libraries without sources) diff --git a/idea/src/org/jetbrains/kotlin/idea/goto/SearchEverywherePsiRenderer.kt b/idea/src/org/jetbrains/kotlin/idea/goto/SearchEverywherePsiRenderer.kt index 22f7902615f..40e27479ce5 100644 --- a/idea/src/org/jetbrains/kotlin/idea/goto/SearchEverywherePsiRenderer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/goto/SearchEverywherePsiRenderer.kt @@ -21,7 +21,7 @@ import com.intellij.openapi.util.text.StringUtil import com.intellij.psi.PsiElement import com.intellij.psi.presentation.java.SymbolPresentationUtil 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.idea.util.IdeDescriptorRenderers import org.jetbrains.kotlin.psi.KtNamedFunction import org.jetbrains.kotlin.renderer.ParameterNameRenderingPolicy @@ -37,11 +37,13 @@ class KotlinSearchEverywherePsiRenderer(private val list: JList<*>) : DefaultPsi override fun getElementText(element: PsiElement?): String { if (element is KtNamedFunction) { - val descriptor = element.resolveToDescriptor() as FunctionDescriptor - return buildString { - descriptor.extensionReceiverParameter?.let { append(RENDERER.renderType(it.type)).append('.') } - append(element.name) - descriptor.valueParameters.joinTo(this, prefix = "(", postfix = ")") { RENDERER.renderType(it.type) } + val descriptor = element.resolveToDescriptorIfAny() as? FunctionDescriptor + if (descriptor != null) { + return buildString { + descriptor.extensionReceiverParameter?.let { append(RENDERER.renderType(it.type)).append('.') } + append(element.name) + descriptor.valueParameters.joinTo(this, prefix = "(", postfix = ")") { RENDERER.renderType(it.type) } + } } } return super.getElementText(element) diff --git a/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/DeclaredHeaderMarker.kt b/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/DeclaredHeaderMarker.kt index 2e797e1e24a..af44975fb59 100644 --- a/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/DeclaredHeaderMarker.kt +++ b/idea/src/org/jetbrains/kotlin/idea/highlighter/markers/DeclaredHeaderMarker.kt @@ -18,7 +18,7 @@ package org.jetbrains.kotlin.idea.highlighter.markers import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor -import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.core.toDescriptor import org.jetbrains.kotlin.idea.highlighter.sourceKind import org.jetbrains.kotlin.lexer.KtTokens @@ -86,7 +86,7 @@ internal fun DeclarationDescriptor.liftToHeader(): DeclarationDescriptor? { } internal fun KtDeclaration.liftToHeader(): KtDeclaration? { - val descriptor = resolveToDescriptor() - val headerDescriptor = descriptor.liftToHeader() ?: return null + val descriptor = resolveToDescriptorIfAny() + val headerDescriptor = descriptor?.liftToHeader() ?: return null return DescriptorToSourceUtils.descriptorToDeclaration(headerDescriptor) as? KtDeclaration } \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/AddJvmStaticIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/AddJvmStaticIntention.kt index 95b3de7552f..a514f96027c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/AddJvmStaticIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/AddJvmStaticIntention.kt @@ -20,7 +20,7 @@ import com.intellij.codeInsight.intention.LowPriorityAction import com.intellij.openapi.editor.Editor import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.idea.MainFunctionDetector -import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.util.addAnnotation import org.jetbrains.kotlin.idea.util.findAnnotation import org.jetbrains.kotlin.name.FqName @@ -37,7 +37,7 @@ class AddJvmStaticIntention : SelfTargetingIntention( if (element.findAnnotation(annotationFqName) != null) return false if (element.isTopLevel) return false val detector = MainFunctionDetector { function -> - function.resolveToDescriptor() as FunctionDescriptor + function.resolveToDescriptorIfAny() as? FunctionDescriptor } return detector.isMain(element, false) } diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/InvertIfConditionIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/InvertIfConditionIntention.kt index 3544747e86d..ec0949107fb 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/InvertIfConditionIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/InvertIfConditionIntention.kt @@ -19,7 +19,7 @@ package org.jetbrains.kotlin.idea.intentions import com.intellij.openapi.editor.Editor import com.intellij.psi.PsiElement 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.idea.core.moveCaret import org.jetbrains.kotlin.idea.core.replaced import org.jetbrains.kotlin.idea.core.unblockDocument @@ -28,7 +28,6 @@ import org.jetbrains.kotlin.idea.util.psi.patternMatching.matches import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.* -import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.typeUtil.isUnit import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstance import org.jetbrains.kotlin.utils.addToStdlib.lastIsInstanceOrNull @@ -213,7 +212,7 @@ class InvertIfConditionIntention : SelfTargetingIntention(KtIfEx is KtNamedFunction -> { if (parent.bodyExpression == expression) { if (!parent.hasBlockBody()) return null - val returnType = (parent.resolveToDescriptor(BodyResolveMode.PARTIAL) as FunctionDescriptor).returnType + val returnType = (parent.resolveToDescriptorIfAny() as? FunctionDescriptor)?.returnType if (returnType == null || !returnType.isUnit()) return null return KtPsiFactory(expression).createExpression("return") } diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/MovePropertyToConstructorIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/MovePropertyToConstructorIntention.kt index dbb75dd9cd7..16d7f315ad7 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/MovePropertyToConstructorIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/MovePropertyToConstructorIntention.kt @@ -26,7 +26,7 @@ import org.jetbrains.kotlin.descriptors.ParameterDescriptor import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget 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.search.usagesSearch.descriptor import org.jetbrains.kotlin.idea.util.CommentSaver @@ -106,7 +106,7 @@ class MovePropertyToConstructorIntention : } else { val typeText = element.typeReference?.text ?: - (element.resolveToDescriptor(BodyResolveMode.PARTIAL) as? PropertyDescriptor)?.type?.render() ?: return + (element.resolveToDescriptorIfAny() as? PropertyDescriptor)?.type?.render() ?: return val parameterText = buildString { element.modifierList?.getModifiersText()?.let(this::append) propertyAnnotationsText?.takeIf(String::isNotBlank)?.let { appendWithSpaceBefore(it) } diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/SpecifyTypeExplicitlyIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/SpecifyTypeExplicitlyIntention.kt index 3733c4be830..f4cbcb99d15 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/SpecifyTypeExplicitlyIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/SpecifyTypeExplicitlyIntention.kt @@ -26,7 +26,6 @@ import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor -import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.core.ShortenReferences @@ -40,7 +39,6 @@ import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.getElementTextWithContext import org.jetbrains.kotlin.psi.psiUtil.startOffset -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.* import org.jetbrains.kotlin.utils.ifEmpty @@ -88,7 +86,7 @@ class SpecifyTypeExplicitlyIntention : else -> return null } - if (declaration.containingClassOrObject?.isLocal ?: false) return null + if (declaration.containingClassOrObject?.isLocal == true) return null val callable = declaration.resolveToDescriptorIfAny() as? CallableDescriptor ?: return null if (publicAPIOnly && !callable.visibility.isPublicAPI) return null @@ -103,7 +101,7 @@ class SpecifyTypeExplicitlyIntention : } fun getTypeForDeclaration(declaration: KtCallableDeclaration): KotlinType { - val descriptor = declaration.analyze()[BindingContext.DECLARATION_TO_DESCRIPTOR, declaration] + val descriptor = declaration.resolveToDescriptorIfAny() val type = (descriptor as? CallableDescriptor)?.returnType if (type != null && type.isError && descriptor is PropertyDescriptor) { return descriptor.setterType ?: ErrorUtils.createErrorType("null type") diff --git a/idea/src/org/jetbrains/kotlin/idea/j2k/IdeaResolverForConverter.kt b/idea/src/org/jetbrains/kotlin/idea/j2k/IdeaResolverForConverter.kt index 076ab16e5d7..c425610cd8a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/j2k/IdeaResolverForConverter.kt +++ b/idea/src/org/jetbrains/kotlin/idea/j2k/IdeaResolverForConverter.kt @@ -18,8 +18,9 @@ package org.jetbrains.kotlin.idea.j2k import org.jetbrains.kotlin.j2k.ResolverForConverter import org.jetbrains.kotlin.psi.KtDeclaration -import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny +import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode object IdeaResolverForConverter : ResolverForConverter { - override fun resolveToDescriptor(declaration: KtDeclaration) = declaration.resolveToDescriptor() + override fun resolveToDescriptor(declaration: KtDeclaration) = declaration.resolveToDescriptorIfAny(BodyResolveMode.FULL) } diff --git a/idea/src/org/jetbrains/kotlin/idea/liveTemplates/macro/SuggestVariableNameMacro.kt b/idea/src/org/jetbrains/kotlin/idea/liveTemplates/macro/SuggestVariableNameMacro.kt index 084e08619a8..dbd96845e3f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/liveTemplates/macro/SuggestVariableNameMacro.kt +++ b/idea/src/org/jetbrains/kotlin/idea/liveTemplates/macro/SuggestVariableNameMacro.kt @@ -26,7 +26,7 @@ import com.intellij.psi.PsiDocumentManager import org.jetbrains.kotlin.descriptors.VariableDescriptor 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.IterableTypesDetection import org.jetbrains.kotlin.idea.core.KotlinNameSuggester import org.jetbrains.kotlin.idea.resolve.ideService @@ -74,7 +74,7 @@ class SuggestVariableNameMacro : KotlinMacro() { suggestIterationVariableName(parent, nameValidator)?.let { return it } } - val descriptor = declaration.resolveToDescriptor(BodyResolveMode.PARTIAL) as? VariableDescriptor ?: return emptyList() + val descriptor = declaration.resolveToDescriptorIfAny() as? VariableDescriptor ?: return emptyList() return KotlinNameSuggester.suggestNamesByType(descriptor.type, nameValidator, null) } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt index c4bfbf5a8df..903a144390d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableBuilder.kt @@ -43,7 +43,7 @@ import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl import org.jetbrains.kotlin.descriptors.impl.TypeParameterDescriptorImpl import org.jetbrains.kotlin.idea.caches.resolve.analyzeFullyAndGetResult import org.jetbrains.kotlin.idea.caches.resolve.getJavaClassDescriptor -import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.codeInsight.CodeInsightUtils import org.jetbrains.kotlin.idea.core.* import org.jetbrains.kotlin.idea.imports.importableFqName @@ -619,7 +619,7 @@ class CallableBuilder(val config: CallableBuilderConfiguration) { private fun postprocessDeclaration(declaration: KtNamedDeclaration) { if (callableInfo is PropertyInfo && callableInfo.isLateinitPreferred) { if (declaration.containingClassOrObject == null) return - val propertyDescriptor = declaration.resolveToDescriptor() as? PropertyDescriptor ?: return + val propertyDescriptor = declaration.resolveToDescriptorIfAny() as? PropertyDescriptor ?: return val returnType = propertyDescriptor.returnType ?: return if (TypeUtils.isNullableType(returnType) || KotlinBuiltIns.isPrimitiveType(returnType)) return declaration.addModifier(KtTokens.LATEINIT_KEYWORD) diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableInfo.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableInfo.kt index 5c3b9869fd1..5390266cd7f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableInfo.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/callableBuilder/CallableInfo.kt @@ -19,7 +19,7 @@ package org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder import com.intellij.psi.PsiElement import com.intellij.util.ArrayUtil import org.jetbrains.kotlin.descriptors.ClassDescriptorWithResolutionScopes -import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.core.KotlinNameSuggester import org.jetbrains.kotlin.idea.quickfix.createFromUsage.createClass.ClassInfo import org.jetbrains.kotlin.idea.util.getResolutionScope @@ -104,7 +104,7 @@ abstract class TypeInfo(val variance: Variance) { } } return when (containingElement) { - is KtClassOrObject -> (containingElement.resolveToDescriptor() as? ClassDescriptorWithResolutionScopes)?.scopeForMemberDeclarationResolution + is KtClassOrObject -> (containingElement.resolveToDescriptorIfAny() as? ClassDescriptorWithResolutionScopes)?.scopeForMemberDeclarationResolution is KtBlockExpression -> (containingElement.statements.firstOrNull() ?: containingElement).getResolutionScope() is KtElement -> containingElement.containingKtFile.getResolutionScope() else -> null diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateConstructorFromDelegationCallActionFactory.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateConstructorFromDelegationCallActionFactory.kt index ee2e3cdb15f..cf0003aae90 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateConstructorFromDelegationCallActionFactory.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateConstructorFromDelegationCallActionFactory.kt @@ -20,7 +20,7 @@ import com.intellij.psi.PsiClass import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassKind 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.codeInsight.DescriptorToSourceUtilsIde import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.CallableInfo import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.ParameterInfo @@ -45,7 +45,7 @@ object CreateConstructorFromDelegationCallActionFactory : CreateCallableMemberFr val project = currentClass.project - val classDescriptor = currentClass.resolveToDescriptor() as? ClassDescriptor ?: return null + val classDescriptor = currentClass.resolveToDescriptorIfAny() as? ClassDescriptor ?: return null val targetClass = if (calleeExpression.isThis) { currentClass diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/kotlinRefactoringUtil.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/kotlinRefactoringUtil.kt index a9fe3fd895a..3f37630f339 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/kotlinRefactoringUtil.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/kotlinRefactoringUtil.kt @@ -73,6 +73,7 @@ import org.jetbrains.kotlin.idea.KotlinLanguage import org.jetbrains.kotlin.idea.caches.resolve.analyze 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.codeInsight.DescriptorToSourceUtilsIde import org.jetbrains.kotlin.idea.core.* import org.jetbrains.kotlin.idea.core.util.showYesNoCancelDialog @@ -783,7 +784,7 @@ fun KtExpression.removeTemplateEntryBracesIfPossible(): KtExpression { } fun dropOverrideKeywordIfNecessary(element: KtNamedDeclaration) { - val callableDescriptor = element.resolveToDescriptor(BodyResolveMode.PARTIAL) as? CallableDescriptor ?: return + val callableDescriptor = element.resolveToDescriptorIfAny() as? CallableDescriptor ?: return if (callableDescriptor.overriddenDescriptors.isEmpty()) { element.removeModifier(KtTokens.OVERRIDE_KEYWORD) }