diff --git a/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/Annotations/Annotations.txt b/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/Annotations/Annotations.txt index 9cf67d348ad..b3389869919 100644 --- a/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/Annotations/Annotations.txt +++ b/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/Annotations/Annotations.txt @@ -101,6 +101,8 @@ PsiJetFileStubImpl[package=] USER_TYPE REFERENCE_EXPRESSION[referencedName=kotlin] REFERENCE_EXPRESSION[referencedName=Int] + PROPERTY_ACCESSOR[hasBlockBody=true, hasBody=false, isGetter=true] + MODIFIER_LIST[public final] PROPERTY[fqName=Annotations.getterField, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=false, isTopLevel=false, isVar=false, name=getterField] MODIFIER_LIST[public final] TYPE_REFERENCE @@ -109,6 +111,13 @@ PsiJetFileStubImpl[package=] USER_TYPE REFERENCE_EXPRESSION[referencedName=kotlin] REFERENCE_EXPRESSION[referencedName=String] + PROPERTY_ACCESSOR[hasBlockBody=true, hasBody=false, isGetter=true] + MODIFIER_LIST[public final] + ANNOTATION_ENTRY[hasValueArguments=false, shortName=a] + CONSTRUCTOR_CALLEE + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=a] PROPERTY[fqName=Annotations.hasValueArguments, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=false, isTopLevel=false, isVar=false, name=hasValueArguments] MODIFIER_LIST[public final] ANNOTATION_ENTRY[hasValueArguments=false, shortName=a] @@ -143,6 +152,22 @@ PsiJetFileStubImpl[package=] USER_TYPE REFERENCE_EXPRESSION[referencedName=kotlin] REFERENCE_EXPRESSION[referencedName=String] + 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=value] + MODIFIER_LIST[] + ANNOTATION_ENTRY[hasValueArguments=false, shortName=a] + CONSTRUCTOR_CALLEE + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=a] + TYPE_REFERENCE + NULLABLE_TYPE + USER_TYPE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=kotlin] + REFERENCE_EXPRESSION[referencedName=String] PROPERTY[fqName=Annotations.setterField, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=false, isTopLevel=false, isVar=true, name=setterField] MODIFIER_LIST[public final] TYPE_REFERENCE @@ -151,6 +176,21 @@ PsiJetFileStubImpl[package=] USER_TYPE REFERENCE_EXPRESSION[referencedName=kotlin] REFERENCE_EXPRESSION[referencedName=String] + PROPERTY_ACCESSOR[hasBlockBody=true, hasBody=true, isGetter=false] + MODIFIER_LIST[public final] + ANNOTATION_ENTRY[hasValueArguments=false, shortName=a] + CONSTRUCTOR_CALLEE + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=a] + VALUE_PARAMETER_LIST + VALUE_PARAMETER[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=value] + TYPE_REFERENCE + NULLABLE_TYPE + USER_TYPE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=kotlin] + REFERENCE_EXPRESSION[referencedName=String] PROPERTY[fqName=Annotations.withCustomAccessors, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=false, isTopLevel=false, isVar=true, name=withCustomAccessors] MODIFIER_LIST[public final] TYPE_REFERENCE @@ -158,6 +198,22 @@ PsiJetFileStubImpl[package=] USER_TYPE REFERENCE_EXPRESSION[referencedName=kotlin] REFERENCE_EXPRESSION[referencedName=Int] + PROPERTY_ACCESSOR[hasBlockBody=true, hasBody=false, isGetter=true] + MODIFIER_LIST[public final] + ANNOTATION_ENTRY[hasValueArguments=false, shortName=a] + CONSTRUCTOR_CALLEE + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=a] + PROPERTY_ACCESSOR[hasBlockBody=true, hasBody=true, isGetter=false] + MODIFIER_LIST[private final] + VALUE_PARAMETER_LIST + VALUE_PARAMETER[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=value] + TYPE_REFERENCE + USER_TYPE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=kotlin] + REFERENCE_EXPRESSION[referencedName=Int] PROPERTY[fqName=Annotations.receiverField, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=true, isTopLevel=false, isVar=false, name=receiverField] MODIFIER_LIST[public final] TYPE_REFERENCE @@ -178,6 +234,8 @@ PsiJetFileStubImpl[package=] USER_TYPE REFERENCE_EXPRESSION[referencedName=kotlin] REFERENCE_EXPRESSION[referencedName=String] + PROPERTY_ACCESSOR[hasBlockBody=true, hasBody=false, isGetter=true] + MODIFIER_LIST[public final] FUN[fqName=Annotations.annotationWithVararg, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isTopLevel=false, mayHaveContract=false, name=annotationWithVararg] MODIFIER_LIST[private final] VALUE_PARAMETER_LIST diff --git a/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/ContextReceiversCallableMembers/ContextReceiversCallableMembers.txt b/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/ContextReceiversCallableMembers/ContextReceiversCallableMembers.txt index 99aaf94145a..f4a6fc4b94d 100644 --- a/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/ContextReceiversCallableMembers/ContextReceiversCallableMembers.txt +++ b/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/ContextReceiversCallableMembers/ContextReceiversCallableMembers.txt @@ -28,6 +28,8 @@ PsiJetFileStubImpl[package=] USER_TYPE REFERENCE_EXPRESSION[referencedName=kotlin] REFERENCE_EXPRESSION[referencedName=Int] + PROPERTY_ACCESSOR[hasBlockBody=true, hasBody=false, isGetter=true] + MODIFIER_LIST[private final] PROPERTY[fqName=ContextReceiversCallableMembers.propertyWithSetter, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=true, isTopLevel=false, isVar=true, name=propertyWithSetter] CONTEXT_RECEIVER_LIST CONTEXT_RECEIVER[label=null] @@ -49,6 +51,17 @@ PsiJetFileStubImpl[package=] USER_TYPE REFERENCE_EXPRESSION[referencedName=kotlin] REFERENCE_EXPRESSION[referencedName=Int] + PROPERTY_ACCESSOR[hasBlockBody=true, hasBody=false, isGetter=true] + MODIFIER_LIST[private final] + PROPERTY_ACCESSOR[hasBlockBody=true, hasBody=true, isGetter=false] + MODIFIER_LIST[private final] + VALUE_PARAMETER_LIST + VALUE_PARAMETER[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=v] + TYPE_REFERENCE + USER_TYPE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=kotlin] + REFERENCE_EXPRESSION[referencedName=Int] FUN[fqName=ContextReceiversCallableMembers.function, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=true, isTopLevel=false, mayHaveContract=false, name=function] CONTEXT_RECEIVER_LIST CONTEXT_RECEIVER[label=null] diff --git a/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/ContextReceiversOnTopLevelCallables/ContextReceiversOnTopLevelCallables.txt b/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/ContextReceiversOnTopLevelCallables/ContextReceiversOnTopLevelCallables.txt index 7ca4cc5aa4b..103dde9e50a 100644 --- a/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/ContextReceiversOnTopLevelCallables/ContextReceiversOnTopLevelCallables.txt +++ b/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/ContextReceiversOnTopLevelCallables/ContextReceiversOnTopLevelCallables.txt @@ -22,6 +22,8 @@ PsiJetFileStubImpl[package=] USER_TYPE REFERENCE_EXPRESSION[referencedName=kotlin] REFERENCE_EXPRESSION[referencedName=Int] + PROPERTY_ACCESSOR[hasBlockBody=true, hasBody=false, isGetter=true] + MODIFIER_LIST[private final] PROPERTY[fqName=propertyWithSetter, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=true, isTopLevel=true, isVar=true, name=propertyWithSetter] CONTEXT_RECEIVER_LIST CONTEXT_RECEIVER[label=null] @@ -43,6 +45,17 @@ PsiJetFileStubImpl[package=] USER_TYPE REFERENCE_EXPRESSION[referencedName=kotlin] REFERENCE_EXPRESSION[referencedName=Int] + PROPERTY_ACCESSOR[hasBlockBody=true, hasBody=false, isGetter=true] + MODIFIER_LIST[private final] + PROPERTY_ACCESSOR[hasBlockBody=true, hasBody=true, isGetter=false] + MODIFIER_LIST[private final] + VALUE_PARAMETER_LIST + VALUE_PARAMETER[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=v] + TYPE_REFERENCE + USER_TYPE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=kotlin] + REFERENCE_EXPRESSION[referencedName=Int] FUN[fqName=function, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=true, isTopLevel=true, mayHaveContract=false, name=function] CONTEXT_RECEIVER_LIST CONTEXT_RECEIVER[label=null] diff --git a/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/Modifiers/Modifiers.txt b/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/Modifiers/Modifiers.txt index f6a6e9001e2..5e54c7d2179 100644 --- a/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/Modifiers/Modifiers.txt +++ b/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/Modifiers/Modifiers.txt @@ -21,6 +21,17 @@ PsiJetFileStubImpl[package=test] USER_TYPE REFERENCE_EXPRESSION[referencedName=kotlin] REFERENCE_EXPRESSION[referencedName=Int] + PROPERTY_ACCESSOR[hasBlockBody=true, hasBody=false, isGetter=true] + MODIFIER_LIST[public final external] + PROPERTY_ACCESSOR[hasBlockBody=true, hasBody=true, isGetter=false] + MODIFIER_LIST[public final external] + VALUE_PARAMETER_LIST + VALUE_PARAMETER[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=value] + TYPE_REFERENCE + USER_TYPE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=kotlin] + REFERENCE_EXPRESSION[referencedName=Int] PROPERTY[fqName=test.Modifiers.x, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=false, isTopLevel=false, isVar=false, name=x] MODIFIER_LIST[public final] TYPE_REFERENCE diff --git a/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/MultifileClass/MultifileClass.txt b/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/MultifileClass/MultifileClass.txt index 9b8997034e1..ab444a1c78f 100644 --- a/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/MultifileClass/MultifileClass.txt +++ b/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/MultifileClass/MultifileClass.txt @@ -42,6 +42,8 @@ PsiJetFileStubImpl[package=test] USER_TYPE REFERENCE_EXPRESSION[referencedName=kotlin] REFERENCE_EXPRESSION[referencedName=Int] + PROPERTY_ACCESSOR[hasBlockBody=true, hasBody=false, isGetter=true] + MODIFIER_LIST[public final] FUN[fqName=test.p1ExprFun, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isTopLevel=true, mayHaveContract=false, name=p1ExprFun] MODIFIER_LIST[public] VALUE_PARAMETER_LIST @@ -104,6 +106,8 @@ PsiJetFileStubImpl[package=test] USER_TYPE REFERENCE_EXPRESSION[referencedName=kotlin] REFERENCE_EXPRESSION[referencedName=Int] + PROPERTY_ACCESSOR[hasBlockBody=true, hasBody=false, isGetter=true] + MODIFIER_LIST[public final] FUN[fqName=test.p2Fun, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isTopLevel=true, mayHaveContract=false, name=p2Fun] MODIFIER_LIST[public] VALUE_PARAMETER_LIST diff --git a/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/PrivateToThis/PrivateToThis.txt b/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/PrivateToThis/PrivateToThis.txt index 640b6f13878..5fc1ab85012 100644 --- a/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/PrivateToThis/PrivateToThis.txt +++ b/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/PrivateToThis/PrivateToThis.txt @@ -26,11 +26,22 @@ PsiJetFileStubImpl[package=p] TYPE_REFERENCE USER_TYPE REFERENCE_EXPRESSION[referencedName=I] + PROPERTY_ACCESSOR[hasBlockBody=true, hasBody=false, isGetter=true] + MODIFIER_LIST[private final] PROPERTY[fqName=p.PrivateToThis.var_with_accessors, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=false, isTopLevel=false, isVar=true, name=var_with_accessors] MODIFIER_LIST[private final] TYPE_REFERENCE USER_TYPE REFERENCE_EXPRESSION[referencedName=I] + PROPERTY_ACCESSOR[hasBlockBody=true, hasBody=false, isGetter=true] + MODIFIER_LIST[private final] + PROPERTY_ACCESSOR[hasBlockBody=true, hasBody=true, isGetter=false] + MODIFIER_LIST[private final] + VALUE_PARAMETER_LIST + VALUE_PARAMETER[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=value] + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=I] FUN[fqName=p.PrivateToThis.bas, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isTopLevel=false, mayHaveContract=false, name=bas] MODIFIER_LIST[private final] VALUE_PARAMETER_LIST 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 bf0dfa0931f..0fcfb8bf827 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 @@ -62,6 +62,8 @@ PsiJetFileStubImpl[package=foo.TopLevelMembers] REFERENCE_EXPRESSION[referencedName=foo] REFERENCE_EXPRESSION[referencedName=TopLevelMembers] REFERENCE_EXPRESSION[referencedName=D] + PROPERTY_ACCESSOR[hasBlockBody=true, hasBody=false, isGetter=true] + MODIFIER_LIST[public final] PROPERTY[fqName=foo.TopLevelMembers.ext, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=true, isTopLevel=true, isVar=false, name=ext] MODIFIER_LIST[public] TYPE_REFERENCE @@ -74,6 +76,8 @@ PsiJetFileStubImpl[package=foo.TopLevelMembers] USER_TYPE REFERENCE_EXPRESSION[referencedName=kotlin] REFERENCE_EXPRESSION[referencedName=String] + PROPERTY_ACCESSOR[hasBlockBody=true, hasBody=false, isGetter=true] + MODIFIER_LIST[public final] FUN[fqName=foo.TopLevelMembers.funWithBlockBody, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isTopLevel=true, mayHaveContract=false, name=funWithBlockBody] MODIFIER_LIST[public] VALUE_PARAMETER_LIST diff --git a/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/TypeParams/TypeParams.txt b/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/TypeParams/TypeParams.txt index 534b7036400..7897cca0a6d 100644 --- a/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/TypeParams/TypeParams.txt +++ b/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/TypeParams/TypeParams.txt @@ -71,6 +71,8 @@ PsiJetFileStubImpl[package=test] TYPE_REFERENCE USER_TYPE REFERENCE_EXPRESSION[referencedName=T2] + PROPERTY_ACCESSOR[hasBlockBody=true, hasBody=false, isGetter=true] + MODIFIER_LIST[public final] PROPERTY[fqName=test.TypeParams.withOwnBoundedParam, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=true, isTopLevel=false, isVar=false, name=withOwnBoundedParam] MODIFIER_LIST[public final] TYPE_PARAMETER_LIST @@ -87,6 +89,8 @@ PsiJetFileStubImpl[package=test] TYPE_REFERENCE USER_TYPE REFERENCE_EXPRESSION[referencedName=G1] + PROPERTY_ACCESSOR[hasBlockBody=true, hasBody=false, isGetter=true] + MODIFIER_LIST[public final] PROPERTY[fqName=test.TypeParams.withOwnBoundedParamByOther, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=true, isTopLevel=false, isVar=false, name=withOwnBoundedParamByOther] MODIFIER_LIST[public final] TYPE_PARAMETER_LIST @@ -100,6 +104,8 @@ PsiJetFileStubImpl[package=test] TYPE_REFERENCE USER_TYPE REFERENCE_EXPRESSION[referencedName=G1] + PROPERTY_ACCESSOR[hasBlockBody=true, hasBody=false, isGetter=true] + MODIFIER_LIST[public final] PROPERTY[fqName=test.TypeParams.withOwnParam, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=true, isTopLevel=false, isVar=false, name=withOwnParam] MODIFIER_LIST[public final] TYPE_PARAMETER_LIST @@ -110,6 +116,8 @@ PsiJetFileStubImpl[package=test] TYPE_REFERENCE USER_TYPE REFERENCE_EXPRESSION[referencedName=G1] + PROPERTY_ACCESSOR[hasBlockBody=true, hasBody=false, isGetter=true] + MODIFIER_LIST[public final] FUN[fqName=test.TypeParams.f, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=true, isExtension=false, isTopLevel=false, mayHaveContract=false, name=f] MODIFIER_LIST[public final inline] TYPE_PARAMETER_LIST 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 87ad3f2b002..39d72281cc3 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,9 +6,11 @@ package org.jetbrains.kotlin.analysis.decompiler.psi.text import com.intellij.openapi.util.TextRange +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.SpecialNames import org.jetbrains.kotlin.psi.psiUtil.quoteIfNeeded import org.jetbrains.kotlin.renderer.DescriptorRenderer import org.jetbrains.kotlin.renderer.DescriptorRendererModifier @@ -18,6 +20,7 @@ import org.jetbrains.kotlin.resolve.DataClassDescriptorResolver import org.jetbrains.kotlin.resolve.DescriptorUtils.isEnumEntry import org.jetbrains.kotlin.resolve.descriptorUtil.secondaryConstructors import org.jetbrains.kotlin.types.isFlexible +import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly private const val DECOMPILED_CODE_COMMENT = "/* compiled code */" private const val DECOMPILED_COMMENT_FOR_PARAMETER = "/* = compiled code */" @@ -107,6 +110,40 @@ fun buildDecompiledText( } endOffset = builder.length } + if (descriptor is PropertyDescriptor) { + for (accessor in descriptor.accessors) { + if (accessor.isDefault) continue + builder.append("\n$indent ") + builder.append(accessor.visibility.internalDisplayName).append(" ") + builder.append(accessor.modality.name.toLowerCaseAsciiOnly()).append(" ") + if (accessor.isExternal) { + builder.append("external ") + } + for (annotation in accessor.annotations) { + builder.append(descriptorRenderer.renderAnnotation(annotation)) + builder.append(" ") + } + if (accessor is PropertyGetterDescriptor) { + builder.append("get") + } else if (accessor is PropertySetterDescriptor) { + builder.append("set(") + val parameterDescriptor = accessor.valueParameters[0] + for (annotation in parameterDescriptor.annotations) { + 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(": ") + .append(descriptorRenderer.renderType(parameterDescriptor.type)) + builder.append(")") + builder.append(" {").append(DECOMPILED_CODE_COMMENT).append(" }") + } + endOffset = builder.length + } + } } else if (descriptor is ClassDescriptor && !isEnumEntry(descriptor)) { builder.append(" {\n") diff --git a/analysis/decompiled/decompiler-to-stubs/src/org/jetbrains/kotlin/analysis/decompiler/stub/CallableClsStubBuilder.kt b/analysis/decompiled/decompiler-to-stubs/src/org/jetbrains/kotlin/analysis/decompiler/stub/CallableClsStubBuilder.kt index 6216c8e5e08..99367a3e5c8 100644 --- a/analysis/decompiled/decompiler-to-stubs/src/org/jetbrains/kotlin/analysis/decompiler/stub/CallableClsStubBuilder.kt +++ b/analysis/decompiled/decompiler-to-stubs/src/org/jetbrains/kotlin/analysis/decompiler/stub/CallableClsStubBuilder.kt @@ -14,6 +14,7 @@ import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.stubs.elements.KtStubElementTypes import org.jetbrains.kotlin.psi.stubs.impl.KotlinConstructorStubImpl import org.jetbrains.kotlin.psi.stubs.impl.KotlinFunctionStubImpl +import org.jetbrains.kotlin.psi.stubs.impl.KotlinPropertyAccessorStubImpl import org.jetbrains.kotlin.psi.stubs.impl.KotlinPropertyStubImpl import org.jetbrains.kotlin.resolve.DataClassResolver import org.jetbrains.kotlin.serialization.deserialization.AnnotatedCallableKind @@ -99,6 +100,7 @@ abstract class CallableClsStubBuilder( createValueParameterList() createReturnTypeStub() typeStubBuilder.createTypeConstraintListStub(callableStub, typeConstraintListData) + createCallableSpecialParts() } abstract val receiverType: ProtoBuf.Type? @@ -124,6 +126,8 @@ abstract class CallableClsStubBuilder( abstract fun createValueParameterList() abstract fun doCreateCallableStub(parent: StubElement): StubElement + + protected open fun createCallableSpecialParts() {} } private class FunctionClsStubBuilder( @@ -260,6 +264,61 @@ private class PropertyClsStubBuilder( fqName = c.containerFqName.child(callableName) ) } + + override fun createCallableSpecialParts() { + val flags = propertyProto.flags + if (Flags.HAS_GETTER[flags] && propertyProto.hasGetterFlags()) { + val getterFlags = propertyProto.getterFlags + if (Flags.IS_NOT_DEFAULT.get(getterFlags)) { + createModifierListAndAnnotationStubsForAccessor( + KotlinPropertyAccessorStubImpl(callableStub, true, false, true), + flags = getterFlags, + callableKind = AnnotatedCallableKind.PROPERTY_GETTER + ) + } + } + + if (Flags.HAS_SETTER[flags] && propertyProto.hasSetterFlags()) { + val setterFlags = propertyProto.setterFlags + if (Flags.IS_NOT_DEFAULT.get(setterFlags)) { + val setterStub = KotlinPropertyAccessorStubImpl(callableStub, false, true, true) + createModifierListAndAnnotationStubsForAccessor( + setterStub, + flags = setterFlags, + callableKind = AnnotatedCallableKind.PROPERTY_SETTER + ) + if (propertyProto.hasSetterValueParameter()) { + typeStubBuilder.createValueParameterListStub( + setterStub, + propertyProto, + listOf(propertyProto.setterValueParameter), + protoContainer, + AnnotatedCallableKind.PROPERTY_SETTER + ) + } + } + } + } + + private fun createModifierListAndAnnotationStubsForAccessor( + accessorStub: KotlinPropertyAccessorStubImpl, + flags: Int, + callableKind: AnnotatedCallableKind + ) { + val modifierList = createModifierListStubForDeclaration( + accessorStub, + flags, + listOf(VISIBILITY, MODALITY, INLINE_ACCESSOR, EXTERNAL_ACCESSOR) + ) + if (Flags.HAS_ANNOTATIONS.get(flags)) { + val annotationIds = c.components.annotationLoader.loadCallableAnnotations( + protoContainer, + propertyProto, + callableKind + ) + createAnnotationStubs(annotationIds, modifierList) + } + } } private class ConstructorClsStubBuilder( 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 7d4231990b0..60601e09508 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 @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf 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 @@ -302,14 +303,18 @@ class TypeClsStubBuilder(private val c: ClsStubBuilderContext) { parent: StubElement, callableProto: MessageLite, parameters: List, - container: ProtoContainer + container: ProtoContainer, + callableKind: AnnotatedCallableKind = callableProto.annotatedCallableKind ) { val parameterListStub = KotlinPlaceHolderStubImpl(parent, KtStubElementTypes.VALUE_PARAMETER_LIST) for ((index, valueParameterProto) in parameters.withIndex()) { - val name = c.nameResolver.getName(valueParameterProto.name) + val paramName = when (val name = c.nameResolver.getName(valueParameterProto.name)) { + SpecialNames.IMPLICIT_SET_PARAMETER -> StandardNames.DEFAULT_VALUE_PARAMETER + else -> name + } val parameterStub = KotlinParameterStubImpl( parameterListStub, - name = name.ref(), + name = paramName.ref(), fqName = null, hasDefaultValue = false, hasValOrVar = false, @@ -333,7 +338,7 @@ class TypeClsStubBuilder(private val c: ClsStubBuilderContext) { if (Flags.HAS_ANNOTATIONS.get(valueParameterProto.flags)) { val parameterAnnotations = c.components.annotationLoader.loadValueParameterAnnotations( - container, callableProto, callableProto.annotatedCallableKind, index, valueParameterProto + container, callableProto, callableKind, index, valueParameterProto ) if (parameterAnnotations.isNotEmpty()) { createAnnotationStubs(parameterAnnotations, modifierList ?: createEmptyModifierListStub(parameterStub)) diff --git a/analysis/decompiled/decompiler-to-stubs/src/org/jetbrains/kotlin/analysis/decompiler/stub/flags/flags.kt b/analysis/decompiled/decompiler-to-stubs/src/org/jetbrains/kotlin/analysis/decompiler/stub/flags/flags.kt index 0eb8974ab51..b8266079c70 100644 --- a/analysis/decompiled/decompiler-to-stubs/src/org/jetbrains/kotlin/analysis/decompiler/stub/flags/flags.kt +++ b/analysis/decompiled/decompiler-to-stubs/src/org/jetbrains/kotlin/analysis/decompiler/stub/flags/flags.kt @@ -45,8 +45,10 @@ val INFIX = createBooleanFlagToModifier(Flags.IS_INFIX, KtTokens.INFIX_KEYWORD) val DATA = createBooleanFlagToModifier(Flags.IS_DATA, KtTokens.DATA_KEYWORD) val EXTERNAL_FUN = createBooleanFlagToModifier(Flags.IS_EXTERNAL_FUNCTION, KtTokens.EXTERNAL_KEYWORD) val EXTERNAL_PROPERTY = createBooleanFlagToModifier(Flags.IS_EXTERNAL_PROPERTY, KtTokens.EXTERNAL_KEYWORD) +val EXTERNAL_ACCESSOR = createBooleanFlagToModifier(Flags.IS_EXTERNAL_ACCESSOR, KtTokens.EXTERNAL_KEYWORD) val EXTERNAL_CLASS = createBooleanFlagToModifier(Flags.IS_EXTERNAL_CLASS, KtTokens.EXTERNAL_KEYWORD) val INLINE = createBooleanFlagToModifier(Flags.IS_INLINE, KtTokens.INLINE_KEYWORD) +val INLINE_ACCESSOR = createBooleanFlagToModifier(Flags.IS_INLINE_ACCESSOR, KtTokens.INLINE_KEYWORD) val VALUE_CLASS = createBooleanFlagToModifier(Flags.IS_VALUE_CLASS, KtTokens.VALUE_KEYWORD) val FUN_INTERFACE = createBooleanFlagToModifier(Flags.IS_FUN_INTERFACE, KtTokens.FUN_KEYWORD) val TAILREC = createBooleanFlagToModifier(Flags.IS_TAILREC, KtTokens.TAILREC_KEYWORD) diff --git a/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/KotlinStubVersions.kt b/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/KotlinStubVersions.kt index f3f43e3f5d5..02f0b1e3d57 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/KotlinStubVersions.kt +++ b/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/KotlinStubVersions.kt @@ -23,12 +23,12 @@ object KotlinStubVersions { // Though only kotlin declarations (no code in the bodies) are stubbed, please do increase this version // if you are not 100% sure it can be avoided. // Increasing this version will lead to reindexing of all kotlin source files on the first IDE startup with the new version. - const val SOURCE_STUB_VERSION = 151 + const val SOURCE_STUB_VERSION = 152 // Binary stub version should be increased if stub format (org.jetbrains.kotlin.psi.stubs.impl) is changed // or changes are made to the core stub building code (org.jetbrains.kotlin.idea.decompiler.stubBuilder). // Increasing this version will lead to reindexing of all binary files that are potentially kotlin binaries (including all class files). - private const val BINARY_STUB_VERSION = 87 + private const val BINARY_STUB_VERSION = 88 // Classfile stub version should be increased if changes are made to classfile stub building subsystem (org.jetbrains.kotlin.idea.decompiler.classFile) // Increasing this version will lead to reindexing of all classfiles.