[kotlin] KTIJ-32187, KTIJ-32178 trailing lambda template fully disabled

IJ-CR-149484

(cherry picked from commit 1622f0a0bf63651c86cb9892d9e453dc35ecf07f)

GitOrigin-RevId: 9e5c6f21979a4b28b1d42b42452ebfb8e12bd6b9
This commit is contained in:
Andrew Kozlov
2024-11-15 15:55:21 +01:00
committed by intellij-monorepo-bot
parent 088be2557f
commit 11136008d1
8 changed files with 63 additions and 67 deletions

View File

@@ -1,7 +1,6 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. // Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.kotlin.idea.completion.implCommon.stringTemplates package org.jetbrains.kotlin.idea.completion.implCommon.stringTemplates
import com.intellij.codeInsight.daemon.impl.quickfix.EmptyExpression
import com.intellij.codeInsight.lookup.LookupElement import com.intellij.codeInsight.lookup.LookupElement
import com.intellij.codeInsight.lookup.LookupElementBuilder import com.intellij.codeInsight.lookup.LookupElementBuilder
import com.intellij.codeInsight.template.Expression import com.intellij.codeInsight.template.Expression
@@ -14,11 +13,7 @@ import org.jetbrains.kotlin.analysis.api.renderer.base.annotations.KaRendererAnn
import org.jetbrains.kotlin.analysis.api.renderer.types.KaTypeRenderer import org.jetbrains.kotlin.analysis.api.renderer.types.KaTypeRenderer
import org.jetbrains.kotlin.analysis.api.renderer.types.impl.KaTypeRendererForSource import org.jetbrains.kotlin.analysis.api.renderer.types.impl.KaTypeRendererForSource
import org.jetbrains.kotlin.analysis.api.types.KaFunctionType import org.jetbrains.kotlin.analysis.api.types.KaFunctionType
import org.jetbrains.kotlin.analysis.api.types.KaType
import org.jetbrains.kotlin.idea.base.codeInsight.KotlinNameSuggester
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.renderer.render
@KaExperimentalApi @KaExperimentalApi
private val NoAnnotationsTypeRenderer: KaTypeRenderer = KaTypeRendererForSource.WITH_QUALIFIED_NAMES.with { private val NoAnnotationsTypeRenderer: KaTypeRenderer = KaTypeRendererForSource.WITH_QUALIFIED_NAMES.with {
@@ -36,44 +31,45 @@ fun Template.build(
isToShortenLongNames = true isToShortenLongNames = true
// isToReformat = true //TODO // isToReformat = true //TODO
for (index in 0 until parametersCount) { //for (index in 0 until parametersCount) {
if (index == 0) { // if (index == 0) {
addTextSegment("(") // addTextSegment("(")
} // }
//
addVariable( // addVariable(
/* expression = */ EmptyExpression(), // /* expression = */ EmptyExpression(),
/* isAlwaysStopAt = */ true, // /* isAlwaysStopAt = */ true,
) // )
//
addTextSegment(if (index == parametersCount - 1) ")" else ", ") // addTextSegment(if (index == parametersCount - 1) ")" else ", ")
} //}
//
val typeNames = mutableMapOf<KaType, MutableSet<String>>() //val typeNames = mutableMapOf<KaType, MutableSet<String>>()
val kotlinNameSuggester = KotlinNameSuggester() //val kotlinNameSuggester = KotlinNameSuggester()
addTextSegment(" { ") addTextSegment(" { ")
val parameterTypes = trailingFunctionType.parameterTypes
.zip(suggestedParameterNames)
val iterator = parameterTypes.iterator()
while (iterator.hasNext()) {
val (parameterType, suggestedName) = iterator.next()
//TODO: check for names in scope
val validator = typeNames.getOrPut(parameterType) {
mutableSetOf()
}::add
val items = (suggestedName?.let { sequenceOf(it.render()) }
?: kotlinNameSuggester.suggestTypeNames(parameterType))
.map { KotlinNameSuggester.suggestNameByName(it, validator) }
.toList()
addVariable(
/* expression = */ LambdaParameterExpression(items),
/* isAlwaysStopAt = */ true,
)
//val parameterTypes = trailingFunctionType.parameterTypes
// .zip(suggestedParameterNames)
//val iterator = parameterTypes.iterator()
//while (iterator.hasNext()) {
// val (parameterType, suggestedName) = iterator.next()
//
// //TODO: check for names in scope
// val validator = typeNames.getOrPut(parameterType) {
// mutableSetOf()
// }::add
//
// val items = (suggestedName?.let { sequenceOf(it.render()) }
// ?: kotlinNameSuggester.suggestTypeNames(parameterType))
// .map { KotlinNameSuggester.suggestNameByName(it, validator) }
// .toList()
//
// addVariable(
// /* expression = */ LambdaParameterExpression(items),
// /* isAlwaysStopAt = */ true,
// )
//
// parameterType.render( // parameterType.render(
// renderer = NoAnnotationsTypeRenderer, // renderer = NoAnnotationsTypeRenderer,
// position = Variance.INVARIANT, // position = Variance.INVARIANT,
@@ -82,18 +78,18 @@ fun Template.build(
// addTextSegment(" ") // addTextSegment(" ")
// addTextSegment(typeText) // addTextSegment(typeText)
// } // }
//
if (iterator.hasNext()) { // if (iterator.hasNext()) {
addTextSegment(KtTokens.COMMA.value) // addTextSegment(KtTokens.COMMA.value)
addTextSegment(" ") // addTextSegment(" ")
} // }
} //}
//
if (parameterTypes.isNotEmpty()) { //if (parameterTypes.isNotEmpty()) {
addTextSegment(" ") // addTextSegment(" ")
addTextSegment(KtTokens.ARROW.value) // addTextSegment(KtTokens.ARROW.value)
addTextSegment(" ") // addTextSegment(" ")
} //}
addEndVariable() addEndVariable()
addTextSegment(" }") addTextSegment(" }")
} }

View File

@@ -7,7 +7,7 @@ fun <T, C : Cn<T>> C.some(arg: (type: T) -> Unit): C {
fun main(args: Array<String>) { fun main(args: Array<String>) {
val x = Cn<String>() val x = Cn<String>()
x.some { type -> <caret> } x.some { <caret> }
} }
//ELEMENT: some //ELEMENT: some

View File

@@ -2,7 +2,7 @@
fun <T> Array<T>.filter(predicate: (element: T) -> Boolean): java.util.List<T> = throw UnsupportedOperationException() fun <T> Array<T>.filter(predicate: (element: T) -> Boolean): java.util.List<T> = throw UnsupportedOperationException()
fun main(args: Array<String>) { fun main(args: Array<String>) {
args.filter { element -> <caret> } args.filter { <caret> }
} }
// ELEMENT: filter // ELEMENT: filter

View File

@@ -3,7 +3,7 @@ fun foo(f: (Int, Int, Int) -> Unit) {
} }
fun main() { fun main() {
foo { i, i1, i2 -> <caret> } foo { <caret> }
} }
// ELEMENT: foo // ELEMENT: foo

View File

@@ -2,7 +2,7 @@
fun <T1, T2> T1.foo(handler: (T2) -> Boolean) {} fun <T1, T2> T1.foo(handler: (T2) -> Boolean) {}
fun f() { fun f() {
"".foo { value -> <caret> } "".foo { <caret> }
} }
// ELEMENT: foo // ELEMENT: foo

View File

@@ -1,6 +1,6 @@
// FIR_COMPARISON // FIR_COMPARISON
fun f(list: List<String>) { fun f(list: List<String>) {
list.map { string -> <caret> } list.map { <caret> }
} }
// ELEMENT: map // ELEMENT: map

View File

@@ -2,7 +2,7 @@
fun <T1, T2> T1.foo(handler: suspend (T2) -> Boolean) {} fun <T1, T2> T1.foo(handler: suspend (T2) -> Boolean) {}
fun f() { fun f() {
"".foo { value -> <caret> } "".foo { <caret> }
} }
// ELEMENT: foo // ELEMENT: foo

View File

@@ -7,7 +7,7 @@ fun <T, R, C : MutableCollection<in R>> Iterable<T>.mapTo(destination: C, transf
fun main() { fun main() {
val strings = listOf("abc", "def") val strings = listOf("abc", "def")
strings.mapTo(mutableSetOf(), { it.length }).map { i -> <caret> } strings.mapTo(mutableSetOf(), { it.length }).map { <caret> }
} }
// ELEMENT: map // ELEMENT: map
// TAIL_TEXT: " { transform: (Int) -> R } for Iterable<T> in kotlin.collections" // TAIL_TEXT: " { transform: (Int) -> R } for Iterable<T> in kotlin.collections"