add export from kotlin into swift of simple documentation comment #KT-65913 fixed

Merge-request: KT-MR-14622
Merged-by: Artem Olkov <artem.olkov@jetbrains.com>
This commit is contained in:
Artem Olkov
2024-03-15 11:40:13 +00:00
committed by Space Team
parent 11c006d14c
commit eaa50fbf37
40 changed files with 276 additions and 19 deletions
@@ -149,6 +149,8 @@ internal fun buildSirClassFromPsi(classOrObject: KtClassOrObject): SirNamedDecla
) )
) )
documentation = classOrObject.docComment?.text
// HACK to support default constructors. // HACK to support default constructors.
// todo: We should rework builder from PSI to AnalysisApi during KT-66310 // todo: We should rework builder from PSI to AnalysisApi during KT-66310
val constructors = symbol.getMemberScope().getConstructors() val constructors = symbol.getMemberScope().getConstructors()
@@ -236,6 +238,8 @@ internal fun buildSirVariableFromPsi(variable: KtProperty): SirVariable = buildV
setter = if (variable.isVar) buildSetter { setter = if (variable.isVar) buildSetter {
kind = accessorKind kind = accessorKind
} else null } else null
documentation = variable.docComment?.text
}.also { }.also {
it.getter.parent = it it.getter.parent = it
it.setter?.parent = it it.setter?.parent = it
@@ -42,6 +42,7 @@ public class SirAsSwiftSourcesPrinter(private val printer: SmartPrinter) : SirVi
} }
override fun visitClass(klass: SirClass): Unit = with(printer) { override fun visitClass(klass: SirClass): Unit = with(printer) {
printDocumentation(klass)
printVisibility(klass) printVisibility(klass)
println( println(
"class ", "class ",
@@ -55,6 +56,7 @@ public class SirAsSwiftSourcesPrinter(private val printer: SmartPrinter) : SirVi
} }
override fun visitVariable(variable: SirVariable): Unit = with(printer) { override fun visitVariable(variable: SirVariable): Unit = with(printer) {
printDocumentation(variable)
printVisibility(variable) printVisibility(variable)
printCallableKind(variable.kind) printCallableKind(variable.kind)
print( print(
@@ -94,7 +96,7 @@ public class SirAsSwiftSourcesPrinter(private val printer: SmartPrinter) : SirVi
} }
override fun visitFunction(function: SirFunction): Unit = with(printer) { override fun visitFunction(function: SirFunction): Unit = with(printer) {
function.documentation?.let { println(it) } printDocumentation(function)
printVisibility(function) printVisibility(function)
printCallableKind(function.kind) printCallableKind(function.kind)
print( print(
@@ -118,7 +120,7 @@ public class SirAsSwiftSourcesPrinter(private val printer: SmartPrinter) : SirVi
} }
override fun visitInit(init: SirInit): Unit = with(printer) { override fun visitInit(init: SirInit): Unit = with(printer) {
init.documentation?.let { println(it) } printDocumentation(init)
printVisibility(init) printVisibility(init)
printInitKind(init.initKind) printInitKind(init.initKind)
print("init") print("init")
@@ -192,6 +194,10 @@ internal fun SmartPrinter.printVisibility(decl: SirDeclaration) {
) )
} }
internal fun SmartPrinter.printDocumentation(decl: SirDeclaration) {
decl.documentation?.lines()?.forEach { println(it.trimIndent()) }
}
internal fun SmartPrinter.printInitKind(decl: SirInitializerKind) { internal fun SmartPrinter.printInitKind(decl: SirInitializerKind) {
print( print(
when (decl) { when (decl) {
@@ -0,0 +1,6 @@
/// Function foo description.
/// - Parameters:
/// - p: first Integer to consume
/// - Returns: Bool
public class Foo {
}
@@ -0,0 +1,8 @@
public enum NAMESPACE {
/**
* demo comment for
* NAMESPACED_CLASS
*/
public class Foo {
}
}
@@ -0,0 +1,8 @@
/// Function foo description.
/// - Parameters:
/// - p: first Integer to consume
/// - Returns: Bool
public var myVariable: Swift.Bool {
get
}
@@ -270,7 +270,7 @@ class SirAsSwiftSourcesPrinterTests {
} }
@Test @Test
fun `should print DocC comment`() { fun `should print DocC comment on function`() {
val module = buildModule { val module = buildModule {
name = "Test" name = "Test"
@@ -303,6 +303,89 @@ class SirAsSwiftSourcesPrinterTests {
) )
} }
@Test
fun `should print DocC comment on class`() {
val module = buildModule {
name = "Test"
declarations.add(
buildClass {
origin = SirOrigin.Unknown
visibility = SirVisibility.PUBLIC
name = "Foo"
documentation = """
/// Function foo description.
/// - Parameters:
/// - p: first Integer to consume
/// - Returns: Bool
""".trimIndent()
}
)
}
runTest(
module,
"testData/commented_class"
)
}
@Test
fun `should print DocC comment on namespaced class`() {
val module = buildModule {
name = "Test"
declarations.add(
buildEnum {
name = "NAMESPACE"
declarations += buildClass {
origin = SirOrigin.Unknown
visibility = SirVisibility.PUBLIC
name = "Foo"
documentation = """
/**
* demo comment for
* NAMESPACED_CLASS
*/
""".trimIndent()
}
}
)
}
runTest(
module,
"testData/commented_namespaced_class"
)
}
@Test
fun `should print DocC comment on variable`() {
val module = buildModule {
name = "Test"
declarations.add(
buildVariable {
name = "myVariable"
type = SirNominalType(SirSwiftModule.bool)
getter = buildGetter {
kind = SirCallableKind.INSTANCE_METHOD
}
documentation = """
/// Function foo description.
/// - Parameters:
/// - p: first Integer to consume
/// - Returns: Bool
""".trimIndent()
}
)
}
runTest(
module,
"testData/commented_variable"
)
}
@Test @Test
fun `should print empty class`() { fun `should print empty class`() {
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor
sealed class SirAccessor : SirCallable() { sealed class SirAccessor : SirCallable() {
abstract override val origin: SirOrigin abstract override val origin: SirOrigin
abstract override val visibility: SirVisibility abstract override val visibility: SirVisibility
abstract override var documentation: String?
abstract override var parent: SirDeclarationParent abstract override var parent: SirDeclarationParent
abstract override val kind: SirCallableKind abstract override val kind: SirCallableKind
abstract override var body: SirFunctionBody? abstract override var body: SirFunctionBody?
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor
sealed class SirCallable : SirElementBase(), SirDeclaration { sealed class SirCallable : SirElementBase(), SirDeclaration {
abstract override val origin: SirOrigin abstract override val origin: SirOrigin
abstract override val visibility: SirVisibility abstract override val visibility: SirVisibility
abstract override var documentation: String?
abstract override var parent: SirDeclarationParent abstract override var parent: SirDeclarationParent
abstract val kind: SirCallableKind abstract val kind: SirCallableKind
abstract var body: SirFunctionBody? abstract var body: SirFunctionBody?
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor
abstract class SirClass : SirDeclarationContainer(), SirNamedDeclaration { abstract class SirClass : SirDeclarationContainer(), SirNamedDeclaration {
abstract override val origin: SirOrigin abstract override val origin: SirOrigin
abstract override val visibility: SirVisibility abstract override val visibility: SirVisibility
abstract override var documentation: String?
abstract override var parent: SirDeclarationParent abstract override var parent: SirDeclarationParent
abstract override val name: String abstract override val name: String
abstract override val declarations: List<SirDeclaration> abstract override val declarations: List<SirDeclaration>
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor
sealed interface SirDeclaration : SirElement { sealed interface SirDeclaration : SirElement {
val origin: SirOrigin val origin: SirOrigin
val visibility: SirVisibility val visibility: SirVisibility
var documentation: String?
var parent: SirDeclarationParent var parent: SirDeclarationParent
override fun <R, D> accept(visitor: SirVisitor<R, D>, data: D): R = override fun <R, D> accept(visitor: SirVisitor<R, D>, data: D): R =
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor
abstract class SirEnum : SirDeclarationContainer(), SirNamedDeclaration { abstract class SirEnum : SirDeclarationContainer(), SirNamedDeclaration {
abstract override val origin: SirOrigin abstract override val origin: SirOrigin
abstract override val visibility: SirVisibility abstract override val visibility: SirVisibility
abstract override var documentation: String?
abstract override var parent: SirDeclarationParent abstract override var parent: SirDeclarationParent
abstract override val name: String abstract override val name: String
abstract override val declarations: List<SirDeclaration> abstract override val declarations: List<SirDeclaration>
@@ -23,7 +23,7 @@ abstract class SirFunction : SirCallable() {
abstract val name: String abstract val name: String
abstract val parameters: List<SirParameter> abstract val parameters: List<SirParameter>
abstract val returnType: SirType abstract val returnType: SirType
abstract var documentation: String? abstract override var documentation: String?
override fun <R, D> accept(visitor: SirVisitor<R, D>, data: D): R = override fun <R, D> accept(visitor: SirVisitor<R, D>, data: D): R =
visitor.visitFunction(this, data) visitor.visitFunction(this, data)
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor
abstract class SirGetter : SirAccessor() { abstract class SirGetter : SirAccessor() {
abstract override val origin: SirOrigin abstract override val origin: SirOrigin
abstract override val visibility: SirVisibility abstract override val visibility: SirVisibility
abstract override var documentation: String?
abstract override var parent: SirDeclarationParent abstract override var parent: SirDeclarationParent
abstract override val kind: SirCallableKind abstract override val kind: SirCallableKind
abstract override var body: SirFunctionBody? abstract override var body: SirFunctionBody?
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor
abstract class SirImport : SirElementBase(), SirDeclaration { abstract class SirImport : SirElementBase(), SirDeclaration {
abstract override val origin: SirOrigin abstract override val origin: SirOrigin
abstract override val visibility: SirVisibility abstract override val visibility: SirVisibility
abstract override var documentation: String?
abstract override var parent: SirDeclarationParent abstract override var parent: SirDeclarationParent
abstract val moduleName: String abstract val moduleName: String
@@ -17,13 +17,13 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor
abstract class SirInit : SirCallable() { abstract class SirInit : SirCallable() {
abstract override val origin: SirOrigin abstract override val origin: SirOrigin
abstract override val visibility: SirVisibility abstract override val visibility: SirVisibility
abstract override var documentation: String?
abstract override var parent: SirDeclarationParent abstract override var parent: SirDeclarationParent
abstract override val kind: SirCallableKind abstract override val kind: SirCallableKind
abstract override var body: SirFunctionBody? abstract override var body: SirFunctionBody?
abstract val isFailable: Boolean abstract val isFailable: Boolean
abstract val parameters: List<SirParameter> abstract val parameters: List<SirParameter>
abstract val initKind: SirInitializerKind abstract val initKind: SirInitializerKind
abstract var documentation: String?
override fun <R, D> accept(visitor: SirVisitor<R, D>, data: D): R = override fun <R, D> accept(visitor: SirVisitor<R, D>, data: D): R =
visitor.visitInit(this, data) visitor.visitInit(this, data)
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor
sealed interface SirNamedDeclaration : SirDeclaration, SirNamed { sealed interface SirNamedDeclaration : SirDeclaration, SirNamed {
override val origin: SirOrigin override val origin: SirOrigin
override val visibility: SirVisibility override val visibility: SirVisibility
override var documentation: String?
override var parent: SirDeclarationParent override var parent: SirDeclarationParent
override val name: String override val name: String
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor
abstract class SirSetter : SirAccessor() { abstract class SirSetter : SirAccessor() {
abstract override val origin: SirOrigin abstract override val origin: SirOrigin
abstract override val visibility: SirVisibility abstract override val visibility: SirVisibility
abstract override var documentation: String?
abstract override var parent: SirDeclarationParent abstract override var parent: SirDeclarationParent
abstract override val kind: SirCallableKind abstract override val kind: SirCallableKind
abstract override var body: SirFunctionBody? abstract override var body: SirFunctionBody?
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor
abstract class SirStruct : SirDeclarationContainer(), SirNamedDeclaration { abstract class SirStruct : SirDeclarationContainer(), SirNamedDeclaration {
abstract override val origin: SirOrigin abstract override val origin: SirOrigin
abstract override val visibility: SirVisibility abstract override val visibility: SirVisibility
abstract override var documentation: String?
abstract override var parent: SirDeclarationParent abstract override var parent: SirDeclarationParent
abstract override val name: String abstract override val name: String
abstract override val declarations: List<SirDeclaration> abstract override val declarations: List<SirDeclaration>
@@ -22,6 +22,7 @@ abstract class SirVariable : SirDeclarationParent(), SirDeclaration {
abstract val type: SirType abstract val type: SirType
abstract val getter: SirGetter abstract val getter: SirGetter
abstract val setter: SirSetter? abstract val setter: SirSetter?
abstract override var documentation: String?
override fun <R, D> accept(visitor: SirVisitor<R, D>, data: D): R = override fun <R, D> accept(visitor: SirVisitor<R, D>, data: D): R =
visitor.visitVariable(this, data) visitor.visitVariable(this, data)
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.sir.impl.SirClassImpl
class SirClassBuilder { class SirClassBuilder {
var origin: SirOrigin = SirOrigin.Unknown var origin: SirOrigin = SirOrigin.Unknown
var visibility: SirVisibility = SirVisibility.PUBLIC var visibility: SirVisibility = SirVisibility.PUBLIC
var documentation: String? = null
lateinit var name: String lateinit var name: String
val declarations: MutableList<SirDeclaration> = mutableListOf() val declarations: MutableList<SirDeclaration> = mutableListOf()
@@ -25,10 +26,12 @@ class SirClassBuilder {
return SirClassImpl( return SirClassImpl(
origin, origin,
visibility, visibility,
documentation,
name, name,
declarations, declarations,
) )
} }
} }
@OptIn(ExperimentalContracts::class) @OptIn(ExperimentalContracts::class)
@@ -47,6 +50,7 @@ inline fun buildClassCopy(original: SirClass, init: SirClassBuilder.() -> Unit):
val copyBuilder = SirClassBuilder() val copyBuilder = SirClassBuilder()
copyBuilder.origin = original.origin copyBuilder.origin = original.origin
copyBuilder.visibility = original.visibility copyBuilder.visibility = original.visibility
copyBuilder.documentation = original.documentation
copyBuilder.name = original.name copyBuilder.name = original.name
copyBuilder.declarations.addAll(original.declarations) copyBuilder.declarations.addAll(original.declarations)
return copyBuilder.apply(init).build() return copyBuilder.apply(init).build()
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.sir.impl.SirEnumImpl
class SirEnumBuilder { class SirEnumBuilder {
var origin: SirOrigin = SirOrigin.Unknown var origin: SirOrigin = SirOrigin.Unknown
var visibility: SirVisibility = SirVisibility.PUBLIC var visibility: SirVisibility = SirVisibility.PUBLIC
var documentation: String? = null
lateinit var name: String lateinit var name: String
val declarations: MutableList<SirDeclaration> = mutableListOf() val declarations: MutableList<SirDeclaration> = mutableListOf()
val cases: MutableList<SirEnumCase> = mutableListOf() val cases: MutableList<SirEnumCase> = mutableListOf()
@@ -26,11 +27,13 @@ class SirEnumBuilder {
return SirEnumImpl( return SirEnumImpl(
origin, origin,
visibility, visibility,
documentation,
name, name,
declarations, declarations,
cases, cases,
) )
} }
} }
@OptIn(ExperimentalContracts::class) @OptIn(ExperimentalContracts::class)
@@ -49,6 +52,7 @@ inline fun buildEnumCopy(original: SirEnum, init: SirEnumBuilder.() -> Unit): Si
val copyBuilder = SirEnumBuilder() val copyBuilder = SirEnumBuilder()
copyBuilder.origin = original.origin copyBuilder.origin = original.origin
copyBuilder.visibility = original.visibility copyBuilder.visibility = original.visibility
copyBuilder.documentation = original.documentation
copyBuilder.name = original.name copyBuilder.name = original.name
copyBuilder.declarations.addAll(original.declarations) copyBuilder.declarations.addAll(original.declarations)
copyBuilder.cases.addAll(original.cases) copyBuilder.cases.addAll(original.cases)
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.sir.impl.SirGetterImpl
class SirGetterBuilder { class SirGetterBuilder {
var origin: SirOrigin = SirOrigin.Unknown var origin: SirOrigin = SirOrigin.Unknown
var visibility: SirVisibility = SirVisibility.PUBLIC var visibility: SirVisibility = SirVisibility.PUBLIC
var documentation: String? = null
lateinit var kind: SirCallableKind lateinit var kind: SirCallableKind
var body: SirFunctionBody? = null var body: SirFunctionBody? = null
@@ -25,6 +26,7 @@ class SirGetterBuilder {
return SirGetterImpl( return SirGetterImpl(
origin, origin,
visibility, visibility,
documentation,
kind, kind,
body, body,
) )
@@ -48,6 +50,7 @@ inline fun buildGetterCopy(original: SirGetter, init: SirGetterBuilder.() -> Uni
val copyBuilder = SirGetterBuilder() val copyBuilder = SirGetterBuilder()
copyBuilder.origin = original.origin copyBuilder.origin = original.origin
copyBuilder.visibility = original.visibility copyBuilder.visibility = original.visibility
copyBuilder.documentation = original.documentation
copyBuilder.kind = original.kind copyBuilder.kind = original.kind
copyBuilder.body = original.body copyBuilder.body = original.body
return copyBuilder.apply(init).build() return copyBuilder.apply(init).build()
@@ -21,15 +21,18 @@ import org.jetbrains.kotlin.sir.impl.SirImportImpl
class SirImportBuilder { class SirImportBuilder {
var origin: SirOrigin = SirOrigin.Unknown var origin: SirOrigin = SirOrigin.Unknown
var visibility: SirVisibility = SirVisibility.PUBLIC var visibility: SirVisibility = SirVisibility.PUBLIC
var documentation: String? = null
lateinit var moduleName: String lateinit var moduleName: String
fun build(): SirImport { fun build(): SirImport {
return SirImportImpl( return SirImportImpl(
origin, origin,
visibility, visibility,
documentation,
moduleName, moduleName,
) )
} }
} }
@OptIn(ExperimentalContracts::class) @OptIn(ExperimentalContracts::class)
@@ -48,6 +51,7 @@ inline fun buildImportCopy(original: SirImport, init: SirImportBuilder.() -> Uni
val copyBuilder = SirImportBuilder() val copyBuilder = SirImportBuilder()
copyBuilder.origin = original.origin copyBuilder.origin = original.origin
copyBuilder.visibility = original.visibility copyBuilder.visibility = original.visibility
copyBuilder.documentation = original.documentation
copyBuilder.moduleName = original.moduleName copyBuilder.moduleName = original.moduleName
return copyBuilder.apply(init).build() return copyBuilder.apply(init).build()
} }
@@ -18,23 +18,23 @@ import org.jetbrains.kotlin.sir.impl.SirInitImpl
class SirInitBuilder { class SirInitBuilder {
var origin: SirOrigin = SirOrigin.Unknown var origin: SirOrigin = SirOrigin.Unknown
var visibility: SirVisibility = SirVisibility.PUBLIC var visibility: SirVisibility = SirVisibility.PUBLIC
var documentation: String? = null
lateinit var kind: SirCallableKind lateinit var kind: SirCallableKind
var body: SirFunctionBody? = null var body: SirFunctionBody? = null
var isFailable: Boolean by kotlin.properties.Delegates.notNull<Boolean>() var isFailable: Boolean by kotlin.properties.Delegates.notNull<Boolean>()
val parameters: MutableList<SirParameter> = mutableListOf() val parameters: MutableList<SirParameter> = mutableListOf()
lateinit var initKind: SirInitializerKind lateinit var initKind: SirInitializerKind
var documentation: String? = null
fun build(): SirInit { fun build(): SirInit {
return SirInitImpl( return SirInitImpl(
origin, origin,
visibility, visibility,
documentation,
kind, kind,
body, body,
isFailable, isFailable,
parameters, parameters,
initKind, initKind,
documentation,
) )
} }
@@ -56,11 +56,11 @@ inline fun buildInitCopy(original: SirInit, init: SirInitBuilder.() -> Unit): Si
val copyBuilder = SirInitBuilder() val copyBuilder = SirInitBuilder()
copyBuilder.origin = original.origin copyBuilder.origin = original.origin
copyBuilder.visibility = original.visibility copyBuilder.visibility = original.visibility
copyBuilder.documentation = original.documentation
copyBuilder.kind = original.kind copyBuilder.kind = original.kind
copyBuilder.body = original.body copyBuilder.body = original.body
copyBuilder.isFailable = original.isFailable copyBuilder.isFailable = original.isFailable
copyBuilder.parameters.addAll(original.parameters) copyBuilder.parameters.addAll(original.parameters)
copyBuilder.initKind = original.initKind copyBuilder.initKind = original.initKind
copyBuilder.documentation = original.documentation
return copyBuilder.apply(init).build() return copyBuilder.apply(init).build()
} }
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.sir.impl.SirSetterImpl
class SirSetterBuilder { class SirSetterBuilder {
var origin: SirOrigin = SirOrigin.Unknown var origin: SirOrigin = SirOrigin.Unknown
var visibility: SirVisibility = SirVisibility.PUBLIC var visibility: SirVisibility = SirVisibility.PUBLIC
var documentation: String? = null
lateinit var kind: SirCallableKind lateinit var kind: SirCallableKind
var body: SirFunctionBody? = null var body: SirFunctionBody? = null
var parameterName: String = "newValue" var parameterName: String = "newValue"
@@ -26,6 +27,7 @@ class SirSetterBuilder {
return SirSetterImpl( return SirSetterImpl(
origin, origin,
visibility, visibility,
documentation,
kind, kind,
body, body,
parameterName, parameterName,
@@ -50,6 +52,7 @@ inline fun buildSetterCopy(original: SirSetter, init: SirSetterBuilder.() -> Uni
val copyBuilder = SirSetterBuilder() val copyBuilder = SirSetterBuilder()
copyBuilder.origin = original.origin copyBuilder.origin = original.origin
copyBuilder.visibility = original.visibility copyBuilder.visibility = original.visibility
copyBuilder.documentation = original.documentation
copyBuilder.kind = original.kind copyBuilder.kind = original.kind
copyBuilder.body = original.body copyBuilder.body = original.body
copyBuilder.parameterName = original.parameterName copyBuilder.parameterName = original.parameterName
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.sir.impl.SirStructImpl
class SirStructBuilder { class SirStructBuilder {
var origin: SirOrigin = SirOrigin.Unknown var origin: SirOrigin = SirOrigin.Unknown
var visibility: SirVisibility = SirVisibility.PUBLIC var visibility: SirVisibility = SirVisibility.PUBLIC
var documentation: String? = null
lateinit var name: String lateinit var name: String
val declarations: MutableList<SirDeclaration> = mutableListOf() val declarations: MutableList<SirDeclaration> = mutableListOf()
@@ -25,10 +26,12 @@ class SirStructBuilder {
return SirStructImpl( return SirStructImpl(
origin, origin,
visibility, visibility,
documentation,
name, name,
declarations, declarations,
) )
} }
} }
@OptIn(ExperimentalContracts::class) @OptIn(ExperimentalContracts::class)
@@ -47,6 +50,7 @@ inline fun buildStructCopy(original: SirStruct, init: SirStructBuilder.() -> Uni
val copyBuilder = SirStructBuilder() val copyBuilder = SirStructBuilder()
copyBuilder.origin = original.origin copyBuilder.origin = original.origin
copyBuilder.visibility = original.visibility copyBuilder.visibility = original.visibility
copyBuilder.documentation = original.documentation
copyBuilder.name = original.name copyBuilder.name = original.name
copyBuilder.declarations.addAll(original.declarations) copyBuilder.declarations.addAll(original.declarations)
return copyBuilder.apply(init).build() return copyBuilder.apply(init).build()
@@ -22,6 +22,7 @@ class SirVariableBuilder {
lateinit var type: SirType lateinit var type: SirType
lateinit var getter: SirGetter lateinit var getter: SirGetter
var setter: SirSetter? = null var setter: SirSetter? = null
var documentation: String? = null
fun build(): SirVariable { fun build(): SirVariable {
return SirVariableImpl( return SirVariableImpl(
@@ -31,6 +32,7 @@ class SirVariableBuilder {
type, type,
getter, getter,
setter, setter,
documentation,
) )
} }
@@ -56,5 +58,6 @@ inline fun buildVariableCopy(original: SirVariable, init: SirVariableBuilder.()
copyBuilder.type = original.type copyBuilder.type = original.type
copyBuilder.getter = original.getter copyBuilder.getter = original.getter
copyBuilder.setter = original.setter copyBuilder.setter = original.setter
copyBuilder.documentation = original.documentation
return copyBuilder.apply(init).build() return copyBuilder.apply(init).build()
} }
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor
internal class SirClassImpl( internal class SirClassImpl(
override val origin: SirOrigin, override val origin: SirOrigin,
override val visibility: SirVisibility, override val visibility: SirVisibility,
override var documentation: String?,
override val name: String, override val name: String,
override val declarations: MutableList<SirDeclaration>, override val declarations: MutableList<SirDeclaration>,
) : SirClass() { ) : SirClass() {
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor
internal class SirEnumImpl( internal class SirEnumImpl(
override val origin: SirOrigin, override val origin: SirOrigin,
override val visibility: SirVisibility, override val visibility: SirVisibility,
override var documentation: String?,
override val name: String, override val name: String,
override val declarations: MutableList<SirDeclaration>, override val declarations: MutableList<SirDeclaration>,
override val cases: MutableList<SirEnumCase>, override val cases: MutableList<SirEnumCase>,
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor
internal class SirGetterImpl( internal class SirGetterImpl(
override val origin: SirOrigin, override val origin: SirOrigin,
override val visibility: SirVisibility, override val visibility: SirVisibility,
override var documentation: String?,
override val kind: SirCallableKind, override val kind: SirCallableKind,
override var body: SirFunctionBody?, override var body: SirFunctionBody?,
) : SirGetter() { ) : SirGetter() {
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor
internal class SirImportImpl( internal class SirImportImpl(
override val origin: SirOrigin, override val origin: SirOrigin,
override val visibility: SirVisibility, override val visibility: SirVisibility,
override var documentation: String?,
override val moduleName: String, override val moduleName: String,
) : SirImport() { ) : SirImport() {
override lateinit var parent: SirDeclarationParent override lateinit var parent: SirDeclarationParent
@@ -17,12 +17,12 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor
internal class SirInitImpl( internal class SirInitImpl(
override val origin: SirOrigin, override val origin: SirOrigin,
override val visibility: SirVisibility, override val visibility: SirVisibility,
override var documentation: String?,
override val kind: SirCallableKind, override val kind: SirCallableKind,
override var body: SirFunctionBody?, override var body: SirFunctionBody?,
override val isFailable: Boolean, override val isFailable: Boolean,
override val parameters: MutableList<SirParameter>, override val parameters: MutableList<SirParameter>,
override val initKind: SirInitializerKind, override val initKind: SirInitializerKind,
override var documentation: String?,
) : SirInit() { ) : SirInit() {
override lateinit var parent: SirDeclarationParent override lateinit var parent: SirDeclarationParent
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor
internal class SirSetterImpl( internal class SirSetterImpl(
override val origin: SirOrigin, override val origin: SirOrigin,
override val visibility: SirVisibility, override val visibility: SirVisibility,
override var documentation: String?,
override val kind: SirCallableKind, override val kind: SirCallableKind,
override var body: SirFunctionBody?, override var body: SirFunctionBody?,
override val parameterName: String, override val parameterName: String,
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor
internal class SirStructImpl( internal class SirStructImpl(
override val origin: SirOrigin, override val origin: SirOrigin,
override val visibility: SirVisibility, override val visibility: SirVisibility,
override var documentation: String?,
override val name: String, override val name: String,
override val declarations: MutableList<SirDeclaration>, override val declarations: MutableList<SirDeclaration>,
) : SirStruct() { ) : SirStruct() {
@@ -21,6 +21,7 @@ internal class SirVariableImpl(
override val type: SirType, override val type: SirType,
override val getter: SirGetter, override val getter: SirGetter,
override val setter: SirSetter?, override val setter: SirSetter?,
override var documentation: String?,
) : SirVariable() { ) : SirVariable() {
override lateinit var parent: SirDeclarationParent override lateinit var parent: SirDeclarationParent
@@ -37,6 +37,7 @@ object SwiftIrTree : AbstractSwiftIrTreeBuilder() {
customParentInVisitor = rootElement customParentInVisitor = rootElement
+field("origin", originType) +field("origin", originType)
+field("visibility", swiftVisibilityType) +field("visibility", swiftVisibilityType)
+field(name = "documentation", string, nullable = true, mutable = true)
+field("parent", declarationParent, mutable = true, isChild = false) { +field("parent", declarationParent, mutable = true, isChild = false) {
useInBaseTransformerDetection = false useInBaseTransformerDetection = false
} }
@@ -89,8 +90,6 @@ object SwiftIrTree : AbstractSwiftIrTreeBuilder() {
+listField("parameters", parameterType) +listField("parameters", parameterType)
+field("initKind", initKind) +field("initKind", initKind)
+field(name = "documentation", string, nullable = true, mutable = true)
} }
val function by element { val function by element {
@@ -129,6 +128,8 @@ object SwiftIrTree : AbstractSwiftIrTreeBuilder() {
+field("getter", getter) +field("getter", getter)
+field("setter", setter, nullable = true) +field("setter", setter, nullable = true)
+field(name = "documentation", string, nullable = true, mutable = true)
} }
val import by element { val import by element {
@@ -72,6 +72,10 @@ public enum namespace {
} }
} }
} }
/**
* demo comment for
* NAMESPACED_CLASS
*/
public class NAMESPACED_CLASS { public class NAMESPACED_CLASS {
public init() { public init() {
fatalError() fatalError()
@@ -81,19 +85,31 @@ public enum namespace {
public init() { public init() {
fatalError() fatalError()
} }
/**
* this is a sample comment for INSIDE_CLASS with package
*/
public class INSIDE_CLASS { public class INSIDE_CLASS {
public init() { public init() {
fatalError() fatalError()
} }
} }
/**
* this is a sample comment for func on class with package
*/
public func foo() -> Swift.Bool { public func foo() -> Swift.Bool {
fatalError() fatalError()
} }
/**
* this is a sample comment for val on class with package
*/
public var my_value: Swift.UInt32 { public var my_value: Swift.UInt32 {
get { get {
fatalError() fatalError()
} }
} }
/**
* this is a sample comment for var on class with package
*/
public var my_variable: Swift.Int64 { public var my_variable: Swift.Int64 {
get { get {
fatalError() fatalError()
@@ -105,32 +121,55 @@ public enum namespace {
} }
} }
/**
* this is a sample comment for class without public constructor
*/
public class ClassWithNonPublicConstructor { public class ClassWithNonPublicConstructor {
} }
/**
* this is a sample comment for class without package
* in order to support documentation for primary constructor - we will have to start parsing comment content:
* https://kotlinlang.org/docs/kotlin-doc.html#constructor
*/
public class Foo { public class Foo {
public init( public init(
a: Swift.Int32 a: Swift.Int32
) { ) {
fatalError() fatalError()
} }
/**
* this is a sample comment for secondary constructor
*/
public init( public init(
f: Swift.Float f: Swift.Float
) { ) {
fatalError() fatalError()
} }
/**
* this is a sample comment for INSIDE_CLASS without package
*/
public class INSIDE_CLASS { public class INSIDE_CLASS {
public init() { public init() {
fatalError() fatalError()
} }
/**
* this is a sample comment for func on INSIDE_CLASS without package
*/
public func my_func() -> Swift.Bool { public func my_func() -> Swift.Bool {
fatalError() fatalError()
} }
/**
* this is a sample comment for val on INSIDE_CLASS without package
*/
public var my_value_inner: Swift.UInt32 { public var my_value_inner: Swift.UInt32 {
get { get {
fatalError() fatalError()
} }
} }
/**
* this is a sample comment for var on INSIDE_CLASS without package
*/
public var my_variable_inner: Swift.Int64 { public var my_variable_inner: Swift.Int64 {
get { get {
fatalError() fatalError()
@@ -140,14 +179,23 @@ public class Foo {
} }
} }
} }
/**
* this is a sample comment for func on class without package
*/
public func foo() -> Swift.Bool { public func foo() -> Swift.Bool {
fatalError() fatalError()
} }
/**
* this is a sample comment for val on class without package
*/
public var my_value: Swift.UInt32 { public var my_value: Swift.UInt32 {
get { get {
fatalError() fatalError()
} }
} }
/**
* this is a sample comment for var on class without package
*/
public var my_variable: Swift.Int64 { public var my_variable: Swift.Int64 {
get { get {
fatalError() fatalError()
@@ -1,14 +1,29 @@
package namespace package namespace
/**
* demo comment for
* NAMESPACED_CLASS
*/
class NAMESPACED_CLASS class NAMESPACED_CLASS
class Foo { class Foo {
/**
* this is a sample comment for INSIDE_CLASS with package
*/
class INSIDE_CLASS class INSIDE_CLASS
/**
* this is a sample comment for func on class with package
*/
fun foo(): Boolean = TODO() fun foo(): Boolean = TODO()
/**
* this is a sample comment for val on class with package
*/
val my_value: UInt = 5u val my_value: UInt = 5u
/**
* this is a sample comment for var on class with package
*/
var my_variable: Long = 5 var my_variable: Long = 5
} }
@@ -1,20 +1,55 @@
/**
* this is a sample comment for class without public constructor
*/
public class ClassWithNonPublicConstructor internal constructor(public val a: Int) public class ClassWithNonPublicConstructor internal constructor(public val a: Int)
/**
* this is a sample comment for class without package
* in order to support documentation for primary constructor - we will have to start parsing comment content:
* https://kotlinlang.org/docs/kotlin-doc.html#constructor
*/
class Foo (a: Int) { class Foo (a: Int) {
/**
* this is a sample comment for secondary constructor
*/
constructor(f: Float) : this(f.toInt()) constructor(f: Float) : this(f.toInt())
/**
* this is a sample comment for private constructor
*/
private constructor(d: Double) : this(d.toInt()) private constructor(d: Double) : this(d.toInt())
/**
* this is a sample comment for INSIDE_CLASS without package
*/
class INSIDE_CLASS { class INSIDE_CLASS {
/**
* this is a sample comment for func on INSIDE_CLASS without package
*/
fun my_func(): Boolean = TODO() fun my_func(): Boolean = TODO()
/**
* this is a sample comment for val on INSIDE_CLASS without package
*/
val my_value_inner: UInt = 5u val my_value_inner: UInt = 5u
/**
* this is a sample comment for var on INSIDE_CLASS without package
*/
var my_variable_inner: Long = 5 var my_variable_inner: Long = 5
} }
/**
* this is a sample comment for func on class without package
*/
fun foo(): Boolean = TODO() fun foo(): Boolean = TODO()
/**
* this is a sample comment for val on class without package
*/
val my_value: UInt = 5u val my_value: UInt = 5u
/**
* this is a sample comment for var on class without package
*/
var my_variable: Long = 5 var my_variable: Long = 5
} }
@@ -2,12 +2,12 @@ import KotlinBridges
import KotlinRuntime import KotlinRuntime
/** /**
* Function foo description * Function foo description
* *
* @param p first Integer to consume * @param p first Integer to consume
* @param p2 second Double to consume * @param p2 second Double to consume
* @return Short, constant 1 * @return Short, constant 1
*/ */
public func foo( public func foo(
p: Swift.Int32, p: Swift.Int32,
p2: Swift.Double p2: Swift.Double