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
@@ -41,6 +41,8 @@ public class ForeignIntoSwiftFunctionTranslationPass : SirPass<SirElement, Nothi
kotlinOrigin.parameters.mapTo(parameters) { it.toSir() }
returnType = kotlinOrigin.returnType.toSir()
documentation = kotlinOrigin.documentation?.content
}.apply {
parent = function.parent
}
@@ -6,14 +6,10 @@
package org.jetbrains.kotlin.sir.passes
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.sir.SirFunction
import org.jetbrains.kotlin.sir.SirNominalType
import org.jetbrains.kotlin.sir.SirParameter
import org.jetbrains.kotlin.sir.SirVisibility
import org.jetbrains.kotlin.sir.builder.buildEnum
import org.jetbrains.kotlin.sir.builder.buildForeignFunction
import org.jetbrains.kotlin.sir.builder.buildModule
import org.jetbrains.kotlin.sir.*
import org.jetbrains.kotlin.sir.builder.*
import org.jetbrains.kotlin.sir.constants.*
import org.jetbrains.kotlin.sir.mock.MockDocumentation
import org.jetbrains.kotlin.sir.mock.MockFunction
import org.jetbrains.kotlin.sir.mock.MockKotlinType
import org.jetbrains.kotlin.sir.mock.MockParameter
@@ -149,4 +145,51 @@ class SirPassTests {
)
assertSirFunctionsEquals(actual = result, expected = exp)
}
@Test
fun `foreign toplevel function with kdoc should be translated`() {
val module = buildModule {
name = "demo"
}
val mySirElement = buildForeignFunction {
origin = MockFunction(
fqName = FqName.fromSegments(listOf("foo")),
parameters = emptyList(),
returnType = MockKotlinType(BOOLEAN),
documentation = MockDocumentation(
"""
/**
* Function foo description
*
* @param p first Integer to consume
* @param p2 second Double to consume
* @return empty String
*/
""".trimIndent()
)
)
visibility = SirVisibility.PUBLIC
}
mySirElement.parent = module
val myPass = ForeignIntoSwiftFunctionTranslationPass()
val result = myPass.runWithAsserts(mySirElement, null) as? SirFunction
assertNotNull(result, "SirFunction should be produced")
val exp = MockSirFunction(
name = "foo",
parameters = emptyList(),
returnType = SirNominalType(SirSwiftModule.bool),
parent = module,
isStatic = false,
documentation = """
/**
* Function foo description
*
* @param p first Integer to consume
* @param p2 second Double to consume
* @return empty String
*/
""".trimIndent()
)
assertSirFunctionsEquals(actual = result, expected = exp)
}
}
@@ -29,4 +29,8 @@ fun assertSirFunctionsEquals(expected: SirFunction, actual: SirFunction) {
actual = actual.isStatic,
expected = expected.isStatic
)
assertEquals(
actual = actual.documentation,
expected = expected.documentation
)
}
@@ -18,6 +18,7 @@ class MockSirFunction(
override val name: String,
override val parameters: List<SirParameter>,
override val returnType: SirType,
override var documentation: String? = null,
) : SirFunction() {
override fun <R, D> acceptChildren(visitor: SirVisitor<R, D>, data: D) = Unit
override fun <D> transformChildren(transformer: SirTransformer<D>, data: D) = Unit