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 2469a40a13c..e2ddfd7dd4d 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 @@ -263,26 +263,26 @@ fun KtExpression.readWriteAccessWithFullExpression(useResolveForReadWrite: Boole } fun KtReference.canBeResolvedViaImport(target: DeclarationDescriptor, bindingContext: BindingContext): Boolean { - if (!target.canBeReferencedViaImport()) return false - if (this is KDocReference) return element.getQualifiedName().size == 1 + val referenceExpression = this.element as? KtNameReferenceExpression ?: return false + return referenceExpression.canBeResolvedViaImport(target, bindingContext) +} +fun KtSimpleNameExpression.canBeResolvedViaImport(target: DeclarationDescriptor, bindingContext: BindingContext): Boolean { + if (!target.canBeReferencedViaImport()) return false if (target.isExtension) return true // assume that any type of reference can use imports when resolved to extension - val referenceExpression = this.element as? KtNameReferenceExpression ?: return false - val callTypeAndReceiver = CallTypeAndReceiver.detect(referenceExpression) - + val callTypeAndReceiver = CallTypeAndReceiver.detect(this) if (callTypeAndReceiver.receiver != null) { if (target !is PropertyDescriptor || !target.type.isExtensionFunctionType) return false if (callTypeAndReceiver !is CallTypeAndReceiver.DOT && callTypeAndReceiver !is CallTypeAndReceiver.SAFE) return false - val resolvedCall = bindingContext[BindingContext.CALL, referenceExpression].getResolvedCall(bindingContext) - as? VariableAsFunctionResolvedCall ?: return false + val resolvedCall = bindingContext[BindingContext.CALL, this].getResolvedCall(bindingContext) + as? VariableAsFunctionResolvedCall ?: return false if (resolvedCall.variableCall.explicitReceiverKind.isDispatchReceiver) return false } - if (element.parent is KtThisExpression || element.parent is KtSuperExpression) return false // TODO: it's a bad design of PSI tree, we should change it - + if (parent is KtThisExpression || parent is KtSuperExpression) return false // TODO: it's a bad design of PSI tree, we should change it return true } diff --git a/idea/src/org/jetbrains/kotlin/idea/codeInliner/CodeToInlineBuilder.kt b/idea/src/org/jetbrains/kotlin/idea/codeInliner/CodeToInlineBuilder.kt index b7e886a8f3b..50ea1ee290f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/codeInliner/CodeToInlineBuilder.kt +++ b/idea/src/org/jetbrains/kotlin/idea/codeInliner/CodeToInlineBuilder.kt @@ -27,7 +27,6 @@ import org.jetbrains.kotlin.idea.imports.importableFqName import org.jetbrains.kotlin.idea.intentions.InsertExplicitTypeArgumentsIntention import org.jetbrains.kotlin.idea.intentions.SpecifyExplicitLambdaSignatureIntention import org.jetbrains.kotlin.idea.references.canBeResolvedViaImport -import org.jetbrains.kotlin.idea.references.mainReference import org.jetbrains.kotlin.idea.resolve.ResolutionFacade import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers import org.jetbrains.kotlin.idea.util.getResolutionScope @@ -156,7 +155,7 @@ class CodeToInlineBuilder( val target = bindingContext[BindingContext.REFERENCE_TARGET, expression] ?: return@forEachDescendantOfType //TODO: other types of references ('[]' etc) - if (expression.mainReference.canBeResolvedViaImport(target, bindingContext)) { + if (expression.canBeResolvedViaImport(target, bindingContext)) { codeToInline.fqNamesToImport.add(target.importableFqName!!) }