KT-7194 No completion for member extension function inside itself

#KT-7194 Fixed
This commit is contained in:
Valentin Kipyatkov
2015-04-01 12:07:46 +03:00
parent 7e9314bd40
commit 3b110f8ef8
5 changed files with 63 additions and 3 deletions
@@ -126,12 +126,14 @@ public class ReferenceVariantsHelper(
// process extensions and non-instance members
for (descriptor in resolutionScope.getDescriptorsFiltered(kindFilter, nameFilter)) {
if (descriptor is CallableDescriptor && descriptor.getDispatchReceiverParameter() != null) continue // should already be processed via implicit receivers
if (descriptor is CallableDescriptor && descriptor.getExtensionReceiverParameter() != null) {
descriptorsSet.addAll(descriptor.substituteExtensionIfCallable(receiverValues, context, dataFlowInfo, CallType.NORMAL))
val dispatchReceiver = descriptor.getDispatchReceiverParameter()
if (dispatchReceiver == null || dispatchReceiver in receivers) {
descriptorsSet.addAll(descriptor.substituteExtensionIfCallable(receiverValues, context, dataFlowInfo, CallType.NORMAL))
}
}
else {
if (descriptor is CallableDescriptor && descriptor.getDispatchReceiverParameter() != null) continue // should already be processed via implicit receivers
descriptorsSet.add(descriptor)
}
}
@@ -0,0 +1,20 @@
class C {
fun String.extFun() {
<caret>
}
fun String.otherExtFun() { }
fun Int.wrongExtFun() { }
companion object {
fun String.companionExtFun() { }
}
}
fun String.nonMemberExtFun() {}
// EXIST: extFun
// EXIST: otherExtFun
// ABSENT: wrongExtFun
// EXIST: nonMemberExtFun
// EXIST: companionExtFun
@@ -0,0 +1,14 @@
class C {
fun String.extFun() { }
companion object {
fun String.foo() {
<caret>
}
}
}
fun String.nonMemberExtFun() {}
// EXIST: nonMemberExtFun
// ABSENT: extFun
@@ -1242,6 +1242,12 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes
doTest(fileName);
}
@TestMetadata("MemberExtensionsFromMemberExtension.kt")
public void testMemberExtensionsFromMemberExtension() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/extensions/MemberExtensionsFromMemberExtension.kt");
doTest(fileName);
}
@TestMetadata("NoDuplicatedMethodForSmartCast.kt")
public void testNoDuplicatedMethodForSmartCast() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/extensions/NoDuplicatedMethodForSmartCast.kt");
@@ -1254,6 +1260,12 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes
doTest(fileName);
}
@TestMetadata("NoMemberExtensionsFromCompanionObject.kt")
public void testNoMemberExtensionsFromCompanionObject() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/extensions/NoMemberExtensionsFromCompanionObject.kt");
doTest(fileName);
}
@TestMetadata("WrongExplicitReceiver.kt")
public void testWrongExplicitReceiver() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/extensions/WrongExplicitReceiver.kt");
@@ -1242,6 +1242,12 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT
doTest(fileName);
}
@TestMetadata("MemberExtensionsFromMemberExtension.kt")
public void testMemberExtensionsFromMemberExtension() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/extensions/MemberExtensionsFromMemberExtension.kt");
doTest(fileName);
}
@TestMetadata("NoDuplicatedMethodForSmartCast.kt")
public void testNoDuplicatedMethodForSmartCast() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/extensions/NoDuplicatedMethodForSmartCast.kt");
@@ -1254,6 +1260,12 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT
doTest(fileName);
}
@TestMetadata("NoMemberExtensionsFromCompanionObject.kt")
public void testNoMemberExtensionsFromCompanionObject() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/extensions/NoMemberExtensionsFromCompanionObject.kt");
doTest(fileName);
}
@TestMetadata("WrongExplicitReceiver.kt")
public void testWrongExplicitReceiver() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/extensions/WrongExplicitReceiver.kt");