From d690aedb89308300e6439ce129b9699ff0b44670 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Thu, 1 Mar 2018 18:05:54 +0300 Subject: [PATCH] References: Fix resolution of delegate reference for local variables #KT-22229 Fixed --- .../references/KtPropertyDelegationMethodsReference.kt | 5 +++-- .../noUnusedImportForLocalVarDelegate.Dependency.kt | 5 +++++ .../unusedImport/noUnusedImportForLocalVarDelegate.kt | 7 +++++++ 3 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 idea/testData/inspections/unusedImport/noUnusedImportForLocalVarDelegate.Dependency.kt create mode 100644 idea/testData/inspections/unusedImport/noUnusedImportForLocalVarDelegate.kt diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/KtPropertyDelegationMethodsReference.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/KtPropertyDelegationMethodsReference.kt index 9974c559bb4..8070756a809 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/KtPropertyDelegationMethodsReference.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/KtPropertyDelegationMethodsReference.kt @@ -18,7 +18,8 @@ package org.jetbrains.kotlin.idea.references import com.intellij.openapi.util.TextRange import org.jetbrains.kotlin.descriptors.DeclarationDescriptor -import org.jetbrains.kotlin.descriptors.PropertyDescriptor +import org.jetbrains.kotlin.descriptors.VariableDescriptorWithAccessors +import org.jetbrains.kotlin.descriptors.accessors import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.KtProperty import org.jetbrains.kotlin.psi.KtPropertyDelegate @@ -36,7 +37,7 @@ class KtPropertyDelegationMethodsReference(element: KtPropertyDelegate) : KtMult override fun getTargetDescriptors(context: BindingContext): Collection { val property = expression.getStrictParentOfType() ?: return emptyList() - val descriptor = context[BindingContext.DECLARATION_TO_DESCRIPTOR, property] as? PropertyDescriptor ?: return emptyList() + val descriptor = context[BindingContext.DECLARATION_TO_DESCRIPTOR, property] as? VariableDescriptorWithAccessors ?: return emptyList() return (descriptor.accessors.mapNotNull { accessor -> context.get(BindingContext.DELEGATED_PROPERTY_RESOLVED_CALL, accessor)?.candidateDescriptor diff --git a/idea/testData/inspections/unusedImport/noUnusedImportForLocalVarDelegate.Dependency.kt b/idea/testData/inspections/unusedImport/noUnusedImportForLocalVarDelegate.Dependency.kt new file mode 100644 index 00000000000..e1e8b2f6530 --- /dev/null +++ b/idea/testData/inspections/unusedImport/noUnusedImportForLocalVarDelegate.Dependency.kt @@ -0,0 +1,5 @@ +package foo + +import kotlin.reflect.KProperty + +operator fun String.getValue(nothing: Nothing?, property: KProperty<*>) = "" \ No newline at end of file diff --git a/idea/testData/inspections/unusedImport/noUnusedImportForLocalVarDelegate.kt b/idea/testData/inspections/unusedImport/noUnusedImportForLocalVarDelegate.kt new file mode 100644 index 00000000000..91fbc8d9473 --- /dev/null +++ b/idea/testData/inspections/unusedImport/noUnusedImportForLocalVarDelegate.kt @@ -0,0 +1,7 @@ +package bar + +import foo.getValue + +fun foo() { + val x : String by "" +} \ No newline at end of file