[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.fir.declarations.*
|
||||
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 {
|
||||
private val parameterCache = mutableMapOf<FirValueParameter, IrValueParameter>()
|
||||
@@ -17,7 +20,7 @@ class Fir2IrCallableCache {
|
||||
|
||||
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]
|
||||
|
||||
@@ -38,9 +41,9 @@ class Fir2IrCallableCache {
|
||||
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)
|
||||
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.getOrPut
|
||||
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.impl.*
|
||||
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
|
||||
for ((index, valueParameter) in function.valueParameters.withIndex()) {
|
||||
valueParameters += createAndSaveIrParameter(valueParameter, index).apply { this.parent = parent }
|
||||
@@ -272,7 +275,7 @@ class Fir2IrDeclarationStorage(
|
||||
}
|
||||
|
||||
private fun <T : IrFunction> T.bindAndDeclareParameters(
|
||||
function: FirFunction,
|
||||
function: FirFunction<*>,
|
||||
descriptor: WrappedCallableDescriptor<T>,
|
||||
irParent: IrDeclarationParent?,
|
||||
shouldLeaveScope: Boolean
|
||||
@@ -286,7 +289,7 @@ class Fir2IrDeclarationStorage(
|
||||
return this
|
||||
}
|
||||
|
||||
private fun <T : IrFunction> T.enterLocalScope(function: FirFunction): T {
|
||||
private fun <T : IrFunction> T.enterLocalScope(function: FirFunction<*>): T {
|
||||
enterScope(descriptor)
|
||||
for ((firParameter, irParameter) in function.valueParameters.zip(valueParameters)) {
|
||||
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.FirValueParameter
|
||||
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 {
|
||||
|
||||
@@ -48,7 +51,7 @@ class Fir2IrLocalStorage {
|
||||
return null
|
||||
}
|
||||
|
||||
fun getLocalFunction(localFunction: FirFunction): IrSimpleFunction? {
|
||||
fun getLocalFunction(localFunction: FirFunction<*>): IrSimpleFunction? {
|
||||
for (cache in cacheStack.asReversed()) {
|
||||
val local = cache.getLocalFunction(localFunction)
|
||||
if (local != null) return local
|
||||
@@ -68,7 +71,7 @@ class Fir2IrLocalStorage {
|
||||
cacheStack.last().putLocalClass(firClass, irClass)
|
||||
}
|
||||
|
||||
fun putLocalFunction(firFunction: FirFunction, irFunction: IrSimpleFunction) {
|
||||
fun putLocalFunction(firFunction: FirFunction<*>, irFunction: IrSimpleFunction) {
|
||||
cacheStack.last().putLocalFunction(firFunction, irFunction)
|
||||
}
|
||||
}
|
||||
@@ -280,7 +280,7 @@ internal class Fir2IrVisitor(
|
||||
|
||||
private fun <T : IrFunction> T.setFunctionContent(
|
||||
descriptor: FunctionDescriptor,
|
||||
firFunction: FirFunction,
|
||||
firFunction: FirFunction<*>,
|
||||
firOverriddenSymbol: FirNamedFunctionSymbol? = null
|
||||
): T {
|
||||
setParentByParentStack()
|
||||
|
||||
+1
-2
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
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.FirValueParameter
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirAbstractCallableMember
|
||||
@@ -55,7 +54,7 @@ class FirJavaConstructor(
|
||||
|
||||
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)
|
||||
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.declarations.*
|
||||
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.types.FirJavaTypeRef
|
||||
import org.jetbrains.kotlin.fir.render
|
||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||
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.types.*
|
||||
import org.jetbrains.kotlin.ir.expressions.IrConstKind
|
||||
@@ -122,6 +122,7 @@ class JavaClassEnhancementScope(
|
||||
if (firMethod !is FirJavaMethod && firMethod !is FirJavaConstructor) {
|
||||
return original
|
||||
}
|
||||
if (firMethod !is FirMemberFunction<*>) throw AssertionError()
|
||||
return enhanceMethod(firMethod, original.callableId, name)
|
||||
}
|
||||
|
||||
@@ -222,7 +223,7 @@ class JavaClassEnhancementScope(
|
||||
return function.symbol
|
||||
}
|
||||
|
||||
private fun FirFunction.computeJvmDescriptor(): String = buildString {
|
||||
private fun FirFunction<*>.computeJvmDescriptor(): String = buildString {
|
||||
if (this@computeJvmDescriptor is FirJavaMethod) {
|
||||
append(name.asString())
|
||||
} else {
|
||||
@@ -364,7 +365,7 @@ class JavaClassEnhancementScope(
|
||||
if (hasReceiver && member is FirJavaMethod) {
|
||||
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.builder.Context
|
||||
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.impl.*
|
||||
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.Name
|
||||
import org.jetbrains.kotlin.name.SpecialNames
|
||||
import org.jetbrains.kotlin.fir.builder.generateCopyFunction
|
||||
import org.jetbrains.kotlin.fir.builder.generateComponentFunctions
|
||||
|
||||
class DeclarationsConverter(
|
||||
session: FirSession,
|
||||
@@ -888,7 +888,8 @@ class DeclarationsConverter(
|
||||
null,
|
||||
isGetter,
|
||||
modifiers.getVisibility(),
|
||||
returnType ?: if (isGetter) propertyTypeRef else implicitUnitType
|
||||
returnType ?: if (isGetter) propertyTypeRef else implicitUnitType,
|
||||
FirPropertyAccessorSymbol()
|
||||
)
|
||||
context.firFunctions += firAccessor
|
||||
firAccessor.annotations += modifiers.annotations
|
||||
@@ -971,7 +972,7 @@ class DeclarationsConverter(
|
||||
val parentNode = functionDeclaration.getParent()
|
||||
val isLocal = !(parentNode?.tokenType == KT_FILE || parentNode?.tokenType == CLASS_BODY)
|
||||
val firFunction = if (identifier == null) {
|
||||
FirAnonymousFunctionImpl(session, null, returnType!!, receiverType)
|
||||
FirAnonymousFunctionImpl(session, null, returnType!!, receiverType, FirAnonymousFunctionSymbol())
|
||||
} else {
|
||||
val functionName = identifier.nameAsSafeName()
|
||||
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.FirSimpleNamedReference
|
||||
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.FirTypeRef
|
||||
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
|
||||
var destructuringBlock: FirExpression? = null
|
||||
for (valueParameter in valueParameterList) {
|
||||
|
||||
@@ -17,7 +17,7 @@ class Context {
|
||||
var className: FqName = FqName.ROOT
|
||||
val currentClassId get() = ClassId(packageFqName, className, false)
|
||||
|
||||
val firFunctions = mutableListOf<FirFunction>()
|
||||
val firFunctions = mutableListOf<FirFunction<*>>()
|
||||
val firFunctionCalls = mutableListOf<FirFunctionCall>()
|
||||
val firLabels = mutableListOf<FirLabel>()
|
||||
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.FirResolvedCallableReferenceImpl
|
||||
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.types.ConeStarProjection
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
@@ -317,7 +318,7 @@ fun FirModifiableAccessorsOwner.generateAccessorsByDelegate(session: FirSession,
|
||||
}
|
||||
if (stubMode) return
|
||||
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(
|
||||
FirReturnExpressionImpl(
|
||||
null,
|
||||
@@ -334,7 +335,7 @@ fun FirModifiableAccessorsOwner.generateAccessorsByDelegate(session: FirSession,
|
||||
)
|
||||
}
|
||||
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(
|
||||
session, null, DELEGATED_SETTER_PARAM,
|
||||
FirImplicitTypeRefImpl(null),
|
||||
|
||||
@@ -11,20 +11,21 @@ import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
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.impl.*
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.*
|
||||
import org.jetbrains.kotlin.fir.labels.FirLabelImpl
|
||||
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.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.lexer.KtTokens.*
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
||||
@@ -205,7 +206,8 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
|
||||
returnTypeReference?.convertSafe() ?: propertyTypeRef
|
||||
} else {
|
||||
returnTypeReference.toFirOrUnitType()
|
||||
}
|
||||
},
|
||||
FirPropertyAccessorSymbol()
|
||||
)
|
||||
this@RawFirBuilder.context.firFunctions += firAccessor
|
||||
extractAnnotationsTo(firAccessor)
|
||||
@@ -284,7 +286,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
|
||||
}
|
||||
|
||||
private fun KtDeclarationWithBody.extractValueParametersTo(
|
||||
container: FirFunction,
|
||||
container: FirFunction<*>,
|
||||
defaultTypeRef: FirTypeRef? = null
|
||||
) {
|
||||
for (valueParameter in valueParameters) {
|
||||
@@ -543,7 +545,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
|
||||
}
|
||||
val receiverType = function.receiverTypeReference.convertSafe<FirTypeRef>()
|
||||
val firFunction = if (function.name == null) {
|
||||
FirAnonymousFunctionImpl(session, function, returnType, receiverType)
|
||||
FirAnonymousFunctionImpl(session, function, returnType, receiverType, FirAnonymousFunctionSymbol())
|
||||
} else {
|
||||
|
||||
FirMemberFunctionImpl(
|
||||
@@ -583,7 +585,7 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder
|
||||
val literal = expression.functionLiteral
|
||||
val returnType = FirImplicitTypeRefImpl(literal)
|
||||
val receiverType = FirImplicitTypeRefImpl(literal)
|
||||
return FirAnonymousFunctionImpl(session, literal, returnType, receiverType).apply {
|
||||
return FirAnonymousFunctionImpl(session, literal, returnType, receiverType, FirAnonymousFunctionSymbol()).apply {
|
||||
context.firFunctions += this
|
||||
var destructuringBlock: FirExpression? = null
|
||||
for (valueParameter in literal.valueParameters) {
|
||||
|
||||
@@ -52,7 +52,7 @@ fun FirAnonymousFunction.copy(
|
||||
typeRef: FirTypeRef = this.typeRef,
|
||||
label: FirLabel? = this.label
|
||||
): FirAnonymousFunction {
|
||||
return FirAnonymousFunctionImpl(session, psi, returnTypeRef, receiverTypeRef).apply {
|
||||
return FirAnonymousFunctionImpl(session, psi, returnTypeRef, receiverTypeRef, symbol).apply {
|
||||
this.valueParameters.addAll(valueParameters)
|
||||
this.body = body
|
||||
this.annotations.addAll(annotations)
|
||||
|
||||
@@ -8,8 +8,8 @@ package org.jetbrains.kotlin.fir.resolve
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.fir.*
|
||||
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.FirResolvable
|
||||
import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier
|
||||
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
|
||||
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) {
|
||||
is FirNamedFunction -> receiverTypeRef
|
||||
is FirAnonymousFunction -> receiverTypeRef
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.expressions.FirWrappedArgumentExpression
|
||||
import org.jetbrains.kotlin.fir.render
|
||||
|
||||
class FirCallArgumentsProcessor(
|
||||
private val function: FirFunction,
|
||||
private val function: FirFunction<*>,
|
||||
private val arguments: List<FirExpression>
|
||||
) {
|
||||
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()
|
||||
}
|
||||
|
||||
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) {
|
||||
localScopes += FirLocalScope()
|
||||
super.transformFunction(function, data)
|
||||
@@ -553,7 +553,7 @@ open class FirBodyResolveTransformer(
|
||||
}
|
||||
|
||||
private fun transformFunctionWithGivenSignature(
|
||||
function: FirFunction,
|
||||
function: FirFunction<*>,
|
||||
returnTypeRef: FirTypeRef,
|
||||
receiverTypeRef: FirTypeRef? = null
|
||||
): CompositeTransformResult<FirDeclaration> {
|
||||
@@ -563,7 +563,7 @@ open class FirBodyResolveTransformer(
|
||||
return withScopeCleanup(scopes) {
|
||||
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
|
||||
if (result is FirTypedDeclaration && result.returnTypeRef is FirImplicitTypeRef && body != null) {
|
||||
result.transformReturnTypeRef(this, body.resultType)
|
||||
@@ -782,7 +782,7 @@ open class FirBodyResolveTransformer(
|
||||
labels.put(labelName, type)
|
||||
when (owner) {
|
||||
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}")
|
||||
}
|
||||
val result = block()
|
||||
|
||||
+1
-1
@@ -60,7 +60,7 @@ class FirClassSubstitutionScope(
|
||||
val member = when (original) {
|
||||
is FirNamedFunctionSymbol -> original.fir
|
||||
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>()
|
||||
|
||||
@@ -9,4 +9,4 @@ import org.jetbrains.kotlin.fir.declarations.FirFunction
|
||||
|
||||
class FirFunctionTarget(
|
||||
labelName: String?
|
||||
) : FirAbstractTarget<FirFunction>(labelName)
|
||||
) : FirAbstractTarget<FirFunction<*>>(labelName)
|
||||
@@ -127,7 +127,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
||||
print(callableDeclaration.name)
|
||||
}
|
||||
|
||||
if (callableDeclaration is FirFunction) {
|
||||
if (callableDeclaration is FirFunction<*>) {
|
||||
callableDeclaration.valueParameters.renderParameters()
|
||||
}
|
||||
print(": ")
|
||||
@@ -382,7 +382,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
||||
anonymousFunction.body?.renderBody()
|
||||
}
|
||||
|
||||
override fun visitFunction(function: FirFunction) {
|
||||
override fun <F : FirFunction<F>> visitFunction(function: FirFunction<F>) {
|
||||
function.valueParameters.renderParameters()
|
||||
visitDeclarationWithBody(function)
|
||||
}
|
||||
|
||||
@@ -10,26 +10,24 @@ import org.jetbrains.kotlin.fir.FirLabeledElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.VisitedSupertype
|
||||
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.visitors.FirVisitor
|
||||
|
||||
abstract class FirAnonymousFunction(
|
||||
final override val session: FirSession,
|
||||
psi: PsiElement?
|
||||
) : @VisitedSupertype FirFunction, FirUnknownTypeExpression(psi), FirTypedDeclaration, FirLabeledElement {
|
||||
abstract val receiverTypeRef: FirTypeRef?
|
||||
) : @VisitedSupertype FirFunction<FirAnonymousFunction>, FirUnknownTypeExpression(psi), FirLabeledElement {
|
||||
abstract override val receiverTypeRef: FirTypeRef?
|
||||
|
||||
abstract override val symbol: FirAnonymousFunctionSymbol
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitAnonymousFunction(this, data)
|
||||
|
||||
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)
|
||||
receiverTypeRef?.accept(visitor, data)
|
||||
for (parameter in valueParameters) {
|
||||
parameter.accept(visitor, data)
|
||||
}
|
||||
body?.accept(visitor, data)
|
||||
typeRef.accept(visitor, data)
|
||||
// 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.expressions.FirAnnotationContainer
|
||||
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.FirVisitor
|
||||
|
||||
// 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>
|
||||
|
||||
override val symbol: FirFunctionSymbol<F>
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitFunction(this, data)
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
acceptAnnotations(visitor, data)
|
||||
super<FirCallableDeclaration>.acceptChildren(visitor, data)
|
||||
for (parameter in valueParameters) {
|
||||
parameter.accept(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
|
||||
|
||||
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.visitors.FirVisitor
|
||||
|
||||
interface FirMemberFunction<F : FirMemberFunction<F>> :
|
||||
@VisitedSupertype FirFunction, FirCallableMemberDeclaration<F> {
|
||||
@VisitedSupertype FirFunction<F>, FirCallableMemberDeclaration<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.fir.VisitedSupertype
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
interface FirPropertyAccessor : @VisitedSupertype FirFunction, FirTypedDeclaration {
|
||||
interface FirPropertyAccessor : @VisitedSupertype FirFunction<FirPropertyAccessor> {
|
||||
val isGetter: Boolean
|
||||
|
||||
val isSetter: Boolean get() = !isGetter
|
||||
@@ -18,15 +19,13 @@ interface FirPropertyAccessor : @VisitedSupertype FirFunction, FirTypedDeclarati
|
||||
|
||||
val visibility: Visibility get() = status.visibility
|
||||
|
||||
override val symbol: FirPropertyAccessorSymbol
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitPropertyAccessor(this, data)
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
super<FirTypedDeclaration>.acceptChildren(visitor, data)
|
||||
for (parameter in valueParameters) {
|
||||
parameter.accept(visitor, data)
|
||||
}
|
||||
body?.accept(visitor, data)
|
||||
super.acceptChildren(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 org.jetbrains.kotlin.fir.FirElement
|
||||
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.expressions.FirBlock
|
||||
import org.jetbrains.kotlin.fir.transformInplace
|
||||
import org.jetbrains.kotlin.fir.transformSingle
|
||||
import org.jetbrains.kotlin.fir.VisitedSupertype
|
||||
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
|
||||
abstract class FirAbstractFunction(
|
||||
abstract class FirAbstractPropertyAccessor(
|
||||
session: FirSession,
|
||||
psi: PsiElement?
|
||||
) : FirAbstractAnnotatedDeclaration(session, psi), FirFunction {
|
||||
final override val valueParameters = mutableListOf<FirValueParameter>()
|
||||
psi: PsiElement?,
|
||||
final override val symbol: FirPropertyAccessorSymbol
|
||||
) : 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 {
|
||||
valueParameters.transformInplace(transformer, data)
|
||||
body = body?.transformSingle(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.FirValueParameter
|
||||
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.visitors.FirTransformer
|
||||
|
||||
@@ -18,8 +19,13 @@ class FirAnonymousFunctionImpl(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
override var returnTypeRef: FirTypeRef,
|
||||
override var receiverTypeRef: FirTypeRef?
|
||||
) : FirAnonymousFunction(session, psi), FirModifiableFunction {
|
||||
override var receiverTypeRef: FirTypeRef?,
|
||||
override val symbol: FirAnonymousFunctionSymbol
|
||||
) : FirAnonymousFunction(session, psi), FirModifiableFunction<FirAnonymousFunction> {
|
||||
init {
|
||||
symbol.bind(this)
|
||||
}
|
||||
|
||||
override var label: FirLabel? = null
|
||||
|
||||
override val valueParameters = mutableListOf<FirValueParameter>()
|
||||
|
||||
+14
-15
@@ -8,13 +8,13 @@ package org.jetbrains.kotlin.fir.declarations.impl
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.fir.*
|
||||
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||
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.symbols.CallableId
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
|
||||
import org.jetbrains.kotlin.fir.transformInplace
|
||||
import org.jetbrains.kotlin.fir.transformSingle
|
||||
@@ -25,20 +25,17 @@ import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
abstract class FirDefaultPropertyAccessor(
|
||||
final override val session: FirSession,
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
final override val isGetter: Boolean,
|
||||
visibility: Visibility
|
||||
) : FirAbstractElement(psi), FirPropertyAccessor {
|
||||
visibility: Visibility,
|
||||
symbol: FirPropertyAccessorSymbol
|
||||
) : FirAbstractPropertyAccessor(session, psi, symbol) {
|
||||
override var status = FirDeclarationStatusImpl(visibility, Modality.FINAL)
|
||||
|
||||
override var resolvePhase = FirResolvePhase.BODY_RESOLVE
|
||||
|
||||
final override val body: FirBlock? =
|
||||
null
|
||||
|
||||
final override val annotations: List<FirAnnotationCall>
|
||||
get() = emptyList()
|
||||
final override val body: FirBlock? = null
|
||||
|
||||
abstract override var returnTypeRef: FirTypeRef
|
||||
|
||||
@@ -55,8 +52,9 @@ class FirDefaultPropertyGetter(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
propertyTypeRef: FirTypeRef,
|
||||
visibility: Visibility
|
||||
) : FirDefaultPropertyAccessor(session, psi, isGetter = true, visibility = visibility) {
|
||||
visibility: Visibility,
|
||||
symbol: FirPropertyAccessorSymbol = FirPropertyAccessorSymbol()
|
||||
) : FirDefaultPropertyAccessor(session, psi, isGetter = true, visibility = visibility, symbol = symbol) {
|
||||
override val valueParameters: List<FirValueParameter> = emptyList()
|
||||
|
||||
override var returnTypeRef: FirTypeRef = propertyTypeRef
|
||||
@@ -73,8 +71,9 @@ class FirDefaultPropertySetter(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
propertyTypeRef: FirTypeRef,
|
||||
visibility: Visibility
|
||||
) : FirDefaultPropertyAccessor(session, psi, isGetter = false, visibility = visibility) {
|
||||
visibility: Visibility,
|
||||
symbol: FirPropertyAccessorSymbol = FirPropertyAccessorSymbol()
|
||||
) : FirDefaultPropertyAccessor(session, psi, isGetter = false, visibility = visibility, symbol = symbol) {
|
||||
override val valueParameters = mutableListOf(
|
||||
FirDefaultSetterValueParameter(
|
||||
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.expressions.FirAnnotationCall
|
||||
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.FirVisitor
|
||||
|
||||
class FirErrorFunction(
|
||||
override val session: FirSession,
|
||||
psi: PsiElement?,
|
||||
override val reason: String
|
||||
) : FirAbstractElement(psi), FirErrorDeclaration, FirFunction {
|
||||
override val reason: String,
|
||||
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>
|
||||
get() = emptyList()
|
||||
|
||||
@@ -36,7 +49,9 @@ class FirErrorFunction(
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
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
|
||||
}
|
||||
|
||||
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.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.FirNamedFunction
|
||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||
import org.jetbrains.kotlin.fir.expressions.FirBlock
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
|
||||
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.name.Name
|
||||
|
||||
open class FirMemberFunctionImpl : FirAbstractCallableMember<FirNamedFunction>, FirNamedFunction, FirModifiableFunction {
|
||||
open class FirMemberFunctionImpl : FirAbstractCallableMember<FirNamedFunction>, FirNamedFunction, FirModifiableFunction<FirNamedFunction> {
|
||||
|
||||
// NB: FirAccessorSymbol can be here
|
||||
override val symbol: FirFunctionSymbol<FirNamedFunction>
|
||||
@@ -81,7 +81,7 @@ open class FirMemberFunctionImpl : FirAbstractCallableMember<FirNamedFunction>,
|
||||
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)
|
||||
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.expressions.FirBlock
|
||||
|
||||
interface FirModifiableFunction : FirFunction {
|
||||
interface FirModifiableFunction<F : FirFunction<F>> : FirFunction<F> {
|
||||
override var body: FirBlock?
|
||||
|
||||
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.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
||||
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
|
||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||
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.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
@@ -21,22 +23,29 @@ class FirPropertyAccessorImpl(
|
||||
psi: PsiElement?,
|
||||
override val isGetter: Boolean,
|
||||
visibility: Visibility,
|
||||
override var returnTypeRef: FirTypeRef
|
||||
) : FirAbstractFunction(session, psi), FirPropertyAccessor {
|
||||
override var returnTypeRef: FirTypeRef,
|
||||
symbol: FirPropertyAccessorSymbol
|
||||
) : FirAbstractPropertyAccessor(session, psi, symbol) {
|
||||
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 {
|
||||
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
|
||||
valueParameters.transformInplace(transformer, data)
|
||||
body = body?.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) {
|
||||
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
|
||||
}
|
||||
}
|
||||
@@ -9,7 +9,7 @@ import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
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.expressions.FirExpression
|
||||
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.impl.FirImplicitNothingTypeRef
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
@@ -18,7 +20,7 @@ class FirReturnExpressionImpl(
|
||||
psi: PsiElement?,
|
||||
override var result: FirExpression
|
||||
) : FirReturnExpression(psi) {
|
||||
override lateinit var target: FirTarget<FirFunction>
|
||||
override lateinit var target: FirTarget<FirFunction<*>>
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
result = result.transformSingle(transformer, data)
|
||||
|
||||
@@ -6,18 +6,23 @@
|
||||
package org.jetbrains.kotlin.fir.symbols.impl
|
||||
|
||||
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.ConeFunctionSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.ConePropertySymbol
|
||||
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
|
||||
) : ConeFunctionSymbol, FirCallableSymbol<D>() {
|
||||
override val parameters: List<ConeKotlinType>
|
||||
get() = emptyList()
|
||||
}
|
||||
|
||||
// ------------------------ named ------------------------
|
||||
|
||||
open class FirNamedFunctionSymbol(
|
||||
callableId: CallableId,
|
||||
val isFakeOverride: Boolean = false,
|
||||
@@ -32,4 +37,19 @@ class FirConstructorSymbol(
|
||||
class FirAccessorSymbol(
|
||||
callableId: 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.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableClass
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableFunction
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.*
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.*
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
@@ -42,7 +40,7 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
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)
|
||||
}
|
||||
|
||||
@@ -62,7 +60,7 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
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)
|
||||
}
|
||||
|
||||
@@ -70,10 +68,6 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
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> {
|
||||
return transformDeclaration(errorDeclaration, data)
|
||||
}
|
||||
@@ -582,10 +576,6 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
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> {
|
||||
return transformDelegateFieldReference(delegateFieldReference, data)
|
||||
}
|
||||
@@ -638,7 +628,7 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
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)
|
||||
}
|
||||
|
||||
@@ -698,7 +688,7 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
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)
|
||||
}
|
||||
|
||||
|
||||
@@ -6,9 +6,7 @@ package org.jetbrains.kotlin.fir.visitors
|
||||
|
||||
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.impl.FirModifiableClass
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableFunction
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.*
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.*
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
@@ -42,7 +40,7 @@ abstract class FirVisitor<out R, in D> {
|
||||
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)
|
||||
}
|
||||
|
||||
@@ -62,7 +60,7 @@ abstract class FirVisitor<out R, in D> {
|
||||
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)
|
||||
}
|
||||
|
||||
@@ -70,10 +68,6 @@ abstract class FirVisitor<out R, in D> {
|
||||
return visitFunction(propertyAccessor, data)
|
||||
}
|
||||
|
||||
open fun visitDefaultPropertyAccessor(defaultPropertyAccessor: FirDefaultPropertyAccessor, data: D): R {
|
||||
return visitPropertyAccessor(defaultPropertyAccessor, data)
|
||||
}
|
||||
|
||||
open fun visitErrorDeclaration(errorDeclaration: FirErrorDeclaration, data: D): R {
|
||||
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.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableClass
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableFunction
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.*
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.*
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
@@ -42,7 +40,7 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitDeclarationWithBody(anonymousInitializer, null)
|
||||
}
|
||||
|
||||
open fun visitFunction(function: FirFunction) {
|
||||
open fun <F : FirFunction<F>> visitFunction(function: FirFunction<F>) {
|
||||
visitDeclarationWithBody(function, null)
|
||||
}
|
||||
|
||||
@@ -62,7 +60,7 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitMemberFunction(namedFunction, null)
|
||||
}
|
||||
|
||||
open fun visitModifiableFunction(modifiableFunction: FirModifiableFunction) {
|
||||
open fun <F : FirFunction<F>> visitModifiableFunction(modifiableFunction: FirModifiableFunction<F>) {
|
||||
visitFunction(modifiableFunction, null)
|
||||
}
|
||||
|
||||
@@ -70,10 +68,6 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitFunction(propertyAccessor, null)
|
||||
}
|
||||
|
||||
open fun visitDefaultPropertyAccessor(defaultPropertyAccessor: FirDefaultPropertyAccessor) {
|
||||
visitPropertyAccessor(defaultPropertyAccessor, null)
|
||||
}
|
||||
|
||||
open fun visitErrorDeclaration(errorDeclaration: FirErrorDeclaration) {
|
||||
visitDeclaration(errorDeclaration, null)
|
||||
}
|
||||
@@ -582,10 +576,6 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitDeclarationWithBody(declarationWithBody)
|
||||
}
|
||||
|
||||
final override fun visitDefaultPropertyAccessor(defaultPropertyAccessor: FirDefaultPropertyAccessor, data: Nothing?) {
|
||||
visitDefaultPropertyAccessor(defaultPropertyAccessor)
|
||||
}
|
||||
|
||||
final override fun visitDelegateFieldReference(delegateFieldReference: FirDelegateFieldReference, data: Nothing?) {
|
||||
visitDelegateFieldReference(delegateFieldReference)
|
||||
}
|
||||
@@ -638,7 +628,7 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitFile(file)
|
||||
}
|
||||
|
||||
final override fun visitFunction(function: FirFunction, data: Nothing?) {
|
||||
final override fun <F : FirFunction<F>> visitFunction(function: FirFunction<F>, data: Nothing?) {
|
||||
visitFunction(function)
|
||||
}
|
||||
|
||||
@@ -698,7 +688,7 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitModifiableClass(modifiableClass)
|
||||
}
|
||||
|
||||
final override fun visitModifiableFunction(modifiableFunction: FirModifiableFunction, data: Nothing?) {
|
||||
final override fun <F : FirFunction<F>> visitModifiableFunction(modifiableFunction: FirModifiableFunction<F>, data: Nothing?) {
|
||||
visitModifiableFunction(modifiableFunction)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user