From eabc7c9ba88d16603ebfd7411ea7ae7ac5383fba Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Wed, 14 Feb 2018 13:45:54 +0300 Subject: [PATCH] Replace some KtDeclaration.analyze() with resolveToDescriptorIfAny() Also, enhance comment on KtElement.analyze() --- .../idea/caches/resolve/resolutionApi.kt | 28 +++++++++++++------ .../kotlin/idea/search/usagesSearch/utils.kt | 4 ++- .../KotlinInheritedMembersNodeProvider.kt | 12 +++----- .../KotlinAndroidAddStringResource.kt | 4 +-- .../run/KotlinMultiplatformJUnitRecognizer.kt | 4 +-- .../MoveDeclarationsOutHelper.java | 10 +++---- .../hierarchy/KotlinTypeHierarchyProvider.kt | 7 +++-- .../inspections/ArrayInDataClassInspection.kt | 6 ++-- .../RedundantExplicitTypeInspection.kt | 7 ++--- .../RedundantUnitReturnTypeInspection.kt | 8 ++---- .../UnusedReceiverParameterInspection.kt | 4 ++- .../ConvertFunctionToPropertyIntention.kt | 9 ++---- .../ConvertPropertyToFunctionIntention.kt | 5 ++-- .../intentions/ConvertToBlockBodyIntention.kt | 4 +-- ...precatedCallableAddReplaceWithIntention.kt | 5 ++-- .../kotlin/idea/quickfix/AddModifierFix.kt | 5 ++-- .../idea/quickfix/ChangeParameterTypeFix.kt | 7 ++--- .../RemoveUnusedFunctionParameterFix.kt | 7 ++--- .../jetbrains/kotlin/idea/slicer/Slicer.kt | 8 ++---- .../ParcelMigrateToParcelizeQuickFix.kt | 4 +-- 20 files changed, 73 insertions(+), 75 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 2ee2de266a8..cb3bff31500 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 @@ -72,14 +72,26 @@ fun KtFile.resolveImportReference(fqName: FqName): Collection() { override fun provideNodes(node: TreeElement): Collection { if (node !is KotlinStructureViewElement) return listOf() - val element = node.element - if (element !is KtClassOrObject) return listOf() + val element = node.element as? KtClassOrObject ?: return listOf() val project = element.project - val context = element.analyze() - val descriptor = context[BindingContext.DECLARATION_TO_DESCRIPTOR, element] - - if (descriptor !is ClassifierDescriptor) return listOf() + val descriptor = element.resolveToDescriptorIfAny(BodyResolveMode.FULL) as? ClassifierDescriptor ?: return listOf() val children = ArrayList() diff --git a/idea/idea-android/src/org/jetbrains/kotlin/android/intention/KotlinAndroidAddStringResource.kt b/idea/idea-android/src/org/jetbrains/kotlin/android/intention/KotlinAndroidAddStringResource.kt index c7e133b4365..3534080f634 100644 --- a/idea/idea-android/src/org/jetbrains/kotlin/android/intention/KotlinAndroidAddStringResource.kt +++ b/idea/idea-android/src/org/jetbrains/kotlin/android/intention/KotlinAndroidAddStringResource.kt @@ -37,6 +37,7 @@ import org.jetbrains.android.util.AndroidUtils import org.jetbrains.kotlin.builtins.isExtensionFunctionType import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor import org.jetbrains.kotlin.idea.core.ShortenReferences import org.jetbrains.kotlin.idea.intentions.SelfTargetingIntention @@ -231,8 +232,7 @@ class KotlinAndroidAddStringResource : SelfTargetingIntention): Boolean { - val bindingContext = analyze(BodyResolveMode.PARTIAL) - val declarationDescriptor = bindingContext.get(BindingContext.CLASS, this) + val declarationDescriptor = resolveToDescriptorIfAny() as? ClassDescriptor return baseClasses.any { declarationDescriptor?.isSubclassOf(it) ?: false } } diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/run/KotlinMultiplatformJUnitRecognizer.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/run/KotlinMultiplatformJUnitRecognizer.kt index a84f394cfb4..a4b86a79dca 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/run/KotlinMultiplatformJUnitRecognizer.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/run/KotlinMultiplatformJUnitRecognizer.kt @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor import org.jetbrains.kotlin.descriptors.annotations.AnnotationWithTarget import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.facet.implementingDescriptors import org.jetbrains.kotlin.idea.project.targetPlatform import org.jetbrains.kotlin.idea.util.module @@ -46,8 +47,7 @@ class KotlinMultiplatformJUnitRecognizer : JUnitRecognizer() { val implModules = moduleDescriptor.implementingDescriptors if (implModules.isEmpty()) return false - val bindingContext = origin.analyze(BodyResolveMode.PARTIAL) - val methodDescriptor = bindingContext[BindingContext.DECLARATION_TO_DESCRIPTOR, origin] ?: return false + val methodDescriptor = origin.resolveToDescriptorIfAny() ?: return false return methodDescriptor.annotations.getAllAnnotations().any { it.isExpectOfAnnotation("org.junit.Test", implModules) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/codeInsight/surroundWith/MoveDeclarationsOutHelper.java b/idea/src/org/jetbrains/kotlin/idea/codeInsight/surroundWith/MoveDeclarationsOutHelper.java index 5db8cefdeb9..2a7c740cdef 100644 --- a/idea/src/org/jetbrains/kotlin/idea/codeInsight/surroundWith/MoveDeclarationsOutHelper.java +++ b/idea/src/org/jetbrains/kotlin/idea/codeInsight/surroundWith/MoveDeclarationsOutHelper.java @@ -25,13 +25,13 @@ import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.psi.util.PsiUtilCore; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.kotlin.descriptors.DeclarationDescriptor; import org.jetbrains.kotlin.descriptors.VariableDescriptor; import org.jetbrains.kotlin.idea.caches.resolve.ResolutionUtils; import org.jetbrains.kotlin.idea.codeInsight.CodeInsightUtils; import org.jetbrains.kotlin.idea.core.ShortenReferences; import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers; import org.jetbrains.kotlin.psi.*; -import org.jetbrains.kotlin.resolve.BindingContext; import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode; import org.jetbrains.kotlin.types.KotlinType; import org.jetbrains.kotlin.types.KotlinTypeKt; @@ -117,11 +117,9 @@ public class MoveDeclarationsOutHelper { @NotNull private static KotlinType getPropertyType(@NotNull KtProperty property) { - BindingContext bindingContext = ResolutionUtils.analyze(property, BodyResolveMode.PARTIAL); - - VariableDescriptor propertyDescriptor = bindingContext.get(BindingContext.VARIABLE, property); - assert propertyDescriptor != null : "Couldn't resolve property to property descriptor " + property.getText(); - return propertyDescriptor.getType(); + DeclarationDescriptor variableDescriptor = ResolutionUtils.resolveToDescriptorIfAny(property, BodyResolveMode.PARTIAL); + assert variableDescriptor instanceof VariableDescriptor : "Couldn't resolve property to property descriptor " + property.getText(); + return ((VariableDescriptor) variableDescriptor).getType(); } @NotNull diff --git a/idea/src/org/jetbrains/kotlin/idea/hierarchy/KotlinTypeHierarchyProvider.kt b/idea/src/org/jetbrains/kotlin/idea/hierarchy/KotlinTypeHierarchyProvider.kt index 3878661d13b..29501fcfc61 100644 --- a/idea/src/org/jetbrains/kotlin/idea/hierarchy/KotlinTypeHierarchyProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/hierarchy/KotlinTypeHierarchyProvider.kt @@ -28,8 +28,9 @@ import com.intellij.psi.* import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.asJava.toLightClass import org.jetbrains.kotlin.config.TargetPlatformKind -import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.idea.caches.resolve.lightClasses.KtFakeLightClass +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.project.targetPlatform import org.jetbrains.kotlin.idea.search.allScope import org.jetbrains.kotlin.idea.stubindex.KotlinClassShortNameIndex @@ -40,7 +41,7 @@ import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtNamedFunction import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType import org.jetbrains.kotlin.renderer.DescriptorRenderer -import org.jetbrains.kotlin.resolve.BindingContext +import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode class KotlinTypeHierarchyProvider : JavaTypeHierarchyProvider() { private fun getOriginalPsiClassOrCreateLightClass(classOrObject: KtClassOrObject, module: Module?): PsiClass? { @@ -69,7 +70,7 @@ class KotlinTypeHierarchyProvider : JavaTypeHierarchyProvider() { is KtClassOrObject -> getOriginalPsiClassOrCreateLightClass(target, module) is KtNamedFunction -> { // Factory methods val functionName = target.name - val functionDescriptor = target.analyze()[BindingContext.FUNCTION, target] ?: return null + val functionDescriptor = target.resolveToDescriptorIfAny(BodyResolveMode.FULL) as? FunctionDescriptor ?: return null val type = functionDescriptor.returnType ?: return null val returnTypeText = DescriptorRenderer.FQ_NAMES_IN_TYPES.renderType(type) if (returnTypeText != functionName) return null diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/ArrayInDataClassInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/ArrayInDataClassInspection.kt index acd19c3469e..fe338dd7808 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/ArrayInDataClassInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/ArrayInDataClassInspection.kt @@ -10,8 +10,10 @@ 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.descriptors.FunctionDescriptor import org.jetbrains.kotlin.idea.actions.generate.KotlinGenerateEqualsAndHashcodeAction import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.KtClass import org.jetbrains.kotlin.psi.KtFunction @@ -48,9 +50,7 @@ class ArrayInDataClassInspection : AbstractKotlinInspection() { if (declaration !is KtFunction) continue if (!declaration.hasModifier(KtTokens.OVERRIDE_KEYWORD)) continue if (declaration.nameAsName == OperatorNameConventions.EQUALS && declaration.valueParameters.size == 1) { - val parameter = declaration.valueParameters.single() - val context = declaration.analyze(BodyResolveMode.PARTIAL) - val type = context.get(BindingContext.TYPE, parameter.typeReference) + val type = (declaration.resolveToDescriptorIfAny() as? FunctionDescriptor)?.valueParameters?.singleOrNull()?.type if (type != null && KotlinBuiltIns.isNullableAny(type)) { overriddenEquals = true } diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantExplicitTypeInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantExplicitTypeInspection.kt index 583273a1db6..565ccfc3d81 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantExplicitTypeInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantExplicitTypeInspection.kt @@ -10,11 +10,10 @@ import com.intellij.codeInspection.ProblemHighlightType import com.intellij.codeInspection.ProblemsHolder import org.jetbrains.kotlin.KtNodeTypes import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.descriptors.VariableDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.intentions.RemoveExplicitTypeIntention import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode class RedundantExplicitTypeInspection : AbstractKotlinInspection() { override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean) = @@ -23,7 +22,7 @@ class RedundantExplicitTypeInspection : AbstractKotlinInspection() { val typeReference = property.typeReference ?: return val initializer = property.initializer ?: return - val type = property.analyze(BodyResolveMode.PARTIAL)[BindingContext.TYPE, typeReference] ?: return + val type = (property.resolveToDescriptorIfAny() as? VariableDescriptor)?.type ?: return when (initializer) { is KtConstantExpression -> { when (initializer.node.elementType) { diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantUnitReturnTypeInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantUnitReturnTypeInspection.kt index 6f702872df0..58e5314d5bb 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantUnitReturnTypeInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantUnitReturnTypeInspection.kt @@ -10,12 +10,11 @@ import com.intellij.codeInspection.IntentionWrapper import com.intellij.codeInspection.ProblemHighlightType import com.intellij.codeInspection.ProblemsHolder import com.intellij.psi.PsiElementVisitor -import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.descriptors.FunctionDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.intentions.RemoveExplicitTypeIntention import org.jetbrains.kotlin.psi.KtCodeFragment import org.jetbrains.kotlin.psi.namedFunctionVisitor -import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.typeUtil.isUnit class RedundantUnitReturnTypeInspection : AbstractKotlinInspection(), CleanupLocalInspectionTool { @@ -23,8 +22,7 @@ class RedundantUnitReturnTypeInspection : AbstractKotlinInspection(), CleanupLoc return namedFunctionVisitor(fun(function) { if (function.containingFile is KtCodeFragment) return val typeElement = function.typeReference?.typeElement ?: return - val context = function.analyze(BodyResolveMode.PARTIAL) - val descriptor = context[BindingContext.FUNCTION, function] ?: return + val descriptor = function.resolveToDescriptorIfAny() as? FunctionDescriptor ?: return if (descriptor.returnType?.isUnit() == true) { if (!function.hasBlockBody()) { return diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedReceiverParameterInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedReceiverParameterInspection.kt index 3cbdceaca3e..cc9ec6e2cca 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedReceiverParameterInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedReceiverParameterInspection.kt @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.idea.MainFunctionDetector import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.core.isOverridable import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinChangeSignatureConfiguration import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinMethodDescriptor @@ -40,6 +41,7 @@ import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall import org.jetbrains.kotlin.resolve.calls.model.VariableAsFunctionResolvedCall +import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode class UnusedReceiverParameterInspection : AbstractKotlinInspection() { override val suppressionKey: String get() = "unused" @@ -130,7 +132,7 @@ class UnusedReceiverParameterInspection : AbstractKotlinInspection() { if (!FileModificationService.getInstance().preparePsiElementForWrite(element)) return val function = element.parent as? KtCallableDeclaration ?: return - val callableDescriptor = function.analyze()[BindingContext.DECLARATION_TO_DESCRIPTOR, function] as? CallableDescriptor ?: return + val callableDescriptor = function.resolveToDescriptorIfAny(BodyResolveMode.FULL) as? CallableDescriptor ?: return runChangeSignature(project, callableDescriptor, configureChangeSignature(), element, name) } diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertFunctionToPropertyIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertFunctionToPropertyIntention.kt index e2b0a511713..df375f801ed 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertFunctionToPropertyIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertFunctionToPropertyIntention.kt @@ -31,7 +31,7 @@ import org.jetbrains.kotlin.asJava.namedUnwrappedElement import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor -import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde import org.jetbrains.kotlin.idea.core.ShortenReferences @@ -50,7 +50,6 @@ import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypeAndBranch import org.jetbrains.kotlin.psi.psiUtil.getStartOffsetIn import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.resolve.scopes.utils.findVariable @@ -211,15 +210,13 @@ class ConvertFunctionToPropertyIntention : SelfTargetingIntention(Kt } override fun applyTo(element: KtProperty, editor: Editor?) { - val context = element.analyze() - val descriptor = context[BindingContext.DECLARATION_TO_DESCRIPTOR, element] as? CallableDescriptor ?: return + val descriptor = element.resolveToDescriptorIfAny(BodyResolveMode.FULL) as? CallableDescriptor ?: return Converter(element.project, descriptor).run() } } diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertToBlockBodyIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertToBlockBodyIntention.kt index d78401f8b84..4611ebadce0 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertToBlockBodyIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertToBlockBodyIntention.kt @@ -25,8 +25,6 @@ import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.core.setType import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.resolve.BindingContext -import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.isError import org.jetbrains.kotlin.types.typeUtil.isNothing @@ -102,7 +100,7 @@ class ConvertToBlockBodyIntention : SelfTargetingIntention statement.returnedExpression else -> if (returnsUnit) statement else null diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.kt index 8156ed1dd82..a878bf0105c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/AddModifierFix.kt @@ -17,7 +17,6 @@ package org.jetbrains.kotlin.idea.quickfix import com.intellij.codeInsight.intention.IntentionAction -import com.intellij.codeInspection.ProblemDescriptor import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project import com.intellij.psi.PsiNameIdentifierOwner @@ -27,6 +26,7 @@ import org.jetbrains.kotlin.descriptors.PropertyDescriptor 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.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.core.quickfix.QuickFixUtil import org.jetbrains.kotlin.idea.inspections.KotlinUniversalQuickFix import org.jetbrains.kotlin.idea.refactoring.canRefactor @@ -150,8 +150,7 @@ open class AddModifierFix( val property = Errors.MUST_BE_INITIALIZED_OR_BE_ABSTRACT.cast(diagnostic).psiElement if (!property.isVar) return null - val context = property.analyze() - val descriptor = context[BindingContext.DECLARATION_TO_DESCRIPTOR, property] ?: return null + val descriptor = property.resolveToDescriptorIfAny(BodyResolveMode.FULL) ?: return null val type = (descriptor as? PropertyDescriptor)?.type ?: return null if (TypeUtils.isNullableType(type)) return null diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeParameterTypeFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeParameterTypeFix.kt index e221554f2b2..fd78fb77fc4 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeParameterTypeFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeParameterTypeFix.kt @@ -22,7 +22,7 @@ import com.intellij.psi.PsiElement import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.idea.KotlinBundle -import org.jetbrains.kotlin.idea.caches.resolve.analyze +import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinChangeSignatureConfiguration import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinMethodDescriptor import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinTypeInfo @@ -30,7 +30,7 @@ import org.jetbrains.kotlin.idea.refactoring.changeSignature.runChangeSignature import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType -import org.jetbrains.kotlin.resolve.BindingContext +import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.KotlinType class ChangeParameterTypeFix(element: KtParameter, type: KotlinType) : KotlinQuickFixAction(element) { @@ -66,8 +66,7 @@ class ChangeParameterTypeFix(element: KtParameter, type: KotlinType) : KotlinQui val element = element ?: return val function = element.getStrictParentOfType() ?: return val parameterIndex = function.valueParameters.indexOf(element) - val context = function.analyze() - val descriptor = context[BindingContext.DECLARATION_TO_DESCRIPTOR, function] as? FunctionDescriptor ?: return + val descriptor = function.resolveToDescriptorIfAny(BodyResolveMode.FULL) as? FunctionDescriptor ?: return val configuration = object : KotlinChangeSignatureConfiguration { override fun configure(originalDescriptor: KotlinMethodDescriptor) = originalDescriptor.apply { parameters[if (receiver != null) parameterIndex + 1 else parameterIndex].currentTypeInfo = typeInfo diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveUnusedFunctionParameterFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveUnusedFunctionParameterFix.kt index d6f4c4a12c3..1faff94ac20 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveUnusedFunctionParameterFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveUnusedFunctionParameterFix.kt @@ -21,13 +21,13 @@ import com.intellij.openapi.project.Project import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor 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.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.intentions.RemoveEmptyPrimaryConstructorIntention import org.jetbrains.kotlin.idea.util.application.runWriteAction import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.startOffset -import org.jetbrains.kotlin.resolve.BindingContext +import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode class RemoveUnusedFunctionParameterFix(parameter: KtParameter) : KotlinQuickFixAction(parameter) { override fun getFamilyName() = ChangeFunctionSignatureFix.FAMILY_NAME @@ -40,8 +40,7 @@ class RemoveUnusedFunctionParameterFix(parameter: KtParameter) : KotlinQuickFixA val element = element ?: return val primaryConstructor = element.parent?.parent as? KtPrimaryConstructor val parameterList = element.parent as? KtParameterList - val context = element.analyze() - val parameterDescriptor = context[BindingContext.VALUE_PARAMETER, element] as? ValueParameterDescriptor ?: return + val parameterDescriptor = element.resolveToDescriptorIfAny(BodyResolveMode.FULL) as? ValueParameterDescriptor ?: return ChangeFunctionSignatureFix.runRemoveParameter(parameterDescriptor, element) val nextParameter = parameterList?.parameters?.getOrNull(parameterDescriptor.index) if (nextParameter != null) { diff --git a/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt b/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt index 0e7d74b2f14..2aef5b982a9 100644 --- a/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt @@ -45,10 +45,7 @@ import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithSource import org.jetbrains.kotlin.descriptors.VariableDescriptorWithAccessors import org.jetbrains.kotlin.descriptors.impl.SyntheticFieldDescriptor -import org.jetbrains.kotlin.idea.caches.resolve.analyze -import org.jetbrains.kotlin.idea.caches.resolve.analyzeFully -import org.jetbrains.kotlin.idea.caches.resolve.analyzeWithContent -import org.jetbrains.kotlin.idea.caches.resolve.unsafeResolveToDescriptor +import org.jetbrains.kotlin.idea.caches.resolve.* import org.jetbrains.kotlin.idea.core.isOverridable import org.jetbrains.kotlin.idea.findUsages.KotlinFunctionFindUsagesOptions import org.jetbrains.kotlin.idea.findUsages.KotlinPropertyFindUsagesOptions @@ -69,6 +66,7 @@ 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 import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver import org.jetbrains.kotlin.resolve.source.getPsi import org.jetbrains.kotlin.util.OperatorNameConventions @@ -260,7 +258,7 @@ class InflowSlicer( .forEach { (it.element?.parent as? KtProperty)?.processPropertyAssignments() } } - val parameterDescriptor = analyze()[BindingContext.VALUE_PARAMETER, this] ?: return + val parameterDescriptor = resolveToDescriptorIfAny(BodyResolveMode.FULL) ?: return (function as? KtFunction)?.processCalls(parentUsage.scope.toSearchScope()) body@ { val refElement = it.element ?: return@body 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 c62a3dc45be..522282b8ed0 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.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.core.getOrCreateCompanionObject import org.jetbrains.kotlin.idea.intentions.branchedTransformations.unwrapBlockOrParenthesis import org.jetbrains.kotlin.idea.util.findAnnotation @@ -54,8 +55,7 @@ class ParcelMigrateToParcelizeQuickFix(function: KtClass) : AbstractParcelableQu private fun KtClass.findParcelerCompanionObject(): Pair? { for (obj in companionObjects) { - val bindingContext = obj.analyze(BodyResolveMode.PARTIAL) - val objDescriptor = bindingContext[BindingContext.CLASS, obj] ?: continue + val objDescriptor = obj.resolveToDescriptorIfAny() as? ClassDescriptor ?: continue for (superClassifier in objDescriptor.getAllSuperClassifiers()) { val superClass = superClassifier as? ClassDescriptor ?: continue if (superClass.fqNameSafe == PARCELER_FQNAME) return Pair(obj, objDescriptor)