[kotlin] KTIJ-27048 parameters extracted

GitOrigin-RevId: f8967137cd8bd9f9ff0ec5f12921f42c35afbd43
This commit is contained in:
Andrew Kozlov
2024-08-08 17:16:57 +02:00
committed by intellij-monorepo-bot
parent f41a75abd3
commit 4c6f8dbe4c
4 changed files with 19 additions and 24 deletions

View File

@@ -7,19 +7,14 @@ import org.jetbrains.kotlin.analysis.api.KaSession
import org.jetbrains.kotlin.analysis.api.renderer.types.KaExpandedTypeRenderingMode
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.signatures.KaFunctionSignature
import org.jetbrains.kotlin.analysis.api.signatures.KaVariableSignature
import org.jetbrains.kotlin.analysis.api.symbols.*
import org.jetbrains.kotlin.analysis.api.symbols.KaValueParameterSymbol
import org.jetbrains.kotlin.analysis.api.types.KaErrorType
import org.jetbrains.kotlin.analysis.api.types.KaFunctionType
import org.jetbrains.kotlin.analysis.api.types.KaType
import org.jetbrains.kotlin.types.Variance
internal object CompletionShortNamesRenderer {
context(KaSession)
fun renderFunctionParameters(function: KaFunctionSignature<*>): String {
return function.valueParameters.joinToString(", ", "(", ")") { renderFunctionParameter(it) }
}
context(KaSession)
@OptIn(KaExperimentalApi::class)
@@ -42,7 +37,7 @@ internal object CompletionShortNamesRenderer {
context(KaSession)
@OptIn(KaExperimentalApi::class)
private fun renderFunctionParameter(parameter: KaVariableSignature<KaValueParameterSymbol>): String =
fun renderFunctionParameter(parameter: KaVariableSignature<KaValueParameterSymbol>): String =
"${if (parameter.symbol.isVararg) "vararg " else ""}${parameter.name.asString()}: ${
parameter.returnType.renderNonErrorOrUnsubstituted(parameter.symbol.returnType)
}${if (parameter.symbol.hasDefaultValue) " = ..." else ""}"

View File

@@ -15,7 +15,6 @@ import org.jetbrains.kotlin.analysis.api.symbols.typeParameters
import org.jetbrains.kotlin.analysis.api.types.KaFunctionType
import org.jetbrains.kotlin.analysis.api.types.KaType
import org.jetbrains.kotlin.idea.completion.impl.k2.KotlinCompletionImplK2Bundle
import org.jetbrains.kotlin.idea.completion.lookups.CompletionShortNamesRenderer.renderFunctionParameters
import org.jetbrains.kotlin.idea.completion.lookups.CompletionShortNamesRenderer.renderFunctionalTypeParameters
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.renderer.render
@@ -26,15 +25,7 @@ internal object TailTextProvider {
context(KaSession)
fun getTailText(
signature: KaCallableSignature<*>,
options: CallableInsertionOptions,
): String = buildString {
if (signature is KaFunctionSignature<*>) {
if (insertLambdaBraces(signature, options.insertionStrategy)) {
append(" {...} ")
}
append(renderFunctionParameters(signature))
}
// use unsubstituted type when rendering receiver type of extension
val symbol = signature.symbol
symbol.receiverType?.let { renderReceiverType(it) }

View File

@@ -10,6 +10,7 @@ import com.intellij.codeInsight.lookup.LookupElementBuilder
import com.intellij.openapi.util.TextRange
import com.intellij.psi.PsiElement
import com.intellij.psi.util.endOffset
import com.intellij.util.applyIf
import org.jetbrains.kotlin.analysis.api.KaExperimentalApi
import org.jetbrains.kotlin.analysis.api.KaSession
import org.jetbrains.kotlin.analysis.api.signatures.KaFunctionSignature
@@ -24,8 +25,7 @@ import org.jetbrains.kotlin.idea.completion.acceptOpeningBrace
import org.jetbrains.kotlin.idea.completion.contributors.helpers.insertString
import org.jetbrains.kotlin.idea.completion.handlers.isCharAt
import org.jetbrains.kotlin.idea.completion.lookups.*
import org.jetbrains.kotlin.idea.completion.lookups.CompletionShortNamesRenderer.renderFunctionParameters
import org.jetbrains.kotlin.idea.completion.lookups.TailTextProvider.getTailText
import org.jetbrains.kotlin.idea.completion.lookups.CompletionShortNamesRenderer.renderFunctionParameter
import org.jetbrains.kotlin.idea.completion.lookups.TailTextProvider.insertLambdaBraces
import org.jetbrains.kotlin.idea.completion.lookups.factories.FunctionInsertionHelper.functionCanBeCalledWithoutExplicitTypeArguments
import org.jetbrains.kotlin.lexer.KtTokens
@@ -43,18 +43,27 @@ internal object FunctionLookupElementFactory {
options: CallableInsertionOptions,
expectedType: KaType? = null,
): LookupElementBuilder {
val insertEmptyLambda = insertLambdaBraces(signature, options.insertionStrategy)
val valueParameters = signature.valueParameters
val renderedDeclaration = valueParameters.joinToString(
prefix = "(",
postfix = ")",
) { renderFunctionParameter(it) }
val insertLambdaBraces = insertLambdaBraces(signature, options.insertionStrategy)
val lookupObject = FunctionCallLookupObject(
shortName = name,
options = options,
renderedDeclaration = renderFunctionParameters(signature),
inputValueArgumentsAreRequired = signature.valueParameters.isNotEmpty(),
renderedDeclaration = renderedDeclaration,
inputValueArgumentsAreRequired = valueParameters.isNotEmpty(),
inputTypeArgumentsAreRequired = !functionCanBeCalledWithoutExplicitTypeArguments(signature.symbol, expectedType),
insertEmptyLambda = insertEmptyLambda,
insertEmptyLambda = insertLambdaBraces,
)
val builder = LookupElementBuilder.create(lookupObject, name.asString())
.withTailText(getTailText(signature, options))
.applyIf(insertLambdaBraces) { appendTailText(" {...} ", true) }
.appendTailText(renderedDeclaration, true)
.appendTailText(TailTextProvider.getTailText(signature), true)
.let { withCallableSignatureInfo(signature, it) }
.also { it.acceptOpeningBrace = true }
return updateLookupElementBuilder(options, builder)

View File

@@ -81,7 +81,7 @@ internal object VariableLookupElementFactory {
val lookupObject = VariableLookupObject(name, options, rendered)
markIfSyntheticJavaProperty(
LookupElementBuilder.create(lookupObject, name.asString())
.withTailText(getTailText(signature, options), true), signature.symbol
.withTailText(getTailText(signature), true), signature.symbol
).withInsertHandler(VariableInsertionHandler)
}
}