KT-65897: add exporting of kotlin constructors as Swift constructors #KT-65897 fixed

Merge-request: KT-MR-14734
Merged-by: Artem Olkov <artem.olkov@jetbrains.com>
This commit is contained in:
Artem Olkov
2024-03-14 12:21:39 +00:00
committed by Space Team
parent bbcc5c9aed
commit fcc4470b74
18 changed files with 544 additions and 19 deletions
@@ -0,0 +1,34 @@
/*
* 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
import org.jetbrains.kotlin.sir.visitors.SirTransformer
import org.jetbrains.kotlin.sir.visitors.SirVisitor
/**
* Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.init]
*/
abstract class SirInit : SirCallable() {
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 isFailable: Boolean
abstract val parameters: List<SirParameter>
abstract val initKind: SirInitializerKind
abstract var documentation: String?
override fun <R, D> accept(visitor: SirVisitor<R, D>, data: D): R =
visitor.visitInit(this, data)
@Suppress("UNCHECKED_CAST")
override fun <E : SirElement, D> transform(transformer: SirTransformer<D>, data: D): E =
transformer.transformInit(this, data) as E
}
@@ -0,0 +1,66 @@
/*
* 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.
@file:Suppress("DuplicatedCode", "unused")
package org.jetbrains.kotlin.sir.builder
import kotlin.contracts.*
import org.jetbrains.kotlin.sir.*
import org.jetbrains.kotlin.sir.impl.SirInitImpl
@SirBuilderDsl
class SirInitBuilder {
var origin: SirOrigin = SirOrigin.Unknown
var visibility: SirVisibility = SirVisibility.PUBLIC
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 documentation: String? = null
fun build(): SirInit {
return SirInitImpl(
origin,
visibility,
kind,
body,
isFailable,
parameters,
initKind,
documentation,
)
}
}
@OptIn(ExperimentalContracts::class)
inline fun buildInit(init: SirInitBuilder.() -> Unit): SirInit {
contract {
callsInPlace(init, InvocationKind.EXACTLY_ONCE)
}
return SirInitBuilder().apply(init).build()
}
@OptIn(ExperimentalContracts::class)
inline fun buildInitCopy(original: SirInit, init: SirInitBuilder.() -> Unit): SirInit {
contract {
callsInPlace(init, InvocationKind.EXACTLY_ONCE)
}
val copyBuilder = SirInitBuilder()
copyBuilder.origin = original.origin
copyBuilder.visibility = original.visibility
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()
}
@@ -0,0 +1,34 @@
/*
* 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.
@file:Suppress("DuplicatedCode")
package org.jetbrains.kotlin.sir.impl
import org.jetbrains.kotlin.sir.*
import org.jetbrains.kotlin.sir.visitors.SirTransformer
import org.jetbrains.kotlin.sir.visitors.SirVisitor
internal class SirInitImpl(
override val origin: SirOrigin,
override val visibility: SirVisibility,
override val kind: SirCallableKind,
override var body: SirFunctionBody?,
override val isFailable: Boolean,
override val parameters: MutableList<SirParameter>,
override val initKind: SirInitializerKind,
override var documentation: String?,
) : SirInit() {
override lateinit var parent: SirDeclarationParent
override fun <R, D> acceptChildren(visitor: SirVisitor<R, D>, data: D) {
}
override fun <D> transformChildren(transformer: SirTransformer<D>, data: D) {
}
}
@@ -87,6 +87,14 @@ abstract class SirTransformer<in D> : SirVisitor<SirElement, D>() {
return transformCallable(callable, data)
}
open fun transformInit(init: SirInit, data: D): SirDeclaration {
return transformCallable(init, data)
}
final override fun visitInit(init: SirInit, data: D): SirDeclaration {
return transformInit(init, data)
}
open fun transformFunction(function: SirFunction, data: D): SirDeclaration {
return transformCallable(function, data)
}
@@ -68,6 +68,12 @@ abstract class SirTransformerVoid : SirTransformer<Nothing?>() {
final override fun transformCallable(callable: SirCallable, data: Nothing?): SirDeclaration =
transformCallable(callable)
open fun transformInit(init: SirInit): SirDeclaration =
transformCallable(init)
final override fun transformInit(init: SirInit, data: Nothing?): SirDeclaration =
transformInit(init)
open fun transformFunction(function: SirFunction): SirDeclaration =
transformCallable(function)
@@ -41,6 +41,9 @@ abstract class SirVisitor<out R, in D> {
open fun visitCallable(callable: SirCallable, data: D): R =
visitDeclaration(callable, data)
open fun visitInit(init: SirInit, data: D): R =
visitCallable(init, data)
open fun visitFunction(function: SirFunction, data: D): R =
visitCallable(function, data)
@@ -86,6 +86,14 @@ abstract class SirVisitorVoid : SirVisitor<Unit, Nothing?>() {
visitDeclaration(callable)
}
final override fun visitInit(init: SirInit, data: Nothing?) {
visitInit(init)
}
open fun visitInit(init: SirInit) {
visitCallable(init)
}
final override fun visitFunction(function: SirFunction, data: Nothing?) {
visitFunction(function)
}
@@ -0,0 +1,12 @@
/*
* 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 SirInitializerKind {
ORDINARY,
REQUIRED,
CONVENIENCE
}
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.sir.*
val SirCallable.allParameters: List<SirParameter>
get() = when (this) {
is SirFunction -> this.parameters
is SirInit -> this.parameters
is SirSetter -> listOf(SirParameter(parameterName = parameterName, type = this.valueType))
is SirGetter -> listOf()
}
@@ -18,7 +19,7 @@ val SirCallable.returnType: SirType
get() = when (this) {
is SirFunction -> this.returnType
is SirGetter -> this.valueType
is SirSetter -> SirNominalType(SirSwiftModule.void)
is SirSetter, is SirInit -> SirNominalType(SirSwiftModule.void)
}
val SirAccessor.valueType: SirType
@@ -81,6 +81,18 @@ object SwiftIrTree : AbstractSwiftIrTreeBuilder() {
+field("body", functionBodyType, nullable = true, mutable = true)
}
val init by element {
customParentInVisitor = callable
parent(callable)
+field("isFailable", boolean)
+listField("parameters", parameterType)
+field("initKind", initKind)
+field(name = "documentation", string, nullable = true, mutable = true)
}
val function by element {
customParentInVisitor = callable
parent(callable)
@@ -16,6 +16,7 @@ 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)
val initKind = type(BASE_PACKAGE, "SirInitializerKind", TypeKind.Class)
private const val VISITORS_PACKAGE = "$BASE_PACKAGE.visitors"