add distinction between functions and methods in SIR #KT-65046 fixed
Merge-request: KT-MR-14667 Merged-by: Artem Olkov <artem.olkov@jetbrains.com>
This commit is contained in:
@@ -56,8 +56,8 @@ public class SirAsSwiftSourcesPrinter(private val printer: SmartPrinter) : SirVi
|
||||
|
||||
override fun visitVariable(variable: SirVariable): Unit = with(printer) {
|
||||
printVisibility(variable)
|
||||
printCallableKind(variable.kind)
|
||||
print(
|
||||
if (variable.isStatic) "static " else "",
|
||||
"var ",
|
||||
variable.name.swiftIdentifier,
|
||||
": ",
|
||||
@@ -96,12 +96,8 @@ public class SirAsSwiftSourcesPrinter(private val printer: SmartPrinter) : SirVi
|
||||
override fun visitFunction(function: SirFunction): Unit = with(printer) {
|
||||
function.documentation?.let { println(it) }
|
||||
printVisibility(function)
|
||||
printCallableKind(function.kind)
|
||||
print(
|
||||
if (function.isStatic) {
|
||||
"static "
|
||||
} else {
|
||||
""
|
||||
},
|
||||
"func ",
|
||||
function.name.swiftIdentifier,
|
||||
"("
|
||||
@@ -186,4 +182,15 @@ internal fun SmartPrinter.printVisibility(decl: SirDeclaration) {
|
||||
print(
|
||||
decl.visibility.takeIf { it != SirVisibility.INTERNAL }?.let { "${it.swift} " } ?: ""
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
internal fun SmartPrinter.printCallableKind(callableKind: SirCallableKind) {
|
||||
print(
|
||||
when (callableKind) {
|
||||
SirCallableKind.FUNCTION -> ""
|
||||
SirCallableKind.INSTANCE_METHOD -> ""
|
||||
SirCallableKind.CLASS_METHOD -> "class "
|
||||
SirCallableKind.STATIC_METHOD -> "static "
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
public class func foo(
|
||||
arg1: Swift.Int32
|
||||
) -> Swift.Bool {
|
||||
return foo_wrapped(arg1)
|
||||
}
|
||||
+39
-10
@@ -26,7 +26,7 @@ class SirAsSwiftSourcesPrinterTests {
|
||||
declarations.add(
|
||||
buildFunction {
|
||||
origin = SirOrigin.Unknown
|
||||
isStatic = false
|
||||
kind = SirCallableKind.FUNCTION
|
||||
visibility = SirVisibility.PUBLIC
|
||||
name = "foo"
|
||||
returnType = SirNominalType(SirSwiftModule.bool)
|
||||
@@ -47,7 +47,7 @@ class SirAsSwiftSourcesPrinterTests {
|
||||
declarations.add(
|
||||
buildFunction {
|
||||
origin = SirOrigin.Unknown
|
||||
isStatic = false
|
||||
kind = SirCallableKind.FUNCTION
|
||||
visibility = SirVisibility.PUBLIC
|
||||
name = "foo1"
|
||||
returnType = SirNominalType(SirSwiftModule.bool)
|
||||
@@ -56,7 +56,7 @@ class SirAsSwiftSourcesPrinterTests {
|
||||
declarations.add(
|
||||
buildFunction {
|
||||
origin = SirOrigin.Unknown
|
||||
isStatic = false
|
||||
kind = SirCallableKind.FUNCTION
|
||||
visibility = SirVisibility.PUBLIC
|
||||
name = "foo2"
|
||||
returnType = SirNominalType(SirSwiftModule.bool)
|
||||
@@ -77,7 +77,7 @@ class SirAsSwiftSourcesPrinterTests {
|
||||
declarations.add(
|
||||
buildFunction {
|
||||
origin = SirOrigin.Unknown
|
||||
isStatic = false
|
||||
kind = SirCallableKind.FUNCTION
|
||||
visibility = SirVisibility.PUBLIC
|
||||
name = "foo"
|
||||
parameters.add(
|
||||
@@ -105,7 +105,7 @@ class SirAsSwiftSourcesPrinterTests {
|
||||
declarations.add(
|
||||
buildFunction {
|
||||
origin = SirOrigin.Unknown
|
||||
isStatic = false
|
||||
kind = SirCallableKind.FUNCTION
|
||||
visibility = SirVisibility.PUBLIC
|
||||
name = "foo"
|
||||
parameters.add(
|
||||
@@ -139,7 +139,7 @@ class SirAsSwiftSourcesPrinterTests {
|
||||
declarations.add(
|
||||
buildFunction {
|
||||
origin = SirOrigin.Unknown
|
||||
isStatic = false
|
||||
kind = SirCallableKind.FUNCTION
|
||||
visibility = SirVisibility.PUBLIC
|
||||
name = "foo"
|
||||
parameters.addAll(
|
||||
@@ -193,7 +193,7 @@ class SirAsSwiftSourcesPrinterTests {
|
||||
declarations.add(
|
||||
buildFunction {
|
||||
origin = SirOrigin.Unknown
|
||||
isStatic = false
|
||||
kind = SirCallableKind.FUNCTION
|
||||
visibility = SirVisibility.PUBLIC
|
||||
name = "foo"
|
||||
parameters.add(
|
||||
@@ -215,14 +215,14 @@ class SirAsSwiftSourcesPrinterTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `should print static`() {
|
||||
fun `should print static function`() {
|
||||
|
||||
val module = buildModule {
|
||||
name = "Test"
|
||||
declarations.add(
|
||||
buildFunction {
|
||||
origin = SirOrigin.Unknown
|
||||
isStatic = true
|
||||
kind = SirCallableKind.STATIC_METHOD
|
||||
visibility = SirVisibility.PUBLIC
|
||||
name = "foo"
|
||||
parameters.add(
|
||||
@@ -243,6 +243,35 @@ class SirAsSwiftSourcesPrinterTests {
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `should print class function`() {
|
||||
|
||||
val module = buildModule {
|
||||
name = "Test"
|
||||
declarations.add(
|
||||
buildFunction {
|
||||
origin = SirOrigin.Unknown
|
||||
kind = SirCallableKind.CLASS_METHOD
|
||||
visibility = SirVisibility.PUBLIC
|
||||
name = "foo"
|
||||
parameters.add(
|
||||
SirParameter(
|
||||
argumentName = "arg1",
|
||||
type = SirNominalType(SirSwiftModule.int32)
|
||||
)
|
||||
)
|
||||
returnType = SirNominalType(SirSwiftModule.bool)
|
||||
body = SirFunctionBody(listOf("return foo_wrapped(arg1)"))
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
runTest(
|
||||
module,
|
||||
"testData/class_function"
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `should print DocC comment`() {
|
||||
|
||||
@@ -251,7 +280,7 @@ class SirAsSwiftSourcesPrinterTests {
|
||||
declarations.add(
|
||||
buildFunction {
|
||||
origin = SirOrigin.Unknown
|
||||
isStatic = false
|
||||
kind = SirCallableKind.FUNCTION
|
||||
visibility = SirVisibility.PUBLIC
|
||||
name = "foo"
|
||||
parameters.add(
|
||||
|
||||
Reference in New Issue
Block a user