[Stubs] Fix stub inconsistency on unnamed setter parameters

If an unused setter parameter was replaced with an underscore ('_'),
it had a special name in the stub ('<anonymous parameter 0>'). The text
version of the stub inserted it as is, leading to an extra
'PsiErrorElement'.

^KTIJ-28194 Fixed
This commit is contained in:
Yan Zhulanow
2023-12-14 15:27:26 +09:00
committed by Space Team
parent 552ee1ee38
commit c8af3381d6
14 changed files with 104 additions and 12 deletions
@@ -330,14 +330,11 @@ class TypeClsStubBuilder(private val c: ClsStubBuilderContext) {
) {
val parameterListStub = KotlinPlaceHolderStubImpl<KtParameterList>(parent, KtStubElementTypes.VALUE_PARAMETER_LIST)
for ((index, valueParameterProto) in parameters.withIndex()) {
val paramName = when (val name = c.nameResolver.getName(valueParameterProto.name)) {
SpecialNames.IMPLICIT_SET_PARAMETER -> StandardNames.DEFAULT_VALUE_PARAMETER
else -> name
}
val parameterName = computeParameterName(c.nameResolver.getName(valueParameterProto.name))
val hasDefaultValue = Flags.DECLARES_DEFAULT_VALUE.get(valueParameterProto.flags)
val parameterStub = KotlinParameterStubImpl(
parameterListStub,
name = paramName.ref(),
name = parameterName.ref(),
fqName = null,
hasDefaultValue = hasDefaultValue,
hasValOrVar = false,
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.SpecialNames
import org.jetbrains.kotlin.protobuf.MessageLite
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.stubs.KotlinUserTypeStub
@@ -249,3 +250,11 @@ val MessageLite.annotatedCallableKind: AnnotatedCallableKind
fun Name.ref() = StringRef.fromString(this.asString())!!
fun FqName.ref() = StringRef.fromString(this.asString())!!
fun computeParameterName(name: Name): Name {
return when {
name == SpecialNames.IMPLICIT_SET_PARAMETER -> StandardNames.DEFAULT_VALUE_PARAMETER
SpecialNames.isAnonymousParameterName(name) -> Name.identifier("_")
else -> name
}
}