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
|
// process extensions and non-instance members
|
||||||
for (descriptor in resolutionScope.getDescriptorsFiltered(kindFilter, nameFilter)) {
|
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) {
|
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 {
|
else {
|
||||||
|
if (descriptor is CallableDescriptor && descriptor.getDispatchReceiverParameter() != null) continue // should already be processed via implicit receivers
|
||||||
descriptorsSet.add(descriptor)
|
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);
|
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")
|
@TestMetadata("NoDuplicatedMethodForSmartCast.kt")
|
||||||
public void testNoDuplicatedMethodForSmartCast() throws Exception {
|
public void testNoDuplicatedMethodForSmartCast() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/extensions/NoDuplicatedMethodForSmartCast.kt");
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/extensions/NoDuplicatedMethodForSmartCast.kt");
|
||||||
@@ -1254,6 +1260,12 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes
|
|||||||
doTest(fileName);
|
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")
|
@TestMetadata("WrongExplicitReceiver.kt")
|
||||||
public void testWrongExplicitReceiver() throws Exception {
|
public void testWrongExplicitReceiver() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/extensions/WrongExplicitReceiver.kt");
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/extensions/WrongExplicitReceiver.kt");
|
||||||
|
|||||||
@@ -1242,6 +1242,12 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT
|
|||||||
doTest(fileName);
|
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")
|
@TestMetadata("NoDuplicatedMethodForSmartCast.kt")
|
||||||
public void testNoDuplicatedMethodForSmartCast() throws Exception {
|
public void testNoDuplicatedMethodForSmartCast() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/extensions/NoDuplicatedMethodForSmartCast.kt");
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/extensions/NoDuplicatedMethodForSmartCast.kt");
|
||||||
@@ -1254,6 +1260,12 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT
|
|||||||
doTest(fileName);
|
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")
|
@TestMetadata("WrongExplicitReceiver.kt")
|
||||||
public void testWrongExplicitReceiver() throws Exception {
|
public void testWrongExplicitReceiver() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/extensions/WrongExplicitReceiver.kt");
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/extensions/WrongExplicitReceiver.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user