From b436ee6e19023d8628575c3321590f96e915d787 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Wed, 21 Feb 2018 16:00:36 +0300 Subject: [PATCH] Replace some of RESOLVED_CALL & REFERENCE_TARGET usages to resolveToCall --- .../kotlin/android/AndroidResourceReferenceAnnotator.kt | 7 ++----- .../src/org/jetbrains/kotlin/android/ParcelableUtil.kt | 3 ++- .../kotlin/idea/codeInliner/UsageReplacementStrategy.kt | 7 ++----- .../idea/inspections/UnnecessaryVariableInspection.kt | 6 ++++-- .../idea/intentions/ConvertLambdaToReferenceIntention.kt | 4 +--- .../DeprecatedCallableAddReplaceWithIntention.kt | 3 ++- .../idea/intentions/IntroduceBackingPropertyIntention.kt | 5 ++--- .../idea/intentions/MovePropertyToConstructorIntention.kt | 3 +-- .../intentions/branchedTransformations/IfThenUtils.kt | 5 ++--- .../kotlin/idea/parameterInfo/SuspendingCallHints.kt | 8 ++------ .../jetbrains/kotlin/idea/quickfix/AddConstModifierFix.kt | 7 ++----- .../kotlin/idea/quickfix/AddSuspendModifierFix.kt | 7 ++----- .../move/moveDeclarations/moveConflictUtils.kt | 5 +++-- .../rename/RenameBackingFieldReferenceHandler.kt | 5 ++--- .../idea/refactoring/rename/RenameDynamicMemberHandler.kt | 5 ++--- .../rename/RenameJavaSyntheticPropertyHandler.kt | 7 ++----- .../safeDelete/KotlinJavaSafeDeleteDelegate.kt | 7 ++----- idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt | 2 +- .../kotlin/AndroidExtensionsReferenceSearchExecutor.kt | 6 ++---- .../synthetic/idea/AndroidGotoDeclarationHandler.kt | 8 ++------ .../jetbrains/kotlin/android/AbstractAndroidGotoTest.kt | 6 ++---- 21 files changed, 42 insertions(+), 74 deletions(-) diff --git a/idea/idea-android/src/org/jetbrains/kotlin/android/AndroidResourceReferenceAnnotator.kt b/idea/idea-android/src/org/jetbrains/kotlin/android/AndroidResourceReferenceAnnotator.kt index 98fdaa4c4e0..8cedcb81250 100644 --- a/idea/idea-android/src/org/jetbrains/kotlin/android/AndroidResourceReferenceAnnotator.kt +++ b/idea/idea-android/src/org/jetbrains/kotlin/android/AndroidResourceReferenceAnnotator.kt @@ -23,16 +23,13 @@ import com.android.tools.idea.rendering.GutterIconRenderer import com.android.tools.idea.res.ResourceHelper import com.intellij.lang.annotation.AnnotationHolder import com.intellij.lang.annotation.Annotator -import com.intellij.openapi.module.ModuleUtilCore import com.intellij.psi.PsiElement import org.jetbrains.android.AndroidColorAnnotator import org.jetbrains.android.facet.AndroidFacet import org.jetbrains.kotlin.android.ResourceReferenceAnnotatorUtil.* -import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.load.java.descriptors.JavaPropertyDescriptor import org.jetbrains.kotlin.psi.KtReferenceExpression -import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode class AndroidResourceReferenceAnnotator : Annotator { @@ -77,5 +74,5 @@ class AndroidResourceReferenceAnnotator : Annotator { } private fun KtReferenceExpression.getResourceReferenceTargetDescriptor(): JavaPropertyDescriptor? = - analyze(BodyResolveMode.PARTIAL)[BindingContext.REFERENCE_TARGET, this] as? JavaPropertyDescriptor + resolveToCall()?.resultingDescriptor as? JavaPropertyDescriptor } diff --git a/idea/idea-android/src/org/jetbrains/kotlin/android/ParcelableUtil.kt b/idea/idea-android/src/org/jetbrains/kotlin/android/ParcelableUtil.kt index fc9d6139a6d..b3ea233794f 100644 --- a/idea/idea-android/src/org/jetbrains/kotlin/android/ParcelableUtil.kt +++ b/idea/idea-android/src/org/jetbrains/kotlin/android/ParcelableUtil.kt @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.builtins.PrimitiveType import org.jetbrains.kotlin.descriptors.ParameterDescriptor import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.codeInsight.shorten.addToShorteningWaitSet import org.jetbrains.kotlin.idea.codeInsight.shorten.performDelayedRefactoringRequests import org.jetbrains.kotlin.idea.intentions.getLeftMostReceiverExpression @@ -161,7 +162,7 @@ private fun KtExpression.isReadFromParcelPropertyAssignment(): Boolean { private fun KtExpression.isReadFromParcel(): Boolean { val reference = firstChild as? KtReferenceExpression ?: (firstChild as? KtDotQualifiedExpression)?.getLeftMostReceiverExpression() as? KtReferenceExpression ?: return false - val target = reference.analyze(BodyResolveMode.PARTIAL)[BindingContext.REFERENCE_TARGET, reference] ?: return false + val target = reference.resolveToCall()?.resultingDescriptor ?: return false return (target as? ParameterDescriptor)?.type?.fqNameEquals(CLASS_PARCEL) ?: false } diff --git a/idea/src/org/jetbrains/kotlin/idea/codeInliner/UsageReplacementStrategy.kt b/idea/src/org/jetbrains/kotlin/idea/codeInliner/UsageReplacementStrategy.kt index a18e34d0530..371a608f135 100644 --- a/idea/src/org/jetbrains/kotlin/idea/codeInliner/UsageReplacementStrategy.kt +++ b/idea/src/org/jetbrains/kotlin/idea/codeInliner/UsageReplacementStrategy.kt @@ -29,7 +29,7 @@ import com.intellij.psi.search.searches.ReferencesSearch import com.intellij.ui.GuiUtils 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.resolveToCall import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.core.targetDescriptors import org.jetbrains.kotlin.idea.intentions.ConvertReferenceToLambdaIntention @@ -43,8 +43,6 @@ import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.collectDescendantsOfType import org.jetbrains.kotlin.psi.psiUtil.forEachDescendantOfType import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType -import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode interface UsageReplacementStrategy { fun createReplacer(usage: KtSimpleNameExpression): (() -> KtElement?)? @@ -189,8 +187,7 @@ private fun UsageReplacementStrategy.doRefactoringInside( ) { element.forEachDescendantOfType { usage -> if (usage.isValid && usage.getReferencedName() == targetName) { - val context = usage.analyze(BodyResolveMode.PARTIAL) - if (targetDescriptor == context[BindingContext.REFERENCE_TARGET, usage]) { + if (targetDescriptor == usage.resolveToCall()?.candidateDescriptor) { createReplacer(usage)?.invoke() } } diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/UnnecessaryVariableInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/UnnecessaryVariableInspection.kt index df5420fcf60..b226a6c86e4 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/UnnecessaryVariableInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/UnnecessaryVariableInspection.kt @@ -24,6 +24,7 @@ import com.intellij.psi.search.searches.ReferencesSearch import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.VariableDescriptor import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.core.NewDeclarationNameValidator import org.jetbrains.kotlin.idea.refactoring.inline.KotlinInlineValHandler import org.jetbrains.kotlin.psi.* @@ -33,6 +34,7 @@ import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType import org.jetbrains.kotlin.resolve.BindingContext.DECLARATION_TO_DESCRIPTOR import org.jetbrains.kotlin.resolve.BindingContext.REFERENCE_TARGET import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils +import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode class UnnecessaryVariableInspection : AbstractApplicabilityBasedInspection(KtProperty::class.java) { @@ -69,8 +71,8 @@ class UnnecessaryVariableInspection : AbstractApplicabilityBasedInspection(KtP private fun replaceFieldReferences(element: KtElement, propertyName: String) { element.acceptChildren(object : KtTreeVisitorVoid() { override fun visitSimpleNameExpression(expression: KtSimpleNameExpression) { - val bindingContext = expression.analyze() - val target = bindingContext.get(BindingContext.REFERENCE_TARGET, expression) + val target = expression.resolveToCall()?.resultingDescriptor if (target is SyntheticFieldDescriptor) { expression.replace(KtPsiFactory(element).createSimpleName("_$propertyName")) } diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/MovePropertyToConstructorIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/MovePropertyToConstructorIntention.kt index b688a1c145c..68e4249b2f5 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/MovePropertyToConstructorIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/MovePropertyToConstructorIntention.kt @@ -127,8 +127,7 @@ class MovePropertyToConstructorIntention : private fun KtProperty.findConstructorParameter(): KtParameter? { val reference = initializer as? KtReferenceExpression ?: return null - val parameterDescriptor = reference.analyze(BodyResolveMode.PARTIAL)[BindingContext.REFERENCE_TARGET, reference] - as? ParameterDescriptor ?: return null + val parameterDescriptor = reference.resolveToCall()?.resultingDescriptor as? ParameterDescriptor ?: return null return parameterDescriptor.source.getPsi() as? KtParameter } diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/IfThenUtils.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/IfThenUtils.kt index b1c2d2cb933..6a8aa4c7211 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/IfThenUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/branchedTransformations/IfThenUtils.kt @@ -23,6 +23,7 @@ import com.intellij.psi.search.searches.ReferencesSearch import org.jetbrains.kotlin.KtNodeTypes import org.jetbrains.kotlin.descriptors.VariableDescriptor 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.getLeftMostReceiverExpression import org.jetbrains.kotlin.idea.intentions.replaceFirstReceiver @@ -39,7 +40,6 @@ import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.calls.callUtil.getType import org.jetbrains.kotlin.resolve.calls.resolvedCallUtil.getImplicitReceiverValue import org.jetbrains.kotlin.resolve.calls.smartcasts.isStableValue -import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitReceiver import org.jetbrains.kotlin.types.TypeUtils import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf @@ -80,9 +80,8 @@ fun KtExpression?.isNullExpressionOrEmptyBlock(): Boolean = fun KtThrowExpression.throwsNullPointerExceptionWithNoArguments(): Boolean { val thrownExpression = this.thrownExpression as? KtCallExpression ?: return false - val context = this.analyze(BodyResolveMode.PARTIAL) val nameExpression = thrownExpression.calleeExpression as? KtNameReferenceExpression ?: return false - val descriptor = context[BindingContext.REFERENCE_TARGET, nameExpression] + val descriptor = nameExpression.resolveToCall()?.resultingDescriptor val declDescriptor = descriptor?.containingDeclaration ?: return false val exceptionName = DescriptorUtils.getFqName(declDescriptor).asString() diff --git a/idea/src/org/jetbrains/kotlin/idea/parameterInfo/SuspendingCallHints.kt b/idea/src/org/jetbrains/kotlin/idea/parameterInfo/SuspendingCallHints.kt index ad08f08aa6b..f72ab97dab0 100644 --- a/idea/src/org/jetbrains/kotlin/idea/parameterInfo/SuspendingCallHints.kt +++ b/idea/src/org/jetbrains/kotlin/idea/parameterInfo/SuspendingCallHints.kt @@ -7,16 +7,12 @@ package org.jetbrains.kotlin.idea.parameterInfo import com.intellij.codeInsight.hints.InlayInfo import org.jetbrains.kotlin.backend.common.descriptors.isSuspend -import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.psi.KtCallExpression import org.jetbrains.kotlin.psi.psiUtil.startOffset -import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode fun provideSuspendingCallHint(callExpression: KtCallExpression): InlayInfo? { - val bindingContext = callExpression.analyze(BodyResolveMode.PARTIAL) - val call = bindingContext[BindingContext.CALL, callExpression.calleeExpression] ?: return null - val resolvedCall = bindingContext[BindingContext.RESOLVED_CALL, call] ?: return null + val resolvedCall = callExpression.resolveToCall() ?: return null if (resolvedCall.candidateDescriptor.isSuspend) { return InlayInfo(TYPE_INFO_PREFIX + "#", callExpression.calleeExpression?.startOffset ?: callExpression.startOffset) } diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddConstModifierFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddConstModifierFix.kt index c677b8f61ae..5d59d4a121d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddConstModifierFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddConstModifierFix.kt @@ -27,7 +27,7 @@ import com.intellij.psi.search.searches.ReferencesSearch import org.jetbrains.kotlin.asJava.LightClassUtil import org.jetbrains.kotlin.descriptors.VariableDescriptor import org.jetbrains.kotlin.diagnostics.Diagnostic -import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.intentions.SelfTargetingIntention import org.jetbrains.kotlin.idea.search.allScope import org.jetbrains.kotlin.idea.search.usagesSearch.descriptor @@ -39,9 +39,7 @@ import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtProperty import org.jetbrains.kotlin.psi.KtReferenceExpression import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.checkers.ConstModifierChecker -import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.source.PsiSourceElement class AddConstModifierFix(val property: KtProperty) : AddModifierFix(property, KtTokens.CONST_KEYWORD), CleanupFix { @@ -86,8 +84,7 @@ class AddConstModifierIntention : SelfTargetingIntention(KtProperty: object ConstFixFactory : KotlinSingleIntentionActionFactory() { override fun createAction(diagnostic: Diagnostic): IntentionAction? { val expr = diagnostic.psiElement as? KtReferenceExpression ?: return null - val bindingContext = expr.analyze(BodyResolveMode.PARTIAL) - val targetDescriptor = bindingContext.get(BindingContext.REFERENCE_TARGET, expr) as? VariableDescriptor ?: return null + val targetDescriptor = expr.resolveToCall()?.resultingDescriptor as? VariableDescriptor ?: return null val declaration = (targetDescriptor.source as? PsiSourceElement)?.psi as? KtProperty ?: return null if (ConstModifierChecker.canBeConst(declaration, declaration, targetDescriptor)) { return AddConstModifierFix(declaration) diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddSuspendModifierFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddSuspendModifierFix.kt index 537f8725b50..b135121c45c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddSuspendModifierFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddSuspendModifierFix.kt @@ -21,12 +21,10 @@ import org.jetbrains.kotlin.builtins.isFunctionType import org.jetbrains.kotlin.cfg.pseudocode.containingDeclarationForPseudocode import org.jetbrains.kotlin.descriptors.ValueDescriptor 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.lexer.KtTokens import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils -import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode class AddSuspendModifierFix( element: KtModifierListOwner, @@ -62,8 +60,7 @@ class AddSuspendModifierFix( if (callParent !== qualifiedGrandParent.selectorExpression || refExpr !== callParent.calleeExpression) return null val receiver = qualifiedGrandParent.receiverExpression as? KtNameReferenceExpression ?: return null - val context = receiver.analyze(BodyResolveMode.PARTIAL) - val receiverDescriptor = context[BindingContext.REFERENCE_TARGET, receiver] as? ValueDescriptor ?: return null + val receiverDescriptor = receiver.resolveToCall()?.resultingDescriptor as? ValueDescriptor ?: return null if (!receiverDescriptor.type.isFunctionType) return null val declaration = DescriptorToSourceUtils.descriptorToDeclaration(receiverDescriptor) as? KtCallableDeclaration ?: return null diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/moveConflictUtils.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/moveConflictUtils.kt index a3556575503..20bb6505266 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/moveConflictUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveDeclarations/moveConflictUtils.kt @@ -294,6 +294,7 @@ class MoveConflictChecker( if (declaration.module == targetModule) continue declaration.forEachDescendantOfType { refExpr -> + // NB: for unknown reason, refExpr.resolveToCall() does not work here val targetDescriptor = refExpr.analyze(BodyResolveMode.PARTIAL)[BindingContext.REFERENCE_TARGET, refExpr] ?: return@forEachDescendantOfType if (KotlinBuiltIns.isBuiltIn(targetDescriptor)) return@forEachDescendantOfType @@ -467,10 +468,10 @@ class MoveConflictChecker( val rootClassDescriptor: ClassDescriptor if (elementToMove is KtClass && elementToMove.isSealed()) { rootClass = elementToMove - rootClassDescriptor = rootClass.resolveToDescriptorIfAny() as? ClassDescriptor ?: return + rootClassDescriptor = rootClass.resolveToDescriptorIfAny() ?: return } else { - val classDescriptor = elementToMove.resolveToDescriptorIfAny() as? ClassDescriptor ?: return + val classDescriptor = elementToMove.resolveToDescriptorIfAny() ?: return val superClassDescriptor = classDescriptor.getSuperClassNotAny() ?: return if (superClassDescriptor.modality != Modality.SEALED) return rootClassDescriptor = superClassDescriptor diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameBackingFieldReferenceHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameBackingFieldReferenceHandler.kt index e8cd2db4ea4..52b3bec925c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameBackingFieldReferenceHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameBackingFieldReferenceHandler.kt @@ -23,16 +23,15 @@ import com.intellij.psi.PsiElement import com.intellij.psi.PsiFile import com.intellij.refactoring.rename.inplace.VariableInplaceRenameHandler import org.jetbrains.kotlin.descriptors.impl.SyntheticFieldDescriptor -import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.codeInsight.CodeInsightUtils import org.jetbrains.kotlin.psi.KtSimpleNameExpression -import org.jetbrains.kotlin.resolve.BindingContext class RenameBackingFieldReferenceHandler: VariableInplaceRenameHandler() { override fun isAvailable(element: PsiElement?, editor: Editor, file: PsiFile): Boolean { val refExpression = file.findElementForRename(editor.caretModel.offset) ?: return false if (refExpression.text != "field") return false - return refExpression.analyze()[BindingContext.REFERENCE_TARGET, refExpression] is SyntheticFieldDescriptor + return refExpression.resolveToCall()?.resultingDescriptor is SyntheticFieldDescriptor } override fun invoke(project: Project, editor: Editor, file: PsiFile, dataContext: DataContext?) { diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameDynamicMemberHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameDynamicMemberHandler.kt index dc2e512b303..8e646e410b1 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameDynamicMemberHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameDynamicMemberHandler.kt @@ -25,8 +25,7 @@ import org.jetbrains.kotlin.psi.KtSimpleNameExpression import com.intellij.openapi.project.Project import com.intellij.openapi.actionSystem.DataContext import org.jetbrains.kotlin.idea.codeInsight.CodeInsightUtils -import org.jetbrains.kotlin.idea.caches.resolve.analyze -import org.jetbrains.kotlin.resolve.BindingContext +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.resolve.calls.tasks.isDynamic class RenameDynamicMemberHandler: VariableInplaceRenameHandler() { @@ -34,7 +33,7 @@ class RenameDynamicMemberHandler: VariableInplaceRenameHandler() { val callee = PsiTreeUtil.findElementOfClassAtOffset( file, editor.caretModel.offset, KtSimpleNameExpression::class.java, false ) ?: return false - val calleeDescriptor = callee.analyze()[BindingContext.REFERENCE_TARGET, callee] ?: return false + val calleeDescriptor = callee.resolveToCall()?.resultingDescriptor ?: return false return calleeDescriptor.isDynamic() } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameJavaSyntheticPropertyHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameJavaSyntheticPropertyHandler.kt index 06ec7eed098..42c1196efea 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameJavaSyntheticPropertyHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameJavaSyntheticPropertyHandler.kt @@ -25,12 +25,10 @@ import com.intellij.psi.impl.light.LightElement import com.intellij.psi.search.SearchScope import com.intellij.refactoring.rename.RenamePsiElementProcessor 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.refactoring.project import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers import org.jetbrains.kotlin.load.java.JvmAbi -import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.source.getPsi import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor @@ -70,8 +68,7 @@ class RenameJavaSyntheticPropertyHandler : AbstractReferenceSubstitutionRenameHa override fun getElementToRename(dataContext: DataContext): PsiElement? { val refExpr = getReferenceExpression(dataContext) ?: return null - val descriptor = refExpr.analyze(BodyResolveMode.PARTIAL)[BindingContext.REFERENCE_TARGET, refExpr] as? SyntheticJavaPropertyDescriptor - ?: return null + val descriptor = refExpr.resolveToCall()?.resultingDescriptor as? SyntheticJavaPropertyDescriptor ?: return null return SyntheticPropertyWrapper(PsiManager.getInstance(dataContext.project), descriptor) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinJavaSafeDeleteDelegate.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinJavaSafeDeleteDelegate.kt index 03cf9a8615d..8304d89eb91 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinJavaSafeDeleteDelegate.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinJavaSafeDeleteDelegate.kt @@ -24,13 +24,12 @@ import com.intellij.refactoring.safeDelete.usageInfo.SafeDeleteReferenceSimpleDe import com.intellij.usageView.UsageInfo import org.jetbrains.kotlin.asJava.unwrapped import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.idea.references.KtReference import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType import org.jetbrains.kotlin.psi.psiUtil.isAncestor import org.jetbrains.kotlin.psi.psiUtil.parameterIndex import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils -import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall class KotlinJavaSafeDeleteDelegate : JavaSafeDeleteDelegate { override fun createUsageInfoForParameter( @@ -45,9 +44,7 @@ class KotlinJavaSafeDeleteDelegate : JavaSafeDeleteDelegate { val calleeExpression = callExpression.calleeExpression if (!(calleeExpression is KtReferenceExpression && calleeExpression.isAncestor(element))) return - val bindingContext = element.analyze() - - val descriptor = bindingContext.get(BindingContext.REFERENCE_TARGET, calleeExpression) ?: return + val descriptor = calleeExpression.resolveToCall()?.resultingDescriptor ?: return val originalDeclaration = method.unwrapped if (originalDeclaration !is PsiMethod && originalDeclaration !is KtDeclaration) return diff --git a/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt b/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt index f4396f6659a..b36a2417dae 100644 --- a/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt @@ -306,7 +306,7 @@ class InflowSlicer( private fun KtExpression.isBackingFieldReference(): Boolean { return this is KtSimpleNameExpression && getReferencedName() == SyntheticFieldDescriptor.NAME.asString() && - analyze()[BindingContext.REFERENCE_TARGET, this] is SyntheticFieldDescriptor + resolveToCall()?.resultingDescriptor is SyntheticFieldDescriptor } private fun KtExpression.processExpression() { diff --git a/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/AndroidExtensionsReferenceSearchExecutor.kt b/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/AndroidExtensionsReferenceSearchExecutor.kt index 368e59f9cb4..d02ad1e4c66 100644 --- a/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/AndroidExtensionsReferenceSearchExecutor.kt +++ b/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/AndroidExtensionsReferenceSearchExecutor.kt @@ -24,14 +24,12 @@ import com.intellij.psi.search.searches.ReferencesSearch import com.intellij.psi.xml.XmlAttributeValue import com.intellij.util.Processor import org.jetbrains.kotlin.descriptors.PropertyDescriptor -import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.references.KtSimpleNameReference import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtReferenceExpression import org.jetbrains.kotlin.psi.KtSimpleNameExpression import org.jetbrains.kotlin.psi.KtTreeVisitorVoid -import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.source.getPsi @@ -59,5 +57,5 @@ class AndroidExtensionsReferenceSearchExecutor : QueryExecutorBase? { @@ -48,9 +46,7 @@ class AndroidGotoDeclarationHandler : GotoDeclarationHandler { } private fun resolvePropertyDescriptor(simpleNameExpression: KtSimpleNameExpression): PropertyDescriptor? { - val bindingContext = simpleNameExpression.analyze(BodyResolveMode.PARTIAL) - val call = bindingContext[BindingContext.CALL, simpleNameExpression] - val resolvedCall = bindingContext[BindingContext.RESOLVED_CALL, call] + val resolvedCall = simpleNameExpression.resolveToCall() return resolvedCall?.resultingDescriptor as? PropertyDescriptor } diff --git a/plugins/android-extensions/android-extensions-idea/tests/org/jetbrains/kotlin/android/AbstractAndroidGotoTest.kt b/plugins/android-extensions/android-extensions-idea/tests/org/jetbrains/kotlin/android/AbstractAndroidGotoTest.kt index eb3d00c9323..dd4a5e9b545 100644 --- a/plugins/android-extensions/android-extensions-idea/tests/org/jetbrains/kotlin/android/AbstractAndroidGotoTest.kt +++ b/plugins/android-extensions/android-extensions-idea/tests/org/jetbrains/kotlin/android/AbstractAndroidGotoTest.kt @@ -20,9 +20,8 @@ import com.intellij.codeInsight.TargetElementUtil import com.intellij.codeInsight.navigation.actions.GotoDeclarationAction import com.intellij.psi.xml.XmlAttributeValue import org.jetbrains.kotlin.descriptors.PropertyDescriptor -import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.psi.KtElement -import org.jetbrains.kotlin.resolve.BindingContext abstract class AbstractAndroidGotoTest : KotlinAndroidTestCase() { @@ -32,8 +31,7 @@ abstract class AbstractAndroidGotoTest : KotlinAndroidTestCase() { myFixture.configureFromExistingVirtualFile(virtualFile) val expression = TargetElementUtil.findReference(myFixture.editor, myFixture.caretOffset)!!.element as KtElement - val bindingContext = expression.analyze() - val resolvedCall = bindingContext[BindingContext.RESOLVED_CALL, bindingContext[BindingContext.CALL, expression]]!! + val resolvedCall = expression.resolveToCall()!! val property = resolvedCall.resultingDescriptor as? PropertyDescriptor ?: throw AssertionError("PropertyDescriptor expected") val targetElement = GotoDeclarationAction.findTargetElement(myFixture.project, myFixture.editor, myFixture.caretOffset)!!