diff --git a/idea/idea-completion/testData/basic/common/AfterIntSeparatedWithComments.kt b/idea/idea-completion/testData/basic/common/AfterIntSeparatedWithComments.kt index 1ca06db0c95..497f395d93a 100644 --- a/idea/idea-completion/testData/basic/common/AfterIntSeparatedWithComments.kt +++ b/idea/idea-completion/testData/basic/common/AfterIntSeparatedWithComments.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + infix fun Int.func(s: String): Int{} fun test() { diff --git a/idea/idea-completion/testData/basic/common/primitiveCompletion/extensionRecompletion.kt b/idea/idea-completion/testData/basic/common/primitiveCompletion/extensionRecompletion.kt new file mode 100644 index 00000000000..122a5c3a42a --- /dev/null +++ b/idea/idea-completion/testData/basic/common/primitiveCompletion/extensionRecompletion.kt @@ -0,0 +1,13 @@ +// FIR_COMPARISON + +class LocalClass + +fun LocalClass.ext(action: () -> Unit) {} +fun LocalClass.extAnother(action: () -> Unit) {} + +fun usage(l: LocalClass) { + l.ext {} +} + +// EXIST: ext +// EXIST: extAnother diff --git a/idea/idea-completion/testData/basic/common/smartCast/SmartCastAfterIfMethod.kt b/idea/idea-completion/testData/basic/common/smartCast/SmartCastAfterIfMethod.kt index d3ce17519fb..0aac40808a6 100644 --- a/idea/idea-completion/testData/basic/common/smartCast/SmartCastAfterIfMethod.kt +++ b/idea/idea-completion/testData/basic/common/smartCast/SmartCastAfterIfMethod.kt @@ -1,3 +1,5 @@ +// FIR_COMPARISON + class Expr {} class Num : Expr() { fun testing() {} diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java index 7489de821c2..0ca57e2e1dc 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java @@ -2297,6 +2297,11 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes runTest("idea/idea-completion/testData/basic/common/primitiveCompletion/extensionPropertyAndFunctionImplicitReceiver.kt"); } + @TestMetadata("extensionRecompletion.kt") + public void testExtensionRecompletion() throws Exception { + runTest("idea/idea-completion/testData/basic/common/primitiveCompletion/extensionRecompletion.kt"); + } + @TestMetadata("genericExtensionPropertyAndFunctionExplicitReceiver.kt") public void testGenericExtensionPropertyAndFunctionExplicitReceiver() throws Exception { runTest("idea/idea-completion/testData/basic/common/primitiveCompletion/genericExtensionPropertyAndFunctionExplicitReceiver.kt"); diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java index 0650bc59a81..762b0edbc0f 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java @@ -2297,6 +2297,11 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT runTest("idea/idea-completion/testData/basic/common/primitiveCompletion/extensionPropertyAndFunctionImplicitReceiver.kt"); } + @TestMetadata("extensionRecompletion.kt") + public void testExtensionRecompletion() throws Exception { + runTest("idea/idea-completion/testData/basic/common/primitiveCompletion/extensionRecompletion.kt"); + } + @TestMetadata("genericExtensionPropertyAndFunctionExplicitReceiver.kt") public void testGenericExtensionPropertyAndFunctionExplicitReceiver() throws Exception { runTest("idea/idea-completion/testData/basic/common/primitiveCompletion/genericExtensionPropertyAndFunctionExplicitReceiver.kt"); diff --git a/idea/idea-fir/src/org/jetbrains/kotlin/idea/completion/KotlinFirCompletionContributor.kt b/idea/idea-fir/src/org/jetbrains/kotlin/idea/completion/KotlinFirCompletionContributor.kt index cc429e6915b..363dbbd7759 100644 --- a/idea/idea-fir/src/org/jetbrains/kotlin/idea/completion/KotlinFirCompletionContributor.kt +++ b/idea/idea-fir/src/org/jetbrains/kotlin/idea/completion/KotlinFirCompletionContributor.kt @@ -21,7 +21,7 @@ import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.isExtension import org.jetbrains.kotlin.idea.references.mainReference import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForSelector +import org.jetbrains.kotlin.psi.psiUtil.getReceiverExpression class KotlinFirCompletionContributor : CompletionContributor() { init { @@ -74,7 +74,7 @@ private object KotlinAvailableScopesCompletionProvider { val reference = (parameters.position.parent as? KtSimpleNameExpression)?.mainReference ?: return val nameExpression = reference.expression.takeIf { it !is KtLabelReferenceExpression } ?: return - val explicitReceiver = nameExpression.getQualifiedExpressionForSelector()?.receiverExpression + val explicitReceiver = nameExpression.getReceiverExpression() with(getAnalysisSessionFor(originalFile).createContextDependentCopy()) { val (implicitScopes, _) = originalFile.getScopeContextForPosition(nameExpression) @@ -128,9 +128,7 @@ private object KotlinAvailableScopesCompletionProvider { val extensionsWhichCanBeCalled = implicitScopes .getCallableSymbols() - .filter { - it.isExtension && it.hasSuitableExtensionReceiver() - } + .filter { it.isExtension && it.hasSuitableExtensionReceiver() } availableNonExtensions.forEach { result.addSymbolToCompletion(it) } extensionsWhichCanBeCalled.forEach { result.addSymbolToCompletion(it) } diff --git a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/completion/HighLevelJvmBasicCompletionTestGenerated.java b/idea/idea-fir/tests/org/jetbrains/kotlin/idea/completion/HighLevelJvmBasicCompletionTestGenerated.java index 266a53a6f01..8eab1d38aaf 100644 --- a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/completion/HighLevelJvmBasicCompletionTestGenerated.java +++ b/idea/idea-fir/tests/org/jetbrains/kotlin/idea/completion/HighLevelJvmBasicCompletionTestGenerated.java @@ -2297,6 +2297,11 @@ public class HighLevelJvmBasicCompletionTestGenerated extends AbstractHighLevelJ runTest("idea/idea-completion/testData/basic/common/primitiveCompletion/extensionPropertyAndFunctionImplicitReceiver.kt"); } + @TestMetadata("extensionRecompletion.kt") + public void testExtensionRecompletion() throws Exception { + runTest("idea/idea-completion/testData/basic/common/primitiveCompletion/extensionRecompletion.kt"); + } + @TestMetadata("genericExtensionPropertyAndFunctionExplicitReceiver.kt") public void testGenericExtensionPropertyAndFunctionExplicitReceiver() throws Exception { runTest("idea/idea-completion/testData/basic/common/primitiveCompletion/genericExtensionPropertyAndFunctionExplicitReceiver.kt");