diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/signature/IdSignatureBuilder.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/signature/IdSignatureBuilder.kt index 7a0b0d99235..0e644b6f6d0 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/signature/IdSignatureBuilder.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/signature/IdSignatureBuilder.kt @@ -13,13 +13,50 @@ import org.jetbrains.kotlin.name.FqName abstract class IdSignatureBuilder> { protected var packageFqn: FqName = FqName.ROOT protected val classFqnSegments = mutableListOf() + + /** + * Use [setHashIdAndDescriptionFor] or [setHashIdAndDescription] with `isPropertyAccessor = false` to set this property. + * + * This property is made private to enforce always setting [description] along with it. + */ private var hashId: Long? = null + + /** + * Use [setHashIdAndDescriptionFor] or [setHashIdAndDescription] with `isPropertyAccessor = true` to set this property. + * + * This property is made private to enforce always setting [description] along with it. + */ private var hashIdAcc: Long? = null + protected var overridden: List? = null protected var mask = 0L + + /** + * For local or top-level private declarations, the signature of the containing declaration **or** [IdSignature.FileSignature] + * respectively. + * + * Used to build [IdSignature.CompositeSignature]. + */ protected var container: IdSignature? = null + + protected fun createContainer() { + container = container?.let { + buildContainerSignature(it) + } ?: build() + + reset(false) + } + protected var description: String? = null + protected abstract fun renderDeclarationForDescription(declaration: Declaration): String + + protected fun setDescriptionIfLocalDeclaration(declaration: Declaration) { + if (container != null) { + description = renderDeclarationForDescription(declaration) + } + } + protected var isTopLevelPrivate: Boolean = false protected abstract val currentFileSignature: IdSignature.FileSignature? @@ -59,7 +96,7 @@ abstract class IdSignatureBuilder