diff --git a/idea/idea-completion/testData/keywords/ReturnBoolean.kt b/idea/idea-completion/testData/keywords/ReturnBoolean.kt index 5d682d7c27b..5de38890633 100644 --- a/idea/idea-completion/testData/keywords/ReturnBoolean.kt +++ b/idea/idea-completion/testData/keywords/ReturnBoolean.kt @@ -1,3 +1,4 @@ +// FIR_COMPARISON fun foo(): Boolean { ret } diff --git a/idea/idea-completion/testData/keywords/ReturnNull.kt b/idea/idea-completion/testData/keywords/ReturnNull.kt index c5b0b3562f4..21343f7e878 100644 --- a/idea/idea-completion/testData/keywords/ReturnNull.kt +++ b/idea/idea-completion/testData/keywords/ReturnNull.kt @@ -1,3 +1,4 @@ +// FIR_COMPARISON fun foo(): String? { ret } diff --git a/idea/idea-completion/testData/keywords/ReturnNullableBoolean.kt b/idea/idea-completion/testData/keywords/ReturnNullableBoolean.kt index 80f689bf999..2bdcb7e29e0 100644 --- a/idea/idea-completion/testData/keywords/ReturnNullableBoolean.kt +++ b/idea/idea-completion/testData/keywords/ReturnNullableBoolean.kt @@ -1,3 +1,4 @@ +// FIR_COMPARISON fun foo(): Boolean? { ret } diff --git a/idea/idea-fir/src/org/jetbrains/kotlin/idea/completion/contributors/keywords/ReturnKeywordHandler.kt b/idea/idea-fir/src/org/jetbrains/kotlin/idea/completion/contributors/keywords/ReturnKeywordHandler.kt index d78b59bc6c5..62446f51cbb 100644 --- a/idea/idea-fir/src/org/jetbrains/kotlin/idea/completion/contributors/keywords/ReturnKeywordHandler.kt +++ b/idea/idea-fir/src/org/jetbrains/kotlin/idea/completion/contributors/keywords/ReturnKeywordHandler.kt @@ -23,7 +23,7 @@ import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf -internal object ReturnKeywordHandler: CompletionKeywordHandler(KtTokens.RETURN_KEYWORD) { +internal object ReturnKeywordHandler : CompletionKeywordHandler(KtTokens.RETURN_KEYWORD) { @OptIn(ExperimentalStdlibApi::class) override fun KtAnalysisSession.createLookups( parameters: CompletionParameters, @@ -61,31 +61,35 @@ internal object ReturnKeywordHandler: CompletionKeywordHandler - createKeywordElement("return", tail = "${label.labelNameToTail()} $returnTarget") + if (label != null || returnTarget.addToLookupElementTail) { + createKeywordElement("return", tail = "${label.labelNameToTail()} ${returnTarget.expressionText}") + } else { + createKeywordElement("return ${returnTarget.expressionText}") + } } } @OptIn(ExperimentalStdlibApi::class) - private fun KtAnalysisSession.getExpressionsToReturnByType(returnType: KtType): List = buildList { + private fun KtAnalysisSession.getExpressionsToReturnByType(returnType: KtType): List = buildList { if (returnType.canBeNull) { - add("null") + add(ExpressionTarget("null", addToLookupElementTail = false)) } fun emptyListShouldBeSuggested(): Boolean = returnType.isClassTypeWithClassId(StandardClassIds.Collection) - || returnType.isClassTypeWithClassId(StandardClassIds.List) - || returnType.isClassTypeWithClassId(StandardClassIds.Iterable) + || returnType.isClassTypeWithClassId(StandardClassIds.List) + || returnType.isClassTypeWithClassId(StandardClassIds.Iterable) when { returnType.isClassTypeWithClassId(StandardClassIds.Boolean) -> { - add("true") - add("false") + add(ExpressionTarget("true", addToLookupElementTail = false)) + add(ExpressionTarget("false", addToLookupElementTail = false)) } emptyListShouldBeSuggested() -> { - add("emptyList()") + add(ExpressionTarget("emptyList()", addToLookupElementTail = true)) } returnType.isClassTypeWithClassId(StandardClassIds.Set) -> { - add("emptySet()") + add(ExpressionTarget("emptySet()", addToLookupElementTail = true)) } } } @@ -94,4 +98,13 @@ internal object ReturnKeywordHandler: CompletionKeywordHandler