diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrCallableCache.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrCallableCache.kt index b6cea311547..e3bc533152c 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrCallableCache.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrCallableCache.kt @@ -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() @@ -17,7 +20,7 @@ class Fir2IrCallableCache { private val localClassCache = mutableMapOf() - private val localFunctionCache = mutableMapOf() + private val localFunctionCache = mutableMapOf, 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 } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt index 09ee4bce692..16202d53aff 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt @@ -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.declareParameters(function: FirFunction, containingClass: IrClass?) { + fun 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.bindAndDeclareParameters( - function: FirFunction, + function: FirFunction<*>, descriptor: WrappedCallableDescriptor, irParent: IrDeclarationParent?, shouldLeaveScope: Boolean @@ -286,7 +289,7 @@ class Fir2IrDeclarationStorage( return this } - private fun T.enterLocalScope(function: FirFunction): T { + private fun T.enterLocalScope(function: FirFunction<*>): T { enterScope(descriptor) for ((firParameter, irParameter) in function.valueParameters.zip(valueParameters)) { irSymbolTable.introduceValueParameter(irParameter) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrLocalStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrLocalStorage.kt index 75ef3ba10e9..12f67e61131 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrLocalStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrLocalStorage.kt @@ -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) } } \ No newline at end of file diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt index 76f4cd6541f..7fb3fd438e0 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt @@ -280,7 +280,7 @@ internal class Fir2IrVisitor( private fun T.setFunctionContent( descriptor: FunctionDescriptor, - firFunction: FirFunction, + firFunction: FirFunction<*>, firOverriddenSymbol: FirNamedFunctionSymbol? = null ): T { setParentByParentStack() diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaConstructor.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaConstructor.kt index dca017d3c51..c61fb81c8f2 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaConstructor.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaConstructor.kt @@ -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() - override fun transformValueParameters(transformer: FirTransformer, data: D): FirFunction { + override fun transformValueParameters(transformer: FirTransformer, data: D): FirJavaConstructor { valueParameters.transformInplace(transformer, data) return this } diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassEnhancementScope.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassEnhancementScope.kt index 436a360ba8e..d1a70fc014f 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassEnhancementScope.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassEnhancementScope.kt @@ -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 } } } diff --git a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt index 0ef6daaf137..18dffdcce43 100644 --- a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt +++ b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt @@ -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( diff --git a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt index 2a221527200..9763ae4efae 100644 --- a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt +++ b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt @@ -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) { diff --git a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/Context.kt b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/Context.kt index fc43a44b3b9..5e7abc3c617 100644 --- a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/Context.kt +++ b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/Context.kt @@ -17,7 +17,7 @@ class Context { var className: FqName = FqName.ROOT val currentClassId get() = ClassId(packageFqName, className, false) - val firFunctions = mutableListOf() + val firFunctions = mutableListOf>() val firFunctionCalls = mutableListOf() val firLabels = mutableListOf() val firLoops = mutableListOf() diff --git a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt index a1b2d9beea5..030d2dc01da 100644 --- a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt +++ b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt @@ -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), diff --git a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt index 3ffa1a39da6..b471479a259 100644 --- a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt +++ b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt @@ -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() 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) { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/CopyUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/CopyUtils.kt index ac1892d8c0c..0e09a6fc150 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/CopyUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/CopyUtils.kt @@ -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) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt index 0de19655523..024b9a969de 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt @@ -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.withArguments(arguments: Array.constructFunctionalTypeRef(session: FirSession): FirResolvedTypeRef { val receiverTypeRef = when (this) { is FirNamedFunction -> receiverTypeRef is FirAnonymousFunction -> receiverTypeRef diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirCallArgumentsProcessor.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirCallArgumentsProcessor.kt index 81d6cf195ca..ca9479667ab 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirCallArgumentsProcessor.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirCallArgumentsProcessor.kt @@ -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 ) { class Result(val argumentMapping: Map, val isSuccess: Boolean) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt index 2e8753b710e..8a372c145c8 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt @@ -545,7 +545,7 @@ open class FirBodyResolveTransformer( return (annotationCall.transformChildren(this, data) as FirStatement).compose() } - override fun transformFunction(function: FirFunction, data: Any?): CompositeTransformResult { + override fun > transformFunction(function: FirFunction, data: Any?): CompositeTransformResult { 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 { @@ -563,7 +563,7 @@ open class FirBodyResolveTransformer( return withScopeCleanup(scopes) { scopes.addIfNotNull(receiverTypeRef?.coneTypeSafe()?.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() diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt index ca10fc01ea0..6619747ba23 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt @@ -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() diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirFunctionTarget.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirFunctionTarget.kt index ee72271d085..400133be751 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirFunctionTarget.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirFunctionTarget.kt @@ -9,4 +9,4 @@ import org.jetbrains.kotlin.fir.declarations.FirFunction class FirFunctionTarget( labelName: String? -) : FirAbstractTarget(labelName) \ No newline at end of file +) : FirAbstractTarget>(labelName) \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt index 1ed6efa6fd2..a4686da4191 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt @@ -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 > visitFunction(function: FirFunction) { function.valueParameters.renderParameters() visitDeclarationWithBody(function) } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirAnonymousFunction.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirAnonymousFunction.kt index 56fe3671a56..06f90d393ac 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirAnonymousFunction.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirAnonymousFunction.kt @@ -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, FirUnknownTypeExpression(psi), FirLabeledElement { + abstract override val receiverTypeRef: FirTypeRef? + + abstract override val symbol: FirAnonymousFunctionSymbol override fun accept(visitor: FirVisitor, data: D): R = visitor.visitAnonymousFunction(this, data) override fun acceptChildren(visitor: FirVisitor, data: D) { - super.acceptChildren(visitor, data) + super.acceptChildren(visitor, data) super.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.acceptChildren (annotations & typeRef are already processed) } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirFunction.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirFunction.kt index 2a2b18cdd41..6469cc4b13b 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirFunction.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirFunction.kt @@ -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> : @VisitedSupertype FirDeclarationWithBody, FirCallableDeclaration, FirAnnotationContainer, + FirTargetElement, FirStatement, FirSymbolOwner { + val valueParameters: List + override val symbol: FirFunctionSymbol + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitFunction(this, data) override fun acceptChildren(visitor: FirVisitor, data: D) { - acceptAnnotations(visitor, data) + super.acceptChildren(visitor, data) for (parameter in valueParameters) { parameter.accept(visitor, data) } super.acceptChildren(visitor, data) } - fun transformValueParameters(transformer: FirTransformer, data: D): FirFunction + fun transformValueParameters(transformer: FirTransformer, data: D): FirFunction } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirMemberFunction.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirMemberFunction.kt index 1dc38595ccd..dd0b24f7e37 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirMemberFunction.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirMemberFunction.kt @@ -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> : - @VisitedSupertype FirFunction, FirCallableMemberDeclaration { + @VisitedSupertype FirFunction, FirCallableMemberDeclaration { override val symbol: FirFunctionSymbol diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirPropertyAccessor.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirPropertyAccessor.kt index 5d0f66ae99c..1fe57f8ab00 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirPropertyAccessor.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirPropertyAccessor.kt @@ -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 { 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 accept(visitor: FirVisitor, data: D): R = visitor.visitPropertyAccessor(this, data) override fun acceptChildren(visitor: FirVisitor, data: D) { - super.acceptChildren(visitor, data) - for (parameter in valueParameters) { - parameter.accept(visitor, data) - } - body?.accept(visitor, data) + super.acceptChildren(visitor, data) status.accept(visitor, data) } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractFunction.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractPropertyAccessor.kt similarity index 51% rename from compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractFunction.kt rename to compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractPropertyAccessor.kt index e8f1e4421c6..88111f4806c 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractFunction.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractPropertyAccessor.kt @@ -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() + 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 transformChildren(transformer: FirTransformer, data: D): FirElement { - valueParameters.transformInplace(transformer, data) - body = body?.transformSingle(transformer, data) - return super.transformChildren(transformer, data) } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousFunctionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousFunctionImpl.kt index 3549604df8c..ee41bb145d6 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousFunctionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousFunctionImpl.kt @@ -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 { + init { + symbol.bind(this) + } + override var label: FirLabel? = null override val valueParameters = mutableListOf() diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultPropertyAccessor.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultPropertyAccessor.kt index 92691f3e356..d293812702d 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultPropertyAccessor.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultPropertyAccessor.kt @@ -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 - 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 = 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( diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirErrorFunction.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirErrorFunction.kt index a9ea0baca54..e6cdbb34f3c 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirErrorFunction.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirErrorFunction.kt @@ -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, FirSymbolOwner { + init { + symbol.bind(this) + } + + override val receiverTypeRef: FirTypeRef? get() = null + + override val returnTypeRef: FirTypeRef + get() = TODO("not implemented") + override val annotations: List get() = emptyList() @@ -36,7 +49,9 @@ class FirErrorFunction( override fun accept(visitor: FirVisitor, data: D): R = super.accept(visitor, data) - override fun transformValueParameters(transformer: FirTransformer, data: D): FirFunction { + override fun transformValueParameters(transformer: FirTransformer, data: D): FirErrorFunction { return this } + + override fun transformReturnTypeRef(transformer: FirTransformer, data: D) {} } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirMemberFunctionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirMemberFunctionImpl.kt index 62fdb76fdd2..45138c0500f 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirMemberFunctionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirMemberFunctionImpl.kt @@ -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, FirModifiableFunction { +open class FirMemberFunctionImpl : FirAbstractCallableMember, FirNamedFunction, FirModifiableFunction { // NB: FirAccessorSymbol can be here override val symbol: FirFunctionSymbol @@ -81,7 +81,7 @@ open class FirMemberFunctionImpl : FirAbstractCallableMember, return super.transformChildren(transformer, data) } - override fun transformValueParameters(transformer: FirTransformer, data: D): FirFunction { + override fun transformValueParameters(transformer: FirTransformer, data: D): FirMemberFunctionImpl { valueParameters.transformInplace(transformer, data) return this } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirModifiableFunction.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirModifiableFunction.kt index 6d35e976e70..8686d72fb69 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirModifiableFunction.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirModifiableFunction.kt @@ -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> : FirFunction { override var body: FirBlock? override val valueParameters: MutableList diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirPropertyAccessorImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirPropertyAccessorImpl.kt index 35dbf7e5f6a..81a774a4bf3 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirPropertyAccessorImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirPropertyAccessorImpl.kt @@ -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() + override fun transformChildren(transformer: FirTransformer, data: D): FirElement { returnTypeRef = returnTypeRef.transformSingle(transformer, data) + valueParameters.transformInplace(transformer, data) + body = body?.transformSingle(transformer, data) status = status.transformSingle(transformer, data) - return super.transformChildren(transformer, data) + return super.transformChildren(transformer, data) } override fun transformReturnTypeRef(transformer: FirTransformer, data: D) { returnTypeRef = returnTypeRef.transformSingle(transformer, data) } - override fun transformValueParameters(transformer: FirTransformer, data: D): FirFunction { + override fun transformValueParameters(transformer: FirTransformer, data: D): FirPropertyAccessorImpl { return this } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirReturnExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirReturnExpression.kt index c33cbe1cf58..6a28f136e86 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirReturnExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirReturnExpression.kt @@ -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(psi) { +abstract class FirReturnExpression(psi: PsiElement?) : FirJump>(psi) { abstract val result: FirExpression override fun accept(visitor: FirVisitor, data: D): R = diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirReturnExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirReturnExpressionImpl.kt index c4afdb6860c..6935ee33a64 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirReturnExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirReturnExpressionImpl.kt @@ -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 + override lateinit var target: FirTarget> override fun transformChildren(transformer: FirTransformer, data: D): FirElement { result = result.transformSingle(transformer, data) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirFunctionSymbol.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirFunctionSymbol.kt index 71b8683673b..feffe2b2510 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirFunctionSymbol.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/symbols/impl/FirFunctionSymbol.kt @@ -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>( +sealed class FirFunctionSymbol>( override val callableId: CallableId ) : ConeFunctionSymbol, FirCallableSymbol() { override val parameters: List 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(callableId) \ No newline at end of file +) : ConePropertySymbol, FirFunctionSymbol(callableId) + +// ------------------------ unnamed ------------------------ + +sealed class FirFunctionWithoutNameSymbol>( + stubName: Name +) : FirFunctionSymbol(CallableId(FqName("special"), stubName)) { + override val parameters: List + get() = emptyList() +} + +class FirAnonymousFunctionSymbol : FirFunctionWithoutNameSymbol(Name.identifier("anonymous")) + +class FirPropertyAccessorSymbol : FirFunctionWithoutNameSymbol(Name.identifier("accessor")) + +class FirErrorFunctionSymbol : FirFunctionWithoutNameSymbol(Name.identifier("error")) \ No newline at end of file diff --git a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirTransformerGenerated.kt b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirTransformerGenerated.kt index 5c2659adc1d..4dfa20f74a4 100644 --- a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirTransformerGenerated.kt +++ b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirTransformerGenerated.kt @@ -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 : FirVisitor { + open fun > transformFunction(function: FirFunction, data: D): CompositeTransformResult { return transformDeclarationWithBody(function, data) } @@ -62,7 +60,7 @@ abstract class FirTransformer : FirVisitor { + open fun > transformModifiableFunction(modifiableFunction: FirModifiableFunction, data: D): CompositeTransformResult { return transformFunction(modifiableFunction, data) } @@ -70,10 +68,6 @@ abstract class FirTransformer : FirVisitor { - return transformPropertyAccessor(defaultPropertyAccessor, data) - } - open fun transformErrorDeclaration(errorDeclaration: FirErrorDeclaration, data: D): CompositeTransformResult { return transformDeclaration(errorDeclaration, data) } @@ -582,10 +576,6 @@ abstract class FirTransformer : FirVisitor { - return transformDefaultPropertyAccessor(defaultPropertyAccessor, data) - } - final override fun visitDelegateFieldReference(delegateFieldReference: FirDelegateFieldReference, data: D): CompositeTransformResult { return transformDelegateFieldReference(delegateFieldReference, data) } @@ -638,7 +628,7 @@ abstract class FirTransformer : FirVisitor { + final override fun > visitFunction(function: FirFunction, data: D): CompositeTransformResult { return transformFunction(function, data) } @@ -698,7 +688,7 @@ abstract class FirTransformer : FirVisitor { + final override fun > visitModifiableFunction(modifiableFunction: FirModifiableFunction, data: D): CompositeTransformResult { return transformModifiableFunction(modifiableFunction, data) } diff --git a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorGenerated.kt b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorGenerated.kt index f815f751b06..0d3c90f44bc 100644 --- a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorGenerated.kt +++ b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorGenerated.kt @@ -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 { return visitDeclarationWithBody(anonymousInitializer, data) } - open fun visitFunction(function: FirFunction, data: D): R { + open fun > visitFunction(function: FirFunction, data: D): R { return visitDeclarationWithBody(function, data) } @@ -62,7 +60,7 @@ abstract class FirVisitor { return visitMemberFunction(namedFunction, data) } - open fun visitModifiableFunction(modifiableFunction: FirModifiableFunction, data: D): R { + open fun > visitModifiableFunction(modifiableFunction: FirModifiableFunction, data: D): R { return visitFunction(modifiableFunction, data) } @@ -70,10 +68,6 @@ abstract class FirVisitor { 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) } diff --git a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorVoidGenerated.kt b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorVoidGenerated.kt index 7b418075fdc..8a0b039e134 100644 --- a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorVoidGenerated.kt +++ b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorVoidGenerated.kt @@ -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() { visitDeclarationWithBody(anonymousInitializer, null) } - open fun visitFunction(function: FirFunction) { + open fun > visitFunction(function: FirFunction) { visitDeclarationWithBody(function, null) } @@ -62,7 +60,7 @@ abstract class FirVisitorVoid : FirVisitor() { visitMemberFunction(namedFunction, null) } - open fun visitModifiableFunction(modifiableFunction: FirModifiableFunction) { + open fun > visitModifiableFunction(modifiableFunction: FirModifiableFunction) { visitFunction(modifiableFunction, null) } @@ -70,10 +68,6 @@ abstract class FirVisitorVoid : FirVisitor() { 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() { 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() { visitFile(file) } - final override fun visitFunction(function: FirFunction, data: Nothing?) { + final override fun > visitFunction(function: FirFunction, data: Nothing?) { visitFunction(function) } @@ -698,7 +688,7 @@ abstract class FirVisitorVoid : FirVisitor() { visitModifiableClass(modifiableClass) } - final override fun visitModifiableFunction(modifiableFunction: FirModifiableFunction, data: Nothing?) { + final override fun > visitModifiableFunction(modifiableFunction: FirModifiableFunction, data: Nothing?) { visitModifiableFunction(modifiableFunction) }