[FIR] Add symbol to FirFunction and all it's inheritors
This commit is contained in:
@@ -8,7 +8,10 @@ package org.jetbrains.kotlin.fir.backend
|
|||||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirVariable
|
import org.jetbrains.kotlin.fir.expressions.FirVariable
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrVariable
|
||||||
|
|
||||||
class Fir2IrCallableCache {
|
class Fir2IrCallableCache {
|
||||||
private val parameterCache = mutableMapOf<FirValueParameter, IrValueParameter>()
|
private val parameterCache = mutableMapOf<FirValueParameter, IrValueParameter>()
|
||||||
@@ -17,7 +20,7 @@ class Fir2IrCallableCache {
|
|||||||
|
|
||||||
private val localClassCache = mutableMapOf<FirClass, IrClass>()
|
private val localClassCache = mutableMapOf<FirClass, IrClass>()
|
||||||
|
|
||||||
private val localFunctionCache = mutableMapOf<FirFunction, IrSimpleFunction>()
|
private val localFunctionCache = mutableMapOf<FirFunction<*>, IrSimpleFunction>()
|
||||||
|
|
||||||
fun getParameter(parameter: FirValueParameter): IrValueParameter? = parameterCache[parameter]
|
fun getParameter(parameter: FirValueParameter): IrValueParameter? = parameterCache[parameter]
|
||||||
|
|
||||||
@@ -38,9 +41,9 @@ class Fir2IrCallableCache {
|
|||||||
localClassCache[localClass] = irClass
|
localClassCache[localClass] = irClass
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getLocalFunction(localFunction: FirFunction): IrSimpleFunction? = localFunctionCache[localFunction]
|
fun getLocalFunction(localFunction: FirFunction<*>): IrSimpleFunction? = localFunctionCache[localFunction]
|
||||||
|
|
||||||
fun putLocalFunction(localFunction: FirFunction, irFunction: IrSimpleFunction) {
|
fun putLocalFunction(localFunction: FirFunction<*>, irFunction: IrSimpleFunction) {
|
||||||
require(localFunction !is FirNamedFunction || localFunction.visibility == Visibilities.LOCAL)
|
require(localFunction !is FirNamedFunction || localFunction.visibility == Visibilities.LOCAL)
|
||||||
localFunctionCache[localFunction] = irFunction
|
localFunctionCache[localFunction] = irFunction
|
||||||
}
|
}
|
||||||
|
|||||||
+7
-4
@@ -18,7 +18,10 @@ import org.jetbrains.kotlin.fir.render
|
|||||||
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
|
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.getOrPut
|
import org.jetbrains.kotlin.fir.resolve.getOrPut
|
||||||
import org.jetbrains.kotlin.fir.service
|
import org.jetbrains.kotlin.fir.service
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.*
|
import org.jetbrains.kotlin.ir.declarations.impl.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
@@ -226,7 +229,7 @@ class Fir2IrDeclarationStorage(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun <T : IrFunction> T.declareParameters(function: FirFunction, containingClass: IrClass?) {
|
fun <T : IrFunction> T.declareParameters(function: FirFunction<*>, containingClass: IrClass?) {
|
||||||
val parent = this
|
val parent = this
|
||||||
for ((index, valueParameter) in function.valueParameters.withIndex()) {
|
for ((index, valueParameter) in function.valueParameters.withIndex()) {
|
||||||
valueParameters += createAndSaveIrParameter(valueParameter, index).apply { this.parent = parent }
|
valueParameters += createAndSaveIrParameter(valueParameter, index).apply { this.parent = parent }
|
||||||
@@ -272,7 +275,7 @@ class Fir2IrDeclarationStorage(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun <T : IrFunction> T.bindAndDeclareParameters(
|
private fun <T : IrFunction> T.bindAndDeclareParameters(
|
||||||
function: FirFunction,
|
function: FirFunction<*>,
|
||||||
descriptor: WrappedCallableDescriptor<T>,
|
descriptor: WrappedCallableDescriptor<T>,
|
||||||
irParent: IrDeclarationParent?,
|
irParent: IrDeclarationParent?,
|
||||||
shouldLeaveScope: Boolean
|
shouldLeaveScope: Boolean
|
||||||
@@ -286,7 +289,7 @@ class Fir2IrDeclarationStorage(
|
|||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun <T : IrFunction> T.enterLocalScope(function: FirFunction): T {
|
private fun <T : IrFunction> T.enterLocalScope(function: FirFunction<*>): T {
|
||||||
enterScope(descriptor)
|
enterScope(descriptor)
|
||||||
for ((firParameter, irParameter) in function.valueParameters.zip(valueParameters)) {
|
for ((firParameter, irParameter) in function.valueParameters.zip(valueParameters)) {
|
||||||
irSymbolTable.introduceValueParameter(irParameter)
|
irSymbolTable.introduceValueParameter(irParameter)
|
||||||
|
|||||||
@@ -9,7 +9,10 @@ import org.jetbrains.kotlin.fir.declarations.FirClass
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirVariable
|
import org.jetbrains.kotlin.fir.expressions.FirVariable
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrVariable
|
||||||
|
|
||||||
class Fir2IrLocalStorage {
|
class Fir2IrLocalStorage {
|
||||||
|
|
||||||
@@ -48,7 +51,7 @@ class Fir2IrLocalStorage {
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getLocalFunction(localFunction: FirFunction): IrSimpleFunction? {
|
fun getLocalFunction(localFunction: FirFunction<*>): IrSimpleFunction? {
|
||||||
for (cache in cacheStack.asReversed()) {
|
for (cache in cacheStack.asReversed()) {
|
||||||
val local = cache.getLocalFunction(localFunction)
|
val local = cache.getLocalFunction(localFunction)
|
||||||
if (local != null) return local
|
if (local != null) return local
|
||||||
@@ -68,7 +71,7 @@ class Fir2IrLocalStorage {
|
|||||||
cacheStack.last().putLocalClass(firClass, irClass)
|
cacheStack.last().putLocalClass(firClass, irClass)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun putLocalFunction(firFunction: FirFunction, irFunction: IrSimpleFunction) {
|
fun putLocalFunction(firFunction: FirFunction<*>, irFunction: IrSimpleFunction) {
|
||||||
cacheStack.last().putLocalFunction(firFunction, irFunction)
|
cacheStack.last().putLocalFunction(firFunction, irFunction)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -280,7 +280,7 @@ internal class Fir2IrVisitor(
|
|||||||
|
|
||||||
private fun <T : IrFunction> T.setFunctionContent(
|
private fun <T : IrFunction> T.setFunctionContent(
|
||||||
descriptor: FunctionDescriptor,
|
descriptor: FunctionDescriptor,
|
||||||
firFunction: FirFunction,
|
firFunction: FirFunction<*>,
|
||||||
firOverriddenSymbol: FirNamedFunctionSymbol? = null
|
firOverriddenSymbol: FirNamedFunctionSymbol? = null
|
||||||
): T {
|
): T {
|
||||||
setParentByParentStack()
|
setParentByParentStack()
|
||||||
|
|||||||
+1
-2
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.descriptors.Modality
|
|||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirAbstractCallableMember
|
import org.jetbrains.kotlin.fir.declarations.impl.FirAbstractCallableMember
|
||||||
@@ -55,7 +54,7 @@ class FirJavaConstructor(
|
|||||||
|
|
||||||
override val valueParameters = mutableListOf<FirValueParameter>()
|
override val valueParameters = mutableListOf<FirValueParameter>()
|
||||||
|
|
||||||
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirFunction {
|
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirJavaConstructor {
|
||||||
valueParameters.transformInplace(transformer, data)
|
valueParameters.transformInplace(transformer, data)
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-4
@@ -14,13 +14,13 @@ import org.jetbrains.kotlin.fir.expressions.impl.FirConstExpressionImpl
|
|||||||
import org.jetbrains.kotlin.fir.java.JavaTypeParameterStack
|
import org.jetbrains.kotlin.fir.java.JavaTypeParameterStack
|
||||||
import org.jetbrains.kotlin.fir.java.declarations.*
|
import org.jetbrains.kotlin.fir.java.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.java.enhancement.*
|
import org.jetbrains.kotlin.fir.java.enhancement.*
|
||||||
import org.jetbrains.kotlin.fir.java.enhancement.EnhancementSignatureParts
|
|
||||||
import org.jetbrains.kotlin.fir.java.toNotNullConeKotlinType
|
import org.jetbrains.kotlin.fir.java.toNotNullConeKotlinType
|
||||||
import org.jetbrains.kotlin.fir.java.types.FirJavaTypeRef
|
import org.jetbrains.kotlin.fir.java.types.FirJavaTypeRef
|
||||||
import org.jetbrains.kotlin.fir.render
|
import org.jetbrains.kotlin.fir.render
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||||
import org.jetbrains.kotlin.fir.symbols.*
|
import org.jetbrains.kotlin.fir.symbols.CallableId
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.ConePropertySymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrConstKind
|
import org.jetbrains.kotlin.ir.expressions.IrConstKind
|
||||||
@@ -122,6 +122,7 @@ class JavaClassEnhancementScope(
|
|||||||
if (firMethod !is FirJavaMethod && firMethod !is FirJavaConstructor) {
|
if (firMethod !is FirJavaMethod && firMethod !is FirJavaConstructor) {
|
||||||
return original
|
return original
|
||||||
}
|
}
|
||||||
|
if (firMethod !is FirMemberFunction<*>) throw AssertionError()
|
||||||
return enhanceMethod(firMethod, original.callableId, name)
|
return enhanceMethod(firMethod, original.callableId, name)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -222,7 +223,7 @@ class JavaClassEnhancementScope(
|
|||||||
return function.symbol
|
return function.symbol
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun FirFunction.computeJvmDescriptor(): String = buildString {
|
private fun FirFunction<*>.computeJvmDescriptor(): String = buildString {
|
||||||
if (this@computeJvmDescriptor is FirJavaMethod) {
|
if (this@computeJvmDescriptor is FirJavaMethod) {
|
||||||
append(name.asString())
|
append(name.asString())
|
||||||
} else {
|
} else {
|
||||||
@@ -364,7 +365,7 @@ class JavaClassEnhancementScope(
|
|||||||
if (hasReceiver && member is FirJavaMethod) {
|
if (hasReceiver && member is FirJavaMethod) {
|
||||||
return member.valueParameters[index + 1].returnTypeRef
|
return member.valueParameters[index + 1].returnTypeRef
|
||||||
}
|
}
|
||||||
return (member as FirFunction).valueParameters[index].returnTypeRef
|
return (member as FirFunction<*>).valueParameters[index].returnTypeRef
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-4
@@ -16,6 +16,8 @@ import org.jetbrains.kotlin.fir.FirElement
|
|||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.builder.Context
|
import org.jetbrains.kotlin.fir.builder.Context
|
||||||
import org.jetbrains.kotlin.fir.builder.generateAccessorsByDelegate
|
import org.jetbrains.kotlin.fir.builder.generateAccessorsByDelegate
|
||||||
|
import org.jetbrains.kotlin.fir.builder.generateComponentFunctions
|
||||||
|
import org.jetbrains.kotlin.fir.builder.generateCopyFunction
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.*
|
import org.jetbrains.kotlin.fir.declarations.impl.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
@@ -37,8 +39,6 @@ import org.jetbrains.kotlin.lexer.KtTokens.*
|
|||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.name.SpecialNames
|
import org.jetbrains.kotlin.name.SpecialNames
|
||||||
import org.jetbrains.kotlin.fir.builder.generateCopyFunction
|
|
||||||
import org.jetbrains.kotlin.fir.builder.generateComponentFunctions
|
|
||||||
|
|
||||||
class DeclarationsConverter(
|
class DeclarationsConverter(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
@@ -888,7 +888,8 @@ class DeclarationsConverter(
|
|||||||
null,
|
null,
|
||||||
isGetter,
|
isGetter,
|
||||||
modifiers.getVisibility(),
|
modifiers.getVisibility(),
|
||||||
returnType ?: if (isGetter) propertyTypeRef else implicitUnitType
|
returnType ?: if (isGetter) propertyTypeRef else implicitUnitType,
|
||||||
|
FirPropertyAccessorSymbol()
|
||||||
)
|
)
|
||||||
context.firFunctions += firAccessor
|
context.firFunctions += firAccessor
|
||||||
firAccessor.annotations += modifiers.annotations
|
firAccessor.annotations += modifiers.annotations
|
||||||
@@ -971,7 +972,7 @@ class DeclarationsConverter(
|
|||||||
val parentNode = functionDeclaration.getParent()
|
val parentNode = functionDeclaration.getParent()
|
||||||
val isLocal = !(parentNode?.tokenType == KT_FILE || parentNode?.tokenType == CLASS_BODY)
|
val isLocal = !(parentNode?.tokenType == KT_FILE || parentNode?.tokenType == CLASS_BODY)
|
||||||
val firFunction = if (identifier == null) {
|
val firFunction = if (identifier == null) {
|
||||||
FirAnonymousFunctionImpl(session, null, returnType!!, receiverType)
|
FirAnonymousFunctionImpl(session, null, returnType!!, receiverType, FirAnonymousFunctionSymbol())
|
||||||
} else {
|
} else {
|
||||||
val functionName = identifier.nameAsSafeName()
|
val functionName = identifier.nameAsSafeName()
|
||||||
FirMemberFunctionImpl(
|
FirMemberFunctionImpl(
|
||||||
|
|||||||
+2
-1
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.fir.references.FirExplicitSuperReference
|
|||||||
import org.jetbrains.kotlin.fir.references.FirExplicitThisReference
|
import org.jetbrains.kotlin.fir.references.FirExplicitThisReference
|
||||||
import org.jetbrains.kotlin.fir.references.FirSimpleNamedReference
|
import org.jetbrains.kotlin.fir.references.FirSimpleNamedReference
|
||||||
import org.jetbrains.kotlin.fir.render
|
import org.jetbrains.kotlin.fir.render
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeProjection
|
import org.jetbrains.kotlin.fir.types.FirTypeProjection
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl
|
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl
|
||||||
@@ -115,7 +116,7 @@ class ExpressionsConverter(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return FirAnonymousFunctionImpl(session, null, implicitType, implicitType).apply {
|
return FirAnonymousFunctionImpl(session, null, implicitType, implicitType, FirAnonymousFunctionSymbol()).apply {
|
||||||
context.firFunctions += this
|
context.firFunctions += this
|
||||||
var destructuringBlock: FirExpression? = null
|
var destructuringBlock: FirExpression? = null
|
||||||
for (valueParameter in valueParameterList) {
|
for (valueParameter in valueParameterList) {
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ class Context {
|
|||||||
var className: FqName = FqName.ROOT
|
var className: FqName = FqName.ROOT
|
||||||
val currentClassId get() = ClassId(packageFqName, className, false)
|
val currentClassId get() = ClassId(packageFqName, className, false)
|
||||||
|
|
||||||
val firFunctions = mutableListOf<FirFunction>()
|
val firFunctions = mutableListOf<FirFunction<*>>()
|
||||||
val firFunctionCalls = mutableListOf<FirFunctionCall>()
|
val firFunctionCalls = mutableListOf<FirFunctionCall>()
|
||||||
val firLabels = mutableListOf<FirLabel>()
|
val firLabels = mutableListOf<FirLabel>()
|
||||||
val firLoops = mutableListOf<FirLoop>()
|
val firLoops = mutableListOf<FirLoop>()
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.fir.references.FirDelegateFieldReferenceImpl
|
|||||||
import org.jetbrains.kotlin.fir.references.FirExplicitThisReference
|
import org.jetbrains.kotlin.fir.references.FirExplicitThisReference
|
||||||
import org.jetbrains.kotlin.fir.references.FirResolvedCallableReferenceImpl
|
import org.jetbrains.kotlin.fir.references.FirResolvedCallableReferenceImpl
|
||||||
import org.jetbrains.kotlin.fir.references.FirSimpleNamedReference
|
import org.jetbrains.kotlin.fir.references.FirSimpleNamedReference
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.ConeStarProjection
|
import org.jetbrains.kotlin.fir.types.ConeStarProjection
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
@@ -317,7 +318,7 @@ fun FirModifiableAccessorsOwner.generateAccessorsByDelegate(session: FirSession,
|
|||||||
}
|
}
|
||||||
if (stubMode) return
|
if (stubMode) return
|
||||||
getter = (getter as? FirPropertyAccessorImpl)
|
getter = (getter as? FirPropertyAccessorImpl)
|
||||||
?: FirPropertyAccessorImpl(session, null, true, Visibilities.UNKNOWN, FirImplicitTypeRefImpl(null)).apply Accessor@{
|
?: FirPropertyAccessorImpl(session, null, true, Visibilities.UNKNOWN, FirImplicitTypeRefImpl(null), FirPropertyAccessorSymbol()).apply Accessor@{
|
||||||
body = FirSingleExpressionBlock(
|
body = FirSingleExpressionBlock(
|
||||||
FirReturnExpressionImpl(
|
FirReturnExpressionImpl(
|
||||||
null,
|
null,
|
||||||
@@ -334,7 +335,7 @@ fun FirModifiableAccessorsOwner.generateAccessorsByDelegate(session: FirSession,
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
setter = (setter as? FirPropertyAccessorImpl)
|
setter = (setter as? FirPropertyAccessorImpl)
|
||||||
?: FirPropertyAccessorImpl(session, null, false, Visibilities.UNKNOWN, FirImplicitUnitTypeRef(null)).apply {
|
?: FirPropertyAccessorImpl(session, null, false, Visibilities.UNKNOWN, FirImplicitUnitTypeRef(null), FirPropertyAccessorSymbol()).apply {
|
||||||
val parameter = FirValueParameterImpl(
|
val parameter = FirValueParameterImpl(
|
||||||
session, null, DELEGATED_SETTER_PARAM,
|
session, null, DELEGATED_SETTER_PARAM,
|
||||||
FirImplicitTypeRefImpl(null),
|
FirImplicitTypeRefImpl(null),
|
||||||
|
|||||||
@@ -11,20 +11,21 @@ import org.jetbrains.kotlin.descriptors.ClassKind
|
|||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.fir.*
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
|
import org.jetbrains.kotlin.fir.FirWhenSubject
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.*
|
import org.jetbrains.kotlin.fir.declarations.impl.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.impl.*
|
import org.jetbrains.kotlin.fir.expressions.impl.*
|
||||||
import org.jetbrains.kotlin.fir.labels.FirLabelImpl
|
import org.jetbrains.kotlin.fir.labels.FirLabelImpl
|
||||||
import org.jetbrains.kotlin.fir.references.*
|
import org.jetbrains.kotlin.fir.references.*
|
||||||
import org.jetbrains.kotlin.fir.symbols.CallableId
|
import org.jetbrains.kotlin.fir.render
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.FirTypeProjection
|
||||||
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.impl.*
|
import org.jetbrains.kotlin.fir.types.impl.*
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens.*
|
import org.jetbrains.kotlin.lexer.KtTokens.*
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
|
||||||
import org.jetbrains.kotlin.name.FqName
|
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
||||||
@@ -205,7 +206,8 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
|
|||||||
returnTypeReference?.convertSafe() ?: propertyTypeRef
|
returnTypeReference?.convertSafe() ?: propertyTypeRef
|
||||||
} else {
|
} else {
|
||||||
returnTypeReference.toFirOrUnitType()
|
returnTypeReference.toFirOrUnitType()
|
||||||
}
|
},
|
||||||
|
FirPropertyAccessorSymbol()
|
||||||
)
|
)
|
||||||
this@RawFirBuilder.context.firFunctions += firAccessor
|
this@RawFirBuilder.context.firFunctions += firAccessor
|
||||||
extractAnnotationsTo(firAccessor)
|
extractAnnotationsTo(firAccessor)
|
||||||
@@ -284,7 +286,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun KtDeclarationWithBody.extractValueParametersTo(
|
private fun KtDeclarationWithBody.extractValueParametersTo(
|
||||||
container: FirFunction,
|
container: FirFunction<*>,
|
||||||
defaultTypeRef: FirTypeRef? = null
|
defaultTypeRef: FirTypeRef? = null
|
||||||
) {
|
) {
|
||||||
for (valueParameter in valueParameters) {
|
for (valueParameter in valueParameters) {
|
||||||
@@ -543,7 +545,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
|
|||||||
}
|
}
|
||||||
val receiverType = function.receiverTypeReference.convertSafe<FirTypeRef>()
|
val receiverType = function.receiverTypeReference.convertSafe<FirTypeRef>()
|
||||||
val firFunction = if (function.name == null) {
|
val firFunction = if (function.name == null) {
|
||||||
FirAnonymousFunctionImpl(session, function, returnType, receiverType)
|
FirAnonymousFunctionImpl(session, function, returnType, receiverType, FirAnonymousFunctionSymbol())
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
FirMemberFunctionImpl(
|
FirMemberFunctionImpl(
|
||||||
@@ -583,7 +585,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
|
|||||||
val literal = expression.functionLiteral
|
val literal = expression.functionLiteral
|
||||||
val returnType = FirImplicitTypeRefImpl(literal)
|
val returnType = FirImplicitTypeRefImpl(literal)
|
||||||
val receiverType = FirImplicitTypeRefImpl(literal)
|
val receiverType = FirImplicitTypeRefImpl(literal)
|
||||||
return FirAnonymousFunctionImpl(session, literal, returnType, receiverType).apply {
|
return FirAnonymousFunctionImpl(session, literal, returnType, receiverType, FirAnonymousFunctionSymbol()).apply {
|
||||||
context.firFunctions += this
|
context.firFunctions += this
|
||||||
var destructuringBlock: FirExpression? = null
|
var destructuringBlock: FirExpression? = null
|
||||||
for (valueParameter in literal.valueParameters) {
|
for (valueParameter in literal.valueParameters) {
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ fun FirAnonymousFunction.copy(
|
|||||||
typeRef: FirTypeRef = this.typeRef,
|
typeRef: FirTypeRef = this.typeRef,
|
||||||
label: FirLabel? = this.label
|
label: FirLabel? = this.label
|
||||||
): FirAnonymousFunction {
|
): FirAnonymousFunction {
|
||||||
return FirAnonymousFunctionImpl(session, psi, returnTypeRef, receiverTypeRef).apply {
|
return FirAnonymousFunctionImpl(session, psi, returnTypeRef, receiverTypeRef, symbol).apply {
|
||||||
this.valueParameters.addAll(valueParameters)
|
this.valueParameters.addAll(valueParameters)
|
||||||
this.body = body
|
this.body = body
|
||||||
this.annotations.addAll(annotations)
|
this.annotations.addAll(annotations)
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ package org.jetbrains.kotlin.fir.resolve
|
|||||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||||
import org.jetbrains.kotlin.fir.*
|
import org.jetbrains.kotlin.fir.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirResolvable
|
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess
|
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirResolvable
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier
|
import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier
|
||||||
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
|
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.FirNamedReferenceWithCandidate
|
import org.jetbrains.kotlin.fir.resolve.calls.FirNamedReferenceWithCandidate
|
||||||
@@ -192,7 +192,7 @@ fun <T : ConeKotlinType> T.withArguments(arguments: Array<out ConeKotlinTypeProj
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FirFunction.constructFunctionalTypeRef(session: FirSession): FirResolvedTypeRef {
|
fun FirFunction<*>.constructFunctionalTypeRef(session: FirSession): FirResolvedTypeRef {
|
||||||
val receiverTypeRef = when (this) {
|
val receiverTypeRef = when (this) {
|
||||||
is FirNamedFunction -> receiverTypeRef
|
is FirNamedFunction -> receiverTypeRef
|
||||||
is FirAnonymousFunction -> receiverTypeRef
|
is FirAnonymousFunction -> receiverTypeRef
|
||||||
|
|||||||
+1
-1
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.expressions.FirWrappedArgumentExpression
|
|||||||
import org.jetbrains.kotlin.fir.render
|
import org.jetbrains.kotlin.fir.render
|
||||||
|
|
||||||
class FirCallArgumentsProcessor(
|
class FirCallArgumentsProcessor(
|
||||||
private val function: FirFunction,
|
private val function: FirFunction<*>,
|
||||||
private val arguments: List<FirExpression>
|
private val arguments: List<FirExpression>
|
||||||
) {
|
) {
|
||||||
class Result(val argumentMapping: Map<FirExpression, FirValueParameter>, val isSuccess: Boolean)
|
class Result(val argumentMapping: Map<FirExpression, FirValueParameter>, val isSuccess: Boolean)
|
||||||
|
|||||||
+4
-4
@@ -545,7 +545,7 @@ open class FirBodyResolveTransformer(
|
|||||||
return (annotationCall.transformChildren(this, data) as FirStatement).compose()
|
return (annotationCall.transformChildren(this, data) as FirStatement).compose()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun transformFunction(function: FirFunction, data: Any?): CompositeTransformResult<FirDeclaration> {
|
override fun <F : FirFunction<F>> transformFunction(function: FirFunction<F>, data: Any?): CompositeTransformResult<FirDeclaration> {
|
||||||
return withScopeCleanup(localScopes) {
|
return withScopeCleanup(localScopes) {
|
||||||
localScopes += FirLocalScope()
|
localScopes += FirLocalScope()
|
||||||
super.transformFunction(function, data)
|
super.transformFunction(function, data)
|
||||||
@@ -553,7 +553,7 @@ open class FirBodyResolveTransformer(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun transformFunctionWithGivenSignature(
|
private fun transformFunctionWithGivenSignature(
|
||||||
function: FirFunction,
|
function: FirFunction<*>,
|
||||||
returnTypeRef: FirTypeRef,
|
returnTypeRef: FirTypeRef,
|
||||||
receiverTypeRef: FirTypeRef? = null
|
receiverTypeRef: FirTypeRef? = null
|
||||||
): CompositeTransformResult<FirDeclaration> {
|
): CompositeTransformResult<FirDeclaration> {
|
||||||
@@ -563,7 +563,7 @@ open class FirBodyResolveTransformer(
|
|||||||
return withScopeCleanup(scopes) {
|
return withScopeCleanup(scopes) {
|
||||||
scopes.addIfNotNull(receiverTypeRef?.coneTypeSafe<ConeKotlinType>()?.scope(session, scopeSession))
|
scopes.addIfNotNull(receiverTypeRef?.coneTypeSafe<ConeKotlinType>()?.scope(session, scopeSession))
|
||||||
|
|
||||||
val result = transformFunction(function, returnTypeRef).single as FirFunction
|
val result = transformFunction(function, returnTypeRef).single as FirFunction<*>
|
||||||
val body = result.body
|
val body = result.body
|
||||||
if (result is FirTypedDeclaration && result.returnTypeRef is FirImplicitTypeRef && body != null) {
|
if (result is FirTypedDeclaration && result.returnTypeRef is FirImplicitTypeRef && body != null) {
|
||||||
result.transformReturnTypeRef(this, body.resultType)
|
result.transformReturnTypeRef(this, body.resultType)
|
||||||
@@ -782,7 +782,7 @@ open class FirBodyResolveTransformer(
|
|||||||
labels.put(labelName, type)
|
labels.put(labelName, type)
|
||||||
when (owner) {
|
when (owner) {
|
||||||
is FirRegularClass -> implicitReceiverStack += ImplicitDispatchReceiverValue(owner.symbol, type)
|
is FirRegularClass -> implicitReceiverStack += ImplicitDispatchReceiverValue(owner.symbol, type)
|
||||||
is FirFunction -> implicitReceiverStack += ImplicitExtensionReceiverValue(type)
|
is FirFunction<*> -> implicitReceiverStack += ImplicitExtensionReceiverValue(type)
|
||||||
else -> throw IllegalArgumentException("Incorrect label & receiver owner: ${owner.javaClass}")
|
else -> throw IllegalArgumentException("Incorrect label & receiver owner: ${owner.javaClass}")
|
||||||
}
|
}
|
||||||
val result = block()
|
val result = block()
|
||||||
|
|||||||
+1
-1
@@ -60,7 +60,7 @@ class FirClassSubstitutionScope(
|
|||||||
val member = when (original) {
|
val member = when (original) {
|
||||||
is FirNamedFunctionSymbol -> original.fir
|
is FirNamedFunctionSymbol -> original.fir
|
||||||
is FirConstructorSymbol -> return original
|
is FirConstructorSymbol -> return original
|
||||||
is FirAccessorSymbol -> throw AssertionError("Should not be here")
|
else -> throw AssertionError("Should not be here")
|
||||||
}
|
}
|
||||||
|
|
||||||
val receiverType = member.receiverTypeRef?.coneTypeUnsafe<ConeKotlinType>()
|
val receiverType = member.receiverTypeRef?.coneTypeUnsafe<ConeKotlinType>()
|
||||||
|
|||||||
@@ -9,4 +9,4 @@ import org.jetbrains.kotlin.fir.declarations.FirFunction
|
|||||||
|
|
||||||
class FirFunctionTarget(
|
class FirFunctionTarget(
|
||||||
labelName: String?
|
labelName: String?
|
||||||
) : FirAbstractTarget<FirFunction>(labelName)
|
) : FirAbstractTarget<FirFunction<*>>(labelName)
|
||||||
@@ -127,7 +127,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
|||||||
print(callableDeclaration.name)
|
print(callableDeclaration.name)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (callableDeclaration is FirFunction) {
|
if (callableDeclaration is FirFunction<*>) {
|
||||||
callableDeclaration.valueParameters.renderParameters()
|
callableDeclaration.valueParameters.renderParameters()
|
||||||
}
|
}
|
||||||
print(": ")
|
print(": ")
|
||||||
@@ -382,7 +382,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
|||||||
anonymousFunction.body?.renderBody()
|
anonymousFunction.body?.renderBody()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitFunction(function: FirFunction) {
|
override fun <F : FirFunction<F>> visitFunction(function: FirFunction<F>) {
|
||||||
function.valueParameters.renderParameters()
|
function.valueParameters.renderParameters()
|
||||||
visitDeclarationWithBody(function)
|
visitDeclarationWithBody(function)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,26 +10,24 @@ import org.jetbrains.kotlin.fir.FirLabeledElement
|
|||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.VisitedSupertype
|
import org.jetbrains.kotlin.fir.VisitedSupertype
|
||||||
import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeExpression
|
import org.jetbrains.kotlin.fir.expressions.impl.FirUnknownTypeExpression
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
|
|
||||||
abstract class FirAnonymousFunction(
|
abstract class FirAnonymousFunction(
|
||||||
final override val session: FirSession,
|
final override val session: FirSession,
|
||||||
psi: PsiElement?
|
psi: PsiElement?
|
||||||
) : @VisitedSupertype FirFunction, FirUnknownTypeExpression(psi), FirTypedDeclaration, FirLabeledElement {
|
) : @VisitedSupertype FirFunction<FirAnonymousFunction>, FirUnknownTypeExpression(psi), FirLabeledElement {
|
||||||
abstract val receiverTypeRef: FirTypeRef?
|
abstract override val receiverTypeRef: FirTypeRef?
|
||||||
|
|
||||||
|
abstract override val symbol: FirAnonymousFunctionSymbol
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||||
visitor.visitAnonymousFunction(this, data)
|
visitor.visitAnonymousFunction(this, data)
|
||||||
|
|
||||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||||
super<FirTypedDeclaration>.acceptChildren(visitor, data)
|
super<FirFunction>.acceptChildren(visitor, data)
|
||||||
super<FirLabeledElement>.acceptChildren(visitor, data)
|
super<FirLabeledElement>.acceptChildren(visitor, data)
|
||||||
receiverTypeRef?.accept(visitor, data)
|
|
||||||
for (parameter in valueParameters) {
|
|
||||||
parameter.accept(visitor, data)
|
|
||||||
}
|
|
||||||
body?.accept(visitor, data)
|
|
||||||
typeRef.accept(visitor, data)
|
typeRef.accept(visitor, data)
|
||||||
// Don't call super<FirExpression>.acceptChildren (annotations & typeRef are already processed)
|
// Don't call super<FirExpression>.acceptChildren (annotations & typeRef are already processed)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,23 +9,29 @@ import org.jetbrains.kotlin.fir.FirTargetElement
|
|||||||
import org.jetbrains.kotlin.fir.VisitedSupertype
|
import org.jetbrains.kotlin.fir.VisitedSupertype
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirStatement
|
import org.jetbrains.kotlin.fir.expressions.FirStatement
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.FirSymbolOwner
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
|
|
||||||
// May be should inherit FirTypeParameterContainer
|
// May be should inherit FirTypeParameterContainer
|
||||||
interface FirFunction : @VisitedSupertype FirDeclarationWithBody, FirAnnotationContainer, FirTargetElement, FirStatement {
|
interface FirFunction<F : FirFunction<F>> : @VisitedSupertype FirDeclarationWithBody, FirCallableDeclaration<F>, FirAnnotationContainer,
|
||||||
|
FirTargetElement, FirStatement, FirSymbolOwner<F> {
|
||||||
|
|
||||||
val valueParameters: List<FirValueParameter>
|
val valueParameters: List<FirValueParameter>
|
||||||
|
|
||||||
|
override val symbol: FirFunctionSymbol<F>
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||||
visitor.visitFunction(this, data)
|
visitor.visitFunction(this, data)
|
||||||
|
|
||||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||||
acceptAnnotations(visitor, data)
|
super<FirCallableDeclaration>.acceptChildren(visitor, data)
|
||||||
for (parameter in valueParameters) {
|
for (parameter in valueParameters) {
|
||||||
parameter.accept(visitor, data)
|
parameter.accept(visitor, data)
|
||||||
}
|
}
|
||||||
super<FirDeclarationWithBody>.acceptChildren(visitor, data)
|
super<FirDeclarationWithBody>.acceptChildren(visitor, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirFunction
|
fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirFunction<F>
|
||||||
}
|
}
|
||||||
@@ -6,12 +6,11 @@
|
|||||||
package org.jetbrains.kotlin.fir.declarations
|
package org.jetbrains.kotlin.fir.declarations
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.VisitedSupertype
|
import org.jetbrains.kotlin.fir.VisitedSupertype
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
|
|
||||||
interface FirMemberFunction<F : FirMemberFunction<F>> :
|
interface FirMemberFunction<F : FirMemberFunction<F>> :
|
||||||
@VisitedSupertype FirFunction, FirCallableMemberDeclaration<F> {
|
@VisitedSupertype FirFunction<F>, FirCallableMemberDeclaration<F> {
|
||||||
|
|
||||||
override val symbol: FirFunctionSymbol<F>
|
override val symbol: FirFunctionSymbol<F>
|
||||||
|
|
||||||
|
|||||||
@@ -7,9 +7,10 @@ package org.jetbrains.kotlin.fir.declarations
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.fir.VisitedSupertype
|
import org.jetbrains.kotlin.fir.VisitedSupertype
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
|
|
||||||
interface FirPropertyAccessor : @VisitedSupertype FirFunction, FirTypedDeclaration {
|
interface FirPropertyAccessor : @VisitedSupertype FirFunction<FirPropertyAccessor> {
|
||||||
val isGetter: Boolean
|
val isGetter: Boolean
|
||||||
|
|
||||||
val isSetter: Boolean get() = !isGetter
|
val isSetter: Boolean get() = !isGetter
|
||||||
@@ -18,15 +19,13 @@ interface FirPropertyAccessor : @VisitedSupertype FirFunction, FirTypedDeclarati
|
|||||||
|
|
||||||
val visibility: Visibility get() = status.visibility
|
val visibility: Visibility get() = status.visibility
|
||||||
|
|
||||||
|
override val symbol: FirPropertyAccessorSymbol
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||||
visitor.visitPropertyAccessor(this, data)
|
visitor.visitPropertyAccessor(this, data)
|
||||||
|
|
||||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||||
super<FirTypedDeclaration>.acceptChildren(visitor, data)
|
super.acceptChildren(visitor, data)
|
||||||
for (parameter in valueParameters) {
|
|
||||||
parameter.accept(visitor, data)
|
|
||||||
}
|
|
||||||
body?.accept(visitor, data)
|
|
||||||
status.accept(visitor, data)
|
status.accept(visitor, data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+12
-13
@@ -8,25 +8,24 @@ package org.jetbrains.kotlin.fir.declarations.impl
|
|||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
import org.jetbrains.kotlin.fir.VisitedSupertype
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol
|
||||||
import org.jetbrains.kotlin.fir.transformInplace
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.fir.transformSingle
|
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
|
|
||||||
abstract class FirAbstractFunction(
|
abstract class FirAbstractPropertyAccessor(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
psi: PsiElement?
|
psi: PsiElement?,
|
||||||
) : FirAbstractAnnotatedDeclaration(session, psi), FirFunction {
|
final override val symbol: FirPropertyAccessorSymbol
|
||||||
final override val valueParameters = mutableListOf<FirValueParameter>()
|
) : FirAbstractAnnotatedDeclaration(session, psi), @VisitedSupertype FirPropertyAccessor {
|
||||||
|
init {
|
||||||
|
symbol.bind(this)
|
||||||
|
}
|
||||||
|
|
||||||
final override var body: FirBlock? = null
|
final override val receiverTypeRef: FirTypeRef? get() = null
|
||||||
|
|
||||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||||
valueParameters.transformInplace(transformer, data)
|
|
||||||
body = body?.transformSingle(transformer, data)
|
|
||||||
|
|
||||||
return super<FirAbstractAnnotatedDeclaration>.transformChildren(transformer, data)
|
return super<FirAbstractAnnotatedDeclaration>.transformChildren(transformer, data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+8
-2
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
|
|
||||||
@@ -18,8 +19,13 @@ class FirAnonymousFunctionImpl(
|
|||||||
session: FirSession,
|
session: FirSession,
|
||||||
psi: PsiElement?,
|
psi: PsiElement?,
|
||||||
override var returnTypeRef: FirTypeRef,
|
override var returnTypeRef: FirTypeRef,
|
||||||
override var receiverTypeRef: FirTypeRef?
|
override var receiverTypeRef: FirTypeRef?,
|
||||||
) : FirAnonymousFunction(session, psi), FirModifiableFunction {
|
override val symbol: FirAnonymousFunctionSymbol
|
||||||
|
) : FirAnonymousFunction(session, psi), FirModifiableFunction<FirAnonymousFunction> {
|
||||||
|
init {
|
||||||
|
symbol.bind(this)
|
||||||
|
}
|
||||||
|
|
||||||
override var label: FirLabel? = null
|
override var label: FirLabel? = null
|
||||||
|
|
||||||
override val valueParameters = mutableListOf<FirValueParameter>()
|
override val valueParameters = mutableListOf<FirValueParameter>()
|
||||||
|
|||||||
+14
-15
@@ -8,13 +8,13 @@ package org.jetbrains.kotlin.fir.declarations.impl
|
|||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.fir.*
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||||
import org.jetbrains.kotlin.fir.symbols.CallableId
|
import org.jetbrains.kotlin.fir.symbols.CallableId
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
|
||||||
import org.jetbrains.kotlin.fir.transformInplace
|
import org.jetbrains.kotlin.fir.transformInplace
|
||||||
import org.jetbrains.kotlin.fir.transformSingle
|
import org.jetbrains.kotlin.fir.transformSingle
|
||||||
@@ -25,20 +25,17 @@ import org.jetbrains.kotlin.name.FqName
|
|||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
abstract class FirDefaultPropertyAccessor(
|
abstract class FirDefaultPropertyAccessor(
|
||||||
final override val session: FirSession,
|
session: FirSession,
|
||||||
psi: PsiElement?,
|
psi: PsiElement?,
|
||||||
final override val isGetter: Boolean,
|
final override val isGetter: Boolean,
|
||||||
visibility: Visibility
|
visibility: Visibility,
|
||||||
) : FirAbstractElement(psi), FirPropertyAccessor {
|
symbol: FirPropertyAccessorSymbol
|
||||||
|
) : FirAbstractPropertyAccessor(session, psi, symbol) {
|
||||||
override var status = FirDeclarationStatusImpl(visibility, Modality.FINAL)
|
override var status = FirDeclarationStatusImpl(visibility, Modality.FINAL)
|
||||||
|
|
||||||
override var resolvePhase = FirResolvePhase.BODY_RESOLVE
|
override var resolvePhase = FirResolvePhase.BODY_RESOLVE
|
||||||
|
|
||||||
final override val body: FirBlock? =
|
final override val body: FirBlock? = null
|
||||||
null
|
|
||||||
|
|
||||||
final override val annotations: List<FirAnnotationCall>
|
|
||||||
get() = emptyList()
|
|
||||||
|
|
||||||
abstract override var returnTypeRef: FirTypeRef
|
abstract override var returnTypeRef: FirTypeRef
|
||||||
|
|
||||||
@@ -55,8 +52,9 @@ class FirDefaultPropertyGetter(
|
|||||||
session: FirSession,
|
session: FirSession,
|
||||||
psi: PsiElement?,
|
psi: PsiElement?,
|
||||||
propertyTypeRef: FirTypeRef,
|
propertyTypeRef: FirTypeRef,
|
||||||
visibility: Visibility
|
visibility: Visibility,
|
||||||
) : FirDefaultPropertyAccessor(session, psi, isGetter = true, visibility = visibility) {
|
symbol: FirPropertyAccessorSymbol = FirPropertyAccessorSymbol()
|
||||||
|
) : FirDefaultPropertyAccessor(session, psi, isGetter = true, visibility = visibility, symbol = symbol) {
|
||||||
override val valueParameters: List<FirValueParameter> = emptyList()
|
override val valueParameters: List<FirValueParameter> = emptyList()
|
||||||
|
|
||||||
override var returnTypeRef: FirTypeRef = propertyTypeRef
|
override var returnTypeRef: FirTypeRef = propertyTypeRef
|
||||||
@@ -73,8 +71,9 @@ class FirDefaultPropertySetter(
|
|||||||
session: FirSession,
|
session: FirSession,
|
||||||
psi: PsiElement?,
|
psi: PsiElement?,
|
||||||
propertyTypeRef: FirTypeRef,
|
propertyTypeRef: FirTypeRef,
|
||||||
visibility: Visibility
|
visibility: Visibility,
|
||||||
) : FirDefaultPropertyAccessor(session, psi, isGetter = false, visibility = visibility) {
|
symbol: FirPropertyAccessorSymbol = FirPropertyAccessorSymbol()
|
||||||
|
) : FirDefaultPropertyAccessor(session, psi, isGetter = false, visibility = visibility, symbol = symbol) {
|
||||||
override val valueParameters = mutableListOf(
|
override val valueParameters = mutableListOf(
|
||||||
FirDefaultSetterValueParameter(
|
FirDefaultSetterValueParameter(
|
||||||
session, psi, propertyTypeRef, FirVariableSymbol(
|
session, psi, propertyTypeRef, FirVariableSymbol(
|
||||||
|
|||||||
+18
-3
@@ -14,14 +14,27 @@ import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.FirSymbolOwner
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirErrorFunctionSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
|
|
||||||
class FirErrorFunction(
|
class FirErrorFunction(
|
||||||
override val session: FirSession,
|
override val session: FirSession,
|
||||||
psi: PsiElement?,
|
psi: PsiElement?,
|
||||||
override val reason: String
|
override val reason: String,
|
||||||
) : FirAbstractElement(psi), FirErrorDeclaration, FirFunction {
|
override val symbol: FirErrorFunctionSymbol = FirErrorFunctionSymbol()
|
||||||
|
) : FirAbstractElement(psi), FirErrorDeclaration, FirFunction<FirErrorFunction>, FirSymbolOwner<FirErrorFunction> {
|
||||||
|
init {
|
||||||
|
symbol.bind(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
override val receiverTypeRef: FirTypeRef? get() = null
|
||||||
|
|
||||||
|
override val returnTypeRef: FirTypeRef
|
||||||
|
get() = TODO("not implemented")
|
||||||
|
|
||||||
override val annotations: List<FirAnnotationCall>
|
override val annotations: List<FirAnnotationCall>
|
||||||
get() = emptyList()
|
get() = emptyList()
|
||||||
|
|
||||||
@@ -36,7 +49,9 @@ class FirErrorFunction(
|
|||||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||||
super<FirFunction>.accept(visitor, data)
|
super<FirFunction>.accept(visitor, data)
|
||||||
|
|
||||||
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirFunction {
|
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirErrorFunction {
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D) {}
|
||||||
}
|
}
|
||||||
+4
-4
@@ -10,8 +10,8 @@ import org.jetbrains.kotlin.descriptors.Modality
|
|||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
import org.jetbrains.kotlin.fir.declarations.FirNamedFunction
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
||||||
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.fir.types.FirTypeRef
|
|||||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
open class FirMemberFunctionImpl : FirAbstractCallableMember<FirNamedFunction>, FirNamedFunction, FirModifiableFunction {
|
open class FirMemberFunctionImpl : FirAbstractCallableMember<FirNamedFunction>, FirNamedFunction, FirModifiableFunction<FirNamedFunction> {
|
||||||
|
|
||||||
// NB: FirAccessorSymbol can be here
|
// NB: FirAccessorSymbol can be here
|
||||||
override val symbol: FirFunctionSymbol<FirNamedFunction>
|
override val symbol: FirFunctionSymbol<FirNamedFunction>
|
||||||
@@ -81,7 +81,7 @@ open class FirMemberFunctionImpl : FirAbstractCallableMember<FirNamedFunction>,
|
|||||||
return super<FirAbstractCallableMember>.transformChildren(transformer, data)
|
return super<FirAbstractCallableMember>.transformChildren(transformer, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirFunction {
|
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirMemberFunctionImpl {
|
||||||
valueParameters.transformInplace(transformer, data)
|
valueParameters.transformInplace(transformer, data)
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.fir.declarations.FirFunction
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||||
|
|
||||||
interface FirModifiableFunction : FirFunction {
|
interface FirModifiableFunction<F : FirFunction<F>> : FirFunction<F> {
|
||||||
override var body: FirBlock?
|
override var body: FirBlock?
|
||||||
|
|
||||||
override val valueParameters: MutableList<FirValueParameter>
|
override val valueParameters: MutableList<FirValueParameter>
|
||||||
|
|||||||
+15
-6
@@ -10,8 +10,10 @@ import org.jetbrains.kotlin.descriptors.Modality
|
|||||||
import org.jetbrains.kotlin.descriptors.Visibility
|
import org.jetbrains.kotlin.descriptors.Visibility
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
|
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.transformInplace
|
||||||
import org.jetbrains.kotlin.fir.transformSingle
|
import org.jetbrains.kotlin.fir.transformSingle
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
@@ -21,22 +23,29 @@ class FirPropertyAccessorImpl(
|
|||||||
psi: PsiElement?,
|
psi: PsiElement?,
|
||||||
override val isGetter: Boolean,
|
override val isGetter: Boolean,
|
||||||
visibility: Visibility,
|
visibility: Visibility,
|
||||||
override var returnTypeRef: FirTypeRef
|
override var returnTypeRef: FirTypeRef,
|
||||||
) : FirAbstractFunction(session, psi), FirPropertyAccessor {
|
symbol: FirPropertyAccessorSymbol
|
||||||
|
) : FirAbstractPropertyAccessor(session, psi, symbol) {
|
||||||
override var status = FirDeclarationStatusImpl(visibility, Modality.FINAL)
|
override var status = FirDeclarationStatusImpl(visibility, Modality.FINAL)
|
||||||
|
|
||||||
|
override var body: FirBlock? = null
|
||||||
|
|
||||||
|
override val valueParameters = mutableListOf<FirValueParameter>()
|
||||||
|
|
||||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||||
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
|
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
|
||||||
|
valueParameters.transformInplace(transformer, data)
|
||||||
|
body = body?.transformSingle(transformer, data)
|
||||||
status = status.transformSingle(transformer, data)
|
status = status.transformSingle(transformer, data)
|
||||||
|
|
||||||
return super<FirAbstractFunction>.transformChildren(transformer, data)
|
return super.transformChildren(transformer, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D) {
|
override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D) {
|
||||||
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
|
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirFunction {
|
override fun <D> transformValueParameters(transformer: FirTransformer<D>, data: D): FirPropertyAccessorImpl {
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -9,7 +9,7 @@ import com.intellij.psi.PsiElement
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||||
|
|
||||||
abstract class FirReturnExpression(psi: PsiElement?) : FirJump<FirFunction>(psi) {
|
abstract class FirReturnExpression(psi: PsiElement?) : FirJump<FirFunction<*>>(psi) {
|
||||||
abstract val result: FirExpression
|
abstract val result: FirExpression
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||||
|
|||||||
+4
-2
@@ -6,10 +6,12 @@
|
|||||||
package org.jetbrains.kotlin.fir.expressions.impl
|
package org.jetbrains.kotlin.fir.expressions.impl
|
||||||
|
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.fir.*
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
|
import org.jetbrains.kotlin.fir.FirTarget
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirReturnExpression
|
import org.jetbrains.kotlin.fir.expressions.FirReturnExpression
|
||||||
|
import org.jetbrains.kotlin.fir.transformSingle
|
||||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.impl.FirImplicitNothingTypeRef
|
import org.jetbrains.kotlin.fir.types.impl.FirImplicitNothingTypeRef
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
@@ -18,7 +20,7 @@ class FirReturnExpressionImpl(
|
|||||||
psi: PsiElement?,
|
psi: PsiElement?,
|
||||||
override var result: FirExpression
|
override var result: FirExpression
|
||||||
) : FirReturnExpression(psi) {
|
) : FirReturnExpression(psi) {
|
||||||
override lateinit var target: FirTarget<FirFunction>
|
override lateinit var target: FirTarget<FirFunction<*>>
|
||||||
|
|
||||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||||
result = result.transformSingle(transformer, data)
|
result = result.transformSingle(transformer, data)
|
||||||
|
|||||||
@@ -6,18 +6,23 @@
|
|||||||
package org.jetbrains.kotlin.fir.symbols.impl
|
package org.jetbrains.kotlin.fir.symbols.impl
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.impl.FirErrorFunction
|
||||||
import org.jetbrains.kotlin.fir.symbols.CallableId
|
import org.jetbrains.kotlin.fir.symbols.CallableId
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeFunctionSymbol
|
import org.jetbrains.kotlin.fir.symbols.ConeFunctionSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConePropertySymbol
|
import org.jetbrains.kotlin.fir.symbols.ConePropertySymbol
|
||||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||||
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
sealed class FirFunctionSymbol<D : FirMemberFunction<D>>(
|
sealed class FirFunctionSymbol<D : FirFunction<D>>(
|
||||||
override val callableId: CallableId
|
override val callableId: CallableId
|
||||||
) : ConeFunctionSymbol, FirCallableSymbol<D>() {
|
) : ConeFunctionSymbol, FirCallableSymbol<D>() {
|
||||||
override val parameters: List<ConeKotlinType>
|
override val parameters: List<ConeKotlinType>
|
||||||
get() = emptyList()
|
get() = emptyList()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ------------------------ named ------------------------
|
||||||
|
|
||||||
open class FirNamedFunctionSymbol(
|
open class FirNamedFunctionSymbol(
|
||||||
callableId: CallableId,
|
callableId: CallableId,
|
||||||
val isFakeOverride: Boolean = false,
|
val isFakeOverride: Boolean = false,
|
||||||
@@ -32,4 +37,19 @@ class FirConstructorSymbol(
|
|||||||
class FirAccessorSymbol(
|
class FirAccessorSymbol(
|
||||||
callableId: CallableId,
|
callableId: CallableId,
|
||||||
val accessorId: CallableId
|
val accessorId: CallableId
|
||||||
) : ConePropertySymbol, FirFunctionSymbol<FirNamedFunction>(callableId)
|
) : ConePropertySymbol, FirFunctionSymbol<FirNamedFunction>(callableId)
|
||||||
|
|
||||||
|
// ------------------------ unnamed ------------------------
|
||||||
|
|
||||||
|
sealed class FirFunctionWithoutNameSymbol<F : FirFunction<F>>(
|
||||||
|
stubName: Name
|
||||||
|
) : FirFunctionSymbol<F>(CallableId(FqName("special"), stubName)) {
|
||||||
|
override val parameters: List<ConeKotlinType>
|
||||||
|
get() = emptyList()
|
||||||
|
}
|
||||||
|
|
||||||
|
class FirAnonymousFunctionSymbol : FirFunctionWithoutNameSymbol<FirAnonymousFunction>(Name.identifier("anonymous"))
|
||||||
|
|
||||||
|
class FirPropertyAccessorSymbol : FirFunctionWithoutNameSymbol<FirPropertyAccessor>(Name.identifier("accessor"))
|
||||||
|
|
||||||
|
class FirErrorFunctionSymbol : FirFunctionWithoutNameSymbol<FirErrorFunction>(Name.identifier("error"))
|
||||||
+5
-15
@@ -6,9 +6,7 @@ package org.jetbrains.kotlin.fir.visitors
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.fir.*
|
import org.jetbrains.kotlin.fir.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
|
import org.jetbrains.kotlin.fir.declarations.impl.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableClass
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableFunction
|
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.impl.*
|
import org.jetbrains.kotlin.fir.expressions.impl.*
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
@@ -42,7 +40,7 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
|||||||
return transformDeclarationWithBody(anonymousInitializer, data)
|
return transformDeclarationWithBody(anonymousInitializer, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun transformFunction(function: FirFunction, data: D): CompositeTransformResult<FirDeclaration> {
|
open fun <F : FirFunction<F>> transformFunction(function: FirFunction<F>, data: D): CompositeTransformResult<FirDeclaration> {
|
||||||
return transformDeclarationWithBody(function, data)
|
return transformDeclarationWithBody(function, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -62,7 +60,7 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
|||||||
return transformMemberFunction(namedFunction, data)
|
return transformMemberFunction(namedFunction, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun transformModifiableFunction(modifiableFunction: FirModifiableFunction, data: D): CompositeTransformResult<FirDeclaration> {
|
open fun <F : FirFunction<F>> transformModifiableFunction(modifiableFunction: FirModifiableFunction<F>, data: D): CompositeTransformResult<FirDeclaration> {
|
||||||
return transformFunction(modifiableFunction, data)
|
return transformFunction(modifiableFunction, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,10 +68,6 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
|||||||
return transformFunction(propertyAccessor, data)
|
return transformFunction(propertyAccessor, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun transformDefaultPropertyAccessor(defaultPropertyAccessor: FirDefaultPropertyAccessor, data: D): CompositeTransformResult<FirDeclaration> {
|
|
||||||
return transformPropertyAccessor(defaultPropertyAccessor, data)
|
|
||||||
}
|
|
||||||
|
|
||||||
open fun transformErrorDeclaration(errorDeclaration: FirErrorDeclaration, data: D): CompositeTransformResult<FirDeclaration> {
|
open fun transformErrorDeclaration(errorDeclaration: FirErrorDeclaration, data: D): CompositeTransformResult<FirDeclaration> {
|
||||||
return transformDeclaration(errorDeclaration, data)
|
return transformDeclaration(errorDeclaration, data)
|
||||||
}
|
}
|
||||||
@@ -582,10 +576,6 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
|||||||
return transformDeclarationWithBody(declarationWithBody, data)
|
return transformDeclarationWithBody(declarationWithBody, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
final override fun visitDefaultPropertyAccessor(defaultPropertyAccessor: FirDefaultPropertyAccessor, data: D): CompositeTransformResult<FirElement> {
|
|
||||||
return transformDefaultPropertyAccessor(defaultPropertyAccessor, data)
|
|
||||||
}
|
|
||||||
|
|
||||||
final override fun visitDelegateFieldReference(delegateFieldReference: FirDelegateFieldReference, data: D): CompositeTransformResult<FirElement> {
|
final override fun visitDelegateFieldReference(delegateFieldReference: FirDelegateFieldReference, data: D): CompositeTransformResult<FirElement> {
|
||||||
return transformDelegateFieldReference(delegateFieldReference, data)
|
return transformDelegateFieldReference(delegateFieldReference, data)
|
||||||
}
|
}
|
||||||
@@ -638,7 +628,7 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
|||||||
return transformFile(file, data)
|
return transformFile(file, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
final override fun visitFunction(function: FirFunction, data: D): CompositeTransformResult<FirElement> {
|
final override fun <F : FirFunction<F>> visitFunction(function: FirFunction<F>, data: D): CompositeTransformResult<FirElement> {
|
||||||
return transformFunction(function, data)
|
return transformFunction(function, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -698,7 +688,7 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
|||||||
return transformModifiableClass(modifiableClass, data)
|
return transformModifiableClass(modifiableClass, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
final override fun visitModifiableFunction(modifiableFunction: FirModifiableFunction, data: D): CompositeTransformResult<FirElement> {
|
final override fun <F : FirFunction<F>> visitModifiableFunction(modifiableFunction: FirModifiableFunction<F>, data: D): CompositeTransformResult<FirElement> {
|
||||||
return transformModifiableFunction(modifiableFunction, data)
|
return transformModifiableFunction(modifiableFunction, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,9 +6,7 @@ package org.jetbrains.kotlin.fir.visitors
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.fir.*
|
import org.jetbrains.kotlin.fir.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
|
import org.jetbrains.kotlin.fir.declarations.impl.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableClass
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableFunction
|
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.impl.*
|
import org.jetbrains.kotlin.fir.expressions.impl.*
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
@@ -42,7 +40,7 @@ abstract class FirVisitor<out R, in D> {
|
|||||||
return visitDeclarationWithBody(anonymousInitializer, data)
|
return visitDeclarationWithBody(anonymousInitializer, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun visitFunction(function: FirFunction, data: D): R {
|
open fun <F : FirFunction<F>> visitFunction(function: FirFunction<F>, data: D): R {
|
||||||
return visitDeclarationWithBody(function, data)
|
return visitDeclarationWithBody(function, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -62,7 +60,7 @@ abstract class FirVisitor<out R, in D> {
|
|||||||
return visitMemberFunction(namedFunction, data)
|
return visitMemberFunction(namedFunction, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun visitModifiableFunction(modifiableFunction: FirModifiableFunction, data: D): R {
|
open fun <F : FirFunction<F>> visitModifiableFunction(modifiableFunction: FirModifiableFunction<F>, data: D): R {
|
||||||
return visitFunction(modifiableFunction, data)
|
return visitFunction(modifiableFunction, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,10 +68,6 @@ abstract class FirVisitor<out R, in D> {
|
|||||||
return visitFunction(propertyAccessor, data)
|
return visitFunction(propertyAccessor, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun visitDefaultPropertyAccessor(defaultPropertyAccessor: FirDefaultPropertyAccessor, data: D): R {
|
|
||||||
return visitPropertyAccessor(defaultPropertyAccessor, data)
|
|
||||||
}
|
|
||||||
|
|
||||||
open fun visitErrorDeclaration(errorDeclaration: FirErrorDeclaration, data: D): R {
|
open fun visitErrorDeclaration(errorDeclaration: FirErrorDeclaration, data: D): R {
|
||||||
return visitDeclaration(errorDeclaration, data)
|
return visitDeclaration(errorDeclaration, data)
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-15
@@ -6,9 +6,7 @@ package org.jetbrains.kotlin.fir.visitors
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.fir.*
|
import org.jetbrains.kotlin.fir.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
|
import org.jetbrains.kotlin.fir.declarations.impl.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableClass
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableFunction
|
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.impl.*
|
import org.jetbrains.kotlin.fir.expressions.impl.*
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
@@ -42,7 +40,7 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitDeclarationWithBody(anonymousInitializer, null)
|
visitDeclarationWithBody(anonymousInitializer, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun visitFunction(function: FirFunction) {
|
open fun <F : FirFunction<F>> visitFunction(function: FirFunction<F>) {
|
||||||
visitDeclarationWithBody(function, null)
|
visitDeclarationWithBody(function, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -62,7 +60,7 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitMemberFunction(namedFunction, null)
|
visitMemberFunction(namedFunction, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun visitModifiableFunction(modifiableFunction: FirModifiableFunction) {
|
open fun <F : FirFunction<F>> visitModifiableFunction(modifiableFunction: FirModifiableFunction<F>) {
|
||||||
visitFunction(modifiableFunction, null)
|
visitFunction(modifiableFunction, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,10 +68,6 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitFunction(propertyAccessor, null)
|
visitFunction(propertyAccessor, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun visitDefaultPropertyAccessor(defaultPropertyAccessor: FirDefaultPropertyAccessor) {
|
|
||||||
visitPropertyAccessor(defaultPropertyAccessor, null)
|
|
||||||
}
|
|
||||||
|
|
||||||
open fun visitErrorDeclaration(errorDeclaration: FirErrorDeclaration) {
|
open fun visitErrorDeclaration(errorDeclaration: FirErrorDeclaration) {
|
||||||
visitDeclaration(errorDeclaration, null)
|
visitDeclaration(errorDeclaration, null)
|
||||||
}
|
}
|
||||||
@@ -582,10 +576,6 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitDeclarationWithBody(declarationWithBody)
|
visitDeclarationWithBody(declarationWithBody)
|
||||||
}
|
}
|
||||||
|
|
||||||
final override fun visitDefaultPropertyAccessor(defaultPropertyAccessor: FirDefaultPropertyAccessor, data: Nothing?) {
|
|
||||||
visitDefaultPropertyAccessor(defaultPropertyAccessor)
|
|
||||||
}
|
|
||||||
|
|
||||||
final override fun visitDelegateFieldReference(delegateFieldReference: FirDelegateFieldReference, data: Nothing?) {
|
final override fun visitDelegateFieldReference(delegateFieldReference: FirDelegateFieldReference, data: Nothing?) {
|
||||||
visitDelegateFieldReference(delegateFieldReference)
|
visitDelegateFieldReference(delegateFieldReference)
|
||||||
}
|
}
|
||||||
@@ -638,7 +628,7 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitFile(file)
|
visitFile(file)
|
||||||
}
|
}
|
||||||
|
|
||||||
final override fun visitFunction(function: FirFunction, data: Nothing?) {
|
final override fun <F : FirFunction<F>> visitFunction(function: FirFunction<F>, data: Nothing?) {
|
||||||
visitFunction(function)
|
visitFunction(function)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -698,7 +688,7 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitModifiableClass(modifiableClass)
|
visitModifiableClass(modifiableClass)
|
||||||
}
|
}
|
||||||
|
|
||||||
final override fun visitModifiableFunction(modifiableFunction: FirModifiableFunction, data: Nothing?) {
|
final override fun <F : FirFunction<F>> visitModifiableFunction(modifiableFunction: FirModifiableFunction<F>, data: Nothing?) {
|
||||||
visitModifiableFunction(modifiableFunction)
|
visitModifiableFunction(modifiableFunction)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user