diff --git a/native/swift/sir-passes/src/org/jetbrains/sir/passes/builder/SirFromPsiBuilder.kt b/native/swift/sir-passes/src/org/jetbrains/sir/passes/builder/SirFromPsiBuilder.kt index b71ceb80eaa..413ee3f423c 100644 --- a/native/swift/sir-passes/src/org/jetbrains/sir/passes/builder/SirFromPsiBuilder.kt +++ b/native/swift/sir-passes/src/org/jetbrains/sir/passes/builder/SirFromPsiBuilder.kt @@ -149,6 +149,8 @@ internal fun buildSirClassFromPsi(classOrObject: KtClassOrObject): SirNamedDecla ) ) + documentation = classOrObject.docComment?.text + // HACK to support default constructors. // todo: We should rework builder from PSI to AnalysisApi during KT-66310 val constructors = symbol.getMemberScope().getConstructors() @@ -236,6 +238,8 @@ internal fun buildSirVariableFromPsi(variable: KtProperty): SirVariable = buildV setter = if (variable.isVar) buildSetter { kind = accessorKind } else null + + documentation = variable.docComment?.text }.also { it.getter.parent = it it.setter?.parent = it diff --git a/native/swift/sir-printer/src/org/jetbrains/sir/printer/SirAsSwiftSourcesPrinter.kt b/native/swift/sir-printer/src/org/jetbrains/sir/printer/SirAsSwiftSourcesPrinter.kt index 5d44522b7f1..d6919999a61 100644 --- a/native/swift/sir-printer/src/org/jetbrains/sir/printer/SirAsSwiftSourcesPrinter.kt +++ b/native/swift/sir-printer/src/org/jetbrains/sir/printer/SirAsSwiftSourcesPrinter.kt @@ -42,6 +42,7 @@ public class SirAsSwiftSourcesPrinter(private val printer: SmartPrinter) : SirVi } override fun visitClass(klass: SirClass): Unit = with(printer) { + printDocumentation(klass) printVisibility(klass) println( "class ", @@ -55,6 +56,7 @@ public class SirAsSwiftSourcesPrinter(private val printer: SmartPrinter) : SirVi } override fun visitVariable(variable: SirVariable): Unit = with(printer) { + printDocumentation(variable) printVisibility(variable) printCallableKind(variable.kind) print( @@ -94,7 +96,7 @@ public class SirAsSwiftSourcesPrinter(private val printer: SmartPrinter) : SirVi } override fun visitFunction(function: SirFunction): Unit = with(printer) { - function.documentation?.let { println(it) } + printDocumentation(function) printVisibility(function) printCallableKind(function.kind) print( @@ -118,7 +120,7 @@ public class SirAsSwiftSourcesPrinter(private val printer: SmartPrinter) : SirVi } override fun visitInit(init: SirInit): Unit = with(printer) { - init.documentation?.let { println(it) } + printDocumentation(init) printVisibility(init) printInitKind(init.initKind) 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) { print( when (decl) { diff --git a/native/swift/sir-printer/testData/commented_class.golden.swift b/native/swift/sir-printer/testData/commented_class.golden.swift new file mode 100644 index 00000000000..bcd7fb4313b --- /dev/null +++ b/native/swift/sir-printer/testData/commented_class.golden.swift @@ -0,0 +1,6 @@ +/// Function foo description. +/// - Parameters: +/// - p: first Integer to consume +/// - Returns: Bool +public class Foo { +} \ No newline at end of file diff --git a/native/swift/sir-printer/testData/commented_namespaced_class.golden.swift b/native/swift/sir-printer/testData/commented_namespaced_class.golden.swift new file mode 100644 index 00000000000..50600ab4832 --- /dev/null +++ b/native/swift/sir-printer/testData/commented_namespaced_class.golden.swift @@ -0,0 +1,8 @@ +public enum NAMESPACE { + /** + * demo comment for + * NAMESPACED_CLASS + */ + public class Foo { + } +} \ No newline at end of file diff --git a/native/swift/sir-printer/testData/commented_variable.golden.swift b/native/swift/sir-printer/testData/commented_variable.golden.swift new file mode 100644 index 00000000000..c8f115b33e0 --- /dev/null +++ b/native/swift/sir-printer/testData/commented_variable.golden.swift @@ -0,0 +1,8 @@ + +/// Function foo description. +/// - Parameters: +/// - p: first Integer to consume +/// - Returns: Bool +public var myVariable: Swift.Bool { + get +} \ No newline at end of file diff --git a/native/swift/sir-printer/tests/org/jetbrains/kotlin/sir/printer/SirAsSwiftSourcesPrinterTests.kt b/native/swift/sir-printer/tests/org/jetbrains/kotlin/sir/printer/SirAsSwiftSourcesPrinterTests.kt index d6fec34c5a5..233681f46cc 100644 --- a/native/swift/sir-printer/tests/org/jetbrains/kotlin/sir/printer/SirAsSwiftSourcesPrinterTests.kt +++ b/native/swift/sir-printer/tests/org/jetbrains/kotlin/sir/printer/SirAsSwiftSourcesPrinterTests.kt @@ -270,7 +270,7 @@ class SirAsSwiftSourcesPrinterTests { } @Test - fun `should print DocC comment`() { + fun `should print DocC comment on function`() { val module = buildModule { 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 fun `should print empty class`() { diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirAccessor.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirAccessor.kt index fa5f5a815e4..4d79a0931a9 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirAccessor.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirAccessor.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor sealed class SirAccessor : SirCallable() { abstract override val origin: SirOrigin abstract override val visibility: SirVisibility + abstract override var documentation: String? abstract override var parent: SirDeclarationParent abstract override val kind: SirCallableKind abstract override var body: SirFunctionBody? diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirCallable.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirCallable.kt index 650596acb14..d505633a5ec 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirCallable.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirCallable.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor sealed class SirCallable : SirElementBase(), SirDeclaration { abstract override val origin: SirOrigin abstract override val visibility: SirVisibility + abstract override var documentation: String? abstract override var parent: SirDeclarationParent abstract val kind: SirCallableKind abstract var body: SirFunctionBody? diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirClass.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirClass.kt index 6e3813fb5f4..69ef3fa7820 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirClass.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirClass.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor abstract class SirClass : SirDeclarationContainer(), SirNamedDeclaration { abstract override val origin: SirOrigin abstract override val visibility: SirVisibility + abstract override var documentation: String? abstract override var parent: SirDeclarationParent abstract override val name: String abstract override val declarations: List diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirDeclaration.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirDeclaration.kt index 57d7822e6bd..81a405eba8b 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirDeclaration.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirDeclaration.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor sealed interface SirDeclaration : SirElement { val origin: SirOrigin val visibility: SirVisibility + var documentation: String? var parent: SirDeclarationParent override fun accept(visitor: SirVisitor, data: D): R = diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirEnum.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirEnum.kt index 9498c22d58a..1585db3a4c6 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirEnum.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirEnum.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor abstract class SirEnum : SirDeclarationContainer(), SirNamedDeclaration { abstract override val origin: SirOrigin abstract override val visibility: SirVisibility + abstract override var documentation: String? abstract override var parent: SirDeclarationParent abstract override val name: String abstract override val declarations: List diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirFunction.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirFunction.kt index f05865d2e34..7bdd4c928db 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirFunction.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirFunction.kt @@ -23,7 +23,7 @@ abstract class SirFunction : SirCallable() { abstract val name: String abstract val parameters: List abstract val returnType: SirType - abstract var documentation: String? + abstract override var documentation: String? override fun accept(visitor: SirVisitor, data: D): R = visitor.visitFunction(this, data) diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirGetter.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirGetter.kt index 8076da2f7ff..e8a81bac688 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirGetter.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirGetter.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor abstract class SirGetter : SirAccessor() { abstract override val origin: SirOrigin abstract override val visibility: SirVisibility + abstract override var documentation: String? abstract override var parent: SirDeclarationParent abstract override val kind: SirCallableKind abstract override var body: SirFunctionBody? diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirImport.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirImport.kt index 663668ba6b3..41fca46ec8e 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirImport.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirImport.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor abstract class SirImport : SirElementBase(), SirDeclaration { abstract override val origin: SirOrigin abstract override val visibility: SirVisibility + abstract override var documentation: String? abstract override var parent: SirDeclarationParent abstract val moduleName: String diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirInit.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirInit.kt index 1a073727c70..819a53c27a6 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirInit.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirInit.kt @@ -17,13 +17,13 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor abstract class SirInit : SirCallable() { abstract override val origin: SirOrigin abstract override val visibility: SirVisibility + abstract override var documentation: String? abstract override var parent: SirDeclarationParent abstract override val kind: SirCallableKind abstract override var body: SirFunctionBody? abstract val isFailable: Boolean abstract val parameters: List abstract val initKind: SirInitializerKind - abstract var documentation: String? override fun accept(visitor: SirVisitor, data: D): R = visitor.visitInit(this, data) diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirNamedDeclaration.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirNamedDeclaration.kt index c70b4254738..9898c3f86d1 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirNamedDeclaration.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirNamedDeclaration.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor sealed interface SirNamedDeclaration : SirDeclaration, SirNamed { override val origin: SirOrigin override val visibility: SirVisibility + override var documentation: String? override var parent: SirDeclarationParent override val name: String diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirSetter.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirSetter.kt index f9734ac89d7..9877fa76c43 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirSetter.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirSetter.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor abstract class SirSetter : SirAccessor() { abstract override val origin: SirOrigin abstract override val visibility: SirVisibility + abstract override var documentation: String? abstract override var parent: SirDeclarationParent abstract override val kind: SirCallableKind abstract override var body: SirFunctionBody? diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirStruct.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirStruct.kt index ae4d76aafc5..492f2e1e4b0 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirStruct.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirStruct.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor abstract class SirStruct : SirDeclarationContainer(), SirNamedDeclaration { abstract override val origin: SirOrigin abstract override val visibility: SirVisibility + abstract override var documentation: String? abstract override var parent: SirDeclarationParent abstract override val name: String abstract override val declarations: List diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirVariable.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirVariable.kt index 6018e262024..4e01ebfe5b7 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirVariable.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirVariable.kt @@ -22,6 +22,7 @@ abstract class SirVariable : SirDeclarationParent(), SirDeclaration { abstract val type: SirType abstract val getter: SirGetter abstract val setter: SirSetter? + abstract override var documentation: String? override fun accept(visitor: SirVisitor, data: D): R = visitor.visitVariable(this, data) diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirClassBuilder.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirClassBuilder.kt index 9b19332889b..6a6d0f2cd7b 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirClassBuilder.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirClassBuilder.kt @@ -18,6 +18,7 @@ import org.jetbrains.kotlin.sir.impl.SirClassImpl class SirClassBuilder { var origin: SirOrigin = SirOrigin.Unknown var visibility: SirVisibility = SirVisibility.PUBLIC + var documentation: String? = null lateinit var name: String val declarations: MutableList = mutableListOf() @@ -25,10 +26,12 @@ class SirClassBuilder { return SirClassImpl( origin, visibility, + documentation, name, declarations, ) } + } @OptIn(ExperimentalContracts::class) @@ -47,6 +50,7 @@ inline fun buildClassCopy(original: SirClass, init: SirClassBuilder.() -> Unit): val copyBuilder = SirClassBuilder() copyBuilder.origin = original.origin copyBuilder.visibility = original.visibility + copyBuilder.documentation = original.documentation copyBuilder.name = original.name copyBuilder.declarations.addAll(original.declarations) return copyBuilder.apply(init).build() diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirEnumBuilder.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirEnumBuilder.kt index e2547bf4180..2a83ba6fdfd 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirEnumBuilder.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirEnumBuilder.kt @@ -18,6 +18,7 @@ import org.jetbrains.kotlin.sir.impl.SirEnumImpl class SirEnumBuilder { var origin: SirOrigin = SirOrigin.Unknown var visibility: SirVisibility = SirVisibility.PUBLIC + var documentation: String? = null lateinit var name: String val declarations: MutableList = mutableListOf() val cases: MutableList = mutableListOf() @@ -26,11 +27,13 @@ class SirEnumBuilder { return SirEnumImpl( origin, visibility, + documentation, name, declarations, cases, ) } + } @OptIn(ExperimentalContracts::class) @@ -49,6 +52,7 @@ inline fun buildEnumCopy(original: SirEnum, init: SirEnumBuilder.() -> Unit): Si val copyBuilder = SirEnumBuilder() copyBuilder.origin = original.origin copyBuilder.visibility = original.visibility + copyBuilder.documentation = original.documentation copyBuilder.name = original.name copyBuilder.declarations.addAll(original.declarations) copyBuilder.cases.addAll(original.cases) diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirGetterBuilder.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirGetterBuilder.kt index 3466902558a..f38fe826438 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirGetterBuilder.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirGetterBuilder.kt @@ -18,6 +18,7 @@ import org.jetbrains.kotlin.sir.impl.SirGetterImpl class SirGetterBuilder { var origin: SirOrigin = SirOrigin.Unknown var visibility: SirVisibility = SirVisibility.PUBLIC + var documentation: String? = null lateinit var kind: SirCallableKind var body: SirFunctionBody? = null @@ -25,6 +26,7 @@ class SirGetterBuilder { return SirGetterImpl( origin, visibility, + documentation, kind, body, ) @@ -48,6 +50,7 @@ inline fun buildGetterCopy(original: SirGetter, init: SirGetterBuilder.() -> Uni val copyBuilder = SirGetterBuilder() copyBuilder.origin = original.origin copyBuilder.visibility = original.visibility + copyBuilder.documentation = original.documentation copyBuilder.kind = original.kind copyBuilder.body = original.body return copyBuilder.apply(init).build() diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirImportBuilder.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirImportBuilder.kt index 4fc5d796fae..7d2e7bb7d8e 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirImportBuilder.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirImportBuilder.kt @@ -21,15 +21,18 @@ import org.jetbrains.kotlin.sir.impl.SirImportImpl class SirImportBuilder { var origin: SirOrigin = SirOrigin.Unknown var visibility: SirVisibility = SirVisibility.PUBLIC + var documentation: String? = null lateinit var moduleName: String fun build(): SirImport { return SirImportImpl( origin, visibility, + documentation, moduleName, ) } + } @OptIn(ExperimentalContracts::class) @@ -48,6 +51,7 @@ inline fun buildImportCopy(original: SirImport, init: SirImportBuilder.() -> Uni val copyBuilder = SirImportBuilder() copyBuilder.origin = original.origin copyBuilder.visibility = original.visibility + copyBuilder.documentation = original.documentation copyBuilder.moduleName = original.moduleName return copyBuilder.apply(init).build() } diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirInitBuilder.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirInitBuilder.kt index 95f08c1d348..6e8c0d164ee 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirInitBuilder.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirInitBuilder.kt @@ -18,23 +18,23 @@ import org.jetbrains.kotlin.sir.impl.SirInitImpl class SirInitBuilder { var origin: SirOrigin = SirOrigin.Unknown var visibility: SirVisibility = SirVisibility.PUBLIC + var documentation: String? = null lateinit var kind: SirCallableKind var body: SirFunctionBody? = null var isFailable: Boolean by kotlin.properties.Delegates.notNull() val parameters: MutableList = mutableListOf() lateinit var initKind: SirInitializerKind - var documentation: String? = null fun build(): SirInit { return SirInitImpl( origin, visibility, + documentation, kind, body, isFailable, parameters, initKind, - documentation, ) } @@ -56,11 +56,11 @@ inline fun buildInitCopy(original: SirInit, init: SirInitBuilder.() -> Unit): Si val copyBuilder = SirInitBuilder() copyBuilder.origin = original.origin copyBuilder.visibility = original.visibility + copyBuilder.documentation = original.documentation copyBuilder.kind = original.kind copyBuilder.body = original.body copyBuilder.isFailable = original.isFailable copyBuilder.parameters.addAll(original.parameters) copyBuilder.initKind = original.initKind - copyBuilder.documentation = original.documentation return copyBuilder.apply(init).build() } diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirSetterBuilder.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirSetterBuilder.kt index f7deb36aa1d..bf08d8ef50d 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirSetterBuilder.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirSetterBuilder.kt @@ -18,6 +18,7 @@ import org.jetbrains.kotlin.sir.impl.SirSetterImpl class SirSetterBuilder { var origin: SirOrigin = SirOrigin.Unknown var visibility: SirVisibility = SirVisibility.PUBLIC + var documentation: String? = null lateinit var kind: SirCallableKind var body: SirFunctionBody? = null var parameterName: String = "newValue" @@ -26,6 +27,7 @@ class SirSetterBuilder { return SirSetterImpl( origin, visibility, + documentation, kind, body, parameterName, @@ -50,6 +52,7 @@ inline fun buildSetterCopy(original: SirSetter, init: SirSetterBuilder.() -> Uni val copyBuilder = SirSetterBuilder() copyBuilder.origin = original.origin copyBuilder.visibility = original.visibility + copyBuilder.documentation = original.documentation copyBuilder.kind = original.kind copyBuilder.body = original.body copyBuilder.parameterName = original.parameterName diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirStructBuilder.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirStructBuilder.kt index 8c6b90dff56..45b5d7cdc48 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirStructBuilder.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirStructBuilder.kt @@ -18,6 +18,7 @@ import org.jetbrains.kotlin.sir.impl.SirStructImpl class SirStructBuilder { var origin: SirOrigin = SirOrigin.Unknown var visibility: SirVisibility = SirVisibility.PUBLIC + var documentation: String? = null lateinit var name: String val declarations: MutableList = mutableListOf() @@ -25,10 +26,12 @@ class SirStructBuilder { return SirStructImpl( origin, visibility, + documentation, name, declarations, ) } + } @OptIn(ExperimentalContracts::class) @@ -47,6 +50,7 @@ inline fun buildStructCopy(original: SirStruct, init: SirStructBuilder.() -> Uni val copyBuilder = SirStructBuilder() copyBuilder.origin = original.origin copyBuilder.visibility = original.visibility + copyBuilder.documentation = original.documentation copyBuilder.name = original.name copyBuilder.declarations.addAll(original.declarations) return copyBuilder.apply(init).build() diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirVariableBuilder.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirVariableBuilder.kt index 6275272744b..cdd0d6eaa89 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirVariableBuilder.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirVariableBuilder.kt @@ -22,6 +22,7 @@ class SirVariableBuilder { lateinit var type: SirType lateinit var getter: SirGetter var setter: SirSetter? = null + var documentation: String? = null fun build(): SirVariable { return SirVariableImpl( @@ -31,6 +32,7 @@ class SirVariableBuilder { type, getter, setter, + documentation, ) } @@ -56,5 +58,6 @@ inline fun buildVariableCopy(original: SirVariable, init: SirVariableBuilder.() copyBuilder.type = original.type copyBuilder.getter = original.getter copyBuilder.setter = original.setter + copyBuilder.documentation = original.documentation return copyBuilder.apply(init).build() } diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirClassImpl.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirClassImpl.kt index 70867a1e8b9..e66bba460f9 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirClassImpl.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirClassImpl.kt @@ -18,6 +18,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor internal class SirClassImpl( override val origin: SirOrigin, override val visibility: SirVisibility, + override var documentation: String?, override val name: String, override val declarations: MutableList, ) : SirClass() { diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirEnumImpl.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirEnumImpl.kt index bbcd7db360d..97d3984b2ea 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirEnumImpl.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirEnumImpl.kt @@ -18,6 +18,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor internal class SirEnumImpl( override val origin: SirOrigin, override val visibility: SirVisibility, + override var documentation: String?, override val name: String, override val declarations: MutableList, override val cases: MutableList, diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirGetterImpl.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirGetterImpl.kt index eeb0004175a..29e312e44e5 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirGetterImpl.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirGetterImpl.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor internal class SirGetterImpl( override val origin: SirOrigin, override val visibility: SirVisibility, + override var documentation: String?, override val kind: SirCallableKind, override var body: SirFunctionBody?, ) : SirGetter() { diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirImportImpl.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirImportImpl.kt index eb5e9cc9e7e..e6bcf76b8af 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirImportImpl.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirImportImpl.kt @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor internal class SirImportImpl( override val origin: SirOrigin, override val visibility: SirVisibility, + override var documentation: String?, override val moduleName: String, ) : SirImport() { override lateinit var parent: SirDeclarationParent diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirInitImpl.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirInitImpl.kt index abb6aa03d58..8e30201c671 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirInitImpl.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirInitImpl.kt @@ -17,12 +17,12 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor internal class SirInitImpl( override val origin: SirOrigin, override val visibility: SirVisibility, + override var documentation: String?, override val kind: SirCallableKind, override var body: SirFunctionBody?, override val isFailable: Boolean, override val parameters: MutableList, override val initKind: SirInitializerKind, - override var documentation: String?, ) : SirInit() { override lateinit var parent: SirDeclarationParent diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirSetterImpl.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirSetterImpl.kt index bc42327c93d..ac6a5f49685 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirSetterImpl.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirSetterImpl.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor internal class SirSetterImpl( override val origin: SirOrigin, override val visibility: SirVisibility, + override var documentation: String?, override val kind: SirCallableKind, override var body: SirFunctionBody?, override val parameterName: String, diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirStructImpl.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirStructImpl.kt index bd7e04a0cd2..02b64afb6d9 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirStructImpl.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirStructImpl.kt @@ -18,6 +18,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor internal class SirStructImpl( override val origin: SirOrigin, override val visibility: SirVisibility, + override var documentation: String?, override val name: String, override val declarations: MutableList, ) : SirStruct() { diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirVariableImpl.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirVariableImpl.kt index 8f4252f4e42..4d56bee1fd6 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirVariableImpl.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirVariableImpl.kt @@ -21,6 +21,7 @@ internal class SirVariableImpl( override val type: SirType, override val getter: SirGetter, override val setter: SirSetter?, + override var documentation: String?, ) : SirVariable() { override lateinit var parent: SirDeclarationParent diff --git a/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/SwiftIrTree.kt b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/SwiftIrTree.kt index 9156c44ce5d..2b4a0658df8 100644 --- a/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/SwiftIrTree.kt +++ b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/SwiftIrTree.kt @@ -37,6 +37,7 @@ object SwiftIrTree : AbstractSwiftIrTreeBuilder() { customParentInVisitor = rootElement +field("origin", originType) +field("visibility", swiftVisibilityType) + +field(name = "documentation", string, nullable = true, mutable = true) +field("parent", declarationParent, mutable = true, isChild = false) { useInBaseTransformerDetection = false } @@ -89,8 +90,6 @@ object SwiftIrTree : AbstractSwiftIrTreeBuilder() { +listField("parameters", parameterType) +field("initKind", initKind) - - +field(name = "documentation", string, nullable = true, mutable = true) } val function by element { @@ -129,6 +128,8 @@ object SwiftIrTree : AbstractSwiftIrTreeBuilder() { +field("getter", getter) +field("setter", setter, nullable = true) + + +field(name = "documentation", string, nullable = true, mutable = true) } val import by element { diff --git a/native/swift/swift-export-standalone/testData/classes/golden_result/result.swift b/native/swift/swift-export-standalone/testData/classes/golden_result/result.swift index e14e6d812d4..7b0443f2f4a 100644 --- a/native/swift/swift-export-standalone/testData/classes/golden_result/result.swift +++ b/native/swift/swift-export-standalone/testData/classes/golden_result/result.swift @@ -72,6 +72,10 @@ public enum namespace { } } } + /** + * demo comment for + * NAMESPACED_CLASS + */ public class NAMESPACED_CLASS { public init() { fatalError() @@ -81,19 +85,31 @@ public enum namespace { public init() { fatalError() } + /** + * this is a sample comment for INSIDE_CLASS with package + */ public class INSIDE_CLASS { public init() { fatalError() } } + /** + * this is a sample comment for func on class with package + */ public func foo() -> Swift.Bool { fatalError() } + /** + * this is a sample comment for val on class with package + */ public var my_value: Swift.UInt32 { get { fatalError() } } + /** + * this is a sample comment for var on class with package + */ public var my_variable: Swift.Int64 { get { fatalError() @@ -105,32 +121,55 @@ public enum namespace { } } +/** +* this is a sample comment for class without public constructor +*/ 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 init( a: Swift.Int32 ) { fatalError() } + /** + * this is a sample comment for secondary constructor + */ public init( f: Swift.Float ) { fatalError() } + /** + * this is a sample comment for INSIDE_CLASS without package + */ public class INSIDE_CLASS { public init() { fatalError() } + /** + * this is a sample comment for func on INSIDE_CLASS without package + */ public func my_func() -> Swift.Bool { fatalError() } + /** + * this is a sample comment for val on INSIDE_CLASS without package + */ public var my_value_inner: Swift.UInt32 { get { fatalError() } } + /** + * this is a sample comment for var on INSIDE_CLASS without package + */ public var my_variable_inner: Swift.Int64 { get { fatalError() @@ -140,14 +179,23 @@ public class Foo { } } } + /** + * this is a sample comment for func on class without package + */ public func foo() -> Swift.Bool { fatalError() } + /** + * this is a sample comment for val on class without package + */ public var my_value: Swift.UInt32 { get { fatalError() } } + /** + * this is a sample comment for var on class without package + */ public var my_variable: Swift.Int64 { get { fatalError() diff --git a/native/swift/swift-export-standalone/testData/classes/input_root/class_with_package.kt b/native/swift/swift-export-standalone/testData/classes/input_root/class_with_package.kt index 1b747104f5b..269ac28ecda 100644 --- a/native/swift/swift-export-standalone/testData/classes/input_root/class_with_package.kt +++ b/native/swift/swift-export-standalone/testData/classes/input_root/class_with_package.kt @@ -1,14 +1,29 @@ package namespace +/** + * demo comment for + * NAMESPACED_CLASS + */ class NAMESPACED_CLASS class Foo { + /** + * this is a sample comment for INSIDE_CLASS with package + */ class INSIDE_CLASS + /** + * this is a sample comment for func on class with package + */ fun foo(): Boolean = TODO() + /** + * this is a sample comment for val on class with package + */ val my_value: UInt = 5u + /** + * this is a sample comment for var on class with package + */ var my_variable: Long = 5 - } diff --git a/native/swift/swift-export-standalone/testData/classes/input_root/classes.kt b/native/swift/swift-export-standalone/testData/classes/input_root/classes.kt index 518efca4480..56a1b537f9f 100644 --- a/native/swift/swift-export-standalone/testData/classes/input_root/classes.kt +++ b/native/swift/swift-export-standalone/testData/classes/input_root/classes.kt @@ -1,20 +1,55 @@ +/** + * this is a sample comment for class without public constructor + */ 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) { + /** + * this is a sample comment for secondary constructor + */ constructor(f: Float) : this(f.toInt()) + /** + * this is a sample comment for private constructor + */ private constructor(d: Double) : this(d.toInt()) + + /** + * this is a sample comment for INSIDE_CLASS without package + */ class INSIDE_CLASS { + /** + * this is a sample comment for func on INSIDE_CLASS without package + */ fun my_func(): Boolean = TODO() + /** + * this is a sample comment for val on INSIDE_CLASS without package + */ val my_value_inner: UInt = 5u + /** + * this is a sample comment for var on INSIDE_CLASS without package + */ var my_variable_inner: Long = 5 } + /** + * this is a sample comment for func on class without package + */ fun foo(): Boolean = TODO() + /** + * this is a sample comment for val on class without package + */ val my_value: UInt = 5u + /** + * this is a sample comment for var on class without package + */ var my_variable: Long = 5 - } diff --git a/native/swift/swift-export-standalone/testData/documentation/golden_result/result.swift b/native/swift/swift-export-standalone/testData/documentation/golden_result/result.swift index 54f93833d64..3f0fefa6e7a 100644 --- a/native/swift/swift-export-standalone/testData/documentation/golden_result/result.swift +++ b/native/swift/swift-export-standalone/testData/documentation/golden_result/result.swift @@ -2,12 +2,12 @@ import KotlinBridges import KotlinRuntime /** - * Function foo description - * - * @param p first Integer to consume - * @param p2 second Double to consume - * @return Short, constant 1 - */ +* Function foo description +* +* @param p first Integer to consume +* @param p2 second Double to consume +* @return Short, constant 1 +*/ public func foo( p: Swift.Int32, p2: Swift.Double