diff --git a/idea/idea-completion/testData/basic/common/annotations/ParameterAnnotation2.kt b/idea/idea-completion/testData/basic/common/annotations/ParameterAnnotation2.kt index 41da1b1aba4..80ee69bb3ea 100644 --- a/idea/idea-completion/testData/basic/common/annotations/ParameterAnnotation2.kt +++ b/idea/idea-completion/testData/basic/common/annotations/ParameterAnnotation2.kt @@ -1,3 +1,4 @@ +// FIR_COMPARISON annotation class SHello fun foo(@S) { } diff --git a/idea/idea-completion/testData/basic/common/lambdaSignature/ParameterType1.kt b/idea/idea-completion/testData/basic/common/lambdaSignature/ParameterType1.kt index ec68c3abffe..961d9d90d45 100644 --- a/idea/idea-completion/testData/basic/common/lambdaSignature/ParameterType1.kt +++ b/idea/idea-completion/testData/basic/common/lambdaSignature/ParameterType1.kt @@ -1,3 +1,4 @@ +// FIR_COMPARISON fun bar() { val handler = { i: } } diff --git a/idea/idea-completion/testData/basic/common/lambdaSignature/ParameterType2.kt b/idea/idea-completion/testData/basic/common/lambdaSignature/ParameterType2.kt index 060a49f860b..4f0bdf4abca 100644 --- a/idea/idea-completion/testData/basic/common/lambdaSignature/ParameterType2.kt +++ b/idea/idea-completion/testData/basic/common/lambdaSignature/ParameterType2.kt @@ -1,3 +1,4 @@ +// FIR_COMPARISON fun bar() { val handler = { i: Int, s: } } diff --git a/idea/idea-completion/testData/basic/common/lambdaSignature/ParameterType3.kt b/idea/idea-completion/testData/basic/common/lambdaSignature/ParameterType3.kt index d36cdebac48..a23fbc9dde9 100644 --- a/idea/idea-completion/testData/basic/common/lambdaSignature/ParameterType3.kt +++ b/idea/idea-completion/testData/basic/common/lambdaSignature/ParameterType3.kt @@ -1,3 +1,4 @@ +// FIR_COMPARISON fun bar() { val handler = { i: List<> } } diff --git a/idea/idea-completion/testData/basic/common/lambdaSignature/ParameterType4.kt b/idea/idea-completion/testData/basic/common/lambdaSignature/ParameterType4.kt index 7c6325deb21..94f3b46f524 100644 --- a/idea/idea-completion/testData/basic/common/lambdaSignature/ParameterType4.kt +++ b/idea/idea-completion/testData/basic/common/lambdaSignature/ParameterType4.kt @@ -1,3 +1,4 @@ +// FIR_COMPARISON fun bar() { val handler = { i: Map } } diff --git a/idea/idea-completion/testData/basic/common/lambdaSignature/ParameterType5.kt b/idea/idea-completion/testData/basic/common/lambdaSignature/ParameterType5.kt index c334dd3ba3b..7a01a50bc59 100644 --- a/idea/idea-completion/testData/basic/common/lambdaSignature/ParameterType5.kt +++ b/idea/idea-completion/testData/basic/common/lambdaSignature/ParameterType5.kt @@ -1,3 +1,4 @@ +// FIR_COMPARISON fun bar() { val handler = { i: Int, list: List, s: } } 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 63b6cff0e91..0fde691dc0b 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 @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.idea.frontend.api.InvalidWayOfUsingAnalysisSession import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession import org.jetbrains.kotlin.idea.frontend.api.getAnalysisSessionFor import org.jetbrains.kotlin.idea.frontend.api.scopes.KtCompositeScope +import org.jetbrains.kotlin.idea.frontend.api.scopes.KtScope import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtNamedSymbol @@ -21,10 +22,7 @@ import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.isExtension import org.jetbrains.kotlin.idea.frontend.api.types.KtType import org.jetbrains.kotlin.idea.references.mainReference import org.jetbrains.kotlin.lexer.KtTokens -import org.jetbrains.kotlin.psi.KtExpression -import org.jetbrains.kotlin.psi.KtFile -import org.jetbrains.kotlin.psi.KtLabelReferenceExpression -import org.jetbrains.kotlin.psi.KtSimpleNameExpression +import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForSelector class KotlinFirCompletionContributor : CompletionContributor() { @@ -83,14 +81,19 @@ private object KotlinAvailableScopesCompletionProvider { with(getAnalysisSessionFor(originalFile).createContextDependentCopy()) { val (implicitScopes, implicitReceivers) = originalFile.getScopeContextForPosition(nameExpression) - if (explicitReceiver != null) { - collectDotCompletion(result, implicitScopes, explicitReceiver) - } else { - collectDefaultCompletion(result, implicitScopes, implicitReceivers) + when { + nameExpression.parent is KtUserType -> collectTypesCompletion(result, implicitScopes) + explicitReceiver != null -> collectDotCompletion(result, implicitScopes, explicitReceiver) + else -> collectDefaultCompletion(result, implicitScopes, implicitReceivers) } } } + private fun collectTypesCompletion(result: CompletionResultSet, implicitScopes: KtScope) { + val availableClasses = implicitScopes.getClassifierSymbols() + availableClasses.forEach { result.addSymbolToCompletion(it) } + } + private fun KtAnalysisSession.collectDotCompletion( result: CompletionResultSet, implicitScopes: KtCompositeScope, @@ -127,8 +130,7 @@ private object KotlinAvailableScopesCompletionProvider { availableNonExtensions.forEach { result.addSymbolToCompletion(it) } extensionsWhichCanBeCalled.forEach { result.addSymbolToCompletion(it) } - val availableClasses = implicitScopes.getClassifierSymbols() - availableClasses.forEach { result.addSymbolToCompletion(it) } + collectTypesCompletion(result, implicitScopes) } }