Remove KotlinSirOrigin hierarchy in favour of direct AA usage #KT-65335 Fixed

Merge-request: KT-MR-14229
Merged-by: Artem Olkov <artem.olkov@jetbrains.com>
This commit is contained in:
Artem Olkov
2024-02-09 18:34:52 +00:00
committed by Space Team
parent c2e0c8b2e9
commit b6c805bbb6
94 changed files with 548 additions and 1912 deletions
-15
View File
@@ -9,23 +9,9 @@ description = "Swift Intermediate Representation"
dependencies {
compileOnly(kotlinStdlib())
api(project(":core:compiler.common"))
if (kotlinBuildProperties.isInIdeaSync) {
compileOnly(project("tree-generator")) // Provided, so that IDEA can recognize references to this module in KDoc.
}
testImplementation(kotlin("test-junit5"))
testImplementation(platform(libs.junit.bom))
testImplementation(libs.junit.jupiter.api)
testRuntimeOnly(libs.junit.jupiter.engine)
}
testsJar()
projectTest(jUnitMode = JUnitMode.JUnit5) {
workingDir = rootDir
useJUnitPlatform { }
}
val generatorClasspath by configurations.creating
@@ -59,7 +45,6 @@ sourceSets {
projectDefault()
java.srcDir(generateTree)
}
"test" { projectDefault() }
}
if (kotlinBuildProperties.isInJpsBuildIdeaSync) {
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor
/**
* Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.accessor]
*/
sealed class SirAccessor : SirNativeCallable() {
sealed class SirAccessor : SirCallable() {
abstract override val origin: SirOrigin
abstract override val visibility: SirVisibility
abstract override var parent: SirDeclarationParent
@@ -14,10 +14,10 @@ import org.jetbrains.kotlin.sir.visitors.SirVisitor
/**
* Generated from: [org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree.callable]
*/
sealed interface SirCallable : SirDeclaration {
override val origin: SirOrigin
override val visibility: SirVisibility
override var parent: SirDeclarationParent
sealed class SirCallable : SirElementBase(), SirDeclaration {
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.visitCallable(this, data)
@@ -1,28 +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.
*/
// 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.foreignDeclaration]
*/
sealed class SirForeignDeclaration : SirElementBase(), SirDeclaration {
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.visitForeignDeclaration(this, data)
@Suppress("UNCHECKED_CAST")
override fun <E : SirElement, D> transform(transformer: SirTransformer<D>, data: D): E =
transformer.transformForeignDeclaration(this, data) as E
}
@@ -1,28 +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.
*/
// 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.foreignFunction]
*/
abstract class SirForeignFunction : SirForeignDeclaration(), 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.visitForeignFunction(this, data)
@Suppress("UNCHECKED_CAST")
override fun <E : SirElement, D> transform(transformer: SirTransformer<D>, data: D): E =
transformer.transformForeignFunction(this, data) as E
}
@@ -1,28 +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.
*/
// 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 : SirNativeCallable() {
abstract class SirFunction : SirCallable() {
abstract override val origin: SirOrigin
abstract override val visibility: SirVisibility
abstract override var parent: SirDeclarationParent
@@ -1,28 +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.
*/
// 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
}
@@ -1,50 +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.
*/
// 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.SirForeignFunction
import org.jetbrains.kotlin.sir.SirOrigin
import org.jetbrains.kotlin.sir.SirVisibility
import org.jetbrains.kotlin.sir.impl.SirForeignFunctionImpl
@SirBuilderDsl
class SirForeignFunctionBuilder {
var origin: SirOrigin = SirOrigin.Unknown
var visibility: SirVisibility = SirVisibility.PUBLIC
fun build(): SirForeignFunction {
return SirForeignFunctionImpl(
origin,
visibility,
)
}
}
@OptIn(ExperimentalContracts::class)
inline fun buildForeignFunction(init: SirForeignFunctionBuilder.() -> Unit = {}): SirForeignFunction {
contract {
callsInPlace(init, InvocationKind.EXACTLY_ONCE)
}
return SirForeignFunctionBuilder().apply(init).build()
}
@OptIn(ExperimentalContracts::class)
inline fun buildForeignFunctionCopy(original: SirForeignFunction, init: SirForeignFunctionBuilder.() -> Unit = {}): SirForeignFunction {
contract {
callsInPlace(init, InvocationKind.EXACTLY_ONCE)
}
val copyBuilder = SirForeignFunctionBuilder()
copyBuilder.origin = original.origin
copyBuilder.visibility = original.visibility
return copyBuilder.apply(init).build()
}
@@ -1,50 +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.
*/
// 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()
}
@@ -1,31 +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.
*/
// 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.SirForeignFunction
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 SirForeignFunctionImpl(
override val origin: SirOrigin,
override val visibility: SirVisibility,
) : SirForeignFunction() {
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) {
}
}
@@ -1,31 +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.
*/
// 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) {
}
}
@@ -46,14 +46,6 @@ abstract class SirTransformer<in D> : SirVisitor<SirElement, D>() {
return transformDeclaration(declaration, data)
}
open fun transformForeignDeclaration(foreignDeclaration: SirForeignDeclaration, data: D): SirDeclaration {
return transformDeclaration(foreignDeclaration, data)
}
final override fun visitForeignDeclaration(declaration: SirForeignDeclaration, data: D): SirDeclaration {
return transformForeignDeclaration(declaration, data)
}
open fun transformNamedDeclaration(namedDeclaration: SirNamedDeclaration, data: D): SirDeclaration {
return transformDeclaration(namedDeclaration, data)
@@ -87,14 +79,6 @@ 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)
}
@@ -103,14 +87,6 @@ abstract class SirTransformer<in D> : SirVisitor<SirElement, D>() {
return transformFunction(function, data)
}
open fun transformForeignFunction(foreignFunction: SirForeignFunction, data: D): SirDeclaration {
return transformCallable(foreignFunction, data)
}
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)
}
@@ -143,14 +119,6 @@ abstract class SirTransformer<in D> : SirVisitor<SirElement, D>() {
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)
}
open fun transformImport(import: SirImport, data: D): SirDeclaration {
return transformDeclaration(import, data)
}
@@ -38,12 +38,6 @@ abstract class SirTransformerVoid : SirTransformer<Nothing?>() {
final override fun transformDeclaration(declaration: SirDeclaration, data: Nothing?): SirDeclaration =
transformDeclaration(declaration)
open fun transformForeignDeclaration(declaration: SirForeignDeclaration): SirDeclaration =
transformDeclaration(declaration)
final override fun transformForeignDeclaration(declaration: SirForeignDeclaration, data: Nothing?): SirDeclaration =
transformForeignDeclaration(declaration)
open fun transformNamedDeclaration(declaration: SirNamedDeclaration): SirDeclaration =
transformDeclaration(declaration)
@@ -68,24 +62,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)
final override fun transformFunction(function: SirFunction, data: Nothing?): SirDeclaration =
transformFunction(function)
open fun transformForeignFunction(function: SirForeignFunction): SirDeclaration =
transformCallable(function)
final override fun transformForeignFunction(function: SirForeignFunction, data: Nothing?): SirDeclaration =
transformForeignFunction(function)
open fun transformAccessor(accessor: SirAccessor): SirDeclaration =
transformCallable(accessor)
@@ -110,12 +92,6 @@ abstract class SirTransformerVoid : SirTransformer<Nothing?>() {
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)
open fun transformImport(import: SirImport): SirDeclaration =
transformDeclaration(import)
@@ -26,9 +26,6 @@ abstract class SirVisitor<out R, in D> {
open fun visitDeclaration(declaration: SirDeclaration, data: D): R =
visitElement(declaration, data)
open fun visitForeignDeclaration(declaration: SirForeignDeclaration, data: D): R =
visitDeclaration(declaration, data)
open fun visitNamedDeclaration(declaration: SirNamedDeclaration, data: D): R =
visitDeclaration(declaration, data)
@@ -41,15 +38,9 @@ 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)
@@ -62,9 +53,6 @@ abstract class SirVisitor<out R, in D> {
open fun visitVariable(variable: SirVariable, data: D): R =
visitDeclaration(variable, data)
open fun visitForeignVariable(variable: SirForeignVariable, data: D): R =
visitDeclaration(variable, data)
open fun visitImport(import: SirImport, data: D): R =
visitDeclaration(import, data)
}
@@ -46,14 +46,6 @@ abstract class SirVisitorVoid : SirVisitor<Unit, Nothing?>() {
visitElement(declaration)
}
final override fun visitForeignDeclaration(declaration: SirForeignDeclaration, data: Nothing?) {
visitForeignDeclaration(declaration)
}
open fun visitForeignDeclaration(declaration: SirForeignDeclaration) {
visitDeclaration(declaration)
}
final override fun visitNamedDeclaration(declaration: SirNamedDeclaration, data: Nothing?) {
visitNamedDeclaration(declaration)
}
@@ -86,14 +78,6 @@ 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)
}
@@ -102,14 +86,6 @@ abstract class SirVisitorVoid : SirVisitor<Unit, Nothing?>() {
visitCallable(function)
}
final override fun visitForeignFunction(function: SirForeignFunction, data: Nothing?) {
visitForeignFunction(function)
}
open fun visitForeignFunction(function: SirForeignFunction) {
visitCallable(function)
}
final override fun visitAccessor(accessor: SirAccessor, data: Nothing?) {
visitAccessor(accessor)
}
@@ -142,14 +118,6 @@ abstract class SirVisitorVoid : SirVisitor<Unit, Nothing?>() {
visitDeclaration(variable)
}
final override fun visitForeignVariable(variable: SirForeignVariable, data: Nothing?) {
visitForeignVariable(variable)
}
open fun visitForeignVariable(variable: SirForeignVariable) {
visitDeclaration(variable)
}
final override fun visitImport(import: SirImport, data: Nothing?) {
visitImport(import)
}
@@ -1,39 +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
import org.jetbrains.kotlin.name.FqName
sealed interface SirKotlinOrigin : SirOrigin.Foreign {
val fqName: FqName
override val path: List<String>
get() = fqName.pathSegments().map { it.asString() }
interface Function : SirKotlinOrigin {
val documentation: Documentation?
val parameters: List<Parameter>
val returnType: Type
}
interface Property : SirKotlinOrigin {
val type: Type
val isWriteable: Boolean
}
interface Parameter {
val name: String
val type: Type
}
interface Type {
val name: String
}
interface Documentation {
val content: String
}
}
@@ -13,10 +13,8 @@ sealed interface SirOrigin {
data class Namespace(val path: List<String>) : Synthetic
sealed interface Foreign : SirOrigin {
val path: List<String>
/** Value for nodes of origin unrepresentable or non-viable yet known to be foreign. */
data class Unknown(override val path: List<String> = emptyList()) : Foreign
interface SourceCode : Foreign
}
/**
@@ -1,19 +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_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"
@@ -58,12 +58,6 @@ class SirComparator(val options: Set<Options> = emptySet()) : SirVisitor<Boolean
data.returnType == function.returnType &&
visitDeclaration(function, data)
}
override fun visitForeignFunction(foreignFunction: SirForeignFunction, data: SirElement): Boolean {
return data is SirForeignFunction &&
areEqual(data.origin, foreignFunction.origin) &&
visitDeclaration(foreignFunction, data)
}
}
private fun SirComparator.areEqual(lhs: List<SirElement>, rhs: List<SirElement>): Boolean {
@@ -7,14 +7,14 @@ package org.jetbrains.kotlin.sir.util
import org.jetbrains.kotlin.sir.*
val SirNativeCallable.allParameters: List<SirParameter>
val SirCallable.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
val SirCallable.returnType: SirType
get() = when (this) {
is SirFunction -> this.returnType
is SirGetter -> this.valueType
@@ -15,53 +15,45 @@ object SirPrinter : SirVisitor<String, Unit>() {
return "UNKNOWN<${SirElement::class.simpleName}>($element)"
}
override fun visitModule(element: SirModule, data: Unit): String = render(
element,
override fun visitModule(module: SirModule, data: Unit): String = render(
module,
listOf(
"name" to element.name
"name" to module.name
),
element.declarations
module.declarations
)
override fun visitEnum(element: SirEnum, data: Unit): String = render(
element,
override fun visitEnum(enum: SirEnum, data: Unit): String = render(
enum,
listOf(
"origin" to element.origin,
"visibility" to element.visibility,
"name" to element.name,
"cases" to element.cases
"origin" to enum.origin,
"visibility" to enum.visibility,
"name" to enum.name,
"cases" to enum.cases
),
element.declarations
enum.declarations
)
override fun visitStruct(element: SirStruct, data: Unit): String = render(
element,
override fun visitStruct(struct: SirStruct, data: Unit): String = render(
struct,
listOf(
"origin" to element.origin,
"visibility" to element.visibility,
"name" to element.name
"origin" to struct.origin,
"visibility" to struct.visibility,
"name" to struct.name
),
element.declarations
struct.declarations
)
override fun visitFunction(element: SirFunction, data: Unit): String = render(
element,
override fun visitFunction(function: SirFunction, data: Unit): String = render(
function,
listOf(
"origin" to element.origin,
"visibility" to element.visibility,
"name" to element.name,
"parameters" to element.parameters,
"returnType" to element.returnType,
"origin" to function.origin,
"visibility" to function.visibility,
"name" to function.name,
"parameters" to function.parameters,
"returnType" to function.returnType,
)
)
override fun visitForeignFunction(element: SirForeignFunction, data: Unit): String = render(
element,
listOf(
"origin" to element.origin,
"visibility" to element.visibility,
),
)
}
private fun render(
@@ -1,34 +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
import org.jetbrains.kotlin.sir.builder.buildEnum
import org.jetbrains.kotlin.sir.constants.BYTE
import org.jetbrains.kotlin.sir.mock.MockFunction
import org.jetbrains.kotlin.sir.mock.MockKotlinType
import org.jetbrains.kotlin.sir.mock.MockParameter
import kotlin.test.Test
import kotlin.test.assertTrue
class SirTest {
// TODO: Just a fake test to validate that everything is working. Feel free to delete.
@Test
fun exampleTest() {
val fakeElement = produceSwiftElement()
println(fakeElement)
assertTrue(fakeElement is SirElement)
}
private fun produceSwiftElement(): Any {
return buildEnum {
origin = SirOrigin.Unknown
name = "name"
visibility = SirVisibility.PUBLIC
}
}
}
@@ -1,28 +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.mock
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.sir.SirKotlinOrigin
import org.jetbrains.kotlin.sir.SirOrigin
data class MockFunction(
override val fqName: FqName,
override val parameters: List<SirKotlinOrigin.Parameter>,
override val returnType: SirKotlinOrigin.Type,
override val documentation: SirKotlinOrigin.Documentation? = null,
) : SirKotlinOrigin.Function
data class MockParameter(
override val name: String,
override val type: SirKotlinOrigin.Type,
) : SirKotlinOrigin.Parameter
data class MockKotlinType(
override val name: String
) : SirKotlinOrigin.Type
data class MockDocumentation(override val content: String) : SirKotlinOrigin.Documentation
@@ -42,12 +42,6 @@ object SwiftIrTree : AbstractSwiftIrTreeBuilder() {
}
}
val foreignDeclaration by sealedElement {
parent(declaration)
visitorParameterName = "declaration"
}
val named by sealedElement {
+field("name", string)
}
@@ -78,15 +72,9 @@ 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(nativeCallable)
parent(callable)
+field("isStatic", boolean) // todo: KT-65046 Method|function distinction in SIR
+field("name", string)
@@ -97,17 +85,9 @@ object SwiftIrTree : AbstractSwiftIrTreeBuilder() {
+field(name = "documentation", string, nullable = true, mutable = true)
}
val foreignFunction by element {
customParentInVisitor = callable
parent(callable)
parent(foreignDeclaration)
visitorParameterName = "function"
}
val accessor by sealedElement {
customParentInVisitor = callable
parent(nativeCallable)
parent(callable)
+field("body", functionBodyType, nullable = true, mutable = true)
}
@@ -119,7 +99,7 @@ object SwiftIrTree : AbstractSwiftIrTreeBuilder() {
val setter by element {
parent(accessor)
+field("parameterName", string, initializer = { })
+field("parameterName", string, initializer = { })
}
val variable by element {
@@ -136,13 +116,6 @@ object SwiftIrTree : AbstractSwiftIrTreeBuilder() {
+field("isStatic", boolean) // todo: KT-65046 Method|function distinction in SIR
}
val foreignVariable by element {
customParentInVisitor = declaration
parent(foreignDeclaration)
visitorParameterName = "variable"
}
val import by element {
customParentInVisitor = declaration
parent(declaration)