[Swift Export] KT-65008: support simple top-level properties

Merge-request: KT-MR-14131
Merged-by: Gleb Lukianets <Gleb.Lukianets@jetbrains.com>
This commit is contained in:
Gleb Lukianets
2024-02-05 16:29:37 +00:00
committed by Space Team
parent ad5ee28d58
commit f262247b2b
49 changed files with 1172 additions and 72 deletions
@@ -0,0 +1,29 @@
/*
* 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.accessor]
*/
sealed class SirAccessor : SirNativeCallable() {
abstract override val origin: SirOrigin
abstract override val visibility: SirVisibility
abstract override var parent: SirDeclarationParent
abstract var body: SirFunctionBody?
override fun <R, D> accept(visitor: SirVisitor<R, D>, data: D): R =
visitor.visitAccessor(this, data)
@Suppress("UNCHECKED_CAST")
override fun <E : SirElement, D> transform(transformer: SirTransformer<D>, data: D): E =
transformer.transformAccessor(this, data) as E
}
@@ -0,0 +1,28 @@
/*
* 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.foreignVariable]
*/
abstract class SirForeignVariable : SirForeignDeclaration() {
abstract override val origin: SirOrigin
abstract override val visibility: SirVisibility
abstract override var parent: SirDeclarationParent
override fun <R, D> accept(visitor: SirVisitor<R, D>, data: D): R =
visitor.visitForeignVariable(this, data)
@Suppress("UNCHECKED_CAST")
override fun <E : SirElement, D> transform(transformer: SirTransformer<D>, data: D): E =
transformer.transformForeignVariable(this, data) as E
}
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor
/**
* Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.function]
*/
abstract class SirFunction : SirElementBase(), SirCallable {
abstract class SirFunction : SirNativeCallable() {
abstract override val origin: SirOrigin
abstract override val visibility: SirVisibility
abstract override var parent: SirDeclarationParent
@@ -0,0 +1,29 @@
/*
* 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.getter]
*/
abstract class SirGetter : SirAccessor() {
abstract override val origin: SirOrigin
abstract override val visibility: SirVisibility
abstract override var parent: SirDeclarationParent
abstract override var body: SirFunctionBody?
override fun <R, D> accept(visitor: SirVisitor<R, D>, data: D): R =
visitor.visitGetter(this, data)
@Suppress("UNCHECKED_CAST")
override fun <E : SirElement, D> transform(transformer: SirTransformer<D>, data: D): E =
transformer.transformGetter(this, data) as E
}
@@ -0,0 +1,28 @@
/*
* 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.nativeCallable]
*/
sealed class SirNativeCallable : SirElementBase(), SirCallable {
abstract override val origin: SirOrigin
abstract override val visibility: SirVisibility
abstract override var parent: SirDeclarationParent
override fun <R, D> accept(visitor: SirVisitor<R, D>, data: D): R =
visitor.visitNativeCallable(this, data)
@Suppress("UNCHECKED_CAST")
override fun <E : SirElement, D> transform(transformer: SirTransformer<D>, data: D): E =
transformer.transformNativeCallable(this, data) as E
}
@@ -0,0 +1,30 @@
/*
* 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.setter]
*/
abstract class SirSetter : SirAccessor() {
abstract override val origin: SirOrigin
abstract override val visibility: SirVisibility
abstract override var parent: SirDeclarationParent
abstract override var body: SirFunctionBody?
abstract val parameterName: String
override fun <R, D> accept(visitor: SirVisitor<R, D>, data: D): R =
visitor.visitSetter(this, data)
@Suppress("UNCHECKED_CAST")
override fun <E : SirElement, D> transform(transformer: SirTransformer<D>, data: D): E =
transformer.transformSetter(this, data) as E
}
@@ -0,0 +1,33 @@
/*
* 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.variable]
*/
abstract class SirVariable : SirDeclarationParent(), SirDeclaration {
abstract override val origin: SirOrigin
abstract override val visibility: SirVisibility
abstract override var parent: SirDeclarationParent
abstract val name: String
abstract val type: SirType
abstract val getter: SirGetter
abstract val setter: SirSetter?
abstract val isStatic: Boolean
override fun <R, D> accept(visitor: SirVisitor<R, D>, data: D): R =
visitor.visitVariable(this, data)
@Suppress("UNCHECKED_CAST")
override fun <E : SirElement, D> transform(transformer: SirTransformer<D>, data: D): E =
transformer.transformVariable(this, data) as E
}
@@ -0,0 +1,50 @@
/*
* 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.SirBuilderDsl
import org.jetbrains.kotlin.sir.SirForeignVariable
import org.jetbrains.kotlin.sir.SirOrigin
import org.jetbrains.kotlin.sir.SirVisibility
import org.jetbrains.kotlin.sir.impl.SirForeignVariableImpl
@SirBuilderDsl
class SirForeignVariableBuilder {
var origin: SirOrigin = SirOrigin.Unknown
var visibility: SirVisibility = SirVisibility.PUBLIC
fun build(): SirForeignVariable {
return SirForeignVariableImpl(
origin,
visibility,
)
}
}
@OptIn(ExperimentalContracts::class)
inline fun buildForeignVariable(init: SirForeignVariableBuilder.() -> Unit = {}): SirForeignVariable {
contract {
callsInPlace(init, InvocationKind.EXACTLY_ONCE)
}
return SirForeignVariableBuilder().apply(init).build()
}
@OptIn(ExperimentalContracts::class)
inline fun buildForeignVariableCopy(original: SirForeignVariable, init: SirForeignVariableBuilder.() -> Unit = {}): SirForeignVariable {
contract {
callsInPlace(init, InvocationKind.EXACTLY_ONCE)
}
val copyBuilder = SirForeignVariableBuilder()
copyBuilder.origin = original.origin
copyBuilder.visibility = original.visibility
return copyBuilder.apply(init).build()
}
@@ -0,0 +1,51 @@
/*
* 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.SirGetterImpl
@SirBuilderDsl
class SirGetterBuilder {
var origin: SirOrigin = SirOrigin.Unknown
var visibility: SirVisibility = SirVisibility.PUBLIC
var body: SirFunctionBody? = null
fun build(): SirGetter {
return SirGetterImpl(
origin,
visibility,
body,
)
}
}
@OptIn(ExperimentalContracts::class)
inline fun buildGetter(init: SirGetterBuilder.() -> Unit = {}): SirGetter {
contract {
callsInPlace(init, InvocationKind.EXACTLY_ONCE)
}
return SirGetterBuilder().apply(init).build()
}
@OptIn(ExperimentalContracts::class)
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.body = original.body
return copyBuilder.apply(init).build()
}
@@ -0,0 +1,54 @@
/*
* 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.SirSetterImpl
@SirBuilderDsl
class SirSetterBuilder {
var origin: SirOrigin = SirOrigin.Unknown
var visibility: SirVisibility = SirVisibility.PUBLIC
var body: SirFunctionBody? = null
var parameterName: String = "newValue"
fun build(): SirSetter {
return SirSetterImpl(
origin,
visibility,
body,
parameterName,
)
}
}
@OptIn(ExperimentalContracts::class)
inline fun buildSetter(init: SirSetterBuilder.() -> Unit = {}): SirSetter {
contract {
callsInPlace(init, InvocationKind.EXACTLY_ONCE)
}
return SirSetterBuilder().apply(init).build()
}
@OptIn(ExperimentalContracts::class)
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.body = original.body
copyBuilder.parameterName = original.parameterName
return copyBuilder.apply(init).build()
}
@@ -0,0 +1,63 @@
/*
* 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.SirVariableImpl
@SirBuilderDsl
class SirVariableBuilder {
var origin: SirOrigin = SirOrigin.Unknown
var visibility: SirVisibility = SirVisibility.PUBLIC
lateinit var name: String
lateinit var type: SirType
lateinit var getter: SirGetter
var setter: SirSetter? = null
var isStatic: Boolean by kotlin.properties.Delegates.notNull<Boolean>()
fun build(): SirVariable {
return SirVariableImpl(
origin,
visibility,
name,
type,
getter,
setter,
isStatic,
)
}
}
@OptIn(ExperimentalContracts::class)
inline fun buildVariable(init: SirVariableBuilder.() -> Unit): SirVariable {
contract {
callsInPlace(init, InvocationKind.EXACTLY_ONCE)
}
return SirVariableBuilder().apply(init).build()
}
@OptIn(ExperimentalContracts::class)
inline fun buildVariableCopy(original: SirVariable, init: SirVariableBuilder.() -> Unit): SirVariable {
contract {
callsInPlace(init, InvocationKind.EXACTLY_ONCE)
}
val copyBuilder = SirVariableBuilder()
copyBuilder.origin = original.origin
copyBuilder.visibility = original.visibility
copyBuilder.name = original.name
copyBuilder.type = original.type
copyBuilder.getter = original.getter
copyBuilder.setter = original.setter
copyBuilder.isStatic = original.isStatic
return copyBuilder.apply(init).build()
}
@@ -0,0 +1,31 @@
/*
* 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.impl
import org.jetbrains.kotlin.sir.SirDeclarationParent
import org.jetbrains.kotlin.sir.SirForeignVariable
import org.jetbrains.kotlin.sir.SirOrigin
import org.jetbrains.kotlin.sir.SirVisibility
import org.jetbrains.kotlin.sir.visitors.SirTransformer
import org.jetbrains.kotlin.sir.visitors.SirVisitor
internal class SirForeignVariableImpl(
override val origin: SirOrigin,
override val visibility: SirVisibility,
) : SirForeignVariable() {
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) {
}
}
@@ -0,0 +1,29 @@
/*
* 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.impl
import org.jetbrains.kotlin.sir.*
import org.jetbrains.kotlin.sir.visitors.SirTransformer
import org.jetbrains.kotlin.sir.visitors.SirVisitor
internal class SirGetterImpl(
override val origin: SirOrigin,
override val visibility: SirVisibility,
override var body: SirFunctionBody?,
) : SirGetter() {
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) {
}
}
@@ -0,0 +1,30 @@
/*
* 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.impl
import org.jetbrains.kotlin.sir.*
import org.jetbrains.kotlin.sir.visitors.SirTransformer
import org.jetbrains.kotlin.sir.visitors.SirVisitor
internal class SirSetterImpl(
override val origin: SirOrigin,
override val visibility: SirVisibility,
override var body: SirFunctionBody?,
override val parameterName: String,
) : SirSetter() {
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) {
}
}
@@ -0,0 +1,35 @@
/*
* 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.impl
import org.jetbrains.kotlin.sir.*
import org.jetbrains.kotlin.sir.visitors.SirTransformer
import org.jetbrains.kotlin.sir.visitors.SirVisitor
internal class SirVariableImpl(
override val origin: SirOrigin,
override val visibility: SirVisibility,
override val name: String,
override val type: SirType,
override val getter: SirGetter,
override val setter: SirSetter?,
override val isStatic: Boolean,
) : SirVariable() {
override lateinit var parent: SirDeclarationParent
override fun <R, D> acceptChildren(visitor: SirVisitor<R, D>, data: D) {
getter.accept(visitor, data)
setter?.accept(visitor, data)
}
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 transformNativeCallable(nativeCallable: SirNativeCallable, data: D): SirDeclaration {
return transformCallable(nativeCallable, data)
}
final override fun visitNativeCallable(nativeCallable: SirNativeCallable, data: D): SirDeclaration {
return transformNativeCallable(nativeCallable, data)
}
open fun transformFunction(function: SirFunction, data: D): SirDeclaration {
return transformCallable(function, data)
}
@@ -102,4 +110,44 @@ abstract class SirTransformer<in D> : SirVisitor<SirElement, D>() {
final override fun visitForeignFunction(function: SirForeignFunction, data: D): SirDeclaration {
return transformForeignFunction(function, data)
}
open fun transformAccessor(accessor: SirAccessor, data: D): SirDeclaration {
return transformCallable(accessor, data)
}
final override fun visitAccessor(accessor: SirAccessor, data: D): SirDeclaration {
return transformAccessor(accessor, data)
}
open fun transformGetter(getter: SirGetter, data: D): SirDeclaration {
return transformAccessor(getter, data)
}
final override fun visitGetter(getter: SirGetter, data: D): SirDeclaration {
return transformGetter(getter, data)
}
open fun transformSetter(setter: SirSetter, data: D): SirDeclaration {
return transformAccessor(setter, data)
}
final override fun visitSetter(setter: SirSetter, data: D): SirDeclaration {
return transformSetter(setter, data)
}
open fun transformVariable(variable: SirVariable, data: D): SirDeclaration {
return transformDeclaration(variable, data)
}
final override fun visitVariable(variable: SirVariable, data: D): SirDeclaration {
return transformVariable(variable, data)
}
open fun transformForeignVariable(foreignVariable: SirForeignVariable, data: D): SirDeclaration {
return transformDeclaration(foreignVariable, data)
}
final override fun visitForeignVariable(variable: SirForeignVariable, data: D): SirDeclaration {
return transformForeignVariable(variable, data)
}
}
@@ -68,6 +68,12 @@ abstract class SirTransformerVoid : SirTransformer<Nothing?>() {
final override fun transformCallable(callable: SirCallable, data: Nothing?): SirDeclaration =
transformCallable(callable)
open fun transformNativeCallable(nativeCallable: SirNativeCallable): SirDeclaration =
transformCallable(nativeCallable)
final override fun transformNativeCallable(nativeCallable: SirNativeCallable, data: Nothing?): SirDeclaration =
transformNativeCallable(nativeCallable)
open fun transformFunction(function: SirFunction): SirDeclaration =
transformCallable(function)
@@ -79,4 +85,34 @@ abstract class SirTransformerVoid : SirTransformer<Nothing?>() {
final override fun transformForeignFunction(function: SirForeignFunction, data: Nothing?): SirDeclaration =
transformForeignFunction(function)
open fun transformAccessor(accessor: SirAccessor): SirDeclaration =
transformCallable(accessor)
final override fun transformAccessor(accessor: SirAccessor, data: Nothing?): SirDeclaration =
transformAccessor(accessor)
open fun transformGetter(getter: SirGetter): SirDeclaration =
transformAccessor(getter)
final override fun transformGetter(getter: SirGetter, data: Nothing?): SirDeclaration =
transformGetter(getter)
open fun transformSetter(setter: SirSetter): SirDeclaration =
transformAccessor(setter)
final override fun transformSetter(setter: SirSetter, data: Nothing?): SirDeclaration =
transformSetter(setter)
open fun transformVariable(variable: SirVariable): SirDeclaration =
transformDeclaration(variable)
final override fun transformVariable(variable: SirVariable, data: Nothing?): SirDeclaration =
transformVariable(variable)
open fun transformForeignVariable(variable: SirForeignVariable): SirDeclaration =
transformDeclaration(variable)
final override fun transformForeignVariable(variable: SirForeignVariable, data: Nothing?): SirDeclaration =
transformForeignVariable(variable)
}
@@ -41,9 +41,27 @@ abstract class SirVisitor<out R, in D> {
open fun visitCallable(callable: SirCallable, data: D): R =
visitDeclaration(callable, data)
open fun visitNativeCallable(nativeCallable: SirNativeCallable, data: D): R =
visitCallable(nativeCallable, data)
open fun visitFunction(function: SirFunction, data: D): R =
visitCallable(function, data)
open fun visitForeignFunction(function: SirForeignFunction, data: D): R =
visitCallable(function, data)
open fun visitAccessor(accessor: SirAccessor, data: D): R =
visitCallable(accessor, data)
open fun visitGetter(getter: SirGetter, data: D): R =
visitAccessor(getter, data)
open fun visitSetter(setter: SirSetter, data: D): R =
visitAccessor(setter, data)
open fun visitVariable(variable: SirVariable, data: D): R =
visitDeclaration(variable, data)
open fun visitForeignVariable(variable: SirForeignVariable, data: D): R =
visitDeclaration(variable, data)
}
@@ -86,6 +86,14 @@ abstract class SirVisitorVoid : SirVisitor<Unit, Nothing?>() {
visitDeclaration(callable)
}
final override fun visitNativeCallable(nativeCallable: SirNativeCallable, data: Nothing?) {
visitNativeCallable(nativeCallable)
}
open fun visitNativeCallable(nativeCallable: SirNativeCallable) {
visitCallable(nativeCallable)
}
final override fun visitFunction(function: SirFunction, data: Nothing?) {
visitFunction(function)
}
@@ -101,4 +109,44 @@ abstract class SirVisitorVoid : SirVisitor<Unit, Nothing?>() {
open fun visitForeignFunction(function: SirForeignFunction) {
visitCallable(function)
}
final override fun visitAccessor(accessor: SirAccessor, data: Nothing?) {
visitAccessor(accessor)
}
open fun visitAccessor(accessor: SirAccessor) {
visitCallable(accessor)
}
final override fun visitGetter(getter: SirGetter, data: Nothing?) {
visitGetter(getter)
}
open fun visitGetter(getter: SirGetter) {
visitAccessor(getter)
}
final override fun visitSetter(setter: SirSetter, data: Nothing?) {
visitSetter(setter)
}
open fun visitSetter(setter: SirSetter) {
visitAccessor(setter)
}
final override fun visitVariable(variable: SirVariable, data: Nothing?) {
visitVariable(variable)
}
open fun visitVariable(variable: SirVariable) {
visitDeclaration(variable)
}
final override fun visitForeignVariable(variable: SirForeignVariable, data: Nothing?) {
visitForeignVariable(variable)
}
open fun visitForeignVariable(variable: SirForeignVariable) {
visitDeclaration(variable)
}
}
@@ -19,6 +19,11 @@ sealed interface SirKotlinOrigin : SirOrigin.Foreign {
val returnType: Type
}
interface Property : SirKotlinOrigin {
val type: Type
val isWriteable: Boolean
}
interface Parameter {
val name: String
val type: Type
@@ -0,0 +1,19 @@
/*
* Copyright 2010-2023 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.constants
private const val KOTLIN_PACKAGE = "kotlin"
private const val DELIMITER = "/"
private const val KOTLIN_BUILTIN_TYPE_PREFIX = "${KOTLIN_PACKAGE}${DELIMITER}"
const val UNIT = "${KOTLIN_BUILTIN_TYPE_PREFIX}Unit"
const val BYTE = "${KOTLIN_BUILTIN_TYPE_PREFIX}Byte"
const val SHORT = "${KOTLIN_BUILTIN_TYPE_PREFIX}Short"
const val INT = "${KOTLIN_BUILTIN_TYPE_PREFIX}Int"
const val LONG = "${KOTLIN_BUILTIN_TYPE_PREFIX}Long"
const val BOOLEAN = "${KOTLIN_BUILTIN_TYPE_PREFIX}Boolean"
const val DOUBLE = "${KOTLIN_BUILTIN_TYPE_PREFIX}Double"
const val FLOAT = "${KOTLIN_BUILTIN_TYPE_PREFIX}Float"
@@ -1,18 +0,0 @@
/*
* Copyright 2010-2023 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.constants
private const val KOTLIN_PACKAGE = "kotlin"
private const val DELIMITER = "/"
private const val KOTLIN_NUMERIC_TYPE_PREFIX = "${KOTLIN_PACKAGE}${DELIMITER}"
const val BYTE = "${KOTLIN_NUMERIC_TYPE_PREFIX}Byte"
const val SHORT = "${KOTLIN_NUMERIC_TYPE_PREFIX}Short"
const val INT = "${KOTLIN_NUMERIC_TYPE_PREFIX}Int"
const val LONG = "${KOTLIN_NUMERIC_TYPE_PREFIX}Long"
const val BOOLEAN = "${KOTLIN_NUMERIC_TYPE_PREFIX}Boolean"
const val DOUBLE = "${KOTLIN_NUMERIC_TYPE_PREFIX}Double"
const val FLOAT = "${KOTLIN_NUMERIC_TYPE_PREFIX}Float"
@@ -0,0 +1,40 @@
/*
* 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.util
import org.jetbrains.kotlin.sir.*
val SirNativeCallable.allParameters: List<SirParameter>
get() = when (this) {
is SirFunction -> this.parameters
is SirSetter -> listOf(SirParameter(parameterName = parameterName, type = this.valueType))
is SirGetter -> listOf()
}
val SirNativeCallable.returnType: SirType
get() = when (this) {
is SirFunction -> this.returnType
is SirGetter -> this.valueType
is SirSetter -> SirNominalType(SirSwiftModule.void)
}
val SirAccessor.valueType: SirType
get() = this.parent.let {
when (it) {
is SirVariable -> it.type
else -> error("Invalid accessor parent $parent")
}
}
val SirVariable.accessors: List<SirAccessor>
get() = listOfNotNull(
getter,
setter,
)
val SirParameter.name: String? get() = parameterName ?: argumentName
val SirType.isVoid: Boolean get() = this is SirNominalType && this.type == SirSwiftModule.void
@@ -20,6 +20,8 @@ object SirSwiftModule : SirModule() {
override val name: String get() = "Swift"
override val declarations: List<SirDeclaration> by lazy {
listOf(
void,
bool,
int8,
@@ -52,6 +54,12 @@ object SirSwiftModule : SirModule() {
val double = primitive("Double")
val float = primitive("Float")
val void = buildStruct {
origin = SirOrigin.ExternallyDefined(name = "Swift.Void")
visibility = SirVisibility.PUBLIC
name = "Void"
}.also { it.parent = SirSwiftModule }
override fun <R, D> acceptChildren(visitor: SirVisitor<R, D>, data: D) {
declarations.forEach { it.accept(visitor, data) }
}
@@ -22,5 +22,9 @@ class BuilderConfigurator(elements: List<Element>) : AbstractSwiftIrTreeBuilderC
configureFieldInAllLeafBuilders("visibility") {
default(it, "SirVisibility.PUBLIC")
}
builder(setter) {
default("parameterName", "\"newValue\"")
}
}
}
@@ -78,9 +78,15 @@ object SwiftIrTree : AbstractSwiftIrTreeBuilder() {
parent(declaration)
}
// Denotes "actual" callable node. (I.e. SirCallable & !SIRForeignDeclaration)
// TODO: remove along with foreign declaration (KT-65335); replace usages with just SIRCallable
val nativeCallable by sealedElement {
parent(callable)
}
val function by element {
customParentInVisitor = callable
parent(callable)
parent(nativeCallable)
+field("isStatic", boolean) // todo: KT-65046 Method|function distinction in SIR
+field("name", string)
@@ -98,4 +104,42 @@ object SwiftIrTree : AbstractSwiftIrTreeBuilder() {
visitorParameterName = "function"
}
val accessor by sealedElement {
customParentInVisitor = callable
parent(nativeCallable)
+field("body", functionBodyType, nullable = true, mutable = true)
}
val getter by element {
parent(accessor)
}
val setter by element {
parent(accessor)
+field("parameterName", string, initializer = { })
}
val variable by element {
customParentInVisitor = declaration
parent(declaration)
parent(declarationParent)
+field("name", string)
+field("type", typeType)
+field("getter", getter)
+field("setter", setter, nullable = true)
+field("isStatic", boolean) // todo: KT-65046 Method|function distinction in SIR
}
val foreignVariable by element {
customParentInVisitor = declaration
parent(foreignDeclaration)
visitorParameterName = "variable"
}
}