Extract and use for inline KtSimpleNameExpression.canBeResolvedViaImport
Related to KT-29486 #KT-29713 Fixed
This commit is contained in:
@@ -263,26 +263,26 @@ fun KtExpression.readWriteAccessWithFullExpression(useResolveForReadWrite: Boole
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun KtReference.canBeResolvedViaImport(target: DeclarationDescriptor, bindingContext: BindingContext): Boolean {
|
fun KtReference.canBeResolvedViaImport(target: DeclarationDescriptor, bindingContext: BindingContext): Boolean {
|
||||||
if (!target.canBeReferencedViaImport()) return false
|
|
||||||
|
|
||||||
if (this is KDocReference) return element.getQualifiedName().size == 1
|
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
|
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(this)
|
||||||
val callTypeAndReceiver = CallTypeAndReceiver.detect(referenceExpression)
|
|
||||||
|
|
||||||
if (callTypeAndReceiver.receiver != null) {
|
if (callTypeAndReceiver.receiver != null) {
|
||||||
if (target !is PropertyDescriptor || !target.type.isExtensionFunctionType) return false
|
if (target !is PropertyDescriptor || !target.type.isExtensionFunctionType) return false
|
||||||
if (callTypeAndReceiver !is CallTypeAndReceiver.DOT && callTypeAndReceiver !is CallTypeAndReceiver.SAFE) return false
|
if (callTypeAndReceiver !is CallTypeAndReceiver.DOT && callTypeAndReceiver !is CallTypeAndReceiver.SAFE) return false
|
||||||
|
|
||||||
val resolvedCall = bindingContext[BindingContext.CALL, referenceExpression].getResolvedCall(bindingContext)
|
val resolvedCall = bindingContext[BindingContext.CALL, this].getResolvedCall(bindingContext)
|
||||||
as? VariableAsFunctionResolvedCall ?: return false
|
as? VariableAsFunctionResolvedCall ?: return false
|
||||||
if (resolvedCall.variableCall.explicitReceiverKind.isDispatchReceiver) 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
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ import org.jetbrains.kotlin.idea.imports.importableFqName
|
|||||||
import org.jetbrains.kotlin.idea.intentions.InsertExplicitTypeArgumentsIntention
|
import org.jetbrains.kotlin.idea.intentions.InsertExplicitTypeArgumentsIntention
|
||||||
import org.jetbrains.kotlin.idea.intentions.SpecifyExplicitLambdaSignatureIntention
|
import org.jetbrains.kotlin.idea.intentions.SpecifyExplicitLambdaSignatureIntention
|
||||||
import org.jetbrains.kotlin.idea.references.canBeResolvedViaImport
|
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.resolve.ResolutionFacade
|
||||||
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
|
import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers
|
||||||
import org.jetbrains.kotlin.idea.util.getResolutionScope
|
import org.jetbrains.kotlin.idea.util.getResolutionScope
|
||||||
@@ -156,7 +155,7 @@ class CodeToInlineBuilder(
|
|||||||
val target = bindingContext[BindingContext.REFERENCE_TARGET, expression] ?: return@forEachDescendantOfType
|
val target = bindingContext[BindingContext.REFERENCE_TARGET, expression] ?: return@forEachDescendantOfType
|
||||||
|
|
||||||
//TODO: other types of references ('[]' etc)
|
//TODO: other types of references ('[]' etc)
|
||||||
if (expression.mainReference.canBeResolvedViaImport(target, bindingContext)) {
|
if (expression.canBeResolvedViaImport(target, bindingContext)) {
|
||||||
codeToInline.fqNamesToImport.add(target.importableFqName!!)
|
codeToInline.fqNamesToImport.add(target.importableFqName!!)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user