add Initial support for comments in SIR #KT-65174 Fixed

Merge-request: KT-MR-14007
Merged-by: Artem Olkov <artem.olkov@jetbrains.com>
This commit is contained in:
Artem Olkov
2024-01-29 14:22:42 +00:00
committed by Space Team
parent bb6f466162
commit b317a88536
19 changed files with 151 additions and 12 deletions
@@ -23,6 +23,7 @@ abstract class SirFunction : SirElementBase(), SirCallable {
abstract val parameters: List<SirParameter>
abstract val returnType: SirType
abstract var body: SirFunctionBody?
abstract var documentation: String?
override fun <R, D> accept(visitor: SirVisitor<R, D>, data: D): R =
visitor.visitFunction(this, data)
@@ -23,6 +23,7 @@ class SirFunctionBuilder {
val parameters: MutableList<SirParameter> = mutableListOf()
lateinit var returnType: SirType
var body: SirFunctionBody? = null
var documentation: String? = null
fun build(): SirFunction {
return SirFunctionImpl(
@@ -33,6 +34,7 @@ class SirFunctionBuilder {
parameters,
returnType,
body,
documentation,
)
}
@@ -59,5 +61,6 @@ inline fun buildFunctionCopy(original: SirFunction, init: SirFunctionBuilder.()
copyBuilder.parameters.addAll(original.parameters)
copyBuilder.returnType = original.returnType
copyBuilder.body = original.body
copyBuilder.documentation = original.documentation
return copyBuilder.apply(init).build()
}
@@ -22,6 +22,7 @@ internal class SirFunctionImpl(
override val parameters: MutableList<SirParameter>,
override val returnType: SirType,
override var body: SirFunctionBody?,
override var documentation: String?,
) : SirFunction() {
override lateinit var parent: SirDeclarationParent
@@ -14,6 +14,7 @@ sealed interface SirKotlinOrigin : SirOrigin.Foreign {
get() = fqName.pathSegments().map { it.asString() }
interface Function : SirKotlinOrigin {
val documentation: Documentation?
val parameters: List<Parameter>
val returnType: Type
}
@@ -26,4 +27,8 @@ sealed interface SirKotlinOrigin : SirOrigin.Foreign {
interface Type {
val name: String
}
interface Documentation {
val content: String
}
}
@@ -7,11 +7,13 @@ package org.jetbrains.kotlin.sir.mock
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.sir.SirKotlinOrigin
import org.jetbrains.kotlin.sir.SirOrigin
data class MockFunction(
override val fqName: FqName,
override val parameters: List<SirKotlinOrigin.Parameter>,
override val returnType: SirKotlinOrigin.Type,
override val documentation: SirKotlinOrigin.Documentation? = null,
) : SirKotlinOrigin.Function
data class MockParameter(
@@ -22,3 +24,5 @@ data class MockParameter(
data class MockKotlinType(
override val name: String
) : SirKotlinOrigin.Type
data class MockDocumentation(override val content: String) : SirKotlinOrigin.Documentation
@@ -17,7 +17,7 @@ typealias Model = org.jetbrains.kotlin.generators.tree.Model<Element>
fun main(args: Array<String>) {
val generationPath = args.firstOrNull()?.let { File(it) }
?: File("../../tree/gen").canonicalFile
?: File("./native/swift/sir/gen/").canonicalFile
val model = SwiftIrTree.build()
generateTree(
generationPath,
@@ -87,6 +87,8 @@ object SwiftIrTree : AbstractSwiftIrTreeBuilder() {
+listField("parameters", parameterType)
+field("returnType", typeType)
+field("body", functionBodyType, nullable = true, mutable = true)
+field(name = "documentation", string, nullable = true, mutable = true)
}
val foreignFunction by element {
@@ -96,4 +98,4 @@ object SwiftIrTree : AbstractSwiftIrTreeBuilder() {
visitorParameterName = "function"
}
}
}