[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:
+6
@@ -311,4 +311,10 @@ public class DecompiledKnmStubConsistencyFe10TestGenerated extends AbstractDecom
|
||||
public void testTypes() throws Exception {
|
||||
runTest("analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/Types/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("UnderscoreParameterName")
|
||||
public void testUnderscoreParameterName() throws Exception {
|
||||
runTest("analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/UnderscoreParameterName/");
|
||||
}
|
||||
}
|
||||
|
||||
+6
@@ -311,4 +311,10 @@ public class DecompiledKnmStubConsistencyK2TestGenerated extends AbstractDecompi
|
||||
public void testTypes() throws Exception {
|
||||
runTest("analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/Types/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("UnderscoreParameterName")
|
||||
public void testUnderscoreParameterName() throws Exception {
|
||||
runTest("analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/UnderscoreParameterName/");
|
||||
}
|
||||
}
|
||||
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
// FIR_IDENTICAL
|
||||
package test
|
||||
|
||||
class UnderscoreParameterName {
|
||||
var foo: String?
|
||||
get() = null
|
||||
set(_) {}
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
PsiJetFileStubImpl[package=test]
|
||||
PACKAGE_DIRECTIVE
|
||||
REFERENCE_EXPRESSION[referencedName=test]
|
||||
IMPORT_LIST
|
||||
CLASS[classId=test/UnderscoreParameterName, fqName=test.UnderscoreParameterName, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=UnderscoreParameterName, superNames=[]]
|
||||
MODIFIER_LIST[public final]
|
||||
PRIMARY_CONSTRUCTOR[fqName=null, hasBody=false, isDelegatedCallToThis=false, isExtension=false, isTopLevel=false, name=UnderscoreParameterName]
|
||||
MODIFIER_LIST[public]
|
||||
VALUE_PARAMETER_LIST
|
||||
CLASS_BODY
|
||||
PROPERTY[fqName=test.UnderscoreParameterName.foo, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=false, isTopLevel=false, isVar=true, name=foo]
|
||||
MODIFIER_LIST[public final]
|
||||
TYPE_REFERENCE
|
||||
NULLABLE_TYPE
|
||||
USER_TYPE
|
||||
USER_TYPE
|
||||
REFERENCE_EXPRESSION[referencedName=kotlin]
|
||||
REFERENCE_EXPRESSION[referencedName=String]
|
||||
PROPERTY_ACCESSOR[hasBlockBody=true, hasBody=false, isGetter=true]
|
||||
MODIFIER_LIST[public final]
|
||||
PROPERTY_ACCESSOR[hasBlockBody=true, hasBody=true, isGetter=false]
|
||||
MODIFIER_LIST[public final]
|
||||
VALUE_PARAMETER_LIST
|
||||
VALUE_PARAMETER[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=_]
|
||||
TYPE_REFERENCE
|
||||
NULLABLE_TYPE
|
||||
USER_TYPE
|
||||
USER_TYPE
|
||||
REFERENCE_EXPRESSION[referencedName=kotlin]
|
||||
REFERENCE_EXPRESSION[referencedName=String]
|
||||
+6
@@ -311,4 +311,10 @@ public class ClsStubBuilderK2CompilerTestGenerated extends AbstractClsStubBuilde
|
||||
public void testTypes() throws Exception {
|
||||
runTest("analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/Types/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("UnderscoreParameterName")
|
||||
public void testUnderscoreParameterName() throws Exception {
|
||||
runTest("analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/UnderscoreParameterName/");
|
||||
}
|
||||
}
|
||||
|
||||
+6
@@ -311,4 +311,10 @@ public class ClsStubBuilderTestGenerated extends AbstractClsStubBuilderTest {
|
||||
public void testTypes() throws Exception {
|
||||
runTest("analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/Types/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("UnderscoreParameterName")
|
||||
public void testUnderscoreParameterName() throws Exception {
|
||||
runTest("analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/UnderscoreParameterName/");
|
||||
}
|
||||
}
|
||||
|
||||
+4
-5
@@ -7,10 +7,12 @@ package org.jetbrains.kotlin.analysis.decompiler.psi.text
|
||||
|
||||
import org.jetbrains.kotlin.analysis.decompiler.stub.COMPILED_DEFAULT_INITIALIZER
|
||||
import org.jetbrains.kotlin.analysis.decompiler.stub.COMPILED_DEFAULT_PARAMETER_VALUE
|
||||
import org.jetbrains.kotlin.analysis.decompiler.stub.computeParameterName
|
||||
import org.jetbrains.kotlin.builtins.StandardNames
|
||||
import org.jetbrains.kotlin.contracts.description.ContractProviderKey
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.name.SpecialNames
|
||||
import org.jetbrains.kotlin.psi.psiUtil.quoteIfNeeded
|
||||
import org.jetbrains.kotlin.renderer.DescriptorRenderer
|
||||
@@ -128,11 +130,8 @@ fun buildDecompiledText(
|
||||
builder.append(descriptorRenderer.renderAnnotation(annotation))
|
||||
builder.append(" ")
|
||||
}
|
||||
val paramName = when (val name = parameterDescriptor.name) {
|
||||
SpecialNames.IMPLICIT_SET_PARAMETER -> StandardNames.DEFAULT_VALUE_PARAMETER
|
||||
else -> name
|
||||
}
|
||||
builder.append(paramName.asString()).append(": ")
|
||||
val parameterName = computeParameterName(parameterDescriptor.name)
|
||||
builder.append(parameterName.asString()).append(": ")
|
||||
.append(descriptorRenderer.renderType(parameterDescriptor.type))
|
||||
builder.append(")")
|
||||
builder.append(" {").append(DECOMPILED_CODE_COMMENT).append(" }")
|
||||
|
||||
+6
@@ -311,4 +311,10 @@ public class ByDecompiledPsiStubBuilderK2CompilerTestGenerated extends AbstractB
|
||||
public void testTypes() throws Exception {
|
||||
runTest("analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/Types/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("UnderscoreParameterName")
|
||||
public void testUnderscoreParameterName() throws Exception {
|
||||
runTest("analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/UnderscoreParameterName/");
|
||||
}
|
||||
}
|
||||
|
||||
+6
@@ -311,4 +311,10 @@ public class ByDecompiledPsiStubBuilderTestGenerated extends AbstractByDecompile
|
||||
public void testTypes() throws Exception {
|
||||
runTest("analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/Types/");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("UnderscoreParameterName")
|
||||
public void testUnderscoreParameterName() throws Exception {
|
||||
runTest("analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/UnderscoreParameterName/");
|
||||
}
|
||||
}
|
||||
|
||||
+2
-5
@@ -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,
|
||||
|
||||
+9
@@ -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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user