[klib] Fix annotation printing
This commit is contained in:
@@ -159,7 +159,7 @@ class PackageFragmentPrinter(val packageFragment: KonanLinkData.PackageFragment,
|
|||||||
.let { if (it.isEmpty()) " " else it }
|
.let { if (it.isEmpty()) " " else it }
|
||||||
|
|
||||||
val supertypes = supertypesToString(supertypes(TypeTables.peek()))
|
val supertypes = supertypesToString(supertypes(TypeTables.peek()))
|
||||||
val annotations = annotationsToString(getExtension(KonanSerializerProtocol.classAnnotation), "\n")
|
val annotations = annotationsToString(getExtension(KonanSerializerProtocol.classAnnotation))
|
||||||
|
|
||||||
val primaryConstructor = when {
|
val primaryConstructor = when {
|
||||||
isObject || isCompanionObject -> ""
|
isObject || isCompanionObject -> ""
|
||||||
@@ -203,10 +203,7 @@ class PackageFragmentPrinter(val packageFragment: KonanLinkData.PackageFragment,
|
|||||||
|
|
||||||
private fun ProtoBuf.Constructor.asString(printVisibility: Boolean = true, isPrimary: Boolean = false): String {
|
private fun ProtoBuf.Constructor.asString(printVisibility: Boolean = true, isPrimary: Boolean = false): String {
|
||||||
val visibility = if (printVisibility) Flags.VISIBILITY.get(flags).asString() else ""
|
val visibility = if (printVisibility) Flags.VISIBILITY.get(flags).asString() else ""
|
||||||
val annotations = annotationsToString(
|
val annotations = annotationsToString(getExtension(KonanSerializerProtocol.constructorAnnotation), true)
|
||||||
getExtension(KonanSerializerProtocol.constructorAnnotation),
|
|
||||||
if (isPrimary) " " else "\n"
|
|
||||||
)
|
|
||||||
val parameters = valueParameterList.joinToString(", ", prefix = "(", postfix = ")") { it.asString() }
|
val parameters = valueParameterList.joinToString(", ", prefix = "(", postfix = ")") { it.asString() }
|
||||||
|
|
||||||
val header = "$visibility$annotations"
|
val header = "$visibility$annotations"
|
||||||
@@ -236,7 +233,7 @@ class PackageFragmentPrinter(val packageFragment: KonanLinkData.PackageFragment,
|
|||||||
val isInline = Flags.IS_INLINE.asString(flags)
|
val isInline = Flags.IS_INLINE.asString(flags)
|
||||||
val isExternal = Flags.IS_EXTERNAL_FUNCTION.asString(flags)
|
val isExternal = Flags.IS_EXTERNAL_FUNCTION.asString(flags)
|
||||||
val receiverType = receiverType()
|
val receiverType = receiverType()
|
||||||
val annotations = annotationsToString(getExtension(KonanSerializerProtocol.functionAnnotation), "\n")
|
val annotations = annotationsToString(getExtension(KonanSerializerProtocol.functionAnnotation))
|
||||||
val typeParameters = typeParameterList.joinToString("<", "> ") { it.asString() }
|
val typeParameters = typeParameterList.joinToString("<", "> ") { it.asString() }
|
||||||
val valueParameters = valueParameterList.joinToString(", ", "(", ")") { it.asString() }
|
val valueParameters = valueParameterList.joinToString(", ", "(", ")") { it.asString() }
|
||||||
val returnType = returnType()
|
val returnType = returnType()
|
||||||
@@ -256,7 +253,7 @@ class PackageFragmentPrinter(val packageFragment: KonanLinkData.PackageFragment,
|
|||||||
val isExternal = Flags.IS_EXTERNAL_PROPERTY.asString(flags)
|
val isExternal = Flags.IS_EXTERNAL_PROPERTY.asString(flags)
|
||||||
val isConst = Flags.IS_CONST.asString(flags)
|
val isConst = Flags.IS_CONST.asString(flags)
|
||||||
val returnType = returnType(TypeTables.peek()).asString()
|
val returnType = returnType(TypeTables.peek()).asString()
|
||||||
val annotations = annotationsToString(getExtension(KonanSerializerProtocol.propertyAnnotation), "\n")
|
val annotations = annotationsToString(getExtension(KonanSerializerProtocol.propertyAnnotation))
|
||||||
append("$annotations$Indent$isExternal$modality$visibility$isConst$isVar$name: $returnType\n")
|
append("$annotations$Indent$isExternal$modality$visibility$isConst$isVar$name: $returnType\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -280,7 +277,7 @@ class PackageFragmentPrinter(val packageFragment: KonanLinkData.PackageFragment,
|
|||||||
val upperBounds = upperBoundsToString(upperBounds(TypeTables.peek()))
|
val upperBounds = upperBoundsToString(upperBounds(TypeTables.peek()))
|
||||||
val isReified = if (reified) "reified " else ""
|
val isReified = if (reified) "reified " else ""
|
||||||
val variance = variance.asString()
|
val variance = variance.asString()
|
||||||
val annotations = annotationsToString(getExtension(KonanSerializerProtocol.typeParameterAnnotation))
|
val annotations = annotationsToString(getExtension(KonanSerializerProtocol.typeParameterAnnotation), true)
|
||||||
return "$annotations$isReified$variance$parameterName$upperBounds"
|
return "$annotations$isReified$variance$parameterName$upperBounds"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -296,20 +293,30 @@ class PackageFragmentPrinter(val packageFragment: KonanLinkData.PackageFragment,
|
|||||||
val type = type(TypeTables.peek()).asString()
|
val type = type(TypeTables.peek()).asString()
|
||||||
|
|
||||||
val isCrossInline = Flags.IS_CROSSINLINE.asString(flags)
|
val isCrossInline = Flags.IS_CROSSINLINE.asString(flags)
|
||||||
val annotations = annotationsToString(getExtension(KonanSerializerProtocol.parameterAnnotation))
|
val annotations = annotationsToString(getExtension(KonanSerializerProtocol.parameterAnnotation), true)
|
||||||
|
|
||||||
return "$annotations$isCrossInline$parameterName: $type"
|
return "$annotations$isCrossInline$parameterName: $type"
|
||||||
}
|
}
|
||||||
|
|
||||||
//-------------------------------------------------------------------------//
|
//-------------------------------------------------------------------------//
|
||||||
|
|
||||||
private fun annotationsToString(annotations: List<ProtoBuf.Annotation>, separator: String = " ") =
|
private fun annotationsToString(annotations: List<ProtoBuf.Annotation>, oneline: Boolean = false): String {
|
||||||
buildString { annotations.forEach { append(it.asString() + separator) } }
|
if (annotations.isEmpty()) {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
val prefix = if (oneline) "" else "$Indent"
|
||||||
|
val separator = if (oneline) " " else "\n$Indent"
|
||||||
|
val postfix = if (oneline) " " else "\n"
|
||||||
|
return annotations.joinToString(prefix = prefix, separator = separator, postfix = postfix) {
|
||||||
|
it.asString()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//-------------------------------------------------------------------------//
|
//-------------------------------------------------------------------------//
|
||||||
|
|
||||||
private fun ProtoBuf.Annotation.asString(): String {
|
private fun ProtoBuf.Annotation.asString(): String {
|
||||||
val builder = StringBuilder("$Indent@${getName(id)}")
|
val builder = StringBuilder("@${getName(id)}")
|
||||||
argumentList.joinTo(builder, prefix = "(", postfix = ")") { it.value.asString() }
|
argumentList.joinTo(builder, prefix = "(", postfix = ")") { it.value.asString() }
|
||||||
return builder.toString()
|
return builder.toString()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user