Add SIR builder and printer for classes #KT-65905 fixed
Merge-request: KT-MR-14478 Merged-by: Artem Olkov <artem.olkov@jetbrains.com>
This commit is contained in:
@@ -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.class]
|
||||
*/
|
||||
abstract class SirClass : SirDeclarationContainer(), SirNamedDeclaration {
|
||||
abstract override val origin: SirOrigin
|
||||
abstract override val visibility: SirVisibility
|
||||
abstract override var parent: SirDeclarationParent
|
||||
abstract override val name: String
|
||||
abstract override val declarations: List<SirDeclaration>
|
||||
|
||||
override fun <R, D> accept(visitor: SirVisitor<R, D>, data: D): R =
|
||||
visitor.visitClass(this, data)
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
override fun <E : SirElement, D> transform(transformer: SirTransformer<D>, data: D): E =
|
||||
transformer.transformClass(this, data) as E
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* 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.SirClassImpl
|
||||
|
||||
@SirBuilderDsl
|
||||
class SirClassBuilder {
|
||||
var origin: SirOrigin = SirOrigin.Unknown
|
||||
var visibility: SirVisibility = SirVisibility.PUBLIC
|
||||
lateinit var name: String
|
||||
val declarations: MutableList<SirDeclaration> = mutableListOf()
|
||||
|
||||
fun build(): SirClass {
|
||||
return SirClassImpl(
|
||||
origin,
|
||||
visibility,
|
||||
name,
|
||||
declarations,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalContracts::class)
|
||||
inline fun buildClass(init: SirClassBuilder.() -> Unit): SirClass {
|
||||
contract {
|
||||
callsInPlace(init, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
return SirClassBuilder().apply(init).build()
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalContracts::class)
|
||||
inline fun buildClassCopy(original: SirClass, init: SirClassBuilder.() -> Unit): SirClass {
|
||||
contract {
|
||||
callsInPlace(init, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
val copyBuilder = SirClassBuilder()
|
||||
copyBuilder.origin = original.origin
|
||||
copyBuilder.visibility = original.visibility
|
||||
copyBuilder.name = original.name
|
||||
copyBuilder.declarations.addAll(original.declarations)
|
||||
return copyBuilder.apply(init).build()
|
||||
}
|
||||
@@ -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.
|
||||
|
||||
@file:Suppress("DuplicatedCode", "unused")
|
||||
|
||||
package org.jetbrains.kotlin.sir.impl
|
||||
|
||||
import org.jetbrains.kotlin.sir.*
|
||||
import org.jetbrains.kotlin.sir.util.transformInPlace
|
||||
import org.jetbrains.kotlin.sir.visitors.SirTransformer
|
||||
import org.jetbrains.kotlin.sir.visitors.SirVisitor
|
||||
|
||||
internal class SirClassImpl(
|
||||
override val origin: SirOrigin,
|
||||
override val visibility: SirVisibility,
|
||||
override val name: String,
|
||||
override val declarations: MutableList<SirDeclaration>,
|
||||
) : SirClass() {
|
||||
override lateinit var parent: SirDeclarationParent
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: SirVisitor<R, D>, data: D) {
|
||||
declarations.forEach { it.accept(visitor, data) }
|
||||
}
|
||||
|
||||
override fun <D> transformChildren(transformer: SirTransformer<D>, data: D) {
|
||||
declarations.transformInPlace(transformer, data)
|
||||
}
|
||||
}
|
||||
@@ -71,6 +71,14 @@ abstract class SirTransformer<in D> : SirVisitor<SirElement, D>() {
|
||||
return transformStruct(struct, data)
|
||||
}
|
||||
|
||||
open fun transformClass(klass: SirClass, data: D): SirDeclaration {
|
||||
return transformNamedDeclaration(klass, data)
|
||||
}
|
||||
|
||||
final override fun visitClass(klass: SirClass, data: D): SirDeclaration {
|
||||
return transformClass(klass, data)
|
||||
}
|
||||
|
||||
open fun transformCallable(callable: SirCallable, data: D): SirDeclaration {
|
||||
return transformDeclaration(callable, data)
|
||||
}
|
||||
|
||||
@@ -56,6 +56,12 @@ abstract class SirTransformerVoid : SirTransformer<Nothing?>() {
|
||||
final override fun transformStruct(struct: SirStruct, data: Nothing?): SirDeclaration =
|
||||
transformStruct(struct)
|
||||
|
||||
open fun transformClass(klass: SirClass): SirDeclaration =
|
||||
transformNamedDeclaration(klass)
|
||||
|
||||
final override fun transformClass(klass: SirClass, data: Nothing?): SirDeclaration =
|
||||
transformClass(klass)
|
||||
|
||||
open fun transformCallable(callable: SirCallable): SirDeclaration =
|
||||
transformDeclaration(callable)
|
||||
|
||||
|
||||
@@ -35,6 +35,9 @@ abstract class SirVisitor<out R, in D> {
|
||||
open fun visitStruct(struct: SirStruct, data: D): R =
|
||||
visitNamedDeclaration(struct, data)
|
||||
|
||||
open fun visitClass(klass: SirClass, data: D): R =
|
||||
visitNamedDeclaration(klass, data)
|
||||
|
||||
open fun visitCallable(callable: SirCallable, data: D): R =
|
||||
visitDeclaration(callable, data)
|
||||
|
||||
|
||||
@@ -70,6 +70,14 @@ abstract class SirVisitorVoid : SirVisitor<Unit, Nothing?>() {
|
||||
visitNamedDeclaration(struct)
|
||||
}
|
||||
|
||||
final override fun visitClass(klass: SirClass, data: Nothing?) {
|
||||
visitClass(klass)
|
||||
}
|
||||
|
||||
open fun visitClass(klass: SirClass) {
|
||||
visitNamedDeclaration(klass)
|
||||
}
|
||||
|
||||
final override fun visitCallable(callable: SirCallable, data: Nothing?) {
|
||||
visitCallable(callable)
|
||||
}
|
||||
|
||||
+6
@@ -68,6 +68,12 @@ object SwiftIrTree : AbstractSwiftIrTreeBuilder() {
|
||||
parent(declarationContainer)
|
||||
}
|
||||
|
||||
val `class`: Element by element {
|
||||
customParentInVisitor = namedDeclaration
|
||||
parent(namedDeclaration)
|
||||
parent(declarationContainer)
|
||||
}
|
||||
|
||||
val callable by sealedElement {
|
||||
parent(declaration)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user