diff --git a/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/AnnotationClass/AnnotationClass.txt b/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/AnnotationClass/AnnotationClass.txt index d473b32b30b..d877f7f609c 100644 --- a/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/AnnotationClass/AnnotationClass.txt +++ b/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/AnnotationClass/AnnotationClass.txt @@ -15,12 +15,13 @@ PsiJetFileStubImpl[package=test.a] USER_TYPE REFERENCE_EXPRESSION[referencedName=kotlin] REFERENCE_EXPRESSION[referencedName=Int] - VALUE_PARAMETER[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=j] + VALUE_PARAMETER[fqName=null, hasDefaultValue=true, hasValOrVar=false, isMutable=false, name=j] TYPE_REFERENCE USER_TYPE USER_TYPE REFERENCE_EXPRESSION[referencedName=kotlin] REFERENCE_EXPRESSION[referencedName=String] + REFERENCE_EXPRESSION[referencedName=COMPILED_CODE] SUPER_TYPE_LIST SUPER_TYPE_ENTRY TYPE_REFERENCE diff --git a/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/ClassMembers/ClassMembers.txt b/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/ClassMembers/ClassMembers.txt index 7aa25e84684..742b5fc0f6a 100644 --- a/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/ClassMembers/ClassMembers.txt +++ b/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/ClassMembers/ClassMembers.txt @@ -25,18 +25,20 @@ PsiJetFileStubImpl[package=test] USER_TYPE REFERENCE_EXPRESSION[referencedName=kotlin] REFERENCE_EXPRESSION[referencedName=Int] - VALUE_PARAMETER[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=p4] + VALUE_PARAMETER[fqName=null, hasDefaultValue=true, hasValOrVar=false, isMutable=false, name=p4] TYPE_REFERENCE USER_TYPE USER_TYPE REFERENCE_EXPRESSION[referencedName=kotlin] REFERENCE_EXPRESSION[referencedName=Int] - VALUE_PARAMETER[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=p5] + REFERENCE_EXPRESSION[referencedName=COMPILED_CODE] + VALUE_PARAMETER[fqName=null, hasDefaultValue=true, hasValOrVar=false, isMutable=false, name=p5] TYPE_REFERENCE USER_TYPE USER_TYPE REFERENCE_EXPRESSION[referencedName=kotlin] REFERENCE_EXPRESSION[referencedName=String] + REFERENCE_EXPRESSION[referencedName=COMPILED_CODE] CLASS_BODY PROPERTY[fqName=test.ClassMembers.abstractVar, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=false, isTopLevel=false, isVar=true, name=abstractVar] MODIFIER_LIST[abstract public] diff --git a/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/Delegation/Delegation.txt b/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/Delegation/Delegation.txt index f924eb751e1..0f3b80a2e91 100644 --- a/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/Delegation/Delegation.txt +++ b/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/Delegation/Delegation.txt @@ -6,12 +6,13 @@ PsiJetFileStubImpl[package=] PRIMARY_CONSTRUCTOR[fqName=null, hasBody=false, isDelegatedCallToThis=false, isExtension=false, isTopLevel=false, name=Delegation] MODIFIER_LIST[public] VALUE_PARAMETER_LIST - VALUE_PARAMETER[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=c] + VALUE_PARAMETER[fqName=null, hasDefaultValue=true, hasValOrVar=false, isMutable=false, name=c] TYPE_REFERENCE USER_TYPE USER_TYPE REFERENCE_EXPRESSION[referencedName=kotlin] REFERENCE_EXPRESSION[referencedName=Int] + REFERENCE_EXPRESSION[referencedName=COMPILED_CODE] VALUE_PARAMETER[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=a] TYPE_REFERENCE USER_TYPE diff --git a/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/InheritingClasses/InheritingClasses.txt b/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/InheritingClasses/InheritingClasses.txt index 0d9157bdfcc..9a7eb15907b 100644 --- a/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/InheritingClasses/InheritingClasses.txt +++ b/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/InheritingClasses/InheritingClasses.txt @@ -13,12 +13,13 @@ PsiJetFileStubImpl[package=a] PRIMARY_CONSTRUCTOR[fqName=null, hasBody=false, isDelegatedCallToThis=false, isExtension=false, isTopLevel=false, name=A] MODIFIER_LIST[public] VALUE_PARAMETER_LIST - VALUE_PARAMETER[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=c] + VALUE_PARAMETER[fqName=null, hasDefaultValue=true, hasValOrVar=false, isMutable=false, name=c] TYPE_REFERENCE USER_TYPE USER_TYPE REFERENCE_EXPRESSION[referencedName=kotlin] REFERENCE_EXPRESSION[referencedName=Int] + REFERENCE_EXPRESSION[referencedName=COMPILED_CODE] SUPER_TYPE_LIST SUPER_TYPE_ENTRY TYPE_REFERENCE diff --git a/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/TopLevelMembersKt/TopLevelMembersKt.txt b/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/TopLevelMembersKt/TopLevelMembersKt.txt index 0fcfb8bf827..920992be644 100644 --- a/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/TopLevelMembersKt/TopLevelMembersKt.txt +++ b/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/TopLevelMembersKt/TopLevelMembersKt.txt @@ -147,12 +147,13 @@ PsiJetFileStubImpl[package=foo.TopLevelMembers] REFERENCE_EXPRESSION[referencedName=kotlin] REFERENCE_EXPRESSION[referencedName=Int] VALUE_PARAMETER_LIST - VALUE_PARAMETER[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=i] + VALUE_PARAMETER[fqName=null, hasDefaultValue=true, hasValOrVar=false, isMutable=false, name=i] TYPE_REFERENCE USER_TYPE USER_TYPE REFERENCE_EXPRESSION[referencedName=kotlin] REFERENCE_EXPRESSION[referencedName=Int] + REFERENCE_EXPRESSION[referencedName=COMPILED_CODE] TYPE_REFERENCE USER_TYPE USER_TYPE diff --git a/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/text/buildDecompiledText.kt b/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/text/buildDecompiledText.kt index 39d72281cc3..441ac77e881 100644 --- a/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/text/buildDecompiledText.kt +++ b/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/text/buildDecompiledText.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.analysis.decompiler.psi.text import com.intellij.openapi.util.TextRange +import org.jetbrains.kotlin.analysis.decompiler.stub.COMPILED_DEFAULT_PARAMETER_VALUE import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.contracts.description.ContractProviderKey import org.jetbrains.kotlin.descriptors.* @@ -35,6 +36,7 @@ fun DescriptorRendererOptions.defaultDecompilerRendererOptions() { excludedTypeAnnotationClasses = emptySet() alwaysRenderModifiers = true parameterNamesInFunctionalTypes = false // to support parameters names in decompiled text we need to load annotation arguments + defaultParameterValueRenderer = { _ -> COMPILED_DEFAULT_PARAMETER_VALUE } } internal fun CallableMemberDescriptor.mustNotBeWrittenToDecompiledText(): Boolean { diff --git a/analysis/decompiled/decompiler-to-stubs/src/org/jetbrains/kotlin/analysis/decompiler/stub/TypeClsStubBuilder.kt b/analysis/decompiled/decompiler-to-stubs/src/org/jetbrains/kotlin/analysis/decompiler/stub/TypeClsStubBuilder.kt index 60601e09508..f6b509fec31 100644 --- a/analysis/decompiled/decompiler-to-stubs/src/org/jetbrains/kotlin/analysis/decompiler/stub/TypeClsStubBuilder.kt +++ b/analysis/decompiled/decompiler-to-stubs/src/org/jetbrains/kotlin/analysis/decompiler/stub/TypeClsStubBuilder.kt @@ -4,6 +4,7 @@ package org.jetbrains.kotlin.analysis.decompiler.stub import com.intellij.psi.PsiElement import com.intellij.psi.stubs.StubElement +import com.intellij.util.io.StringRef import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.builtins.isBuiltinFunctionClass import org.jetbrains.kotlin.lexer.KtModifierKeywordToken @@ -20,6 +21,7 @@ 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.ConstantValueKind import org.jetbrains.kotlin.psi.stubs.KotlinUserTypeStub import org.jetbrains.kotlin.psi.stubs.elements.KtStubElementTypes import org.jetbrains.kotlin.psi.stubs.impl.* @@ -29,6 +31,8 @@ import org.jetbrains.kotlin.utils.doNothing // TODO: see DescriptorRendererOptions.excludedTypeAnnotationClasses for decompiler private val ANNOTATIONS_NOT_LOADED_FOR_TYPES = setOf(StandardNames.FqNames.parameterName) +const val COMPILED_DEFAULT_PARAMETER_VALUE = "COMPILED_CODE" + class TypeClsStubBuilder(private val c: ClsStubBuilderContext) { fun createTypeReferenceStub( parent: StubElement, @@ -312,11 +316,12 @@ class TypeClsStubBuilder(private val c: ClsStubBuilderContext) { SpecialNames.IMPLICIT_SET_PARAMETER -> StandardNames.DEFAULT_VALUE_PARAMETER else -> name } + val hasDefaultValue = Flags.DECLARES_DEFAULT_VALUE.get(valueParameterProto.flags) val parameterStub = KotlinParameterStubImpl( parameterListStub, name = paramName.ref(), fqName = null, - hasDefaultValue = false, + hasDefaultValue = hasDefaultValue, hasValOrVar = false, isMutable = false ) @@ -346,6 +351,9 @@ class TypeClsStubBuilder(private val c: ClsStubBuilderContext) { } createTypeReferenceStub(parameterStub, typeProto) + if (hasDefaultValue) { + KotlinNameReferenceExpressionStubImpl(parameterStub, StringRef.fromString(COMPILED_DEFAULT_PARAMETER_VALUE)) + } } }