From 84993ec3a08f9ad08e1b86ba22bf9e870b0579c1 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Tue, 20 Feb 2018 15:14:46 +0300 Subject: [PATCH] Resolution API: introduce and use KtElement.resolveToCall() --- .../kotlin/idea/caches/resolve/resolutionApi.kt | 5 +++++ .../idea/intentions/OperatorToFunctionIntention.kt | 3 ++- .../kotlin/idea/references/referenceUtil.kt | 4 ++-- .../TypeParameterFindViewByIdInspection.kt | 5 ++--- .../idea/core/KotlinNameSuggestionProvider.kt | 5 ++--- .../stepping/KotlinSteppingCommandProvider.kt | 8 +++----- .../KotlinInvalidBundleOrPropertyInspection.kt | 6 ++---- .../kotlin/idea/properties/referenceProviders.kt | 3 ++- .../kotlin/idea/codeInliner/CodeInliner.kt | 8 ++++---- .../editor/fixers/KotlinLastLambdaParameterFixer.kt | 7 ++----- .../ConflictingExtensionPropertyInspection.kt | 10 +++------- ...ousCallableReferenceIntoParenthesesInspection.kt | 5 +++-- .../PlatformExtensionReceiverOfInlineInspection.kt | 7 ++----- .../RedundantUnitExpressionInspection.kt | 6 +++--- .../inspections/ReplaceToWithInfixFormInspection.kt | 4 ++-- .../inspections/SimplifyAssertNotNullInspection.kt | 7 ++----- .../ReplaceGetOrSetInspection.kt | 4 ++-- .../idea/intentions/AddNameToArgumentIntention.kt | 6 ++---- .../intentions/AddNamesToCallArgumentsIntention.kt | 8 +++----- .../ConvertAssertToIfWithThrowIntention.kt | 3 ++- .../ConvertIfWithThrowToAssertIntention.kt | 5 ++--- .../intentions/ConvertLambdaToReferenceIntention.kt | 4 ++-- .../ConvertUnsafeCastCallToUnsafeCastIntention.kt | 7 ++----- .../MoveMemberOutOfCompanionObjectIntention.kt | 5 ++--- .../MoveMemberToCompanionObjectIntention.kt | 5 ++--- .../MovePropertyToConstructorIntention.kt | 5 ++--- .../idea/intentions/RemoveArgumentNameIntention.kt | 6 ++---- .../intentions/RemoveForLoopIndicesIntention.kt | 8 ++------ ...oveRedundantCallsOfConversionMethodsIntention.kt | 4 ++-- .../intentions/ReplaceUntilWithRangeToIntention.kt | 5 ++--- .../org/jetbrains/kotlin/idea/intentions/Utils.kt | 9 +++++---- .../conventionNameCalls/ConventionUtils.kt | 7 ++----- .../conventionNameCalls/ReplaceContainsIntention.kt | 6 ++---- .../ConcatenatedStringGenerator.kt | 6 +++--- .../CopyConcatenatedStringToClipboardIntention.kt | 5 ++--- .../idea/intentions/loopToCallChain/commonUtils.kt | 5 ++--- .../kotlin/idea/intentions/loopToCallChain/utils.kt | 4 ++-- .../KotlinInlayParameterHintsProvider.kt | 7 ++----- .../kotlin/idea/parameterInfo/TypeHints.kt | 6 +++--- .../idea/quickfix/ChangeCallableReturnTypeFix.kt | 5 ++--- .../idea/quickfix/InsertDelegationCallQuickfix.kt | 6 +++--- .../idea/quickfix/ReplaceInfixOrOperatorCallFix.kt | 6 +++--- .../ReplaceJavaAnnotationPositionedArgumentsFix.kt | 5 ++--- .../kotlin/idea/quickfix/WrapWithSafeLetCallFix.kt | 5 ++--- .../CreateSetFunctionActionFactory.kt | 6 ++---- .../usages/KotlinByConventionCallUsage.kt | 6 ++---- .../usages/KotlinPropertyCallUsage.kt | 6 +++--- .../inline/KotlinInlineTypeAliasHandler.kt | 5 ++--- .../KotlinIntroduceParameterHandler.kt | 5 ++--- .../idea/refactoring/kotlinRefactoringUtil.kt | 13 +++---------- .../safeDelete/KotlinSafeDeleteProcessor.kt | 5 +++-- idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt | 3 +-- .../quickfixes/ParcelMigrateToParcelizeQuickFix.kt | 5 +++-- 53 files changed, 126 insertions(+), 178 deletions(-) diff --git a/idea/ide-common/src/org/jetbrains/kotlin/idea/caches/resolve/resolutionApi.kt b/idea/ide-common/src/org/jetbrains/kotlin/idea/caches/resolve/resolutionApi.kt index 30f51788b6c..de43abdc382 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/idea/caches/resolve/resolutionApi.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/idea/caches/resolve/resolutionApi.kt @@ -28,6 +28,8 @@ import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.BindingTraceContext import org.jetbrains.kotlin.resolve.ImportPath import org.jetbrains.kotlin.resolve.QualifiedExpressionResolver +import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall +import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.lazy.NoDescriptorForDeclarationException @@ -78,6 +80,9 @@ fun KtParameter.resolveToParameterDescriptorIfAny(bodyResolveMode: BodyResolveMo return context.get(BindingContext.VALUE_PARAMETER, this) as? ValueParameterDescriptor } +fun KtElement.resolveToCall(bodyResolveMode: BodyResolveMode = BodyResolveMode.PARTIAL): ResolvedCall? = + getResolvedCall(analyze(bodyResolveMode)) + fun KtFile.resolveImportReference(fqName: FqName): Collection { val facade = getResolutionFacade() return facade.resolveImportReference(facade.moduleDescriptor, fqName) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/intentions/OperatorToFunctionIntention.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/intentions/OperatorToFunctionIntention.kt index d79045ac67c..5433dd872af 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/intentions/OperatorToFunctionIntention.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/intentions/OperatorToFunctionIntention.kt @@ -22,6 +22,7 @@ import org.jetbrains.kotlin.KtNodeTypes import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.project.languageVersionSettings import org.jetbrains.kotlin.idea.references.ReferenceAccess import org.jetbrains.kotlin.idea.references.readWriteAccess @@ -84,7 +85,7 @@ class OperatorToFunctionIntention : SelfTargetingIntention(KtExpre ?: return false) as PsiElement if (!lbrace.textRange.containsOffset(caretOffset)) return false - val resolvedCall = element.getResolvedCall(element.analyze()) + val resolvedCall = element.resolveToCall(BodyResolveMode.FULL) val descriptor = resolvedCall?.resultingDescriptor if (descriptor is FunctionDescriptor && descriptor.getName() == OperatorNameConventions.INVOKE) { if (element.parent is KtDotQualifiedExpression && diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/referenceUtil.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/referenceUtil.kt index 3f730509950..876ff168b8b 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/referenceUtil.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/referenceUtil.kt @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithSource import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.resolveImportReference +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.imports.canBeReferencedViaImport import org.jetbrains.kotlin.idea.intentions.OperatorToFunctionIntention import org.jetbrains.kotlin.idea.kdoc.KDocReference @@ -240,8 +241,7 @@ fun KtExpression.readWriteAccessWithFullExpression(useResolveForReadWrite: Boole else -> { if (!useResolveForReadWrite) return ReferenceAccess.READ_WRITE to assignment - val bindingContext = assignment.analyze(BodyResolveMode.PARTIAL) - val resolvedCall = assignment.getResolvedCall(bindingContext) ?: return ReferenceAccess.READ_WRITE to assignment + val resolvedCall = assignment.resolveToCall() ?: return ReferenceAccess.READ_WRITE to assignment if (!resolvedCall.isReallySuccess()) return ReferenceAccess.READ_WRITE to assignment return if (resolvedCall.resultingDescriptor.name in OperatorConventions.ASSIGNMENT_OPERATIONS.values) ReferenceAccess.READ to assignment diff --git a/idea/idea-android/src/org/jetbrains/kotlin/android/inspection/TypeParameterFindViewByIdInspection.kt b/idea/idea-android/src/org/jetbrains/kotlin/android/inspection/TypeParameterFindViewByIdInspection.kt index 19f058a472c..18d8a751604 100644 --- a/idea/idea-android/src/org/jetbrains/kotlin/android/inspection/TypeParameterFindViewByIdInspection.kt +++ b/idea/idea-android/src/org/jetbrains/kotlin/android/inspection/TypeParameterFindViewByIdInspection.kt @@ -20,12 +20,11 @@ import com.intellij.codeInspection.* import com.intellij.openapi.project.Project import com.intellij.psi.PsiElementVisitor import org.jetbrains.android.facet.AndroidFacet -import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.inspections.AbstractKotlinInspection import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.KtPsiUtil.isUnsafeCast import org.jetbrains.kotlin.psi.psiUtil.addTypeArgument -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall class TypeParameterFindViewByIdInspection : AbstractKotlinInspection(), CleanupLocalInspectionTool { override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean, session: LocalInspectionToolSession): PsiElementVisitor { @@ -43,7 +42,7 @@ class TypeParameterFindViewByIdInspection : AbstractKotlinInspection(), CleanupL val parentCast = (expression.parent as? KtBinaryExpressionWithTypeRHS)?.takeIf { isUnsafeCast(it) } ?: return val typeText = parentCast.right?.getTypeTextWithoutQuestionMark() ?: return - val callableDescriptor = expression.getResolvedCall(expression.analyze())?.resultingDescriptor ?: return + val callableDescriptor = expression.resolveToCall()?.resultingDescriptor ?: return if (callableDescriptor.name.asString() != "findViewById" || callableDescriptor.typeParameters.size != 1) { return } diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/KotlinNameSuggestionProvider.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/KotlinNameSuggestionProvider.kt index 32a7d3aa9a3..33443d7d742 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/KotlinNameSuggestionProvider.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/KotlinNameSuggestionProvider.kt @@ -27,10 +27,9 @@ import com.intellij.refactoring.rename.NameSuggestionProvider import org.jetbrains.kotlin.asJava.toLightElements import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.CallableDescriptor -import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.calls.model.ArgumentMatch import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.typeUtil.isUnit @@ -67,7 +66,7 @@ class KotlinNameSuggestionProvider : NameSuggestionProvider { val refExpr = ref.element as? KtSimpleNameExpression ?: continue val argument = refExpr.parent as? KtValueArgument ?: continue val callElement = (argument.parent as? KtValueArgumentList)?.parent as? KtCallElement ?: continue - val resolvedCall = callElement.getResolvedCall(callElement.analyze(BodyResolveMode.PARTIAL)) ?: continue + val resolvedCall = callElement.resolveToCall() ?: continue val parameterName = (resolvedCall.getArgumentMapping(argument) as? ArgumentMatch)?.valueParameter?.name ?: continue result += parameterName.asString() } diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/stepping/KotlinSteppingCommandProvider.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/stepping/KotlinSteppingCommandProvider.kt index 4a8e77b8ae4..0617773cb55 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/stepping/KotlinSteppingCommandProvider.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/stepping/KotlinSteppingCommandProvider.kt @@ -36,6 +36,7 @@ import org.jetbrains.kotlin.codegen.inline.KOTLIN_STRATA_NAME import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor import org.jetbrains.kotlin.idea.codeInsight.CodeInsightUtils import org.jetbrains.kotlin.idea.debugger.* @@ -54,7 +55,6 @@ import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.getParentOfType import org.jetbrains.kotlin.psi.psiUtil.parents import org.jetbrains.kotlin.psi.psiUtil.startOffset -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.calls.model.VariableAsFunctionResolvedCallImpl import org.jetbrains.kotlin.resolve.inline.InlineUtil import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode @@ -210,8 +210,7 @@ private fun getInlineArgumentsCallsIfAny(sourcePosition: SourcePosition, declara } fun isCallOfArgument(ktCallExpression: KtCallExpression): Boolean { - val context = ktCallExpression.analyze(BodyResolveMode.PARTIAL) - val resolvedCall = ktCallExpression.getResolvedCall(context) as? VariableAsFunctionResolvedCallImpl ?: return false + val resolvedCall = ktCallExpression.resolveToCall() as? VariableAsFunctionResolvedCallImpl ?: return false val candidateDescriptor = resolvedCall.variableCall.candidateDescriptor @@ -223,8 +222,7 @@ private fun getInlineArgumentsCallsIfAny(sourcePosition: SourcePosition, declara private fun getInlineFunctionCallsIfAny(sourcePosition: SourcePosition): List { fun isInlineCall(expr: KtCallExpression): Boolean { - val context = expr.analyze(BodyResolveMode.PARTIAL) - val resolvedCall = expr.getResolvedCall(context) ?: return false + val resolvedCall = expr.resolveToCall() ?: return false return InlineUtil.isInline(resolvedCall.resultingDescriptor) } diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/i18n/inspections/KotlinInvalidBundleOrPropertyInspection.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/i18n/inspections/KotlinInvalidBundleOrPropertyInspection.kt index ea235e50b58..438ba0c636e 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/i18n/inspections/KotlinInvalidBundleOrPropertyInspection.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/i18n/inspections/KotlinInvalidBundleOrPropertyInspection.kt @@ -25,15 +25,13 @@ import com.intellij.lang.properties.psi.Property import com.intellij.lang.properties.references.PropertyReference import com.intellij.openapi.util.TextRange import com.intellij.psi.PsiElementVisitor -import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.inspections.AbstractKotlinInspection import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType import org.jetbrains.kotlin.psi.psiUtil.parents -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.calls.model.ExpressionValueArgument import org.jetbrains.kotlin.resolve.calls.model.VarargValueArgument -import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull class KotlinInvalidBundleOrPropertyInspection : AbstractKotlinInspection() { @@ -69,7 +67,7 @@ class KotlinInvalidBundleOrPropertyInspection : AbstractKotlinInspection() { if (argument.getArgumentExpression() != KtPsiUtil.deparenthesize(template) ) return val callExpression = argument.getStrictParentOfType() ?: return - val resolvedCall = callExpression.getResolvedCall(callExpression.analyze(BodyResolveMode.PARTIAL)) ?: return + val resolvedCall = callExpression.resolveToCall() ?: return val resolvedArguments = resolvedCall.valueArgumentsByIndex ?: return val keyArgumentIndex = resolvedArguments.indexOfFirst { it is ExpressionValueArgument && it.valueArgument == argument } diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/properties/referenceProviders.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/properties/referenceProviders.kt index 41c9d05d1a2..6cd43424b43 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/properties/referenceProviders.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/properties/referenceProviders.kt @@ -32,6 +32,7 @@ import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.imports.importableFqName import org.jetbrains.kotlin.idea.references.mainReference @@ -90,7 +91,7 @@ private fun KtExpression.getBundleNameByContext(): String? { } private fun KtAnnotationEntry.getPropertyKeyResolvedCall(): ResolvedCall<*>? { - val resolvedCall = getResolvedCall(analyze(BodyResolveMode.PARTIAL)) ?: return null + val resolvedCall = resolveToCall() ?: return null val klass = (resolvedCall.resultingDescriptor as? ClassConstructorDescriptor)?.containingDeclaration ?: return null if (klass.kind != ClassKind.ANNOTATION_CLASS || klass.importableFqName != PROPERTY_KEY) return null return resolvedCall diff --git a/idea/src/org/jetbrains/kotlin/idea/codeInliner/CodeInliner.kt b/idea/src/org/jetbrains/kotlin/idea/codeInliner/CodeInliner.kt index d6a4d75e614..1a94e9695e4 100644 --- a/idea/src/org/jetbrains/kotlin/idea/codeInliner/CodeInliner.kt +++ b/idea/src/org/jetbrains/kotlin/idea/codeInliner/CodeInliner.kt @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.caches.resolve.resolveImportReference +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.core.* import org.jetbrains.kotlin.idea.intentions.RemoveExplicitTypeArgumentsIntention import org.jetbrains.kotlin.idea.util.CommentSaver @@ -461,8 +462,7 @@ class CodeInliner( } for (callExpression in callsToProcess) { - val bindingContext = callExpression.analyze(BodyResolveMode.PARTIAL) - val resolvedCall = callExpression.getResolvedCall(bindingContext) ?: return + val resolvedCall = callExpression.resolveToCall() ?: return if (!resolvedCall.isReallySuccess()) return val argumentsToMakeNamed = callExpression.valueArguments.dropWhile { !it[MAKE_ARGUMENT_NAMED_KEY] } @@ -539,7 +539,7 @@ class CodeInliner( result.forEachDescendantOfType(canGoInside = { !it[USER_CODE_KEY] }) { argument -> if (argument.getSpreadElement() != null && !argument.isNamed()) { val argumentExpression = argument.getArgumentExpression() ?: return@forEachDescendantOfType - val resolvedCall = argumentExpression.getResolvedCall(argumentExpression.analyze(BodyResolveMode.PARTIAL)) ?: return@forEachDescendantOfType + val resolvedCall = argumentExpression.resolveToCall() ?: return@forEachDescendantOfType val callExpression = resolvedCall.call.callElement as? KtCallExpression ?: return@forEachDescendantOfType if (CompileTimeConstantUtils.isArrayFunctionCall(resolvedCall)) { argumentsToExpand.add(argument to callExpression.valueArguments) @@ -581,7 +581,7 @@ class CodeInliner( val callExpression = argumentList.parent as? KtCallExpression ?: return if (callExpression.lambdaArguments.isNotEmpty()) return - val resolvedCall = callExpression.getResolvedCall(callExpression.analyze(BodyResolveMode.PARTIAL)) ?: return + val resolvedCall = callExpression.resolveToCall() ?: return if (!resolvedCall.isReallySuccess()) return val argumentMatch = resolvedCall.getArgumentMapping(argument) as ArgumentMatch if (argumentMatch.valueParameter != resolvedCall.resultingDescriptor.valueParameters.last()) return diff --git a/idea/src/org/jetbrains/kotlin/idea/editor/fixers/KotlinLastLambdaParameterFixer.kt b/idea/src/org/jetbrains/kotlin/idea/editor/fixers/KotlinLastLambdaParameterFixer.kt index 2aea59fff43..44b92d80fd6 100644 --- a/idea/src/org/jetbrains/kotlin/idea/editor/fixers/KotlinLastLambdaParameterFixer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/editor/fixers/KotlinLastLambdaParameterFixer.kt @@ -20,19 +20,16 @@ import com.intellij.lang.SmartEnterProcessorWithFixers import com.intellij.openapi.editor.Editor import com.intellij.psi.PsiElement import org.jetbrains.kotlin.builtins.isFunctionType -import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.editor.KotlinSmartEnterHandler import org.jetbrains.kotlin.psi.KtCallExpression import org.jetbrains.kotlin.psi.psiUtil.endOffset -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall -import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode class KotlinLastLambdaParameterFixer : SmartEnterProcessorWithFixers.Fixer() { override fun apply(editor: Editor, processor: KotlinSmartEnterHandler, element: PsiElement) { if (element !is KtCallExpression) return - val bindingContext = element.analyze(BodyResolveMode.PARTIAL) - val resolvedCall = element.getResolvedCall(bindingContext) ?: return + val resolvedCall = element.resolveToCall() ?: return val valueParameters = resolvedCall.candidateDescriptor.valueParameters diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/ConflictingExtensionPropertyInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/ConflictingExtensionPropertyInspection.kt index e7afe1cbf63..8d10ba64495 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/ConflictingExtensionPropertyInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/ConflictingExtensionPropertyInspection.kt @@ -24,10 +24,7 @@ import com.intellij.psi.search.searches.ReferencesSearch import com.intellij.ui.GuiUtils import org.jetbrains.kotlin.descriptors.FunctionDescriptor 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.resolveToDescriptorIfAny -import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.* import org.jetbrains.kotlin.idea.core.targetDescriptors import org.jetbrains.kotlin.idea.imports.importableFqName import org.jetbrains.kotlin.idea.quickfix.KotlinQuickFixAction @@ -42,7 +39,6 @@ import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType import org.jetbrains.kotlin.renderer.render import org.jetbrains.kotlin.resolve.DeprecationResolver -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.calls.model.isReallySuccess import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.scopes.SyntheticScopes @@ -123,7 +119,7 @@ class ConflictingExtensionPropertyInspection : AbstractKotlinInspection() { private fun KtExpression?.isGetMethodCall(getMethod: FunctionDescriptor): Boolean = when (this) { is KtCallExpression -> { - val resolvedCall = getResolvedCall(analyze()) + val resolvedCall = resolveToCall() resolvedCall != null && resolvedCall.isReallySuccess() && resolvedCall.resultingDescriptor.original == getMethod.original } @@ -139,7 +135,7 @@ class ConflictingExtensionPropertyInspection : AbstractKotlinInspection() { when (this) { is KtCallExpression -> { if ((valueArguments.singleOrNull()?.getArgumentExpression() as? KtSimpleNameExpression)?.getReferencedNameAsName() != valueParameterName) return false - val resolvedCall = getResolvedCall(analyze()) + val resolvedCall = resolveToCall() return resolvedCall != null && resolvedCall.isReallySuccess() && resolvedCall.resultingDescriptor.original == setMethod.original } diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/MoveSuspiciousCallableReferenceIntoParenthesesInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/MoveSuspiciousCallableReferenceIntoParenthesesInspection.kt index 182cf94db7e..fd02c8408ea 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/MoveSuspiciousCallableReferenceIntoParenthesesInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/MoveSuspiciousCallableReferenceIntoParenthesesInspection.kt @@ -14,6 +14,7 @@ import org.jetbrains.kotlin.builtins.getReturnTypeFromFunctionType import org.jetbrains.kotlin.builtins.isBuiltinFunctionalType import org.jetbrains.kotlin.builtins.isBuiltinFunctionalTypeOrSubtype import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.intentions.ConvertLambdaToReferenceIntention import org.jetbrains.kotlin.psi.KtCallableReferenceExpression import org.jetbrains.kotlin.psi.KtLambdaExpression @@ -21,7 +22,7 @@ import org.jetbrains.kotlin.psi.ValueArgument import org.jetbrains.kotlin.psi.lambdaExpressionVisitor import org.jetbrains.kotlin.resolve.calls.callUtil.getParameterForArgument import org.jetbrains.kotlin.resolve.calls.callUtil.getParentResolvedCall -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall +import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode class MoveSuspiciousCallableReferenceIntoParenthesesInspection : AbstractKotlinInspection() { override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean, session: LocalInspectionToolSession): PsiElementVisitor { @@ -59,7 +60,7 @@ class MoveSuspiciousCallableReferenceIntoParenthesesInspection : AbstractKotlinI val callableReferenceExpression = element.bodyExpression?.statements?.singleOrNull() as? KtCallableReferenceExpression ?: return null val callableReference = callableReferenceExpression.callableReference - val resolvedCall = callableReference.getResolvedCall(callableReference.analyze()) + val resolvedCall = callableReference.resolveToCall(BodyResolveMode.FULL) val receiverValue = resolvedCall?.let { it.extensionReceiver ?: it.dispatchReceiver } return (receiverValue?.let { "${it.type}" } ?: "") + "::${callableReference.text}" } diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/PlatformExtensionReceiverOfInlineInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/PlatformExtensionReceiverOfInlineInspection.kt index 73341b61371..362d65ab279 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/PlatformExtensionReceiverOfInlineInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/PlatformExtensionReceiverOfInlineInspection.kt @@ -16,14 +16,12 @@ import com.intellij.ui.EditorTextField import org.intellij.lang.regexp.RegExpFileType import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.descriptors.FunctionDescriptor -import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.project.languageVersionSettings import org.jetbrains.kotlin.idea.quickfix.AddExclExclCallFix import org.jetbrains.kotlin.psi.KtCallExpression import org.jetbrains.kotlin.psi.KtDotQualifiedExpression import org.jetbrains.kotlin.psi.KtVisitorVoid -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall -import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.isNullabilityFlexible import java.awt.BorderLayout import java.util.regex.PatternSyntaxException @@ -58,8 +56,7 @@ class PlatformExtensionReceiverOfInlineInspection : AbstractKotlinInspection() { return } - val context = expression.analyze(BodyResolveMode.PARTIAL) - val resolvedCall = expression.getResolvedCall(context) ?: return + val resolvedCall = expression.resolveToCall() ?: return val extensionReceiverType = resolvedCall.extensionReceiver?.type ?: return if (!extensionReceiverType.isNullabilityFlexible()) return val descriptor = resolvedCall.resultingDescriptor as? FunctionDescriptor ?: return diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantUnitExpressionInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantUnitExpressionInspection.kt index 0bae9c0ce24..cdd92c39807 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantUnitExpressionInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantUnitExpressionInspection.kt @@ -9,13 +9,13 @@ import com.intellij.codeInspection.* import com.intellij.openapi.project.Project import com.intellij.psi.PsiElementVisitor import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.intentions.loopToCallChain.previousStatement import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getParentOfType import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypesAndPredicate import org.jetbrains.kotlin.psi.psiUtil.lastBlockStatementOrThis -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall +import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.typeUtil.isUnit class RedundantUnitExpressionInspection : AbstractKotlinInspection(), CleanupLocalInspectionTool { @@ -44,7 +44,7 @@ private fun KtReferenceExpression.isRedundantUnit(): Boolean { if (this == parent.lastBlockStatementOrThis()) { val prev = this.previousStatement() ?: return true if (prev.isUnitLiteral()) return true - val prevType = prev.getResolvedCall(analyze())?.resultingDescriptor?.returnType + val prevType = prev.resolveToCall(BodyResolveMode.FULL)?.resultingDescriptor?.returnType if (prevType != null) { return prevType.isUnit() } diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/ReplaceToWithInfixFormInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/ReplaceToWithInfixFormInspection.kt index 38728129520..d84e18ea58d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/ReplaceToWithInfixFormInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/ReplaceToWithInfixFormInspection.kt @@ -13,6 +13,7 @@ import com.intellij.openapi.project.Project import com.intellij.psi.PsiElementVisitor import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.intentions.callExpression import org.jetbrains.kotlin.idea.intentions.calleeName import org.jetbrains.kotlin.psi.KtDotQualifiedExpression @@ -30,8 +31,7 @@ class ReplaceToWithInfixFormInspection : AbstractKotlinInspection() { if (expression.callExpression?.valueArguments?.size != 1) return if (expression.calleeName !in compatibleNames) return - val context = expression.analyze(BodyResolveMode.PARTIAL) - val resolvedCall = expression.getResolvedCall(context) ?: return + val resolvedCall = expression.resolveToCall() ?: return val function = resolvedCall.resultingDescriptor as? FunctionDescriptor ?: return if (!function.isInfix) return diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/SimplifyAssertNotNullInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/SimplifyAssertNotNullInspection.kt index b81f3e6ef2d..9b7868f7193 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/SimplifyAssertNotNullInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/SimplifyAssertNotNullInspection.kt @@ -21,7 +21,7 @@ import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement import org.jetbrains.kotlin.descriptors.FunctionDescriptor -import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.core.ShortenReferences import org.jetbrains.kotlin.idea.core.moveCaret import org.jetbrains.kotlin.idea.imports.importableFqName @@ -32,9 +32,7 @@ import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.siblings import org.jetbrains.kotlin.psi.psiUtil.startOffset -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.calls.model.isReallySuccess -import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull class SimplifyAssertNotNullInspection : AbstractApplicabilityBasedInspection(KtCallExpression::class.java) { @@ -53,8 +51,7 @@ class SimplifyAssertNotNullInspection : AbstractApplicabilityBasedInspection(KtValueArgument::class.java, "Add name to argument"), LowPriorityAction { @@ -64,7 +62,7 @@ class AddNameToArgumentIntention if (argument != argumentList.arguments.last { !it.isNamed() }) return null val callExpr = argumentList.parent as? KtCallElement ?: return null - val resolvedCall = callExpr.getResolvedCall(callExpr.analyze(BodyResolveMode.PARTIAL)) ?: return null + val resolvedCall = callExpr.resolveToCall() ?: return null val argumentMatch = resolvedCall.getArgumentMapping(argument) as? ArgumentMatch ?: return null if (argumentMatch.status != ArgumentMatchStatus.SUCCESS) return null diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/AddNamesToCallArgumentsIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/AddNamesToCallArgumentsIntention.kt index d63455a3feb..5c6f9f34470 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/AddNamesToCallArgumentsIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/AddNamesToCallArgumentsIntention.kt @@ -18,13 +18,11 @@ package org.jetbrains.kotlin.idea.intentions import com.intellij.openapi.editor.Editor import com.intellij.openapi.util.TextRange -import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.calls.model.ArgumentMatch import org.jetbrains.kotlin.resolve.calls.model.ArgumentMatchStatus import org.jetbrains.kotlin.resolve.calls.model.VarargValueArgument -import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode class AddNamesToCallArgumentsIntention : SelfTargetingRangeIntention( KtCallElement::class.java, @@ -34,7 +32,7 @@ class AddNamesToCallArgumentsIntention : SelfTargetingRangeIntention 1) return false if (functionLiterals.size == 1 && argumentSize == 1) return false // "assert {...}" is incorrect - val resolvedCall = element.getResolvedCall(element.analyze()) ?: return false + val resolvedCall = element.resolveToCall() ?: return false return DescriptorUtils.getFqName(resolvedCall.resultingDescriptor).asString() == "kotlin.assert" } diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertIfWithThrowToAssertIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertIfWithThrowToAssertIntention.kt index 4436d5b6c89..03c41774e18 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertIfWithThrowToAssertIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertIfWithThrowToAssertIntention.kt @@ -17,7 +17,7 @@ package org.jetbrains.kotlin.idea.intentions import com.intellij.openapi.editor.Editor -import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.core.replaced import org.jetbrains.kotlin.idea.intentions.branchedTransformations.isNullExpression import org.jetbrains.kotlin.idea.intentions.branchedTransformations.unwrapBlockOrParenthesis @@ -25,7 +25,6 @@ import org.jetbrains.kotlin.idea.core.ShortenReferences import org.jetbrains.kotlin.idea.inspections.SimplifyNegatedBinaryExpressionInspection import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.DescriptorUtils -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.utils.addToStdlib.constant class ConvertIfWithThrowToAssertIntention : SelfTargetingOffsetIndependentIntention(KtIfExpression::class.java, "Replace 'if' with 'assert' statement") { @@ -38,7 +37,7 @@ class ConvertIfWithThrowToAssertIntention : SelfTargetingOffsetIndependentIntent if (thrownExpr.valueArguments.size > 1) return false - val resolvedCall = thrownExpr.getResolvedCall(thrownExpr.analyze()) ?: return false + val resolvedCall = thrownExpr.resolveToCall() ?: return false val targetFqName = DescriptorUtils.getFqName(resolvedCall.resultingDescriptor).asString() return targetFqName in constant { setOf("kotlin.AssertionError.", "java.lang.AssertionError.") } } diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertLambdaToReferenceIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertLambdaToReferenceIntention.kt index 31857f1ce5a..7e0013b440e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertLambdaToReferenceIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertLambdaToReferenceIntention.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.builtins.isFunctionType import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.core.ShortenReferences import org.jetbrains.kotlin.idea.imports.importableFqName import org.jetbrains.kotlin.idea.inspections.IntentionBasedInspection @@ -222,8 +223,7 @@ open class ConvertLambdaToReferenceIntention(text: String) : return when (singleStatement) { is KtCallExpression -> { val calleeReferenceExpression = singleStatement.calleeExpression as? KtNameReferenceExpression ?: return null - val context = singleStatement.analyze() - val resolvedCall = calleeReferenceExpression.getResolvedCall(context) ?: return null + val resolvedCall = calleeReferenceExpression.resolveToCall() ?: return null val receiver = resolvedCall.dispatchReceiver ?: resolvedCall.extensionReceiver val receiverText = when { receiver == null -> "" diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertUnsafeCastCallToUnsafeCastIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertUnsafeCastCallToUnsafeCastIntention.kt index 459df475c43..94e458dec99 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertUnsafeCastCallToUnsafeCastIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertUnsafeCastCallToUnsafeCastIntention.kt @@ -6,13 +6,11 @@ package org.jetbrains.kotlin.idea.intentions import com.intellij.openapi.editor.Editor -import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.project.platform import org.jetbrains.kotlin.js.resolve.JsPlatform import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameOrNull -import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode class ConvertUnsafeCastCallToUnsafeCastIntention : SelfTargetingIntention( KtDotQualifiedExpression::class.java, "Convert to unsafe cast" @@ -22,8 +20,7 @@ class ConvertUnsafeCastCallToUnsafeCastIntention : SelfTargetingIntention { val refExpr = ref.expression if (element.isAncestor(refExpr)) return@mapNotNullTo null - val context = refExpr.analyze(BodyResolveMode.PARTIAL) - val resolvedCall = refExpr.getResolvedCall(context) ?: return@mapNotNullTo null + val resolvedCall = refExpr.resolveToCall() ?: return@mapNotNullTo null val callExpression = resolvedCall.call.callElement as? KtExpression ?: return@mapNotNullTo null diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/MovePropertyToConstructorIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/MovePropertyToConstructorIntention.kt index 16d7f315ad7..b688a1c145c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/MovePropertyToConstructorIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/MovePropertyToConstructorIntention.kt @@ -26,6 +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.resolveToCall import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.core.ShortenReferences import org.jetbrains.kotlin.idea.search.usagesSearch.descriptor @@ -38,7 +39,6 @@ import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType import org.jetbrains.kotlin.resolve.AnnotationChecker import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.source.getPsi import org.jetbrains.kotlin.types.KotlinType @@ -163,8 +163,7 @@ class MovePropertyToConstructorIntention : } override fun visitReferenceExpression(expression: KtReferenceExpression) { - val context = expression.analyze(BodyResolveMode.PARTIAL) - val declarationDescriptor = expression.getResolvedCall(context)?.resultingDescriptor ?: return + val declarationDescriptor = expression.resolveToCall()?.resultingDescriptor ?: return if (declarationDescriptor.containingDeclaration == containingClass.descriptor) { isValid = false } diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/RemoveArgumentNameIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/RemoveArgumentNameIntention.kt index 81d2b93062a..9c247c6c7f9 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/RemoveArgumentNameIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/RemoveArgumentNameIntention.kt @@ -18,15 +18,13 @@ package org.jetbrains.kotlin.idea.intentions import com.intellij.openapi.editor.Editor import com.intellij.openapi.util.TextRange -import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.psi.KtCallElement import org.jetbrains.kotlin.psi.KtPsiFactory import org.jetbrains.kotlin.psi.KtValueArgument import org.jetbrains.kotlin.psi.KtValueArgumentList import org.jetbrains.kotlin.psi.psiUtil.startOffset -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.calls.model.ArgumentMatch -import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode class RemoveArgumentNameIntention : SelfTargetingRangeIntention(KtValueArgument::class.java, "Remove argument name") { @@ -39,7 +37,7 @@ class RemoveArgumentNameIntention if (arguments.takeWhile { it != element }.any { it.isNamed() }) return null val callExpr = argumentList.parent as? KtCallElement ?: return null - val resolvedCall = callExpr.getResolvedCall(callExpr.analyze(BodyResolveMode.PARTIAL)) ?: return null + val resolvedCall = callExpr.resolveToCall() ?: return null val argumentMatch = resolvedCall.getArgumentMapping(element) as? ArgumentMatch ?: return null if (argumentMatch.valueParameter.index != arguments.indexOf(element)) return null diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/RemoveForLoopIndicesIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/RemoveForLoopIndicesIntention.kt index 23b4910f513..e0b3eaf8b25 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/RemoveForLoopIndicesIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/RemoveForLoopIndicesIntention.kt @@ -20,16 +20,14 @@ import com.intellij.codeInspection.ProblemHighlightType import com.intellij.openapi.editor.Editor import com.intellij.openapi.util.TextRange import com.intellij.psi.search.searches.ReferencesSearch -import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.editor.fixers.range import org.jetbrains.kotlin.idea.inspections.IntentionBasedInspection import org.jetbrains.kotlin.psi.KtDotQualifiedExpression import org.jetbrains.kotlin.psi.KtForExpression import org.jetbrains.kotlin.psi.KtPsiFactory import org.jetbrains.kotlin.psi.createExpressionByPattern -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe -import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode class RemoveForLoopIndicesInspection : IntentionBasedInspection( RemoveForLoopIndicesIntention::class, @@ -47,9 +45,7 @@ class RemoveForLoopIndicesIntention : SelfTargetingRangeIntention String::class.qualifiedName is KtConstantExpression -> getType(analyze())?.getJetTypeFqName(false) else -> { - getResolvedCall(analyze())?.candidateDescriptor?.returnType?.let { + resolveToCall()?.candidateDescriptor?.returnType?.let { if (it.isFlexible()) null else if (it.isMarkedNullable && parent !is KtSafeQualifiedExpression) null else it.getJetTypeFqName(false) diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ReplaceUntilWithRangeToIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ReplaceUntilWithRangeToIntention.kt index cfc9d352f36..358f2637fe4 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ReplaceUntilWithRangeToIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ReplaceUntilWithRangeToIntention.kt @@ -17,12 +17,11 @@ package org.jetbrains.kotlin.idea.intentions import com.intellij.openapi.editor.Editor -import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe -internal fun KtExpression.getCallableDescriptor() = getResolvedCall(analyze())?.resultingDescriptor +internal fun KtExpression.getCallableDescriptor() = resolveToCall()?.resultingDescriptor internal fun KtExpression.getArguments() = when (this) { is KtBinaryExpression -> this.left to this.right diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/Utils.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/Utils.kt index 7f1d542a2f2..edadcb93865 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/Utils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/Utils.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.core.replaced import org.jetbrains.kotlin.idea.core.setType import org.jetbrains.kotlin.idea.references.mainReference @@ -56,7 +57,7 @@ fun KtContainerNode.description(): String? { } fun KtCallExpression.isMethodCall(fqMethodName: String): Boolean { - val resolvedCall = this.getResolvedCall(this.analyze()) ?: return false + val resolvedCall = this.resolveToCall() ?: return false return resolvedCall.resultingDescriptor.fqNameUnsafe.asString() == fqMethodName } @@ -103,7 +104,7 @@ val KtQualifiedExpression.calleeName: String? fun KtQualifiedExpression.toResolvedCall(bodyResolveMode: BodyResolveMode): ResolvedCall? { val callExpression = callExpression ?: return null - return callExpression.getResolvedCall(callExpression.analyze(bodyResolveMode)) ?: return null + return callExpression.resolveToCall(bodyResolveMode) ?: return null } fun KtExpression.isExitStatement(): Boolean = when (this) { @@ -232,7 +233,7 @@ fun KtElement?.isZero() = this?.text == "0" fun KtElement?.isOne() = this?.text == "1" private fun KtExpression.isExpressionOfTypeOrSubtype(predicate: (KotlinType) -> Boolean): Boolean { - val returnType = getResolvedCall(analyze())?.resultingDescriptor?.returnType + val returnType = resolveToCall()?.resultingDescriptor?.returnType return returnType != null && (returnType.constructor.supertypes + returnType).any(predicate) } @@ -289,7 +290,7 @@ private val ARRAY_OF_METHODS = setOf(CollectionLiteralResolver.ARRAY_OF_FUNCTION Name.identifier("emptyArray") fun KtCallExpression.isArrayOfMethod(): Boolean { - val resolvedCall = getResolvedCall(analyze()) ?: return false + val resolvedCall = resolveToCall() ?: return false val descriptor = resolvedCall.candidateDescriptor return (descriptor.containingDeclaration as? PackageFragmentDescriptor)?.fqName == KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME && ARRAY_OF_METHODS.contains(descriptor.name) diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/conventionNameCalls/ConventionUtils.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/conventionNameCalls/ConventionUtils.kt index 8d257c75202..231f145a238 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/conventionNameCalls/ConventionUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/conventionNameCalls/ConventionUtils.kt @@ -17,16 +17,13 @@ package org.jetbrains.kotlin.idea.intentions.conventionNameCalls import org.jetbrains.kotlin.descriptors.FunctionDescriptor -import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.psi.KtExpression -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe import org.jetbrains.kotlin.resolve.findOriginalTopMostOverriddenDescriptors -import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode fun KtExpression.isAnyEquals(): Boolean { - val context = analyze(BodyResolveMode.PARTIAL) - val resolvedCall = getResolvedCall(context) ?: return false + val resolvedCall = resolveToCall() ?: return false return (resolvedCall.resultingDescriptor as? FunctionDescriptor)?.isAnyEquals() == true } diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/conventionNameCalls/ReplaceContainsIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/conventionNameCalls/ReplaceContainsIntention.kt index 99e0d542cd1..e851e281e45 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/conventionNameCalls/ReplaceContainsIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/conventionNameCalls/ReplaceContainsIntention.kt @@ -20,12 +20,11 @@ import com.intellij.codeInsight.intention.HighPriorityAction 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.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.intentions.* import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.load.java.descriptors.JavaMethodDescriptor import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.calls.model.ArgumentMatch import org.jetbrains.kotlin.resolve.calls.model.isReallySuccess import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns @@ -89,8 +88,7 @@ class ReplaceContainsIntention : SelfTargetingRangeIntention( @@ -35,7 +34,7 @@ class CopyConcatenatedStringToClipboardIntention : SelfTargetingOffsetIndependen override fun isApplicableTo(element: KtBinaryExpression): Boolean { if (element.operationToken != KtTokens.PLUS) return false - val resolvedCall = element.getResolvedCall(element.analyze()) ?: return false + val resolvedCall = element.resolveToCall() ?: return false return KotlinBuiltIns.isString(resolvedCall.candidateDescriptor.returnType) } } \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/commonUtils.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/commonUtils.kt index 39b35f6579b..ddc2b2b4047 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/commonUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/commonUtils.kt @@ -22,6 +22,7 @@ import com.intellij.psi.search.searches.ReferencesSearch import org.jetbrains.kotlin.KtNodeTypes import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.imports.importableFqName import org.jetbrains.kotlin.idea.references.KtSimpleNameReference import org.jetbrains.kotlin.idea.references.mainReference @@ -34,7 +35,6 @@ import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForSelector import org.jetbrains.kotlin.psi.psiUtil.parents import org.jetbrains.kotlin.psi.psiUtil.siblings import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluator import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstance @@ -190,8 +190,7 @@ fun KtExpression?.extractStaticFunctionCallArguments(functionFqName: String): Li else -> null } ?: return null - val bindingContext = callExpression.analyze(BodyResolveMode.PARTIAL) - val resolvedCall = callExpression.getResolvedCall(bindingContext) ?: return null + val resolvedCall = callExpression.resolveToCall() ?: return null val functionDescriptor = resolvedCall.resultingDescriptor as? FunctionDescriptor ?: return null if (functionDescriptor.dispatchReceiverParameter != null || functionDescriptor.extensionReceiverParameter != null) return null if (functionDescriptor.importableFqName?.asString() != functionFqName) return null diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/utils.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/utils.kt index f271540b9b1..35fbec3b81b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/utils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/utils.kt @@ -28,6 +28,7 @@ import org.jetbrains.kotlin.idea.analysis.analyzeAsReplacement import org.jetbrains.kotlin.idea.analysis.analyzeInContext import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.core.copied import org.jetbrains.kotlin.idea.core.replaced @@ -204,8 +205,7 @@ fun KtExpression.isSimpleCollectionInstantiation(): CollectionKind? { val callExpression = this as? KtCallExpression ?: return null //TODO: it can be qualified too if (callExpression.valueArguments.isNotEmpty()) return null - val bindingContext = callExpression.analyze(BodyResolveMode.PARTIAL) - val resolvedCall = callExpression.getResolvedCall(bindingContext) ?: return null + val resolvedCall = callExpression.resolveToCall() ?: return null val descriptor = resolvedCall.resultingDescriptor when (descriptor) { diff --git a/idea/src/org/jetbrains/kotlin/idea/parameterInfo/KotlinInlayParameterHintsProvider.kt b/idea/src/org/jetbrains/kotlin/idea/parameterInfo/KotlinInlayParameterHintsProvider.kt index bafe5733718..95aaa8acb25 100644 --- a/idea/src/org/jetbrains/kotlin/idea/parameterInfo/KotlinInlayParameterHintsProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/parameterInfo/KotlinInlayParameterHintsProvider.kt @@ -15,16 +15,14 @@ import com.intellij.psi.PsiElement import org.jetbrains.kotlin.descriptors.ConstructorDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.idea.actions.internal.KotlinInternalMode -import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.getReturnTypeReference import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameOrNull import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe -import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode enum class HintType(desc: String, enabled: Boolean) { @@ -168,8 +166,7 @@ class KotlinInlayParameterHintsProvider : InlayParameterHintsProvider { } private fun getMethodInfo(elem: KtCallElement): HintInfo.MethodInfo? { - val ctx = elem.analyze(BodyResolveMode.PARTIAL) - val resolvedCall = elem.getResolvedCall(ctx) + val resolvedCall = elem.resolveToCall() val resolvedCallee = resolvedCall?.candidateDescriptor if (resolvedCallee is FunctionDescriptor) { val paramNames = diff --git a/idea/src/org/jetbrains/kotlin/idea/parameterInfo/TypeHints.kt b/idea/src/org/jetbrains/kotlin/idea/parameterInfo/TypeHints.kt index 3f5d514a07b..bcc98537c5b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/parameterInfo/TypeHints.kt +++ b/idea/src/org/jetbrains/kotlin/idea/parameterInfo/TypeHints.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.descriptors.ClassifierDescriptor import org.jetbrains.kotlin.descriptors.ConstructorDescriptor import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.core.formatter.KotlinCodeStyleSettings import org.jetbrains.kotlin.idea.intentions.SpecifyTypeExplicitlyIntention import org.jetbrains.kotlin.idea.util.getResolutionScope @@ -25,7 +26,7 @@ import org.jetbrains.kotlin.renderer.ClassifierNamePolicy import org.jetbrains.kotlin.renderer.DescriptorRenderer import org.jetbrains.kotlin.renderer.RenderingFormat import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall +import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.scopes.utils.findClassifier import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.typeUtil.containsError @@ -107,8 +108,7 @@ private fun isUnclearType(type: KotlinType, element: KtCallableDeclaration): Boo if (initializer is KtConstantExpression || initializer is KtStringTemplateExpression) return false if (initializer is KtUnaryExpression && initializer.baseExpression is KtConstantExpression) return false if (initializer is KtCallExpression) { - val bindingContext = element.analyze() - val resolvedCall = initializer.getResolvedCall(bindingContext) + val resolvedCall = initializer.resolveToCall(BodyResolveMode.FULL) val resolvedDescriptor = resolvedCall?.candidateDescriptor if (resolvedDescriptor is SamConstructorDescriptor) { return false diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeCallableReturnTypeFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeCallableReturnTypeFix.kt index c3ceb49c65b..8cc23a30cd7 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeCallableReturnTypeFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeCallableReturnTypeFix.kt @@ -27,6 +27,7 @@ import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.diagnostics.Errors.COMPONENT_FUNCTION_RETURN_TYPE_MISMATCH import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor import org.jetbrains.kotlin.idea.core.ShortenReferences @@ -38,7 +39,6 @@ import org.jetbrains.kotlin.psi.psiUtil.getElementTextWithContext import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.DataClassDescriptorResolver import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.ErrorUtils @@ -188,8 +188,7 @@ abstract class ChangeCallableReturnTypeFix( object CompareToTypeMismatchFactory : KotlinSingleIntentionActionFactory() { override fun createAction(diagnostic: Diagnostic): IntentionAction? { val expression = QuickFixUtil.getParentElementOfType(diagnostic, KtBinaryExpression::class.java) ?: error("COMPARE_TO_TYPE_MISMATCH reported on element that is not within any expression") - val context = expression.analyze(BodyResolveMode.PARTIAL) - val resolvedCall = expression.getResolvedCall(context) ?: return null + val resolvedCall = expression.resolveToCall() ?: return null val compareToDescriptor = resolvedCall.candidateDescriptor val compareTo = DescriptorToSourceUtils.descriptorToDeclaration(compareToDescriptor) as? KtFunction ?: return null return ChangeCallableReturnTypeFix.ForCalled(compareTo, compareToDescriptor.builtIns.intType) diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/InsertDelegationCallQuickfix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/InsertDelegationCallQuickfix.kt index 51e5e354a1e..dcd05ac1507 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/InsertDelegationCallQuickfix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/InsertDelegationCallQuickfix.kt @@ -22,7 +22,7 @@ import com.intellij.openapi.project.Project import org.jetbrains.kotlin.descriptors.ClassDescriptor 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.resolveToCall import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor import org.jetbrains.kotlin.idea.core.moveCaret import org.jetbrains.kotlin.idea.quickfix.quickfixUtil.createIntentionForFirstParentOfType @@ -32,8 +32,8 @@ import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtSecondaryConstructor import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.calls.model.isReallySuccess +import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode class InsertDelegationCallQuickfix(val isThis: Boolean, element: KtSecondaryConstructor) : KotlinQuickFixAction(element) { @@ -46,7 +46,7 @@ class InsertDelegationCallQuickfix(val isThis: Boolean, element: KtSecondaryCons val element = element ?: return val newDelegationCall = element.replaceImplicitDelegationCallWithExplicit(isThis) - val resolvedCall = newDelegationCall.getResolvedCall(newDelegationCall.analyze()) + val resolvedCall = newDelegationCall.resolveToCall(BodyResolveMode.FULL) val descriptor = element.unsafeResolveToDescriptor() // if empty call is ok and it's resolved to another constructor, do not move caret diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ReplaceInfixOrOperatorCallFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ReplaceInfixOrOperatorCallFix.kt index fa4b8a499a4..f02031559c6 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ReplaceInfixOrOperatorCallFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ReplaceInfixOrOperatorCallFix.kt @@ -22,13 +22,13 @@ import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.diagnostics.Errors -import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.intentions.OperatorToFunctionIntention import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getAssignmentByLHS -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.calls.resolvedCallUtil.getImplicitReceiverValue +import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.expressions.OperatorConventions class ReplaceInfixOrOperatorCallFix( @@ -111,7 +111,7 @@ class ReplaceInfixOrOperatorCallFix( when { parent.calleeExpression == null -> null parent.parent is KtQualifiedExpression -> null - parent.getResolvedCall(parent.analyze())?.getImplicitReceiverValue() != null -> null + parent.resolveToCall(BodyResolveMode.FULL)?.getImplicitReceiverValue() != null -> null else -> ReplaceInfixOrOperatorCallFix(parent, parent.shouldHaveNotNullType()) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ReplaceJavaAnnotationPositionedArgumentsFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ReplaceJavaAnnotationPositionedArgumentsFix.kt index f00a9eb5860..7e9822dc45c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ReplaceJavaAnnotationPositionedArgumentsFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ReplaceJavaAnnotationPositionedArgumentsFix.kt @@ -19,12 +19,11 @@ package org.jetbrains.kotlin.idea.quickfix import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project import org.jetbrains.kotlin.diagnostics.Diagnostic -import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.quickfix.quickfixUtil.createIntentionForFirstParentOfType import org.jetbrains.kotlin.psi.KtAnnotationEntry import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtPsiFactory -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.calls.model.ExpressionValueArgument import org.jetbrains.kotlin.resolve.jvm.checkers.JavaAnnotationCallChecker @@ -35,7 +34,7 @@ class ReplaceJavaAnnotationPositionedArgumentsFix(element: KtAnnotationEntry) override fun invoke(project: Project, editor: Editor?, file: KtFile) { val element = element ?: return - val resolvedCall = element.getResolvedCall(element.analyze()) ?: return + val resolvedCall = element.resolveToCall() ?: return val psiFactory = KtPsiFactory(project) for ((key, value) in JavaAnnotationCallChecker.getJavaAnnotationCallValueArgumentsThatShouldBeNamed(resolvedCall)) { diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/WrapWithSafeLetCallFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/WrapWithSafeLetCallFix.kt index 0f4e05c3adc..f5339c078d7 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/WrapWithSafeLetCallFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/WrapWithSafeLetCallFix.kt @@ -21,14 +21,13 @@ import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.diagnostics.Errors -import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.core.KotlinNameSuggester import org.jetbrains.kotlin.idea.core.NewDeclarationNameValidator import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.createSmartPointer import org.jetbrains.kotlin.psi.psiUtil.getLastParentOfTypeInRow import org.jetbrains.kotlin.psi.psiUtil.getParentOfType -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.types.typeUtil.isNullabilityMismatch class WrapWithSafeLetCallFix( @@ -61,7 +60,7 @@ class WrapWithSafeLetCallFix( val element = diagnostic.psiElement if (element is KtNameReferenceExpression) { - val resolvedCall = element.getResolvedCall(element.analyze()) + val resolvedCall = element.resolveToCall() if (resolvedCall?.call?.callType != Call.CallType.INVOKE) return null } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateSetFunctionActionFactory.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateSetFunctionActionFactory.kt index c9ba44da005..27381fe0c67 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateSetFunctionActionFactory.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/createFromUsage/createCallable/CreateSetFunctionActionFactory.kt @@ -17,7 +17,7 @@ package org.jetbrains.kotlin.idea.quickfix.createFromUsage.createCallable import org.jetbrains.kotlin.diagnostics.Diagnostic -import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.core.quickfix.QuickFixUtil import org.jetbrains.kotlin.idea.project.builtIns import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.CallableInfo @@ -26,7 +26,6 @@ import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.Parame import org.jetbrains.kotlin.idea.quickfix.createFromUsage.callableBuilder.TypeInfo import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.types.ErrorUtils import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.types.expressions.OperatorConventions @@ -51,8 +50,7 @@ object CreateSetFunctionActionFactory : CreateGetSetFunctionActionFactory(isGet is KtUnaryExpression -> { if (assignmentExpr.operationToken !in OperatorConventions.INCREMENT_OPERATIONS) return null - val context = assignmentExpr.analyze() - val rhsType = assignmentExpr.getResolvedCall(context)?.resultingDescriptor?.returnType + val rhsType = assignmentExpr.resolveToCall()?.resultingDescriptor?.returnType TypeInfo(if (rhsType == null || ErrorUtils.containsErrorType(rhsType)) builtIns.anyType else rhsType, Variance.IN_VARIANCE) } else -> return null diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/KotlinByConventionCallUsage.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/KotlinByConventionCallUsage.kt index c75cd83b62e..32a60092401 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/KotlinByConventionCallUsage.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/KotlinByConventionCallUsage.kt @@ -6,7 +6,7 @@ package org.jetbrains.kotlin.idea.refactoring.changeSignature.usages import com.intellij.usageView.UsageInfo -import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.inspections.conventionNameCalls.ReplaceGetOrSetInspection import org.jetbrains.kotlin.idea.intentions.OperatorToFunctionIntention import org.jetbrains.kotlin.idea.intentions.conventionNameCalls.ReplaceInvokeIntention @@ -16,9 +16,7 @@ import org.jetbrains.kotlin.psi.KtDotQualifiedExpression import org.jetbrains.kotlin.psi.KtExpression import org.jetbrains.kotlin.psi.psiUtil.getPossiblyQualifiedCallExpression import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForSelectorOrThis -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall -import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.util.OperatorNameConventions class KotlinByConventionCallUsage( @@ -56,7 +54,7 @@ class KotlinByConventionCallUsage( val element = element ?: return val convertedExpression = OperatorToFunctionIntention.convert(element).first val callExpression = convertedExpression.getPossiblyQualifiedCallExpression() ?: return - resolvedCall = callExpression.getResolvedCall(callExpression.analyze(BodyResolveMode.PARTIAL)) + resolvedCall = callExpression.resolveToCall() convertedCallExpression = callExpression } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/KotlinPropertyCallUsage.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/KotlinPropertyCallUsage.kt index 9959625214f..8b5b2d8ad94 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/KotlinPropertyCallUsage.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/usages/KotlinPropertyCallUsage.kt @@ -17,7 +17,7 @@ package org.jetbrains.kotlin.idea.refactoring.changeSignature.usages import com.intellij.usageView.UsageInfo -import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinChangeInfo import org.jetbrains.kotlin.idea.references.mainReference import org.jetbrains.kotlin.psi.KtPsiFactory @@ -25,11 +25,11 @@ import org.jetbrains.kotlin.psi.KtQualifiedExpression import org.jetbrains.kotlin.psi.KtSimpleNameExpression import org.jetbrains.kotlin.psi.createExpressionByPattern import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForSelectorOrThis -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall +import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver class KotlinPropertyCallUsage(element: KtSimpleNameExpression): KotlinUsageInfo(element) { - private val resolvedCall = element.getResolvedCall(element.analyze()) + private val resolvedCall = element.resolveToCall(BodyResolveMode.FULL) override fun processUsage(changeInfo: KotlinChangeInfo, element: KtSimpleNameExpression, allUsages: Array): Boolean { updateName(changeInfo, element) diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/inline/KotlinInlineTypeAliasHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/inline/KotlinInlineTypeAliasHandler.kt index ea3d139fccd..80b54f86502 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/inline/KotlinInlineTypeAliasHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/inline/KotlinInlineTypeAliasHandler.kt @@ -31,6 +31,7 @@ import org.jetbrains.kotlin.builtins.isFunctionType import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor import org.jetbrains.kotlin.idea.KotlinLanguage import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor import org.jetbrains.kotlin.idea.core.ShortenReferences import org.jetbrains.kotlin.idea.core.replaced @@ -42,7 +43,6 @@ import org.jetbrains.kotlin.idea.util.application.executeWriteCommand import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.* import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.TypeProjectionImpl import org.jetbrains.kotlin.types.TypeSubstitutor @@ -132,7 +132,6 @@ class KotlinInlineTypeAliasHandler : InlineActionHandler() { } fun inlineIntoCall(usage: KtReferenceExpression): KtElement? { - val context = usage.analyze(BodyResolveMode.PARTIAL) val importDirective = usage.getStrictParentOfType() if (importDirective != null) { @@ -144,7 +143,7 @@ class KotlinInlineTypeAliasHandler : InlineActionHandler() { return null } - val resolvedCall = usage.getResolvedCall(context) ?: return null + val resolvedCall = usage.resolveToCall() ?: return null val callElement = resolvedCall.call.callElement as? KtCallElement ?: return null val substitution = resolvedCall.typeArguments .mapKeys { it.key.typeConstructor } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterHandler.kt index e78bad397b8..0a1541f473e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterHandler.kt @@ -35,6 +35,7 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor import org.jetbrains.kotlin.idea.codeInsight.CodeInsightUtils import org.jetbrains.kotlin.idea.core.* @@ -57,7 +58,6 @@ import org.jetbrains.kotlin.idea.util.psi.patternMatching.toRange import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.* import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver import org.jetbrains.kotlin.types.typeUtil.isNothing import org.jetbrains.kotlin.types.typeUtil.isUnit @@ -441,8 +441,7 @@ private fun findInternalUsagesOfParametersAndReceiver( override fun visitKtElement(element: KtElement) { super.visitKtElement(element) - val bindingContext = element.analyze() - val resolvedCall = element.getResolvedCall(bindingContext) ?: return + val resolvedCall = element.resolveToCall() ?: return if ((resolvedCall.extensionReceiver as? ImplicitReceiver)?.declarationDescriptor == targetDescriptor || (resolvedCall.dispatchReceiver as? ImplicitReceiver)?.declarationDescriptor == targetDescriptor) { diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/kotlinRefactoringUtil.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/kotlinRefactoringUtil.kt index b811bad522e..96313212352 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/kotlinRefactoringUtil.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/kotlinRefactoringUtil.kt @@ -59,10 +59,7 @@ import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.idea.KotlinFileType 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.resolveToDescriptorIfAny -import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.* import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde import org.jetbrains.kotlin.idea.core.ShortenReferences import org.jetbrains.kotlin.idea.core.getPackage @@ -90,7 +87,6 @@ import org.jetbrains.kotlin.psi.psiUtil.* import org.jetbrains.kotlin.renderer.DescriptorRenderer import org.jetbrains.kotlin.resolve.* import org.jetbrains.kotlin.resolve.calls.callUtil.getCallWithAssert -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver import org.jetbrains.kotlin.resolve.source.getPsi @@ -807,11 +803,8 @@ fun dropOperatorKeywordIfNecessary(element: KtNamedDeclaration) { } } -fun getQualifiedTypeArgumentList( - initializer: KtExpression, - context: BindingContext = initializer.analyze(BodyResolveMode.PARTIAL) -): KtTypeArgumentList? { - val call = initializer.getResolvedCall(context) ?: return null +fun getQualifiedTypeArgumentList(initializer: KtExpression): KtTypeArgumentList? { + val call = initializer.resolveToCall() ?: return null val typeArgumentMap = call.typeArguments val typeArguments = call.candidateDescriptor.typeParameters.mapNotNull { typeArgumentMap[it] } val renderedList = typeArguments.joinToString(prefix = "<", postfix = ">") { diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt index 19f497ec762..2c13c5f48eb 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt @@ -41,6 +41,7 @@ import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.core.deleteElementAndCleanParent import org.jetbrains.kotlin.idea.highlighter.markers.actualsForExpected import org.jetbrains.kotlin.idea.highlighter.markers.liftToExpected @@ -58,7 +59,7 @@ import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypeAndBranch import org.jetbrains.kotlin.psi.psiUtil.parameterIndex import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall +import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.utils.SmartSet import org.jetbrains.kotlin.utils.ifEmpty import java.util.* @@ -106,7 +107,7 @@ class KotlinSafeDeleteProcessor : JavaSafeDeleteProcessor() { val index = parameter.parameterIndex() for (reference in searchKotlinDeclarationReferences(ownerFunction)) { val callee = reference.element as? KtExpression ?: continue - val resolvedCall = callee.getResolvedCall(callee.analyze()) ?: continue + val resolvedCall = callee.resolveToCall(BodyResolveMode.FULL) ?: continue val parameterDescriptor = resolvedCall.candidateDescriptor.valueParameters.getOrNull(index) ?: continue val resolvedArgument = resolvedCall.valueArguments[parameterDescriptor] ?: continue val arguments = resolvedArgument.arguments.filterIsInstance() diff --git a/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt b/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt index 32b56e8f3a5..f4396f6659a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt @@ -61,7 +61,6 @@ import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.* import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.DescriptorUtils -import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.calls.model.DefaultValueArgument import org.jetbrains.kotlin.resolve.calls.model.ExpressionValueArgument import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode @@ -265,7 +264,7 @@ class InflowSlicer( val argumentExpression = when { refElement is KtExpression -> { val callElement = refElement.getParentOfTypeAndBranch { calleeExpression } ?: return@body - val resolvedCall = callElement.getResolvedCall(callElement.analyze()) ?: return@body + val resolvedCall = callElement.resolveToCall() ?: return@body val resolvedArgument = resolvedCall.valueArguments[parameterDescriptor] ?: return@body when (resolvedArgument) { is DefaultValueArgument -> defaultValue diff --git a/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/parcel/quickfixes/ParcelMigrateToParcelizeQuickFix.kt b/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/parcel/quickfixes/ParcelMigrateToParcelizeQuickFix.kt index 69ed5579949..ca8555a564c 100644 --- a/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/parcel/quickfixes/ParcelMigrateToParcelizeQuickFix.kt +++ b/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/parcel/quickfixes/ParcelMigrateToParcelizeQuickFix.kt @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ConstructorDescriptor import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.core.getOrCreateCompanionObject import org.jetbrains.kotlin.idea.intentions.branchedTransformations.unwrapBlockOrParenthesis @@ -114,8 +115,8 @@ class ParcelMigrateToParcelizeQuickFix(function: KtClass) : AbstractParcelableQu when (initializer) { is KtObjectLiteralExpression -> return initializer.objectDeclaration is KtCallExpression -> { - val constructedClass = (initializer.getResolvedCall(initializer.analyze(BodyResolveMode.PARTIAL)) - ?.resultingDescriptor as? ConstructorDescriptor)?.constructedClass + val constructedClass = (initializer.resolveToCall() + ?.resultingDescriptor as? ConstructorDescriptor)?.constructedClass if (constructedClass != null) { val sourceElement = constructedClass.source as? KotlinSourceElement (sourceElement?.psi as? KtClassOrObject)?.let { return it }