From 234555bb33f54919c48ddedbe6ffd26165786c8a Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Tue, 3 Mar 2015 16:25:07 +0300 Subject: [PATCH] Fixed KT-6890 No autocomplete for receiver methods and properties in extension property #KT-6890 Fixed --- .../kotlin/idea/util/implicitReceiversUtils.kt | 6 ++++++ .../basic/common/RecieverMembersFromExtAccessor.kt | 12 ++++++++++++ .../basic/common/RecieverMembersFromExtFun.kt | 11 +++++++++++ .../completion/JSBasicCompletionTestGenerated.java | 12 ++++++++++++ .../completion/JvmBasicCompletionTestGenerated.java | 12 ++++++++++++ 5 files changed, 53 insertions(+) create mode 100644 idea/testData/completion/basic/common/RecieverMembersFromExtAccessor.kt create mode 100644 idea/testData/completion/basic/common/RecieverMembersFromExtFun.kt diff --git a/idea/ide-common/src/org/jetbrains/kotlin/idea/util/implicitReceiversUtils.kt b/idea/ide-common/src/org/jetbrains/kotlin/idea/util/implicitReceiversUtils.kt index b2b408e704e..6432e6f01a1 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/idea/util/implicitReceiversUtils.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/idea/util/implicitReceiversUtils.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.idea.util import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor +import org.jetbrains.kotlin.descriptors.PropertyAccessorDescriptor import org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.scopes.JetScope @@ -31,9 +32,14 @@ public fun JetScope.getImplicitReceiversWithInstance(): List() var current: DeclarationDescriptor? = getContainingDeclaration() while (current != null) { + if (current is PropertyAccessorDescriptor) { + current = (current as PropertyAccessorDescriptor).getCorrespondingProperty() + } withInstance.add(current) + val classDescriptor = current as? ClassDescriptor if (classDescriptor != null && !classDescriptor.isInner() && !DescriptorUtils.isLocal(classDescriptor)) break + current = current!!.getContainingDeclaration() } diff --git a/idea/testData/completion/basic/common/RecieverMembersFromExtAccessor.kt b/idea/testData/completion/basic/common/RecieverMembersFromExtAccessor.kt new file mode 100644 index 00000000000..27581ec7530 --- /dev/null +++ b/idea/testData/completion/basic/common/RecieverMembersFromExtAccessor.kt @@ -0,0 +1,12 @@ +class A { + public fun foo(): Int = 1 + public val bar: Int = 1 +} + +val A.abc: Int + get() { + + } + +// EXIST: foo +// EXIST: bar diff --git a/idea/testData/completion/basic/common/RecieverMembersFromExtFun.kt b/idea/testData/completion/basic/common/RecieverMembersFromExtFun.kt new file mode 100644 index 00000000000..caeb956d114 --- /dev/null +++ b/idea/testData/completion/basic/common/RecieverMembersFromExtFun.kt @@ -0,0 +1,11 @@ +class A { + public fun foo(): Int = 1 + public val bar: Int = 1 +} + +fun A.ext() { + +} + +// EXIST: foo +// EXIST: bar diff --git a/idea/tests/org/jetbrains/kotlin/completion/JSBasicCompletionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/completion/JSBasicCompletionTestGenerated.java index 01c1da18caf..5bdc27de284 100644 --- a/idea/tests/org/jetbrains/kotlin/completion/JSBasicCompletionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/completion/JSBasicCompletionTestGenerated.java @@ -823,6 +823,18 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes doTest(fileName); } + @TestMetadata("RecieverMembersFromExtAccessor.kt") + public void testRecieverMembersFromExtAccessor() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/RecieverMembersFromExtAccessor.kt"); + doTest(fileName); + } + + @TestMetadata("RecieverMembersFromExtFun.kt") + public void testRecieverMembersFromExtFun() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/RecieverMembersFromExtFun.kt"); + doTest(fileName); + } + @TestMetadata("SafeCallAfterNullable.kt") public void testSafeCallAfterNullable() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/SafeCallAfterNullable.kt"); diff --git a/idea/tests/org/jetbrains/kotlin/completion/JvmBasicCompletionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/completion/JvmBasicCompletionTestGenerated.java index 4e008f49d6c..83031eab4a7 100644 --- a/idea/tests/org/jetbrains/kotlin/completion/JvmBasicCompletionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/completion/JvmBasicCompletionTestGenerated.java @@ -823,6 +823,18 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT doTest(fileName); } + @TestMetadata("RecieverMembersFromExtAccessor.kt") + public void testRecieverMembersFromExtAccessor() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/RecieverMembersFromExtAccessor.kt"); + doTest(fileName); + } + + @TestMetadata("RecieverMembersFromExtFun.kt") + public void testRecieverMembersFromExtFun() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/RecieverMembersFromExtFun.kt"); + doTest(fileName); + } + @TestMetadata("SafeCallAfterNullable.kt") public void testSafeCallAfterNullable() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/SafeCallAfterNullable.kt");