KT-7194 No completion for member extension function inside itself
#KT-7194 Fixed
This commit is contained in:
+5
-3
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
+20
@@ -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
|
||||
+14
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user