diff --git a/native/swift/sir-compiler-bridge/test/org/jetbrains/kotlin/sir/bridge/AbstractKotlinSirBridgeTest.kt b/native/swift/sir-compiler-bridge/test/org/jetbrains/kotlin/sir/bridge/AbstractKotlinSirBridgeTest.kt index 2b2b5c093b9..e6316e8d97b 100644 --- a/native/swift/sir-compiler-bridge/test/org/jetbrains/kotlin/sir/bridge/AbstractKotlinSirBridgeTest.kt +++ b/native/swift/sir-compiler-bridge/test/org/jetbrains/kotlin/sir/bridge/AbstractKotlinSirBridgeTest.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.sir.bridge import com.intellij.testFramework.TestDataFile +import org.jetbrains.kotlin.sir.SirCallableKind import org.jetbrains.kotlin.sir.SirNominalType import org.jetbrains.kotlin.sir.SirParameter import org.jetbrains.kotlin.sir.SirType @@ -97,30 +98,34 @@ private fun readRequestFromFile(file: File): BridgeRequest { this.name = fqName.last() this.returnType = returnType this.parameters += parameters - this.isStatic = false + this.kind = SirCallableKind.FUNCTION } BridgeRequestKind.PROPERTY_GETTER -> { - val getter = buildGetter() + val getter = buildGetter { + this.kind = SirCallableKind.FUNCTION + } getter.parent = buildVariable { this.name = fqName.last() this.type = returnType check(parameters.isEmpty()) - this.isStatic = false this.getter = getter } getter } BridgeRequestKind.PROPERTY_SETTER -> { - val setter = buildSetter() + val setter = buildSetter { + this.kind = SirCallableKind.FUNCTION + } setter.parent = buildVariable { this.name = fqName.last() this.type = returnType check(parameters.isEmpty()) - this.isStatic = false - this.getter = buildGetter() + this.getter = buildGetter { + this.kind = SirCallableKind.FUNCTION + } this.setter = setter } 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 de430d1e664..de4f8780cd1 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 @@ -5,13 +5,13 @@ package org.jetbrains.sir.passes.builder +import com.sun.org.apache.xpath.internal.operations.Bool import org.jetbrains.kotlin.analysis.api.KtAnalysisSession -import org.jetbrains.kotlin.analysis.api.symbols.KtClassKind -import org.jetbrains.kotlin.analysis.api.symbols.KtNamedClassOrObjectSymbol -import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionSymbol -import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol +import org.jetbrains.kotlin.analysis.api.symbols.* +import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind import org.jetbrains.kotlin.analysis.api.types.KtType import org.jetbrains.kotlin.descriptors.Modality +import org.jetbrains.kotlin.name.CallableId import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.isPublic import org.jetbrains.kotlin.sir.* @@ -124,14 +124,7 @@ internal fun buildSirFunctionFromPsi(function: KtNamedFunction): SirFunction = b val callableId = symbol.callableIdIfNonLocal origin = KotlinSource(symbol) - // this check is not ideal. We assume that there will be no further moves of the declaration, - // especially that there will be no changes in "static" quality. - // That is not fully true. For example, during KT-65127 - // we may end up removing the whole enum structure at top of the declaration, and that will - // lift the need to keep it static. - // this problem will be addressed somewhere in the future - val isRootPackage = callableId?.packageName?.isRoot - isStatic = if (isRootPackage == true) false else function.isTopLevel + kind = symbol.sirCallableKind name = callableId?.callableName?.asString() ?: "UNKNOWN_FUNCTION_NAME" @@ -151,21 +144,18 @@ internal fun buildSirVariableFromPsi(variable: KtProperty): SirVariable = buildV val callableId = symbol.callableIdIfNonLocal origin = KotlinSource(symbol) - // this check is not ideal. We assume that there will be no further moves of the declaration, - // especially that there will be no changes in "static" quality. - // That is not fully true. For example, during KT-65127 - // we may end up removing the whole enum structure at top of the declaration, and that will - // lift the need to keep it static. - // this problem will be addressed somewhere in the future - val isRootPackage = callableId?.packageName?.isRoot - isStatic = if (isRootPackage == true) false else variable.isTopLevel + val accessorKind = symbol.sirCallableKind name = callableId?.callableName?.asString() ?: "UNKNOWN_VARIABLE_NAME" type = buildSirNominalType(symbol.returnType) - getter = buildGetter {} - setter = if (variable.isVar) buildSetter {} else null + getter = buildGetter { + kind = accessorKind + } + setter = if (variable.isVar) buildSetter { + kind = accessorKind + } else null }.also { it.getter.parent = it it.setter?.parent = it @@ -207,3 +197,19 @@ private fun KtNamedClassOrObjectSymbol.isConsumableBySirBuilder(): Boolean = && !isData && !isInline && modality == Modality.FINAL + +private val KtCallableSymbol.sirCallableKind: SirCallableKind + get() = when (symbolKind) { + KtSymbolKind.TOP_LEVEL -> { + val isRootPackage = callableIdIfNonLocal?.packageName?.isRoot + if (isRootPackage == true) { + SirCallableKind.FUNCTION + } else { + SirCallableKind.STATIC_METHOD + } + } + KtSymbolKind.CLASS_MEMBER, KtSymbolKind.ACCESSOR -> SirCallableKind.INSTANCE_METHOD + KtSymbolKind.LOCAL, + KtSymbolKind.SAM_CONSTRUCTOR -> + TODO("encountered callable kind($symbolKind) that is not translatable currently. Fix this crash during KT-65980.") + } 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 7562d66663d..4ceba22fa5e 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 @@ -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} " } ?: "" ) -} \ No newline at end of file +} + +internal fun SmartPrinter.printCallableKind(callableKind: SirCallableKind) { + print( + when (callableKind) { + SirCallableKind.FUNCTION -> "" + SirCallableKind.INSTANCE_METHOD -> "" + SirCallableKind.CLASS_METHOD -> "class " + SirCallableKind.STATIC_METHOD -> "static " + } + ) +} diff --git a/native/swift/sir-printer/testData/class_function.golden.swift b/native/swift/sir-printer/testData/class_function.golden.swift new file mode 100644 index 00000000000..dc1fe40f7f4 --- /dev/null +++ b/native/swift/sir-printer/testData/class_function.golden.swift @@ -0,0 +1,5 @@ +public class func foo( + arg1: Swift.Int32 +) -> Swift.Bool { + return foo_wrapped(arg1) +} \ 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 40bc2139f6f..743fb64a54d 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 @@ -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( 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 419f1673a67..93ed99e45cb 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirAccessor.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirAccessor.kt @@ -18,6 +18,7 @@ sealed class SirAccessor : SirCallable() { abstract override val origin: SirOrigin abstract override val visibility: SirVisibility abstract override var parent: SirDeclarationParent + abstract override val kind: SirCallableKind abstract var body: SirFunctionBody? override fun accept(visitor: SirVisitor, data: D): R = 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 d0219959a57..2727c978327 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirCallable.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirCallable.kt @@ -18,6 +18,7 @@ sealed class SirCallable : SirElementBase(), SirDeclaration { abstract override val origin: SirOrigin abstract override val visibility: SirVisibility abstract override var parent: SirDeclarationParent + abstract val kind: SirCallableKind override fun accept(visitor: SirVisitor, data: D): R = visitor.visitCallable(this, data) 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 062d8ffcef8..79145037834 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirFunction.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirFunction.kt @@ -18,7 +18,7 @@ abstract class SirFunction : SirCallable() { abstract override val origin: SirOrigin abstract override val visibility: SirVisibility abstract override var parent: SirDeclarationParent - abstract val isStatic: Boolean + abstract override val kind: SirCallableKind abstract val name: String abstract val parameters: List abstract val returnType: SirType 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 6eadd78dc77..8076da2f7ff 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirGetter.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirGetter.kt @@ -18,6 +18,7 @@ abstract class SirGetter : SirAccessor() { abstract override val origin: SirOrigin abstract override val visibility: SirVisibility abstract override var parent: SirDeclarationParent + abstract override val kind: SirCallableKind abstract override var body: SirFunctionBody? override fun accept(visitor: SirVisitor, data: D): R = 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 2150ddfb38b..f9734ac89d7 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirSetter.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirSetter.kt @@ -18,6 +18,7 @@ abstract class SirSetter : SirAccessor() { abstract override val origin: SirOrigin abstract override val visibility: SirVisibility abstract override var parent: SirDeclarationParent + abstract override val kind: SirCallableKind abstract override var body: SirFunctionBody? abstract val parameterName: String 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 4e33a782e13..6018e262024 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirVariable.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirVariable.kt @@ -22,7 +22,6 @@ abstract class SirVariable : SirDeclarationParent(), SirDeclaration { abstract val type: SirType abstract val getter: SirGetter abstract val setter: SirSetter? - abstract val isStatic: Boolean override fun accept(visitor: SirVisitor, data: D): R = visitor.visitVariable(this, data) diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirFunctionBuilder.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirFunctionBuilder.kt index 8852f9ca8f6..bccbfbe9b65 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirFunctionBuilder.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirFunctionBuilder.kt @@ -18,7 +18,7 @@ import org.jetbrains.kotlin.sir.impl.SirFunctionImpl class SirFunctionBuilder { var origin: SirOrigin = SirOrigin.Unknown var visibility: SirVisibility = SirVisibility.PUBLIC - var isStatic: Boolean by kotlin.properties.Delegates.notNull() + lateinit var kind: SirCallableKind lateinit var name: String val parameters: MutableList = mutableListOf() lateinit var returnType: SirType @@ -29,7 +29,7 @@ class SirFunctionBuilder { return SirFunctionImpl( origin, visibility, - isStatic, + kind, name, parameters, returnType, @@ -56,7 +56,7 @@ inline fun buildFunctionCopy(original: SirFunction, init: SirFunctionBuilder.() val copyBuilder = SirFunctionBuilder() copyBuilder.origin = original.origin copyBuilder.visibility = original.visibility - copyBuilder.isStatic = original.isStatic + copyBuilder.kind = original.kind copyBuilder.name = original.name copyBuilder.parameters.addAll(original.parameters) copyBuilder.returnType = original.returnType 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 e3891ec0882..3466902558a 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,12 +18,14 @@ import org.jetbrains.kotlin.sir.impl.SirGetterImpl class SirGetterBuilder { var origin: SirOrigin = SirOrigin.Unknown var visibility: SirVisibility = SirVisibility.PUBLIC + lateinit var kind: SirCallableKind var body: SirFunctionBody? = null fun build(): SirGetter { return SirGetterImpl( origin, visibility, + kind, body, ) } @@ -31,7 +33,7 @@ class SirGetterBuilder { } @OptIn(ExperimentalContracts::class) -inline fun buildGetter(init: SirGetterBuilder.() -> Unit = {}): SirGetter { +inline fun buildGetter(init: SirGetterBuilder.() -> Unit): SirGetter { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } @@ -39,13 +41,14 @@ inline fun buildGetter(init: SirGetterBuilder.() -> Unit = {}): SirGetter { } @OptIn(ExperimentalContracts::class) -inline fun buildGetterCopy(original: SirGetter, init: SirGetterBuilder.() -> Unit = {}): SirGetter { +inline fun buildGetterCopy(original: SirGetter, init: SirGetterBuilder.() -> Unit): SirGetter { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val copyBuilder = SirGetterBuilder() copyBuilder.origin = original.origin copyBuilder.visibility = original.visibility + 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/SirSetterBuilder.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirSetterBuilder.kt index 464b8059ac1..f7deb36aa1d 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 + lateinit var kind: SirCallableKind var body: SirFunctionBody? = null var parameterName: String = "newValue" @@ -25,6 +26,7 @@ class SirSetterBuilder { return SirSetterImpl( origin, visibility, + kind, body, parameterName, ) @@ -33,7 +35,7 @@ class SirSetterBuilder { } @OptIn(ExperimentalContracts::class) -inline fun buildSetter(init: SirSetterBuilder.() -> Unit = {}): SirSetter { +inline fun buildSetter(init: SirSetterBuilder.() -> Unit): SirSetter { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } @@ -41,13 +43,14 @@ inline fun buildSetter(init: SirSetterBuilder.() -> Unit = {}): SirSetter { } @OptIn(ExperimentalContracts::class) -inline fun buildSetterCopy(original: SirSetter, init: SirSetterBuilder.() -> Unit = {}): SirSetter { +inline fun buildSetterCopy(original: SirSetter, init: SirSetterBuilder.() -> Unit): SirSetter { contract { callsInPlace(init, InvocationKind.EXACTLY_ONCE) } val copyBuilder = SirSetterBuilder() copyBuilder.origin = original.origin copyBuilder.visibility = original.visibility + copyBuilder.kind = original.kind copyBuilder.body = original.body copyBuilder.parameterName = original.parameterName 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 e164ed10f1a..6275272744b 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,7 +22,6 @@ class SirVariableBuilder { lateinit var type: SirType lateinit var getter: SirGetter var setter: SirSetter? = null - var isStatic: Boolean by kotlin.properties.Delegates.notNull() fun build(): SirVariable { return SirVariableImpl( @@ -32,7 +31,6 @@ class SirVariableBuilder { type, getter, setter, - isStatic, ) } @@ -58,6 +56,5 @@ inline fun buildVariableCopy(original: SirVariable, init: SirVariableBuilder.() copyBuilder.type = original.type copyBuilder.getter = original.getter copyBuilder.setter = original.setter - copyBuilder.isStatic = original.isStatic return copyBuilder.apply(init).build() } diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirFunctionImpl.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirFunctionImpl.kt index 096328ec6e5..7f720738b97 100644 --- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirFunctionImpl.kt +++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirFunctionImpl.kt @@ -17,7 +17,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor internal class SirFunctionImpl( override val origin: SirOrigin, override val visibility: SirVisibility, - override val isStatic: Boolean, + override val kind: SirCallableKind, override val name: String, override val parameters: MutableList, override val returnType: SirType, 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 fdcdde16251..0505a99569c 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 val kind: SirCallableKind, override var body: SirFunctionBody?, ) : SirGetter() { 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 66426516e79..81a7594058f 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 val kind: SirCallableKind, override var body: SirFunctionBody?, override val parameterName: String, ) : SirSetter() { 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 3e10a1c842f..da77d981170 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,7 +21,6 @@ internal class SirVariableImpl( override val type: SirType, override val getter: SirGetter, override val setter: SirSetter?, - override val isStatic: Boolean, ) : SirVariable() { override lateinit var parent: SirDeclarationParent diff --git a/native/swift/sir/src/org/jetbrains/kotlin/sir/SirCallableKind.kt b/native/swift/sir/src/org/jetbrains/kotlin/sir/SirCallableKind.kt new file mode 100644 index 00000000000..c7e753a93eb --- /dev/null +++ b/native/swift/sir/src/org/jetbrains/kotlin/sir/SirCallableKind.kt @@ -0,0 +1,16 @@ +/* + * Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.sir + +enum class SirCallableKind { + FUNCTION, + INSTANCE_METHOD, + CLASS_METHOD, + STATIC_METHOD, +} + +val SirVariable.kind: SirCallableKind + get() = getter.kind diff --git a/native/swift/sir/src/org/jetbrains/kotlin/sir/SirOrigin.kt b/native/swift/sir/src/org/jetbrains/kotlin/sir/SirOrigin.kt index b1f6d1b8d7d..68148c41399 100644 --- a/native/swift/sir/src/org/jetbrains/kotlin/sir/SirOrigin.kt +++ b/native/swift/sir/src/org/jetbrains/kotlin/sir/SirOrigin.kt @@ -22,4 +22,4 @@ sealed interface SirOrigin { * (e.g. objects created in/for tests) */ data object Unknown : SirOrigin -} \ No newline at end of file +} 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 17a688e22ee..55ea1c80282 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 @@ -76,13 +76,14 @@ object SwiftIrTree : AbstractSwiftIrTreeBuilder() { val callable by sealedElement { parent(declaration) + + +field("kind", callableKind) } val function by element { customParentInVisitor = callable parent(callable) - +field("isStatic", boolean) // todo: KT-65046 Method|function distinction in SIR +field("name", string) +listField("parameters", parameterType) +field("returnType", typeType) @@ -118,8 +119,6 @@ object SwiftIrTree : AbstractSwiftIrTreeBuilder() { +field("getter", getter) +field("setter", setter, nullable = true) - - +field("isStatic", boolean) // todo: KT-65046 Method|function distinction in SIR } val import by element { diff --git a/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/Types.kt b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/Types.kt index 05b0beb4438..55997f71df0 100644 --- a/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/Types.kt +++ b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/Types.kt @@ -15,6 +15,7 @@ val parameterType = type(BASE_PACKAGE, "SirParameter", TypeKind.Class) val typeType = type(BASE_PACKAGE, "SirType", TypeKind.Class) val enumCaseType = type(BASE_PACKAGE, "SirEnumCase", TypeKind.Class) val functionBodyType = type(BASE_PACKAGE, "SirFunctionBody", TypeKind.Class) +val callableKind = type(BASE_PACKAGE, "SirCallableKind", TypeKind.Class) private const val VISITORS_PACKAGE = "$BASE_PACKAGE.visitors"