[FIR] Add FirCodeFragment
This commit is contained in:
committed by
Yan Zhulanow
parent
2760a25e2c
commit
33abe75a74
+1
-1
@@ -159,7 +159,7 @@ object FirOptInUsageBaseChecker {
|
||||
fir.loadCallableSpecificExperimentalities(this, context, visited, fromSetter, dispatchReceiverType, result)
|
||||
is FirClassLikeDeclaration ->
|
||||
fir.loadClassLikeSpecificExperimentalities(this, context, visited, result)
|
||||
is FirAnonymousInitializer, is FirDanglingModifierList, is FirFile, is FirTypeParameter, is FirScript -> {}
|
||||
is FirAnonymousInitializer, is FirDanglingModifierList, is FirFile, is FirTypeParameter, is FirScript, is FirCodeFragment -> {}
|
||||
}
|
||||
|
||||
fir.loadExperimentalitiesFromAnnotationTo(session, result, fromSupertype)
|
||||
|
||||
+4
@@ -107,6 +107,10 @@ class DeclarationCheckersDiagnosticComponent(
|
||||
checkers.allBasicDeclarationCheckers.check(script, data)
|
||||
}
|
||||
|
||||
override fun visitCodeFragment(codeFragment: FirCodeFragment, data: CheckerContext) {
|
||||
checkers.allBasicDeclarationCheckers.check(codeFragment, data)
|
||||
}
|
||||
|
||||
private fun <D : FirDeclaration> Collection<FirDeclarationChecker<D>>.check(
|
||||
declaration: D,
|
||||
context: CheckerContext
|
||||
|
||||
@@ -235,6 +235,17 @@ abstract class FirDataFlowAnalyzer(
|
||||
return graph
|
||||
}
|
||||
|
||||
// ----------------------------------- Code Fragment ------------------------------------------
|
||||
|
||||
fun enterCodeFragment(codeFragment: FirCodeFragment) {
|
||||
graphBuilder.enterCodeFragment(codeFragment).mergeIncomingFlow()
|
||||
}
|
||||
|
||||
fun exitCodeFragment(): ControlFlowGraph {
|
||||
val (node, graph) = graphBuilder.exitCodeFragment()
|
||||
node.mergeIncomingFlow()
|
||||
return graph
|
||||
}
|
||||
// ----------------------------------- Value parameters (and it's defaults) -----------------------------------
|
||||
|
||||
fun enterValueParameter(valueParameter: FirValueParameter) {
|
||||
|
||||
+10
@@ -547,6 +547,16 @@ class ControlFlowGraphBuilder {
|
||||
return exitGraph()
|
||||
}
|
||||
|
||||
fun enterCodeFragment(codeFragment: FirCodeFragment): CodeFragmentEnterNode {
|
||||
return enterGraph(codeFragment, "CODE_FRAGMENT_GRAPH", ControlFlowGraph.Kind.Function) {
|
||||
createCodeFragmentEnterNode(it) to createCodeFragmentExitNode(it)
|
||||
}
|
||||
}
|
||||
|
||||
fun exitCodeFragment(): Pair<CodeFragmentExitNode, ControlFlowGraph> {
|
||||
return exitGraph()
|
||||
}
|
||||
|
||||
// ----------------------------------- Value parameters (and it's defaults) -----------------------------------
|
||||
|
||||
fun enterValueParameter(valueParameter: FirValueParameter): Pair<EnterValueParameterNode, EnterDefaultArgumentsNode>? {
|
||||
|
||||
+6
@@ -229,6 +229,12 @@ fun ControlFlowGraphBuilder.createScriptEnterNode(fir: FirScript): ScriptEnterNo
|
||||
fun ControlFlowGraphBuilder.createScriptExitNode(fir: FirScript): ScriptExitNode =
|
||||
ScriptExitNode(currentGraph, fir, levelCounter)
|
||||
|
||||
fun ControlFlowGraphBuilder.createCodeFragmentEnterNode(fir: FirCodeFragment): CodeFragmentEnterNode =
|
||||
CodeFragmentEnterNode(currentGraph, fir, levelCounter)
|
||||
|
||||
fun ControlFlowGraphBuilder.createCodeFragmentExitNode(fir: FirCodeFragment): CodeFragmentExitNode =
|
||||
CodeFragmentExitNode(currentGraph, fir, levelCounter)
|
||||
|
||||
fun ControlFlowGraphBuilder.createClassEnterNode(fir: FirClass): ClassEnterNode =
|
||||
ClassEnterNode(currentGraph, fir, levelCounter)
|
||||
|
||||
|
||||
+22
-4
@@ -7,16 +7,13 @@ package org.jetbrains.kotlin.fir.resolve.transformers.body.resolve
|
||||
|
||||
import org.jetbrains.kotlin.config.LanguageFeature
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.PrivateForInline
|
||||
import org.jetbrains.kotlin.fir.correspondingProperty
|
||||
import org.jetbrains.kotlin.fir.*
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isCompanion
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isInner
|
||||
import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess
|
||||
import org.jetbrains.kotlin.fir.expressions.FirWhenExpression
|
||||
import org.jetbrains.kotlin.fir.languageVersionSettings
|
||||
import org.jetbrains.kotlin.fir.resolve.*
|
||||
import org.jetbrains.kotlin.fir.resolve.calls.ImplicitExtensionReceiverValue
|
||||
import org.jetbrains.kotlin.fir.resolve.calls.ImplicitReceiverValue
|
||||
@@ -532,6 +529,27 @@ class BodyResolveContext(
|
||||
}
|
||||
}
|
||||
|
||||
fun <T> withScopesForCodeFragment(codeFragment: FirCodeFragment, f: () -> T): T {
|
||||
val towerDataContext = codeFragment.towerDataContext ?: error("Context is not set for a code fragment")
|
||||
val base = towerDataContext.addNonLocalTowerDataElements(towerDataContext.nonLocalTowerDataElements)
|
||||
val baseWithLocalScope = towerDataContext.localScopes.fold(base) { acc, scope -> acc.addLocalScope(scope) }
|
||||
|
||||
val newContext = FirRegularTowerDataContexts(
|
||||
regular = baseWithLocalScope,
|
||||
forClassHeaderAnnotations = baseWithLocalScope,
|
||||
forNestedClasses = baseWithLocalScope,
|
||||
forCompanionObject = baseWithLocalScope,
|
||||
forConstructorHeaders = null,
|
||||
forEnumEntries = null,
|
||||
primaryConstructorPureParametersScope = null,
|
||||
primaryConstructorAllParametersScope = null
|
||||
)
|
||||
|
||||
return withTowerDataContexts(newContext) {
|
||||
f()
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(PrivateForInline::class)
|
||||
inline fun <T> withWhenSubjectType(
|
||||
subjectType: ConeKotlinType?,
|
||||
|
||||
+4
@@ -64,6 +64,10 @@ abstract class FirAbstractBodyResolveTransformerDispatcher(
|
||||
return declarationsTransformer.transformScript(script, data)
|
||||
}
|
||||
|
||||
override fun transformCodeFragment(codeFragment: FirCodeFragment, data: ResolutionMode): FirCodeFragment {
|
||||
return declarationsTransformer.transformCodeFragment(codeFragment, data)
|
||||
}
|
||||
|
||||
override fun <E : FirElement> transformElement(element: E, data: ResolutionMode): E {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
return (element.transformChildren(this, data) as E)
|
||||
|
||||
+9
@@ -543,6 +543,15 @@ open class FirDeclarationsResolveTransformer(
|
||||
return result
|
||||
}
|
||||
|
||||
override fun transformCodeFragment(codeFragment: FirCodeFragment, data: ResolutionMode): FirCodeFragment {
|
||||
dataFlowAnalyzer.enterCodeFragment(codeFragment)
|
||||
context.withScopesForCodeFragment(codeFragment) {
|
||||
transformBlock(codeFragment.block, data)
|
||||
}
|
||||
dataFlowAnalyzer.exitCodeFragment()
|
||||
return codeFragment
|
||||
}
|
||||
|
||||
override fun transformTypeAlias(typeAlias: FirTypeAlias, data: ResolutionMode): FirTypeAlias = whileAnalysing(session, typeAlias) {
|
||||
if (typeAlias.isLocal && typeAlias !in context.targetedLocalClasses) {
|
||||
return typeAlias.runAllPhasesForLocalClass(transformer, components, data, transformer.firTowerDataContextCollector)
|
||||
|
||||
@@ -87,3 +87,7 @@ var FirConstructor.originalConstructorIfTypeAlias: FirConstructor? by FirDeclara
|
||||
|
||||
val FirConstructorSymbol.isTypeAliasedConstructor: Boolean
|
||||
get() = fir.originalConstructorIfTypeAlias != null
|
||||
|
||||
private object CodeFragmentTowerDataContext : FirDeclarationDataKey()
|
||||
|
||||
var FirCodeFragment.towerDataContext: FirTowerDataContext? by FirDeclarationDataRegistry.data(CodeFragmentTowerDataContext)
|
||||
@@ -300,6 +300,19 @@ class ScriptExitNode(owner: ControlFlowGraph, override val fir: FirScript, level
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------- Code Fragments ------------------------------------------
|
||||
|
||||
class CodeFragmentEnterNode(owner: ControlFlowGraph, override val fir: FirCodeFragment, level: Int) : CFGNode<FirCodeFragment>(owner, level), GraphEnterNodeMarker {
|
||||
override fun <R, D> accept(visitor: ControlFlowGraphVisitor<R, D>, data: D): R {
|
||||
return visitor.visitCodeFragmentEnterNode(this, data)
|
||||
}
|
||||
}
|
||||
|
||||
class CodeFragmentExitNode(owner: ControlFlowGraph, override val fir: FirCodeFragment, level: Int) : CFGNode<FirCodeFragment>(owner, level), GraphExitNodeMarker {
|
||||
override fun <R, D> accept(visitor: ControlFlowGraphVisitor<R, D>, data: D): R {
|
||||
return visitor.visitCodeFragmentExitNode(this, data)
|
||||
}
|
||||
}
|
||||
// ----------------------------------- Property -----------------------------------
|
||||
|
||||
class PropertyInitializerEnterNode(owner: ControlFlowGraph, override val fir: FirProperty, level: Int) : CFGNode<FirProperty>(owner, level),
|
||||
|
||||
@@ -106,6 +106,9 @@ fun CFGNode<*>.render(): String =
|
||||
is ScriptEnterNode -> "Enter class ${fir.name}"
|
||||
is ScriptExitNode -> "Exit class ${fir.name}"
|
||||
|
||||
is CodeFragmentEnterNode -> "Enter code fragment"
|
||||
is CodeFragmentExitNode -> "Exit code fragment"
|
||||
|
||||
is FakeExpressionEnterNode -> "Enter fake expression"
|
||||
|
||||
is EnterValueParameterNode -> "Enter default value of ${fir.name}"
|
||||
|
||||
+10
@@ -90,6 +90,16 @@ abstract class ControlFlowGraphVisitor<out R, in D> {
|
||||
return visitNode(node, data)
|
||||
}
|
||||
|
||||
// ----------------------------------- Code Fragments ------------------------------------------
|
||||
|
||||
open fun visitCodeFragmentEnterNode(node: CodeFragmentEnterNode, data: D): R {
|
||||
return visitNode(node, data)
|
||||
}
|
||||
|
||||
open fun visitCodeFragmentExitNode(node: CodeFragmentExitNode, data: D): R {
|
||||
return visitNode(node, data)
|
||||
}
|
||||
|
||||
// ----------------------------------- Property -----------------------------------
|
||||
|
||||
open fun visitPropertyInitializerEnterNode(node: PropertyInitializerEnterNode, data: D): R {
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* 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.fir.declarations
|
||||
|
||||
import org.jetbrains.kotlin.KtSourceElement
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirModuleData
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCodeFragmentSymbol
|
||||
import org.jetbrains.kotlin.fir.visitors.*
|
||||
import org.jetbrains.kotlin.fir.declarations.ResolveStateAccess
|
||||
|
||||
/*
|
||||
* This file was generated automatically
|
||||
* DO NOT MODIFY IT MANUALLY
|
||||
*/
|
||||
|
||||
abstract class FirCodeFragment : FirDeclaration() {
|
||||
abstract override val source: KtSourceElement?
|
||||
abstract override val annotations: List<FirAnnotation>
|
||||
abstract override val moduleData: FirModuleData
|
||||
abstract override val origin: FirDeclarationOrigin
|
||||
abstract override val attributes: FirDeclarationAttributes
|
||||
abstract override val symbol: FirCodeFragmentSymbol
|
||||
abstract val block: FirBlock
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitCodeFragment(this, data)
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
override fun <E : FirElement, D> transform(transformer: FirTransformer<D>, data: D): E =
|
||||
transformer.transformCodeFragment(this, data) as E
|
||||
|
||||
abstract override fun replaceAnnotations(newAnnotations: List<FirAnnotation>)
|
||||
|
||||
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirCodeFragment
|
||||
|
||||
abstract fun <D> transformBlock(transformer: FirTransformer<D>, data: D): FirCodeFragment
|
||||
}
|
||||
+66
@@ -0,0 +1,66 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
@file:Suppress("DuplicatedCode", "unused")
|
||||
|
||||
package org.jetbrains.kotlin.fir.declarations.builder
|
||||
|
||||
import kotlin.contracts.*
|
||||
import org.jetbrains.kotlin.KtSourceElement
|
||||
import org.jetbrains.kotlin.fir.FirModuleData
|
||||
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
|
||||
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
|
||||
import org.jetbrains.kotlin.fir.builder.toMutableOrEmpty
|
||||
import org.jetbrains.kotlin.fir.declarations.FirCodeFragment
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolveState
|
||||
import org.jetbrains.kotlin.fir.declarations.ResolveStateAccess
|
||||
import org.jetbrains.kotlin.fir.declarations.asResolveState
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirCodeFragmentImpl
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCodeFragmentSymbol
|
||||
import org.jetbrains.kotlin.fir.visitors.*
|
||||
|
||||
/*
|
||||
* This file was generated automatically
|
||||
* DO NOT MODIFY IT MANUALLY
|
||||
*/
|
||||
|
||||
@FirBuilderDsl
|
||||
class FirCodeFragmentBuilder : FirAnnotationContainerBuilder {
|
||||
override var source: KtSourceElement? = null
|
||||
var resolvePhase: FirResolvePhase = FirResolvePhase.RAW_FIR
|
||||
override val annotations: MutableList<FirAnnotation> = mutableListOf()
|
||||
lateinit var moduleData: FirModuleData
|
||||
lateinit var origin: FirDeclarationOrigin
|
||||
var attributes: FirDeclarationAttributes = FirDeclarationAttributes()
|
||||
lateinit var symbol: FirCodeFragmentSymbol
|
||||
lateinit var block: FirBlock
|
||||
|
||||
override fun build(): FirCodeFragment {
|
||||
return FirCodeFragmentImpl(
|
||||
source,
|
||||
resolvePhase,
|
||||
annotations.toMutableOrEmpty(),
|
||||
moduleData,
|
||||
origin,
|
||||
attributes,
|
||||
symbol,
|
||||
block,
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalContracts::class)
|
||||
inline fun buildCodeFragment(init: FirCodeFragmentBuilder.() -> Unit): FirCodeFragment {
|
||||
contract {
|
||||
callsInPlace(init, kotlin.contracts.InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
return FirCodeFragmentBuilder().apply(init).build()
|
||||
}
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
@file:Suppress("DuplicatedCode", "unused")
|
||||
|
||||
package org.jetbrains.kotlin.fir.declarations.impl
|
||||
|
||||
import org.jetbrains.kotlin.KtSourceElement
|
||||
import org.jetbrains.kotlin.fir.FirModuleData
|
||||
import org.jetbrains.kotlin.fir.declarations.FirCodeFragment
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolveState
|
||||
import org.jetbrains.kotlin.fir.declarations.asResolveState
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCodeFragmentSymbol
|
||||
import org.jetbrains.kotlin.fir.visitors.*
|
||||
import org.jetbrains.kotlin.fir.MutableOrEmptyList
|
||||
import org.jetbrains.kotlin.fir.builder.toMutableOrEmpty
|
||||
import org.jetbrains.kotlin.fir.declarations.ResolveStateAccess
|
||||
|
||||
/*
|
||||
* This file was generated automatically
|
||||
* DO NOT MODIFY IT MANUALLY
|
||||
*/
|
||||
|
||||
internal class FirCodeFragmentImpl(
|
||||
override val source: KtSourceElement?,
|
||||
resolvePhase: FirResolvePhase,
|
||||
override var annotations: MutableOrEmptyList<FirAnnotation>,
|
||||
override val moduleData: FirModuleData,
|
||||
override val origin: FirDeclarationOrigin,
|
||||
override val attributes: FirDeclarationAttributes,
|
||||
override val symbol: FirCodeFragmentSymbol,
|
||||
override var block: FirBlock,
|
||||
) : FirCodeFragment() {
|
||||
init {
|
||||
symbol.bind(this)
|
||||
@OptIn(ResolveStateAccess::class)
|
||||
resolveState = resolvePhase.asResolveState()
|
||||
}
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
annotations.forEach { it.accept(visitor, data) }
|
||||
block.accept(visitor, data)
|
||||
}
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirCodeFragmentImpl {
|
||||
transformAnnotations(transformer, data)
|
||||
transformBlock(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirCodeFragmentImpl {
|
||||
annotations.transformInplace(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun <D> transformBlock(transformer: FirTransformer<D>, data: D): FirCodeFragmentImpl {
|
||||
block = block.transform(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun replaceAnnotations(newAnnotations: List<FirAnnotation>) {
|
||||
annotations = newAnnotations.toMutableOrEmpty()
|
||||
}
|
||||
}
|
||||
@@ -48,6 +48,7 @@ import org.jetbrains.kotlin.fir.declarations.FirBackingField
|
||||
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||
import org.jetbrains.kotlin.fir.declarations.FirScript
|
||||
import org.jetbrains.kotlin.fir.declarations.FirCodeFragment
|
||||
import org.jetbrains.kotlin.fir.FirPackageDirective
|
||||
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnonymousFunctionExpression
|
||||
@@ -188,6 +189,8 @@ abstract class FirDefaultVisitor<out R, in D> : FirVisitor<R, D>() {
|
||||
|
||||
override fun visitScript(script: FirScript, data: D): R = visitDeclaration(script, data)
|
||||
|
||||
override fun visitCodeFragment(codeFragment: FirCodeFragment, data: D): R = visitDeclaration(codeFragment, data)
|
||||
|
||||
override fun visitAnonymousFunctionExpression(anonymousFunctionExpression: FirAnonymousFunctionExpression, data: D): R = visitExpression(anonymousFunctionExpression, data)
|
||||
|
||||
override fun visitAnonymousObject(anonymousObject: FirAnonymousObject, data: D): R = visitClass(anonymousObject, data)
|
||||
|
||||
@@ -48,6 +48,7 @@ import org.jetbrains.kotlin.fir.declarations.FirBackingField
|
||||
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||
import org.jetbrains.kotlin.fir.declarations.FirScript
|
||||
import org.jetbrains.kotlin.fir.declarations.FirCodeFragment
|
||||
import org.jetbrains.kotlin.fir.FirPackageDirective
|
||||
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnonymousFunctionExpression
|
||||
@@ -188,6 +189,8 @@ abstract class FirDefaultVisitorVoid : FirVisitorVoid() {
|
||||
|
||||
override fun visitScript(script: FirScript) = visitDeclaration(script)
|
||||
|
||||
override fun visitCodeFragment(codeFragment: FirCodeFragment) = visitDeclaration(codeFragment)
|
||||
|
||||
override fun visitAnonymousFunctionExpression(anonymousFunctionExpression: FirAnonymousFunctionExpression) = visitExpression(anonymousFunctionExpression)
|
||||
|
||||
override fun visitAnonymousObject(anonymousObject: FirAnonymousObject) = visitClass(anonymousObject)
|
||||
|
||||
@@ -48,6 +48,7 @@ import org.jetbrains.kotlin.fir.declarations.FirBackingField
|
||||
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||
import org.jetbrains.kotlin.fir.declarations.FirScript
|
||||
import org.jetbrains.kotlin.fir.declarations.FirCodeFragment
|
||||
import org.jetbrains.kotlin.fir.FirPackageDirective
|
||||
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnonymousFunctionExpression
|
||||
@@ -335,6 +336,10 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
|
||||
return transformElement(script, data)
|
||||
}
|
||||
|
||||
open fun transformCodeFragment(codeFragment: FirCodeFragment, data: D): FirCodeFragment {
|
||||
return transformElement(codeFragment, data)
|
||||
}
|
||||
|
||||
open fun transformPackageDirective(packageDirective: FirPackageDirective, data: D): FirPackageDirective {
|
||||
return transformElement(packageDirective, data)
|
||||
}
|
||||
@@ -943,6 +948,10 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
|
||||
return transformScript(script, data)
|
||||
}
|
||||
|
||||
final override fun visitCodeFragment(codeFragment: FirCodeFragment, data: D): FirCodeFragment {
|
||||
return transformCodeFragment(codeFragment, data)
|
||||
}
|
||||
|
||||
final override fun visitPackageDirective(packageDirective: FirPackageDirective, data: D): FirPackageDirective {
|
||||
return transformPackageDirective(packageDirective, data)
|
||||
}
|
||||
|
||||
@@ -48,6 +48,7 @@ import org.jetbrains.kotlin.fir.declarations.FirBackingField
|
||||
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||
import org.jetbrains.kotlin.fir.declarations.FirScript
|
||||
import org.jetbrains.kotlin.fir.declarations.FirCodeFragment
|
||||
import org.jetbrains.kotlin.fir.FirPackageDirective
|
||||
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnonymousFunctionExpression
|
||||
@@ -250,6 +251,8 @@ abstract class FirVisitor<out R, in D> {
|
||||
|
||||
open fun visitScript(script: FirScript, data: D): R = visitElement(script, data)
|
||||
|
||||
open fun visitCodeFragment(codeFragment: FirCodeFragment, data: D): R = visitElement(codeFragment, data)
|
||||
|
||||
open fun visitPackageDirective(packageDirective: FirPackageDirective, data: D): R = visitElement(packageDirective, data)
|
||||
|
||||
open fun visitAnonymousFunction(anonymousFunction: FirAnonymousFunction, data: D): R = visitElement(anonymousFunction, data)
|
||||
|
||||
@@ -48,6 +48,7 @@ import org.jetbrains.kotlin.fir.declarations.FirBackingField
|
||||
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||
import org.jetbrains.kotlin.fir.declarations.FirScript
|
||||
import org.jetbrains.kotlin.fir.declarations.FirCodeFragment
|
||||
import org.jetbrains.kotlin.fir.FirPackageDirective
|
||||
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnonymousFunctionExpression
|
||||
@@ -334,6 +335,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitElement(script)
|
||||
}
|
||||
|
||||
open fun visitCodeFragment(codeFragment: FirCodeFragment) {
|
||||
visitElement(codeFragment)
|
||||
}
|
||||
|
||||
open fun visitPackageDirective(packageDirective: FirPackageDirective) {
|
||||
visitElement(packageDirective)
|
||||
}
|
||||
@@ -942,6 +947,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitScript(script)
|
||||
}
|
||||
|
||||
final override fun visitCodeFragment(codeFragment: FirCodeFragment, data: Nothing?) {
|
||||
visitCodeFragment(codeFragment)
|
||||
}
|
||||
|
||||
final override fun visitPackageDirective(packageDirective: FirPackageDirective, data: Nothing?) {
|
||||
visitPackageDirective(packageDirective)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
/*
|
||||
* 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.fir.symbols.impl
|
||||
|
||||
import org.jetbrains.kotlin.fir.declarations.FirCodeFragment
|
||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||
|
||||
class FirCodeFragmentSymbol : FirBasedSymbol<FirCodeFragment>()
|
||||
+1
@@ -64,6 +64,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
|
||||
val constructor by element(Declaration, function, typeParameterRefsOwner, contractDescriptionOwner)
|
||||
val file by element(Declaration, declaration)
|
||||
val script by element(Declaration, declaration)
|
||||
val codeFragment by element(Declaration, declaration)
|
||||
val packageDirective by element(Other)
|
||||
|
||||
val anonymousFunction by element(Declaration, function, typeParametersOwner, contractDescriptionOwner)
|
||||
|
||||
+5
@@ -495,6 +495,11 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
+fieldList(contextReceiver, useMutableOrEmpty = true)
|
||||
}
|
||||
|
||||
codeFragment.configure {
|
||||
+symbol("FirCodeFragmentSymbol")
|
||||
+field(block).withTransform()
|
||||
}
|
||||
|
||||
packageDirective.configure {
|
||||
+field("packageFqName", fqNameType)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user