[Swift Export] KT-70883: Rectify modality-visibility-overrides in SirTree
Merge-request: KT-MR-17903
Merged-by: Gleb Lukianets <Gleb.Lukianets@jetbrains.com>
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 fe2bddf..47f2189 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
@@ -9,6 +9,7 @@
import org.jetbrains.kotlin.sir.*
import org.jetbrains.kotlin.sir.builder.*
import org.jetbrains.kotlin.sir.util.SirSwiftModule
+import org.jetbrains.kotlin.sir.util.addChild
import org.jetbrains.kotlin.test.services.JUnit5Assertions
import org.jetbrains.kotlin.test.util.KtTestUtil
import java.io.File
@@ -106,41 +107,60 @@
val kind = BridgeRequestKind.valueOf(properties.getProperty("kind", "FUNCTION"))
val callable = when (kind) {
- BridgeRequestKind.FUNCTION -> buildFunction {
- this.name = fqName.last()
- this.returnType = returnType
- this.parameters += parameters
- this.kind = SirCallableKind.FUNCTION
- }
- BridgeRequestKind.PROPERTY_GETTER -> {
- val getter = buildGetter {
- this.kind = SirCallableKind.FUNCTION
+ BridgeRequestKind.FUNCTION -> {
+ val function = buildFunction {
+ this.name = fqName.last()
+ this.returnType = returnType
+ this.parameters += parameters
}
- getter.parent = buildVariable {
+ buildModule {
+ name = "BridgeTest"
+ }.apply {
+ addChild { function }
+ }
+
+ function
+ }
+ BridgeRequestKind.PROPERTY_GETTER -> {
+ val getter = buildGetter {}
+
+ val variable = buildVariable {
this.name = fqName.last()
this.type = returnType
check(parameters.isEmpty())
this.getter = getter
}
+ getter.parent = variable
+
+ buildModule {
+ name = "BridgeTest"
+ }.apply {
+ addChild { variable }
+ }
+
getter
}
BridgeRequestKind.PROPERTY_SETTER -> {
- val setter = buildSetter {
- this.kind = SirCallableKind.FUNCTION
- }
+ val setter = buildSetter {}
- setter.parent = buildVariable {
+ val variable = buildVariable {
this.name = fqName.last()
this.type = returnType
check(parameters.isEmpty())
- this.getter = buildGetter {
- this.kind = SirCallableKind.FUNCTION
- }
+ this.getter = buildGetter {}
this.setter = setter
}
+ setter.parent = variable
+
+ buildModule {
+ name = "BridgeTest"
+ }.apply {
+ addChild { variable }
+ }
+
setter
}
}
diff --git a/native/swift/sir-light-classes/src/org/jetbrains/sir/lightclasses/extensions/KtSymbol.kt b/native/swift/sir-light-classes/src/org/jetbrains/sir/lightclasses/extensions/KtSymbol.kt
index 3cb83d6..540813a 100644
--- a/native/swift/sir-light-classes/src/org/jetbrains/sir/lightclasses/extensions/KtSymbol.kt
+++ b/native/swift/sir-light-classes/src/org/jetbrains/sir/lightclasses/extensions/KtSymbol.kt
@@ -5,12 +5,10 @@
package org.jetbrains.sir.lightclasses.extensions
-import org.jetbrains.kotlin.analysis.api.symbols.KaCallableSymbol
-import org.jetbrains.kotlin.analysis.api.symbols.KaSymbol
-import org.jetbrains.kotlin.analysis.api.symbols.KaSymbolLocation
-import org.jetbrains.kotlin.analysis.api.symbols.psiSafe
+import org.jetbrains.kotlin.analysis.api.symbols.*
import org.jetbrains.kotlin.psi.KtDeclaration
import org.jetbrains.kotlin.sir.SirCallableKind
+import org.jetbrains.kotlin.sir.SirModality
internal val KaCallableSymbol.sirCallableKind: SirCallableKind
get() = when (location) {
@@ -19,7 +17,7 @@
if (isRootPackage == true) {
SirCallableKind.FUNCTION
} else {
- SirCallableKind.STATIC_METHOD
+ SirCallableKind.CLASS_METHOD
}
}
KaSymbolLocation.CLASS, KaSymbolLocation.PROPERTY,
@@ -29,3 +27,10 @@
}
internal fun KaSymbol.documentation(): String? = this.psiSafe<KtDeclaration>()?.docComment?.text
+
+internal val KaSymbolModality.sirModality: SirModality
+ get() = when (this) {
+ KaSymbolModality.FINAL -> SirModality.FINAL
+ KaSymbolModality.SEALED -> SirModality.UNSPECIFIED
+ KaSymbolModality.OPEN, KaSymbolModality.ABSTRACT -> SirModality.OPEN
+ }
\ No newline at end of file
diff --git a/native/swift/sir-light-classes/src/org/jetbrains/sir/lightclasses/nodes/SirClassFromKtSymbol.kt b/native/swift/sir-light-classes/src/org/jetbrains/sir/lightclasses/nodes/SirClassFromKtSymbol.kt
index 571e159..8b4a9e3 100644
--- a/native/swift/sir-light-classes/src/org/jetbrains/sir/lightclasses/nodes/SirClassFromKtSymbol.kt
+++ b/native/swift/sir-light-classes/src/org/jetbrains/sir/lightclasses/nodes/SirClassFromKtSymbol.kt
@@ -11,9 +11,7 @@
import org.jetbrains.kotlin.analysis.api.symbols.KaClassSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KaNamedClassSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KaSymbolModality
-import org.jetbrains.kotlin.analysis.api.types.KaClassType
import org.jetbrains.kotlin.analysis.api.types.symbol
-import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.sir.*
import org.jetbrains.kotlin.sir.builder.buildGetter
import org.jetbrains.kotlin.sir.builder.buildInit
@@ -42,11 +40,11 @@
override val visibility: SirVisibility by lazy {
SirVisibility.PUBLIC
}
- override val modality: SirClassModality by lazy {
+ override val modality: SirModality by lazy {
when (ktSymbol.modality) {
- KaSymbolModality.OPEN -> SirClassModality.OPEN
- KaSymbolModality.FINAL -> SirClassModality.FINAL
- KaSymbolModality.SEALED, KaSymbolModality.ABSTRACT -> SirClassModality.UNSPECIFIED
+ KaSymbolModality.OPEN -> SirModality.OPEN
+ KaSymbolModality.FINAL -> SirModality.FINAL
+ KaSymbolModality.SEALED, KaSymbolModality.ABSTRACT -> SirModality.UNSPECIFIED
}
}
@@ -94,7 +92,6 @@
private fun kotlinBaseInitDeclaration(): SirDeclaration = buildInit {
origin = SirOrigin.KotlinBaseInitOverride(`for` = KotlinSource(ktSymbol))
- kind = SirCallableKind.CLASS_METHOD
isFailable = false
initKind = SirInitializerKind.ORDINARY
isOverride = true
@@ -112,7 +109,6 @@
buildInit {
origin = SirOrigin.PrivateObjectInit(`for` = KotlinSource(ktSymbol))
visibility = SirVisibility.PRIVATE
- kind = SirCallableKind.CLASS_METHOD
isFailable = false
initKind = SirInitializerKind.ORDINARY
isOverride = computeIsOverrideForDesignatedInit(this@SirClassFromKtSymbol, emptyList())
@@ -122,9 +118,9 @@
visibility = SirVisibility.PUBLIC
type = SirNominalType(this@SirClassFromKtSymbol)
name = "shared"
- getter = buildGetter {
- kind = SirCallableKind.STATIC_METHOD
- }
+ isInstance = false
+ modality = SirModality.FINAL
+ getter = buildGetter {}
}.also {
it.getter.parent = it
}
diff --git a/native/swift/sir-light-classes/src/org/jetbrains/sir/lightclasses/nodes/SirFunctionFromKtSymbol.kt b/native/swift/sir-light-classes/src/org/jetbrains/sir/lightclasses/nodes/SirFunctionFromKtSymbol.kt
index 3853766..d8e9b8b 100644
--- a/native/swift/sir-light-classes/src/org/jetbrains/sir/lightclasses/nodes/SirFunctionFromKtSymbol.kt
+++ b/native/swift/sir-light-classes/src/org/jetbrains/sir/lightclasses/nodes/SirFunctionFromKtSymbol.kt
@@ -7,13 +7,14 @@
import org.jetbrains.kotlin.analysis.api.projectStructure.KaModule
import org.jetbrains.kotlin.analysis.api.symbols.KaFunctionSymbol
+import org.jetbrains.kotlin.analysis.api.symbols.isTopLevel
import org.jetbrains.kotlin.sir.*
import org.jetbrains.kotlin.sir.providers.SirSession
import org.jetbrains.kotlin.sir.providers.source.KotlinSource
import org.jetbrains.sir.lightclasses.SirFromKtSymbol
+import org.jetbrains.sir.lightclasses.extensions.*
import org.jetbrains.sir.lightclasses.extensions.documentation
import org.jetbrains.sir.lightclasses.extensions.lazyWithSessions
-import org.jetbrains.sir.lightclasses.extensions.sirCallableKind
import org.jetbrains.sir.lightclasses.extensions.withSessions
import org.jetbrains.sir.lightclasses.utils.translateParameters
import org.jetbrains.sir.lightclasses.utils.translateReturnType
@@ -28,9 +29,6 @@
override val origin: SirOrigin by lazy {
KotlinSource(ktSymbol)
}
- override val kind: SirCallableKind by lazy {
- ktSymbol.sirCallableKind
- }
override val name: String by lazyWithSessions {
ktSymbol.sirDeclarationName()
}
@@ -50,6 +48,15 @@
}
set(_) = Unit
+ override val isOverride: Boolean
+ get() = false // TODO: KT-66845
+
+ override val isInstance: Boolean
+ get() = !ktSymbol.isTopLevel
+
+ override val modality: SirModality
+ get() = ktSymbol.modality.sirModality
+
override val attributes: MutableList<SirAttribute> = mutableListOf()
override var body: SirFunctionBody? = null
diff --git a/native/swift/sir-light-classes/src/org/jetbrains/sir/lightclasses/nodes/SirInitFromKtSymbol.kt b/native/swift/sir-light-classes/src/org/jetbrains/sir/lightclasses/nodes/SirInitFromKtSymbol.kt
index fe48776..07170d7 100644
--- a/native/swift/sir-light-classes/src/org/jetbrains/sir/lightclasses/nodes/SirInitFromKtSymbol.kt
+++ b/native/swift/sir-light-classes/src/org/jetbrains/sir/lightclasses/nodes/SirInitFromKtSymbol.kt
@@ -30,9 +30,6 @@
override val origin: SirOrigin by lazy {
KotlinSource(ktSymbol)
}
- override val kind: SirCallableKind by lazy {
- SirCallableKind.CLASS_METHOD
- }
override val parameters: List<SirParameter> by lazy {
translateParameters()
}
diff --git a/native/swift/sir-light-classes/src/org/jetbrains/sir/lightclasses/nodes/SirVariableFromKtSymbol.kt b/native/swift/sir-light-classes/src/org/jetbrains/sir/lightclasses/nodes/SirVariableFromKtSymbol.kt
index a97924c..927b562 100644
--- a/native/swift/sir-light-classes/src/org/jetbrains/sir/lightclasses/nodes/SirVariableFromKtSymbol.kt
+++ b/native/swift/sir-light-classes/src/org/jetbrains/sir/lightclasses/nodes/SirVariableFromKtSymbol.kt
@@ -7,15 +7,16 @@
import org.jetbrains.kotlin.analysis.api.projectStructure.KaModule
import org.jetbrains.kotlin.analysis.api.symbols.KaVariableSymbol
+import org.jetbrains.kotlin.analysis.api.symbols.isTopLevel
import org.jetbrains.kotlin.sir.*
import org.jetbrains.kotlin.sir.builder.buildGetter
import org.jetbrains.kotlin.sir.builder.buildSetter
import org.jetbrains.kotlin.sir.providers.SirSession
import org.jetbrains.kotlin.sir.providers.source.KotlinSource
import org.jetbrains.sir.lightclasses.SirFromKtSymbol
+import org.jetbrains.sir.lightclasses.extensions.*
import org.jetbrains.sir.lightclasses.extensions.documentation
import org.jetbrains.sir.lightclasses.extensions.lazyWithSessions
-import org.jetbrains.sir.lightclasses.extensions.sirCallableKind
import org.jetbrains.sir.lightclasses.extensions.withSessions
import org.jetbrains.sir.lightclasses.utils.translateReturnType
@@ -37,17 +38,13 @@
translateReturnType()
}
override val getter: SirGetter by lazy {
- buildGetter {
- kind = accessorKind
- }.also {
+ buildGetter {}.also {
it.parent = this@SirVariableFromKtSymbol
}
}
override val setter: SirSetter? by lazy {
if (!ktSymbol.isVal) {
- buildSetter {
- kind = accessorKind
- }.also {
+ buildSetter {}.also {
it.parent = this@SirVariableFromKtSymbol
}
} else {
@@ -66,7 +63,12 @@
override val attributes: MutableList<SirAttribute> = mutableListOf()
- private val accessorKind by lazy {
- ktSymbol.sirCallableKind
- }
+ override val isOverride: Boolean
+ get() = false // TODO: KT-66845
+
+ override val isInstance: Boolean
+ get() = !ktSymbol.isTopLevel
+
+ override val modality: SirModality
+ get() = ktSymbol.modality.sirModality
}
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 a89641a..13550fd 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
@@ -156,8 +156,7 @@
private fun SirVariable.print() {
printDocumentation()
printAttributes()
- printVisibility()
- kind.print()
+ printModifiers()
print(
"var ",
name.swiftIdentifier,
@@ -175,7 +174,7 @@
private fun SirCallable.print() {
printDocumentation()
printAttributes()
- printVisibility()
+ printModifiers()
printOverride()
printPreNameKeywords()
printName()
@@ -247,9 +246,43 @@
?: ""
)
+ private fun SirClassMemberDeclaration.printModifiers() {
+ when (effectiveModality) {
+ SirModality.OPEN -> {
+ if (visibility == SirVisibility.PUBLIC) {
+ print("open ")
+ } else {
+ // Swift properties and methods are internally inheritable
+ // by default – no need to print "open"
+ printVisibility()
+ }
+ if (callableKind == SirCallableKind.CLASS_METHOD) {
+ print("class ")
+ }
+ }
+ SirModality.FINAL -> {
+ printVisibility()
+ if (callableKind == SirCallableKind.CLASS_METHOD) {
+ print("static ")
+ } else if (callableKind != SirCallableKind.FUNCTION) {
+ // to reduce noise we don't print 'final' when it's implied
+ if ((parent as? SirClass)?.modality != SirModality.FINAL) {
+ print("final ")
+ }
+ }
+ }
+ SirModality.UNSPECIFIED -> {
+ printVisibility()
+ if (callableKind == SirCallableKind.CLASS_METHOD) {
+ print("class ")
+ }
+ }
+ }
+ }
+
private fun SirClass.printModifiers() {
when (modality) {
- SirClassModality.OPEN -> {
+ SirModality.OPEN -> {
if (visibility == SirVisibility.PUBLIC) {
print("open ")
} else {
@@ -258,19 +291,29 @@
printVisibility()
}
}
- SirClassModality.FINAL -> {
+ SirModality.FINAL -> {
printVisibility()
print("final ")
}
- SirClassModality.UNSPECIFIED -> {
+ SirModality.UNSPECIFIED -> {
printVisibility()
}
}
}
+ private fun SirDeclaration.printModifiers() {
+ if (this is SirClassMemberDeclaration) {
+ printModifiers()
+ } else if (this is SirClass) {
+ printModifiers()
+ } else {
+ printVisibility()
+ }
+ }
+
private fun SirCallable.printPreNameKeywords() = when (this) {
is SirInit -> initKind.print()
- is SirFunction -> kind.print()
+ is SirFunction -> {}
is SirGetter -> print("get")
is SirSetter -> print("set")
}
@@ -339,15 +382,6 @@
.forEach {
println(it)
}
-
- private fun SirCallableKind.print() = print(
- when (this) {
- SirCallableKind.FUNCTION -> ""
- SirCallableKind.INSTANCE_METHOD -> ""
- SirCallableKind.CLASS_METHOD -> "class "
- SirCallableKind.STATIC_METHOD -> "static "
- }
- )
}
private val SirVisibility.swift
@@ -373,4 +407,10 @@
typeArguments.first().swiftRender + "?"
} else {
swiftName
- }
\ No newline at end of file
+ }
+
+private val SirClassMemberDeclaration.callableKind: SirCallableKind
+ get() = when (this) {
+ is SirVariable -> kind
+ is SirCallable -> (this as SirCallable).kind
+ }
diff --git a/native/swift/sir-printer/testData/class_function.golden.swift b/native/swift/sir-printer/testData/class_function.golden.swift
index dc1fe40..3e1cc25 100644
--- a/native/swift/sir-printer/testData/class_function.golden.swift
+++ b/native/swift/sir-printer/testData/class_function.golden.swift
@@ -1,5 +1,7 @@
-public class func foo(
- arg1: Swift.Int32
-) -> Swift.Bool {
- return foo_wrapped(arg1)
+public class Foo {
+ 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/testData/static_function.golden.swift b/native/swift/sir-printer/testData/static_function.golden.swift
index cad6e6e..786a3a2 100644
--- a/native/swift/sir-printer/testData/static_function.golden.swift
+++ b/native/swift/sir-printer/testData/static_function.golden.swift
@@ -1,5 +1,7 @@
-public static func foo(
- arg1: Swift.Int32
-) -> Swift.Bool {
- return foo_wrapped(arg1)
+public class Foo {
+ public static 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 3f6c7d7..6647976 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,13 +26,12 @@
declarations.add(
buildFunction {
origin = SirOrigin.Unknown
- kind = SirCallableKind.FUNCTION
visibility = SirVisibility.PUBLIC
name = "foo"
returnType = SirNominalType(SirSwiftModule.bool)
}
)
- }
+ }.attachDeclarations()
runTest(
module,
@@ -47,7 +46,6 @@
declarations.add(
buildFunction {
origin = SirOrigin.Unknown
- kind = SirCallableKind.FUNCTION
visibility = SirVisibility.PUBLIC
name = "foo1"
returnType = SirNominalType(SirSwiftModule.bool)
@@ -56,13 +54,12 @@
declarations.add(
buildFunction {
origin = SirOrigin.Unknown
- kind = SirCallableKind.FUNCTION
visibility = SirVisibility.PUBLIC
name = "foo2"
returnType = SirNominalType(SirSwiftModule.bool)
}
)
- }
+ }.attachDeclarations()
runTest(
module,
@@ -77,7 +74,6 @@
declarations.add(
buildFunction {
origin = SirOrigin.Unknown
- kind = SirCallableKind.FUNCTION
visibility = SirVisibility.PUBLIC
name = "foo"
parameters.add(
@@ -89,7 +85,7 @@
returnType = SirNominalType(SirSwiftModule.bool)
}
)
- }
+ }.attachDeclarations()
runTest(
module,
@@ -105,7 +101,6 @@
declarations.add(
buildFunction {
origin = SirOrigin.Unknown
- kind = SirCallableKind.FUNCTION
visibility = SirVisibility.PUBLIC
name = "foo"
parameters.add(
@@ -123,7 +118,7 @@
returnType = SirNominalType(SirSwiftModule.bool)
}
)
- }
+ }.attachDeclarations()
runTest(
module,
@@ -139,7 +134,6 @@
declarations.add(
buildFunction {
origin = SirOrigin.Unknown
- kind = SirCallableKind.FUNCTION
visibility = SirVisibility.PUBLIC
name = "foo"
parameters.addAll(
@@ -185,7 +179,7 @@
returnType = SirNominalType(SirSwiftModule.bool)
}
)
- }
+ }.attachDeclarations()
runTest(
module,
@@ -201,7 +195,6 @@
declarations.add(
buildFunction {
origin = SirOrigin.Unknown
- kind = SirCallableKind.FUNCTION
visibility = SirVisibility.PUBLIC
name = "foo"
parameters.add(
@@ -214,7 +207,7 @@
body = SirFunctionBody(listOf("return foo_wrapped(arg1)"))
}
)
- }
+ }.attachDeclarations()
runTest(
module,
@@ -228,22 +221,28 @@
val module = buildModule {
name = "Test"
declarations.add(
- buildFunction {
- origin = SirOrigin.Unknown
- kind = SirCallableKind.STATIC_METHOD
- visibility = SirVisibility.PUBLIC
- name = "foo"
- parameters.add(
- SirParameter(
- argumentName = "arg1",
- type = SirNominalType(SirSwiftModule.int32)
- )
+ buildClass {
+ name = "Foo"
+ declarations.add(
+ buildFunction {
+ origin = SirOrigin.Unknown
+ isInstance = false
+ modality = SirModality.FINAL
+ 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)"))
+ }
)
- returnType = SirNominalType(SirSwiftModule.bool)
- body = SirFunctionBody(listOf("return foo_wrapped(arg1)"))
- }
+ }.attachDeclarations()
)
- }
+ }.attachDeclarations()
runTest(
module,
@@ -257,22 +256,27 @@
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)
- )
+ buildClass {
+ name = "Foo"
+ declarations.add(
+ buildFunction {
+ origin = SirOrigin.Unknown
+ isInstance = false
+ 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)"))
+ }
)
- returnType = SirNominalType(SirSwiftModule.bool)
- body = SirFunctionBody(listOf("return foo_wrapped(arg1)"))
- }
+ }.attachDeclarations()
)
- }
+ }.attachDeclarations()
runTest(
module,
@@ -288,7 +292,6 @@
declarations.add(
buildFunction {
origin = SirOrigin.Unknown
- kind = SirCallableKind.FUNCTION
visibility = SirVisibility.PUBLIC
name = "foo"
parameters.add(
@@ -306,7 +309,7 @@
""".trimIndent()
}
)
- }
+ }.attachDeclarations()
runTest(
module,
@@ -378,9 +381,7 @@
buildVariable {
name = "myVariable"
type = SirNominalType(SirSwiftModule.bool)
- getter = buildGetter {
- kind = SirCallableKind.INSTANCE_METHOD
- }
+ getter = buildGetter {}
documentation = """
/// Function foo description.
/// - Parameters:
@@ -389,7 +390,7 @@
""".trimIndent()
}
)
- }
+ }.attachDeclarations()
runTest(
module,
@@ -480,7 +481,6 @@
declarations.add(
buildFunction {
origin = SirOrigin.Unknown
- kind = SirCallableKind.INSTANCE_METHOD
visibility = SirVisibility.PUBLIC
name = "foo"
parameters.addAll(
@@ -526,7 +526,6 @@
declarations.add(
buildFunction {
origin = SirOrigin.Unknown
- kind = SirCallableKind.INSTANCE_METHOD
visibility = SirVisibility.PUBLIC
name = "bar"
parameters.addAll(
@@ -552,7 +551,7 @@
returnType = SirNominalType(SirSwiftModule.bool)
}
)
- }
+ }.attachDeclarations()
)
}
@@ -575,7 +574,6 @@
declarations.add(
buildInit {
origin = SirOrigin.Unknown
- kind = SirCallableKind.INSTANCE_METHOD
initKind = SirInitializerKind.ORDINARY
visibility = SirVisibility.PUBLIC
isFailable = true
@@ -622,7 +620,6 @@
declarations.add(
buildInit {
origin = SirOrigin.Unknown
- kind = SirCallableKind.INSTANCE_METHOD
initKind = SirInitializerKind.ORDINARY
visibility = SirVisibility.PUBLIC
isFailable = false
@@ -653,7 +650,6 @@
declarations.add(
buildInit {
origin = SirOrigin.Unknown
- kind = SirCallableKind.INSTANCE_METHOD
initKind = SirInitializerKind.REQUIRED
visibility = SirVisibility.PUBLIC
isFailable = false
@@ -684,7 +680,6 @@
declarations.add(
buildInit {
origin = SirOrigin.Unknown
- kind = SirCallableKind.INSTANCE_METHOD
initKind = SirInitializerKind.CONVENIENCE
visibility = SirVisibility.PUBLIC
isFailable = false
@@ -735,9 +730,7 @@
buildVariable {
name = "my_variable1"
type = SirNominalType(SirSwiftModule.bool)
- getter = buildGetter {
- kind = SirCallableKind.INSTANCE_METHOD
- }
+ getter = buildGetter {}
}
)
@@ -745,9 +738,7 @@
buildVariable {
name = "my_variable2"
type = SirNominalType(SirSwiftModule.int8)
- getter = buildGetter {
- kind = SirCallableKind.INSTANCE_METHOD
- }
+ getter = buildGetter {}
}
)
declarations.add(
@@ -756,14 +747,12 @@
type = SirNominalType(
SirSwiftModule.int32,
).optional()
- getter = buildGetter {
- kind = SirCallableKind.INSTANCE_METHOD
- }
+ getter = buildGetter {}
}
)
- }
+ }.attachDeclarations()
)
- }
+ }.attachDeclarations()
runTest(
module,
@@ -825,7 +814,7 @@
)
}.apply {
externalDefinedEnum.parent = this
- }
+ }.attachDeclarations()
val enum: SirEnum
val module = buildModule {
@@ -874,7 +863,6 @@
declarations.add(
buildFunction {
origin = SirOrigin.Unknown
- kind = SirCallableKind.FUNCTION
visibility = SirVisibility.PUBLIC
name = "foo"
returnType = SirNominalType(SirSwiftModule.bool)
@@ -885,12 +873,10 @@
buildVariable {
name = "my_variable1"
type = SirNominalType(SirSwiftModule.bool)
- getter = buildGetter {
- kind = SirCallableKind.INSTANCE_METHOD
- }
+ getter = buildGetter {}
}
)
- }
+ }.attachDeclarations()
)
enum = buildEnum {
@@ -910,7 +896,7 @@
name = "Foo"
}
)
- }
+ }.attachDeclarations()
)
declarations.add(
@@ -923,11 +909,11 @@
name = "Foo"
}
)
- }
+ }.attachDeclarations()
)
}.apply {
enum.parent = this
- }
+ }.attachDeclarations()
runTest(
module,
@@ -976,13 +962,13 @@
name = "OPEN_PUBLIC"
origin = SirOrigin.Unknown
visibility = SirVisibility.PUBLIC
- modality = SirClassModality.OPEN
+ modality = SirModality.OPEN
},
buildClass {
name = "FINAL_PUBLIC"
origin = SirOrigin.Unknown
visibility = SirVisibility.PUBLIC
- modality = SirClassModality.FINAL
+ modality = SirModality.FINAL
},
buildClass {
name = "UNSPECIDIED_PUBLIC"
@@ -993,13 +979,13 @@
name = "OPEN_INTERNAL"
origin = SirOrigin.Unknown
visibility = SirVisibility.INTERNAL
- modality = SirClassModality.OPEN
+ modality = SirModality.OPEN
},
buildClass {
name = "FINAL_INTERNAL"
origin = SirOrigin.Unknown
visibility = SirVisibility.INTERNAL
- modality = SirClassModality.FINAL
+ modality = SirModality.FINAL
},
buildClass {
name = "UNSPECIFIED_INTERNAL"
@@ -1024,14 +1010,13 @@
attributes += SirAttribute.Available(message = "Deprecated class", deprecated = true, obsoleted = false)
declarations += buildFunction {
origin = SirOrigin.Unknown
- kind = SirCallableKind.FUNCTION
visibility = SirVisibility.PUBLIC
name = "method"
returnType = SirNominalType(SirSwiftModule.bool)
documentation = "// Check that nested attributes handled properly"
attributes += SirAttribute.Available(message = "Available method", deprecated = false, obsoleted = false)
}
- }
+ }.attachDeclarations()
val module = buildModule {
name = "Test"
@@ -1039,7 +1024,6 @@
addChild {
buildFunction {
origin = SirOrigin.Unknown
- kind = SirCallableKind.FUNCTION
visibility = SirVisibility.PUBLIC
name = "foo"
returnType = SirNominalType(SirSwiftModule.bool)
@@ -1050,9 +1034,7 @@
buildVariable {
name = "myVariable"
type = SirNominalType(SirSwiftModule.bool)
- getter = buildGetter {
- kind = SirCallableKind.INSTANCE_METHOD
- }
+ getter = buildGetter {}
documentation = """
/// Example docstring
""".trimIndent()
@@ -1062,7 +1044,8 @@
addChild {
clazz
}
- }
+ }.attachDeclarations()
+
runTest(
module,
"testData/attributes"
@@ -1076,7 +1059,6 @@
declarations.add(
buildFunction {
origin = SirOrigin.Unknown
- kind = SirCallableKind.FUNCTION
visibility = SirVisibility.PUBLIC
name = "foo"
returnType = SirNominalType(
@@ -1084,10 +1066,13 @@
).optional()
}
)
- }
+ }.attachDeclarations()
+
runTest(
module,
"testData/simple_function_returns_nullable"
)
}
}
+
+private fun <T : SirDeclarationContainer> T.attachDeclarations(): T = also { declarations.forEach { it.parent = this } }
\ No newline at end of file
diff --git a/native/swift/sir-providers/src/org/jetbrains/kotlin/sir/providers/impl/nodes/SirTrampolineFunction.kt b/native/swift/sir-providers/src/org/jetbrains/kotlin/sir/providers/impl/nodes/SirTrampolineFunction.kt
index a19b29ab..d8b4d57 100644
--- a/native/swift/sir-providers/src/org/jetbrains/kotlin/sir/providers/impl/nodes/SirTrampolineFunction.kt
+++ b/native/swift/sir-providers/src/org/jetbrains/kotlin/sir/providers/impl/nodes/SirTrampolineFunction.kt
@@ -16,9 +16,11 @@
override val origin: SirOrigin get() = SirOrigin.Trampoline(source)
override val visibility: SirVisibility get() = source.visibility
override val documentation: String? get() = source.documentation
- override val kind: SirCallableKind get() = SirCallableKind.FUNCTION
override val name: String get() = source.name
override val returnType: SirType get() = source.returnType
+ override val isOverride: Boolean get() = false
+ override val isInstance: Boolean get() = false
+ override val modality: SirModality get() = SirModality.UNSPECIFIED
override val attributes: MutableList<SirAttribute> get() = source.attributes
diff --git a/native/swift/sir-providers/src/org/jetbrains/kotlin/sir/providers/impl/nodes/SirTrampolineVariable.kt b/native/swift/sir-providers/src/org/jetbrains/kotlin/sir/providers/impl/nodes/SirTrampolineVariable.kt
index 65e2628..47776df 100644
--- a/native/swift/sir-providers/src/org/jetbrains/kotlin/sir/providers/impl/nodes/SirTrampolineVariable.kt
+++ b/native/swift/sir-providers/src/org/jetbrains/kotlin/sir/providers/impl/nodes/SirTrampolineVariable.kt
@@ -19,11 +19,13 @@
override val documentation: String? get() = source.documentation
override val name: String get() = source.name
override val type: SirType get() = source.type
+ override val isOverride: Boolean get() = false
+ override val isInstance: Boolean get() = false
+ override val modality: SirModality get() = SirModality.UNSPECIFIED
override val attributes: MutableList<SirAttribute> get() = source.attributes
override val getter: SirGetter by lazy {
buildGetterCopy(source.getter) {
origin = SirOrigin.Trampoline(source.getter)
- kind = SirCallableKind.FUNCTION
body = SirFunctionBody(
listOf(
source.swiftFqName
@@ -36,7 +38,6 @@
source.setter?.let { setter ->
buildSetterCopy(setter) {
origin = SirOrigin.Trampoline(setter)
- kind = SirCallableKind.FUNCTION
body = SirFunctionBody(
listOf(
"${source.swiftFqName} = newValue"
diff --git a/native/swift/sir-providers/src/org/jetbrains/kotlin/sir/providers/utils/KotlinRuntimeModule.kt b/native/swift/sir-providers/src/org/jetbrains/kotlin/sir/providers/utils/KotlinRuntimeModule.kt
index 39a05886..70d2906 100644
--- a/native/swift/sir-providers/src/org/jetbrains/kotlin/sir/providers/utils/KotlinRuntimeModule.kt
+++ b/native/swift/sir-providers/src/org/jetbrains/kotlin/sir/providers/utils/KotlinRuntimeModule.kt
@@ -33,14 +33,12 @@
origin = KotlinRuntimeElement()
declarations += buildInit {
origin = KotlinRuntimeElement()
- kind = SirCallableKind.CLASS_METHOD
isFailable = false
initKind = SirInitializerKind.ORDINARY
isOverride = false
}
declarations += buildInit {
origin = KotlinRuntimeElement()
- kind = SirCallableKind.CLASS_METHOD
isFailable = false
initKind = SirInitializerKind.ORDINARY
isOverride = false
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 dd51726..4905373 100644
--- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirAccessor.kt
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirAccessor.kt
@@ -11,12 +11,11 @@
/**
* Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.accessor]
*/
-sealed class SirAccessor : SirCallable() {
+sealed class SirAccessor : SirElementBase(), SirCallable {
abstract override val origin: SirOrigin
abstract override val visibility: SirVisibility
abstract override val documentation: String?
abstract override var parent: SirDeclarationParent
abstract override val attributes: MutableList<SirAttribute>
- 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 40f5e44..3541b7f 100644
--- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirCallable.kt
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirCallable.kt
@@ -11,12 +11,11 @@
/**
* Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.callable]
*/
-sealed class SirCallable : SirElementBase(), SirDeclaration {
- abstract override val origin: SirOrigin
- abstract override val visibility: SirVisibility
- abstract override val documentation: String?
- abstract override var parent: SirDeclarationParent
- abstract override val attributes: MutableList<SirAttribute>
- abstract val kind: SirCallableKind
- abstract var body: SirFunctionBody?
+sealed interface SirCallable : SirDeclaration {
+ override val origin: SirOrigin
+ override val visibility: SirVisibility
+ override val documentation: String?
+ override var parent: SirDeclarationParent
+ override val attributes: MutableList<SirAttribute>
+ 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 75b13ef..43a0170 100644
--- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirClass.kt
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirClass.kt
@@ -20,5 +20,5 @@
abstract override val name: String
abstract override val declarations: List<SirDeclaration>
abstract val superClass: SirType?
- abstract val modality: SirClassModality
+ abstract val modality: SirModality
}
diff --git a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirClassMemberDeclaration.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirClassMemberDeclaration.kt
new file mode 100644
index 0000000..504248b
--- /dev/null
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirClassMemberDeclaration.kt
@@ -0,0 +1,23 @@
+/*
+ * 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.
+ */
+
+// This file was generated automatically. See native/swift/sir/tree-generator/Readme.md.
+// DO NOT MODIFY IT MANUALLY.
+
+package org.jetbrains.kotlin.sir
+
+/**
+ * Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.classMemberDeclaration]
+ */
+sealed interface SirClassMemberDeclaration : SirDeclaration {
+ override val origin: SirOrigin
+ override val visibility: SirVisibility
+ override val documentation: String?
+ override var parent: SirDeclarationParent
+ override val attributes: MutableList<SirAttribute>
+ val isOverride: Boolean
+ val isInstance: Boolean
+ val modality: SirModality
+}
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 6ac9ff9..9dba67f 100644
--- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirFunction.kt
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirFunction.kt
@@ -11,14 +11,16 @@
/**
* Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.function]
*/
-abstract class SirFunction : SirCallable() {
+abstract class SirFunction : SirElementBase(), SirCallable, SirClassMemberDeclaration {
abstract override val origin: SirOrigin
abstract override val visibility: SirVisibility
abstract override val documentation: String?
abstract override var parent: SirDeclarationParent
abstract override val attributes: MutableList<SirAttribute>
- abstract override val kind: SirCallableKind
abstract override var body: SirFunctionBody?
+ abstract override val isOverride: Boolean
+ abstract override val isInstance: Boolean
+ abstract override val modality: SirModality
abstract val name: String
abstract val parameters: List<SirParameter>
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 585c04b..7f99c35 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,5 @@
abstract override val documentation: String?
abstract override var parent: SirDeclarationParent
abstract override val attributes: MutableList<SirAttribute>
- abstract override val kind: SirCallableKind
abstract override var body: SirFunctionBody?
}
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 f79b617..a6da7a8 100644
--- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirInit.kt
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirInit.kt
@@ -11,13 +11,12 @@
/**
* Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.init]
*/
-abstract class SirInit : SirCallable() {
+abstract class SirInit : SirElementBase(), SirCallable {
abstract override val origin: SirOrigin
abstract override val visibility: SirVisibility
abstract override val documentation: String?
abstract override var parent: SirDeclarationParent
abstract override val attributes: MutableList<SirAttribute>
- abstract override val kind: SirCallableKind
abstract override var body: SirFunctionBody?
abstract val isFailable: Boolean
abstract val parameters: List<SirParameter>
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 574eb9f..4007dc2 100644
--- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirSetter.kt
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirSetter.kt
@@ -17,7 +17,6 @@
abstract override val documentation: String?
abstract override var parent: SirDeclarationParent
abstract override val attributes: MutableList<SirAttribute>
- 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 e39ef34..3c16ac2 100644
--- a/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirVariable.kt
+++ b/native/swift/sir/gen/org/jetbrains/kotlin/sir/SirVariable.kt
@@ -11,12 +11,15 @@
/**
* Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.variable]
*/
-abstract class SirVariable : SirElementBase(), SirDeclaration, SirDeclarationParent {
+abstract class SirVariable : SirElementBase(), SirDeclaration, SirDeclarationParent, SirClassMemberDeclaration {
abstract override val origin: SirOrigin
abstract override val visibility: SirVisibility
abstract override val documentation: String?
abstract override var parent: SirDeclarationParent
abstract override val attributes: MutableList<SirAttribute>
+ abstract override val isOverride: Boolean
+ abstract override val isInstance: Boolean
+ abstract override val modality: SirModality
abstract val name: String
abstract val type: SirType
abstract val getter: SirGetter
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 b7800c9..5c095c5 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
@@ -23,7 +23,7 @@
lateinit var name: String
val declarations: MutableList<SirDeclaration> = mutableListOf()
var superClass: SirType? = null
- var modality: SirClassModality = SirClassModality.UNSPECIFIED
+ var modality: SirModality = SirModality.UNSPECIFIED
fun build(): SirClass {
return SirClassImpl(
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 8cfbceb..81c4cde 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
@@ -20,8 +20,10 @@
var visibility: SirVisibility = SirVisibility.PUBLIC
var documentation: String? = null
val attributes: MutableList<SirAttribute> = mutableListOf()
- lateinit var kind: SirCallableKind
var body: SirFunctionBody? = null
+ var isOverride: Boolean = false
+ var isInstance: Boolean = true
+ var modality: SirModality = SirModality.UNSPECIFIED
lateinit var name: String
val parameters: MutableList<SirParameter> = mutableListOf()
lateinit var returnType: SirType
@@ -32,8 +34,10 @@
visibility,
documentation,
attributes,
- kind,
body,
+ isOverride,
+ isInstance,
+ modality,
name,
parameters,
returnType,
@@ -60,8 +64,10 @@
copyBuilder.visibility = original.visibility
copyBuilder.documentation = original.documentation
copyBuilder.attributes.addAll(original.attributes)
- copyBuilder.kind = original.kind
copyBuilder.body = original.body
+ copyBuilder.isOverride = original.isOverride
+ copyBuilder.isInstance = original.isInstance
+ copyBuilder.modality = original.modality
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 be48634..edc303b 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
@@ -20,7 +20,6 @@
var visibility: SirVisibility = SirVisibility.PUBLIC
var documentation: String? = null
val attributes: MutableList<SirAttribute> = mutableListOf()
- lateinit var kind: SirCallableKind
var body: SirFunctionBody? = null
fun build(): SirGetter {
@@ -29,7 +28,6 @@
visibility,
documentation,
attributes,
- kind,
body,
)
}
@@ -37,7 +35,7 @@
}
@OptIn(ExperimentalContracts::class)
-inline fun buildGetter(init: SirGetterBuilder.() -> Unit): SirGetter {
+inline fun buildGetter(init: SirGetterBuilder.() -> Unit = {}): SirGetter {
contract {
callsInPlace(init, InvocationKind.EXACTLY_ONCE)
}
@@ -45,7 +43,7 @@
}
@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)
}
@@ -54,7 +52,6 @@
copyBuilder.visibility = original.visibility
copyBuilder.documentation = original.documentation
copyBuilder.attributes.addAll(original.attributes)
- 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/SirInitBuilder.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/builder/SirInitBuilder.kt
index e456ce4..b94ed49 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
@@ -20,12 +20,11 @@
var visibility: SirVisibility = SirVisibility.PUBLIC
var documentation: String? = null
val attributes: MutableList<SirAttribute> = mutableListOf()
- lateinit var kind: SirCallableKind
var body: SirFunctionBody? = null
var isFailable: Boolean by kotlin.properties.Delegates.notNull<Boolean>()
val parameters: MutableList<SirParameter> = mutableListOf()
lateinit var initKind: SirInitializerKind
- var isOverride: Boolean by kotlin.properties.Delegates.notNull<Boolean>()
+ var isOverride: Boolean = false
fun build(): SirInit {
return SirInitImpl(
@@ -33,7 +32,6 @@
visibility,
documentation,
attributes,
- kind,
body,
isFailable,
parameters,
@@ -62,7 +60,6 @@
copyBuilder.visibility = original.visibility
copyBuilder.documentation = original.documentation
copyBuilder.attributes.addAll(original.attributes)
- copyBuilder.kind = original.kind
copyBuilder.body = original.body
copyBuilder.isFailable = original.isFailable
copyBuilder.parameters.addAll(original.parameters)
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 b9a6c66..5c64cbf 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
@@ -20,7 +20,6 @@
var visibility: SirVisibility = SirVisibility.PUBLIC
var documentation: String? = null
val attributes: MutableList<SirAttribute> = mutableListOf()
- lateinit var kind: SirCallableKind
var body: SirFunctionBody? = null
var parameterName: String = "newValue"
@@ -30,7 +29,6 @@
visibility,
documentation,
attributes,
- kind,
body,
parameterName,
)
@@ -39,7 +37,7 @@
}
@OptIn(ExperimentalContracts::class)
-inline fun buildSetter(init: SirSetterBuilder.() -> Unit): SirSetter {
+inline fun buildSetter(init: SirSetterBuilder.() -> Unit = {}): SirSetter {
contract {
callsInPlace(init, InvocationKind.EXACTLY_ONCE)
}
@@ -47,7 +45,7 @@
}
@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)
}
@@ -56,7 +54,6 @@
copyBuilder.visibility = original.visibility
copyBuilder.documentation = original.documentation
copyBuilder.attributes.addAll(original.attributes)
- 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 e90dacf..bd3f55b 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
@@ -20,6 +20,9 @@
var visibility: SirVisibility = SirVisibility.PUBLIC
var documentation: String? = null
val attributes: MutableList<SirAttribute> = mutableListOf()
+ var isOverride: Boolean = false
+ var isInstance: Boolean = true
+ var modality: SirModality = SirModality.UNSPECIFIED
lateinit var name: String
lateinit var type: SirType
lateinit var getter: SirGetter
@@ -31,6 +34,9 @@
visibility,
documentation,
attributes,
+ isOverride,
+ isInstance,
+ modality,
name,
type,
getter,
@@ -58,6 +64,9 @@
copyBuilder.visibility = original.visibility
copyBuilder.documentation = original.documentation
copyBuilder.attributes.addAll(original.attributes)
+ copyBuilder.isOverride = original.isOverride
+ copyBuilder.isInstance = original.isInstance
+ copyBuilder.modality = original.modality
copyBuilder.name = original.name
copyBuilder.type = original.type
copyBuilder.getter = original.getter
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 affe120..0a01aca 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
@@ -20,7 +20,7 @@
override val name: String,
override val declarations: MutableList<SirDeclaration>,
override val superClass: SirType?,
- override val modality: SirClassModality,
+ override val modality: SirModality,
) : SirClass() {
override lateinit var parent: SirDeclarationParent
}
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 bfb9181..a888ff7 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,8 +17,10 @@
override val visibility: SirVisibility,
override val documentation: String?,
override val attributes: MutableList<SirAttribute>,
- override val kind: SirCallableKind,
override var body: SirFunctionBody?,
+ override val isOverride: Boolean,
+ override val isInstance: Boolean,
+ override val modality: SirModality,
override val name: String,
override val parameters: MutableList<SirParameter>,
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 8f0f59f..4f254b4 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,7 +17,6 @@
override val visibility: SirVisibility,
override val documentation: String?,
override val attributes: MutableList<SirAttribute>,
- 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/SirInitImpl.kt b/native/swift/sir/gen/org/jetbrains/kotlin/sir/impl/SirInitImpl.kt
index fbcbd47..7486855 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,7 +17,6 @@
override val visibility: SirVisibility,
override val documentation: String?,
override val attributes: MutableList<SirAttribute>,
- override val kind: SirCallableKind,
override var body: SirFunctionBody?,
override val isFailable: Boolean,
override val parameters: MutableList<SirParameter>,
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 4f7cc84..f6fa9c7 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,7 +17,6 @@
override val visibility: SirVisibility,
override val documentation: String?,
override val attributes: MutableList<SirAttribute>,
- 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 fbd2393..be7e3f2 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
@@ -17,6 +17,9 @@
override val visibility: SirVisibility,
override val documentation: String?,
override val attributes: MutableList<SirAttribute>,
+ override val isOverride: Boolean,
+ override val isInstance: Boolean,
+ override val modality: SirModality,
override val name: String,
override val type: SirType,
override val getter: SirGetter,
diff --git a/native/swift/sir/src/org/jetbrains/kotlin/sir/SirCallableKind.kt b/native/swift/sir/src/org/jetbrains/kotlin/sir/SirCallableKind.kt
index c7e753a..0eb06f6 100644
--- a/native/swift/sir/src/org/jetbrains/kotlin/sir/SirCallableKind.kt
+++ b/native/swift/sir/src/org/jetbrains/kotlin/sir/SirCallableKind.kt
@@ -9,8 +9,19 @@
FUNCTION,
INSTANCE_METHOD,
CLASS_METHOD,
- STATIC_METHOD,
}
-val SirVariable.kind: SirCallableKind
- get() = getter.kind
+val SirCallable.kind: SirCallableKind
+ get() = when (this) {
+ is SirSetter, is SirGetter -> (parent as SirVariable).kind
+ is SirFunction -> (this as SirClassMemberDeclaration).kind
+ is SirInit -> SirCallableKind.CLASS_METHOD
+ }
+
+val SirClassMemberDeclaration.kind: SirCallableKind
+ get() = if (parent is SirModule)
+ SirCallableKind.FUNCTION
+ else if (isInstance)
+ SirCallableKind.INSTANCE_METHOD
+ else
+ SirCallableKind.CLASS_METHOD
\ No newline at end of file
diff --git a/native/swift/sir/src/org/jetbrains/kotlin/sir/SirClassModality.kt b/native/swift/sir/src/org/jetbrains/kotlin/sir/SirClassModality.kt
deleted file mode 100644
index afe642b..0000000
--- a/native/swift/sir/src/org/jetbrains/kotlin/sir/SirClassModality.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- * 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 SirClassModality {
- OPEN,
- FINAL,
- UNSPECIFIED,
-}
\ No newline at end of file
diff --git a/native/swift/sir/src/org/jetbrains/kotlin/sir/SirModality.kt b/native/swift/sir/src/org/jetbrains/kotlin/sir/SirModality.kt
new file mode 100644
index 0000000..d5dfc65
--- /dev/null
+++ b/native/swift/sir/src/org/jetbrains/kotlin/sir/SirModality.kt
@@ -0,0 +1,18 @@
+/*
+ * 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 SirModality {
+ OPEN,
+ FINAL,
+ UNSPECIFIED,
+}
+
+val SirClassMemberDeclaration.effectiveModality: SirModality
+ get() = when ((this.parent as? SirClass)?.modality) {
+ SirModality.FINAL -> SirModality.FINAL
+ else -> this.modality
+ }
\ No newline at end of file
diff --git a/native/swift/sir/src/org/jetbrains/kotlin/sir/util/SirExtensions.kt b/native/swift/sir/src/org/jetbrains/kotlin/sir/util/SirExtensions.kt
index 2e85713..7fbff95 100644
--- a/native/swift/sir/src/org/jetbrains/kotlin/sir/util/SirExtensions.kt
+++ b/native/swift/sir/src/org/jetbrains/kotlin/sir/util/SirExtensions.kt
@@ -74,4 +74,4 @@
get() = swiftParentNamePrefix?.let { "$it.$name" } ?: name
val SirVariable.swiftFqName: String
- get() = swiftParentNamePrefix?.let { "$it.$name" } ?: name
\ No newline at end of file
+ get() = swiftParentNamePrefix?.let { "$it.$name" } ?: name
diff --git a/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/BuilderConfigurator.kt b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/BuilderConfigurator.kt
index be106e4..5240803 100644
--- a/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/BuilderConfigurator.kt
+++ b/native/swift/sir/tree-generator/src/org/jetbrains/kotlin/sir/tree/generator/BuilderConfigurator.kt
@@ -23,8 +23,16 @@
default(it, "SirVisibility.PUBLIC")
}
+ configureFieldInAllLeafBuilders("isOverride") {
+ default(it, "false")
+ }
+
+ configureFieldInAllLeafBuilders("isInstance") {
+ default(it, "true")
+ }
+
configureFieldInAllLeafBuilders("modality") {
- default(it, "SirClassModality.UNSPECIFIED")
+ default(it, "SirModality.UNSPECIFIED")
}
builder(setter) {
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 b657ab8..0e29453 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
@@ -53,6 +53,15 @@
+listField("attributes", attributeType, isMutableList = true)
}
+ val classMemberDeclaration by sealedElement {
+ customParentInVisitor = declaration
+ parent(declaration)
+
+ +field("isOverride", boolean)
+ +field("isInstance", boolean)
+ +field("modality", modalityKind)
+ }
+
val extension: Element by element {
customParentInVisitor = declaration
parent(declaration)
@@ -106,7 +115,6 @@
val callable by sealedElement {
parent(declaration)
- +field("kind", callableKind)
+field("body", functionBodyType, nullable = true, mutable = true)
}
@@ -125,6 +133,7 @@
val function by element {
customParentInVisitor = callable
parent(callable)
+ parent(classMemberDeclaration)
+field("name", string)
+listField("parameters", parameterType)
@@ -150,6 +159,7 @@
customParentInVisitor = declaration
parent(declaration)
parent(declarationParent)
+ parent(classMemberDeclaration)
+field("name", string)
+field("type", typeType)
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 684df11..c33b78f 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
@@ -18,7 +18,7 @@
val callableKind = type(BASE_PACKAGE, "SirCallableKind", TypeKind.Class)
val initKind = type(BASE_PACKAGE, "SirInitializerKind", TypeKind.Class)
val importType = type(BASE_PACKAGE, "SirImport", TypeKind.Class)
-val modalityKind = type(BASE_PACKAGE, "SirClassModality", TypeKind.Class)
+val modalityKind = type(BASE_PACKAGE, "SirModality", TypeKind.Class)
val attributeType = type(BASE_PACKAGE, "SirAttribute", TypeKind.Class)
val swiftIrImplementationDetailAnnotation = type(BASE_PACKAGE, "SirImplementationDetail", TypeKind.Class)