diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/RawFirNonLocalDeclarationBuilder.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/RawFirNonLocalDeclarationBuilder.kt index 300d3939996..5a4588987f6 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/RawFirNonLocalDeclarationBuilder.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/lazy/resolve/RawFirNonLocalDeclarationBuilder.kt @@ -16,6 +16,7 @@ import org.jetbrains.kotlin.fir.declarations.utils.isInner import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.scopes.FirScopeProvider import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.psi @@ -114,6 +115,7 @@ internal class RawFirNonLocalDeclarationBuilder private constructor( override fun convertValueParameter( valueParameter: KtParameter, + functionSymbol: FirFunctionSymbol<*>, defaultTypeRef: FirTypeRef?, valueParameterDeclaration: ValueParameterDeclaration, additionalAnnotations: List @@ -122,6 +124,7 @@ internal class RawFirNonLocalDeclarationBuilder private constructor( check(replacementParameter is KtParameter) return super.convertValueParameter( valueParameter = replacementParameter, + functionSymbol = functionSymbol, defaultTypeRef = defaultTypeRef, valueParameterDeclaration = valueParameterDeclaration, additionalAnnotations = additionalAnnotations diff --git a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt index 6c05ee386b7..10331bdc64d 100644 --- a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt +++ b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt @@ -303,6 +303,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) { dispatchReceiverType = c.dispatchReceiver valueParameters += local.memberDeserializer.valueParameters( listOf(proto.setterValueParameter), + symbol, proto, AbstractAnnotationDeserializer.CallableKind.PROPERTY_SETTER, classProto @@ -504,6 +505,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) { typeParameters += local.typeDeserializer.ownTypeParameters.map { it.fir } valueParameters += local.memberDeserializer.valueParameters( proto.valueParameterList, + symbol, proto, AbstractAnnotationDeserializer.CallableKind.OTHERS, classProto @@ -581,6 +583,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) { .map { buildConstructedClassTypeParameterRef { this.symbol = it.symbol } } valueParameters += local.memberDeserializer.valueParameters( proto.valueParameterList, + symbol, proto, AbstractAnnotationDeserializer.CallableKind.OTHERS, classProto, @@ -607,6 +610,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) { private fun valueParameters( valueParameters: List, + functionSymbol: FirFunctionSymbol<*>, callableProto: MessageLite, callableKind: AbstractAnnotationDeserializer.CallableKind, classProto: ProtoBuf.Class?, @@ -617,6 +621,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) { val name = c.nameResolver.getName(proto.name) buildValueParameter { moduleData = c.moduleData + this.containingFunctionSymbol = functionSymbol origin = FirDeclarationOrigin.Library returnTypeRef = proto.type(c.typeTable).toTypeRef(c) this.name = name diff --git a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirBuiltinSymbolProvider.kt b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirBuiltinSymbolProvider.kt index a3b320ba966..054d7c26cc3 100644 --- a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirBuiltinSymbolProvider.kt +++ b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirBuiltinSymbolProvider.kt @@ -328,6 +328,7 @@ private class SyntheticFunctionalInterfaceCache(private val moduleData: FirModul val parameterName = Name.identifier("p${index + 1}") buildValueParameter { moduleData = this@SyntheticFunctionalInterfaceCache.moduleData + containingFunctionSymbol = this@buildSimpleFunction.symbol origin = FirDeclarationOrigin.BuiltIns resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES returnTypeRef = typeArgument diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt index 7cf435d7220..bb42166af26 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/DataClassMembersGenerator.kt @@ -264,10 +264,11 @@ class DataClassMembersGenerator(val components: Fir2IrComponents) : Fir2IrCompon returnType: IrType, otherParameterNeeded: Boolean = false ): IrFunction { + val functionSymbol = FirNamedFunctionSymbol(CallableId(lookupTag.classId, name)) val firFunction = buildSimpleFunction { origin = FirDeclarationOrigin.Synthetic this.name = name - this.symbol = FirNamedFunctionSymbol(CallableId(lookupTag.classId, name)) + this.symbol = functionSymbol this.status = FirDeclarationStatusImpl(Visibilities.Public, Modality.FINAL) moduleData = components.session.moduleData this.returnTypeRef = when (returnType) { @@ -284,6 +285,7 @@ class DataClassMembersGenerator(val components: Fir2IrComponents) : Fir2IrCompon moduleData = components.session.moduleData this.returnTypeRef = FirImplicitNullableAnyTypeRef(null) this.symbol = FirValueParameterSymbol(this.name) + containingFunctionSymbol = functionSymbol isCrossinline = false isNoinline = false isVararg = false diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaFacade.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaFacade.kt index d40dfadbbc4..78b5222fc19 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaFacade.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaFacade.kt @@ -468,6 +468,7 @@ abstract class FirJavaFacade( javaClass.recordComponents.mapTo(valueParameters) { component -> buildJavaValueParameter { + containingFunctionSymbol = this@buildJavaConstructor.symbol source = component.toSourceElement(KtFakeSourceElementKind.ImplicitRecordConstructorParameter) this.moduleData = moduleData isFromSource = component.isFromSource @@ -578,7 +579,7 @@ abstract class FirJavaFacade( isStatic = javaMethod.isStatic typeParameters += javaMethod.typeParameters.convertTypeParameters(javaTypeParameterStack, methodSymbol, moduleData) for ((index, valueParameter) in javaMethod.valueParameters.withIndex()) { - valueParameters += valueParameter.toFirValueParameter(session, moduleData, index, javaTypeParameterStack) + valueParameters += valueParameter.toFirValueParameter(session, methodSymbol, moduleData, index, javaTypeParameterStack) } annotationBuilder = { javaMethod.convertAnnotationsToFir(session, javaTypeParameterStack) } status = FirResolvedDeclarationStatusImpl( @@ -623,6 +624,7 @@ abstract class FirJavaFacade( this.moduleData = moduleData isFromSource = javaMethod.isFromSource returnTypeRef = firJavaMethod.returnTypeRef + containingFunctionSymbol = firJavaMethod.symbol name = javaMethod.name isVararg = javaMethod.returnType is JavaArrayType && javaMethod.name == VALUE_METHOD_NAME annotationBuilder = { emptyList() } @@ -669,7 +671,7 @@ abstract class FirJavaFacade( this.typeParameters += javaConstructor.typeParameters.convertTypeParameters(javaTypeParameterStack, constructorSymbol, moduleData) annotationBuilder = { javaConstructor.convertAnnotationsToFir(session, javaTypeParameterStack) } for ((index, valueParameter) in javaConstructor.valueParameters.withIndex()) { - valueParameters += valueParameter.toFirValueParameter(session, moduleData, index, javaTypeParameterStack) + valueParameters += valueParameter.toFirValueParameter(session, constructorSymbol, moduleData, index, javaTypeParameterStack) } } else { annotationBuilder = { emptyList() } diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaValueParameter.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaValueParameter.kt index ac65f61292c..9af0012e91d 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaValueParameter.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/declarations/FirJavaValueParameter.kt @@ -14,6 +14,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusIm import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference +import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol import org.jetbrains.kotlin.fir.types.ConeSimpleKotlinType import org.jetbrains.kotlin.fir.types.FirTypeRef @@ -40,6 +41,7 @@ class FirJavaValueParameter @FirImplementationDetail constructor( override val symbol: FirValueParameterSymbol, annotationBuilder: () -> List, override var defaultValue: FirExpression?, + override val containingFunctionSymbol: FirFunctionSymbol<*>, override val isVararg: Boolean, ) : FirValueParameter() { init { @@ -197,6 +199,7 @@ class FirJavaValueParameterBuilder { lateinit var name: Name lateinit var annotationBuilder: () -> List var defaultValue: FirExpression? = null + lateinit var containingFunctionSymbol: FirFunctionSymbol<*> var isVararg: Boolean by Delegates.notNull() var isFromSource: Boolean by Delegates.notNull() @@ -213,6 +216,7 @@ class FirJavaValueParameterBuilder { symbol = FirValueParameterSymbol(name), annotationBuilder, defaultValue, + containingFunctionSymbol, isVararg, ) } @@ -237,6 +241,7 @@ inline fun buildJavaValueParameterCopy(original: FirValueParameter, init: FirJav val annotations = original.annotations copyBuilder.annotationBuilder = { annotations } copyBuilder.defaultValue = original.defaultValue + copyBuilder.containingFunctionSymbol = original.containingFunctionSymbol copyBuilder.isVararg = original.isVararg return copyBuilder.apply(init).build() } diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/SignatureEnhancement.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/SignatureEnhancement.kt index 84da2443637..8d49de3371a 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/SignatureEnhancement.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/SignatureEnhancement.kt @@ -236,29 +236,12 @@ class FirSignatureEnhancement( ) } - val newValueParameters = firMethod.valueParameters.zip(enhancedValueParameterTypes) { valueParameter, enhancedReturnType -> - valueParameter.defaultValue?.replaceTypeRef(enhancedReturnType) - - buildValueParameter { - source = valueParameter.source - moduleData = this@FirSignatureEnhancement.moduleData - origin = FirDeclarationOrigin.Enhancement - returnTypeRef = enhancedReturnType - this.name = valueParameter.name - symbol = FirValueParameterSymbol(this.name) - defaultValue = valueParameter.defaultValue - isCrossinline = valueParameter.isCrossinline - isNoinline = valueParameter.isNoinline - isVararg = valueParameter.isVararg - resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES - annotations += valueParameter.annotations - } - } + val functionSymbol: FirFunctionSymbol<*> var isJavaRecordComponent = false val function = when (firMethod) { is FirJavaConstructor -> { - val symbol = FirConstructorSymbol(methodId) + val symbol = FirConstructorSymbol(methodId).also { functionSymbol = it } if (firMethod.isPrimary) { FirPrimaryConstructorBuilder().apply { returnTypeRef = newReturnTypeRef @@ -294,7 +277,6 @@ class FirSignatureEnhancement( moduleData = this@FirSignatureEnhancement.moduleData resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES origin = FirDeclarationOrigin.Enhancement - this.valueParameters += newValueParameters this.typeParameters += firMethod.typeParameters } } @@ -315,9 +297,8 @@ class FirSignatureEnhancement( this.name = name!! status = firMethod.status - symbol = FirNamedFunctionSymbol(methodId) + symbol = FirNamedFunctionSymbol(methodId).also { functionSymbol = it } resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES - valueParameters += newValueParameters typeParameters += firMethod.typeParameters dispatchReceiverType = firMethod.dispatchReceiverType attributes = firMethod.attributes.copy() @@ -325,6 +306,26 @@ class FirSignatureEnhancement( } else -> throw AssertionError("Unknown Java method to enhance: ${firMethod.render()}") }.apply { + val newValueParameters = firMethod.valueParameters.zip(enhancedValueParameterTypes) { valueParameter, enhancedReturnType -> + valueParameter.defaultValue?.replaceTypeRef(enhancedReturnType) + + buildValueParameter { + source = valueParameter.source + containingFunctionSymbol = functionSymbol + moduleData = this@FirSignatureEnhancement.moduleData + origin = FirDeclarationOrigin.Enhancement + returnTypeRef = enhancedReturnType + this.name = valueParameter.name + symbol = FirValueParameterSymbol(this.name) + defaultValue = valueParameter.defaultValue + isCrossinline = valueParameter.isCrossinline + isNoinline = valueParameter.isNoinline + isVararg = valueParameter.isVararg + resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES + annotations += valueParameter.annotations + } + } + this.valueParameters += newValueParameters annotations += firMethod.annotations deprecationsProvider = annotations.getDeprecationsProviderFromAnnotations(fromJava = true, session.firCachesFactory) }.build().apply { diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/javaAnnotationsMapping.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/javaAnnotationsMapping.kt index 2885b5335e9..12f73990034 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/javaAnnotationsMapping.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/javaAnnotationsMapping.kt @@ -14,6 +14,7 @@ import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.builder.* +import org.jetbrains.kotlin.fir.java.declarations.FirJavaMethod import org.jetbrains.kotlin.fir.java.declarations.buildJavaValueParameter import org.jetbrains.kotlin.fir.references.builder.buildErrorNamedReference import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference @@ -22,6 +23,7 @@ import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedReferenceError import org.jetbrains.kotlin.fir.resolve.providers.getClassDeclaredPropertySymbols import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl +import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.builder.buildErrorTypeRef import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef @@ -53,12 +55,17 @@ internal fun MutableList.addFromJava( } internal fun JavaValueParameter.toFirValueParameter( - session: FirSession, moduleData: FirModuleData, index: Int, javaTypeParameterStack: JavaTypeParameterStack + session: FirSession, + functionSymbol: FirFunctionSymbol<*>, + moduleData: FirModuleData, + index: Int, + javaTypeParameterStack: JavaTypeParameterStack, ): FirValueParameter { return buildJavaValueParameter { source = (this@toFirValueParameter as? JavaElementImpl<*>)?.psi?.toKtPsiSourceElement() isFromSource = this@toFirValueParameter.isFromSource this.moduleData = moduleData + containingFunctionSymbol = functionSymbol name = this@toFirValueParameter.name ?: Name.identifier("p$index") returnTypeRef = type.toFirJavaTypeRef(session, javaTypeParameterStack) isVararg = this@toFirValueParameter.isVararg diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirDynamicScope.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirDynamicScope.kt index edb996211ad..304a381b254 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirDynamicScope.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirDynamicScope.kt @@ -155,6 +155,7 @@ class FirDynamicMembersStorage(val session: FirSession) : FirSessionComponent { val parameter = buildValueParameter { moduleData = session.moduleData + containingFunctionSymbol = this@buildSimpleFunction.symbol origin = FirDeclarationOrigin.DynamicScope returnTypeRef = anyArrayTypeRef this.name = Name.identifier("args") diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirFakeOverrideGenerator.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirFakeOverrideGenerator.kt index 0b35ad83135..37704bf798a 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirFakeOverrideGenerator.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirFakeOverrideGenerator.kt @@ -191,12 +191,13 @@ object FirFakeOverrideGenerator { newContextReceiverTypes: List?, newReturnType: ConeKotlinType?, fakeOverrideSubstitution: FakeOverrideSubstitution?, - symbolForOverride: FirBasedSymbol<*>, + symbolForOverride: FirFunctionSymbol<*>, ): List { return when { baseFunction.typeParameters.isEmpty() -> { configureAnnotationsAndSignature( baseFunction, + symbolForOverride, newParameterTypes, newReceiverType, newContextReceiverTypes, @@ -222,6 +223,7 @@ object FirFakeOverrideGenerator { } configureAnnotationsAndSignature( baseFunction, + symbolForOverride, copiedParameterTypes, copiedReceiverType, copiedContextReceiverTypes, @@ -233,6 +235,7 @@ object FirFakeOverrideGenerator { else -> { configureAnnotationsAndSignature( baseFunction, + symbolForOverride, newParameterTypes, newReceiverType, newContextReceiverTypes, @@ -246,6 +249,7 @@ object FirFakeOverrideGenerator { private fun FirFunctionBuilder.configureAnnotationsAndSignature( baseFunction: FirFunction, + fakeFunctionSymbol: FirFunctionSymbol<*>, newParameterTypes: List?, newReceiverType: ConeKotlinType?, newContextReceiverTypes: List?, @@ -280,6 +284,7 @@ object FirFakeOverrideGenerator { origin = FirDeclarationOrigin.SubstitutionOverride returnTypeRef = valueParameter.returnTypeRef.withReplacedConeType(newType) symbol = FirValueParameterSymbol(valueParameter.name) + containingFunctionSymbol = fakeFunctionSymbol }.apply { originalForSubstitutionOverrideAttr = valueParameter } diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt index 2a10ff52efa..0e820ed8536 100644 --- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt +++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt @@ -861,12 +861,13 @@ class DeclarationsConverter( ) return null if (primaryConstructor == null && classWrapper.isInterface()) return null + val constructorSymbol = FirConstructorSymbol(callableIdForClassConstructor()) var modifiers = Modifier() val valueParameters = mutableListOf() primaryConstructor?.forEachChildren { when (it.tokenType) { MODIFIER_LIST -> modifiers = convertModifierList(it) - VALUE_PARAMETER_LIST -> valueParameters += convertValueParameters(it, ValueParameterDeclaration.PRIMARY_CONSTRUCTOR) + VALUE_PARAMETER_LIST -> valueParameters += convertValueParameters(it, constructorSymbol, ValueParameterDeclaration.PRIMARY_CONSTRUCTOR) } } @@ -915,7 +916,7 @@ class DeclarationsConverter( returnTypeRef = classWrapper.delegatedSelfTypeRef dispatchReceiverType = classWrapper.obtainDispatchReceiverForConstructor() this.status = status - symbol = FirConstructorSymbol(callableIdForClassConstructor()) + symbol = constructorSymbol annotations += modifiers.annotations typeParameters += constructorTypeParametersFromConstructedClass(classWrapper.classBuilder.typeParameters) this.valueParameters += valueParameters.map { it.firValueParameter } @@ -957,10 +958,11 @@ class DeclarationsConverter( var constructorDelegationCall: FirDelegatedConstructorCall? = null var block: LighterASTNode? = null + val constructorSymbol = FirConstructorSymbol(callableIdForClassConstructor()) secondaryConstructor.forEachChildren { when (it.tokenType) { MODIFIER_LIST -> modifiers = convertModifierList(it) - VALUE_PARAMETER_LIST -> firValueParameters += convertValueParameters(it, ValueParameterDeclaration.FUNCTION) + VALUE_PARAMETER_LIST -> firValueParameters += convertValueParameters(it, constructorSymbol, ValueParameterDeclaration.FUNCTION) CONSTRUCTOR_DELEGATION_CALL -> constructorDelegationCall = convertConstructorDelegationCall(it, classWrapper) BLOCK -> block = it } @@ -985,7 +987,7 @@ class DeclarationsConverter( returnTypeRef = delegatedSelfTypeRef dispatchReceiverType = classWrapper.obtainDispatchReceiverForConstructor() this.status = status - symbol = FirConstructorSymbol(callableIdForClassConstructor()) + symbol = constructorSymbol delegatedConstructor = constructorDelegationCall context.firFunctionTargets += target @@ -1346,8 +1348,10 @@ class DeclarationsConverter( var isGetter = true var returnType: FirTypeRef? = null val propertyTypeRefToUse = propertyTypeRef.copyWithNewSourceKind(KtFakeSourceElementKind.ImplicitTypeRef) + val accessorSymbol = FirPropertyAccessorSymbol() var firValueParameters: FirValueParameter = buildDefaultSetterValueParameter { moduleData = baseModuleData + containingFunctionSymbol = accessorSymbol origin = FirDeclarationOrigin.Source returnTypeRef = propertyTypeRefToUse symbol = FirValueParameterSymbol(StandardNames.DEFAULT_VALUE_PARAMETER) @@ -1355,6 +1359,8 @@ class DeclarationsConverter( var block: LighterASTNode? = null var expression: LighterASTNode? = null var outerContractDescription: FirContractDescription? = null + + getterOrSetter.forEachChildren { if (it.asText == "set") isGetter = false when (it.tokenType) { @@ -1362,7 +1368,7 @@ class DeclarationsConverter( MODIFIER_LIST -> modifiers = convertModifierList(it) TYPE_REFERENCE -> returnType = convertType(it) VALUE_PARAMETER_LIST -> firValueParameters = convertSetterParameter( - it, propertyTypeRefToUse, propertyModifiers.annotations.filterUseSiteTarget(SETTER_PARAMETER) + it, accessorSymbol, propertyTypeRefToUse, propertyModifiers.annotations.filterUseSiteTarget(SETTER_PARAMETER) ) CONTRACT_EFFECT_LIST -> outerContractDescription = obtainContractDescription(it) BLOCK -> block = it @@ -1409,7 +1415,7 @@ class DeclarationsConverter( moduleData = baseModuleData origin = FirDeclarationOrigin.Source returnTypeRef = returnType ?: if (isGetter) propertyTypeRefToUse else implicitUnitType - symbol = FirPropertyAccessorSymbol() + symbol = accessorSymbol this.isGetter = isGetter this.status = status context.firFunctionTargets += target @@ -1536,6 +1542,7 @@ class DeclarationsConverter( */ private fun convertSetterParameter( setterParameter: LighterASTNode, + functionSymbol: FirFunctionSymbol<*>, propertyTypeRef: FirTypeRef, additionalAnnotations: List ): FirValueParameter { @@ -1544,12 +1551,13 @@ class DeclarationsConverter( setterParameter.forEachChildren { when (it.tokenType) { MODIFIER_LIST -> modifiers = convertModifierList(it) - VALUE_PARAMETER -> firValueParameter = convertValueParameter(it, ValueParameterDeclaration.SETTER).firValueParameter + VALUE_PARAMETER -> firValueParameter = convertValueParameter(it, functionSymbol, ValueParameterDeclaration.SETTER).firValueParameter } } return buildValueParameter { source = firValueParameter.source + containingFunctionSymbol = functionSymbol moduleData = baseModuleData origin = FirDeclarationOrigin.Source returnTypeRef = if (firValueParameter.returnTypeRef == implicitType) propertyTypeRef else firValueParameter.returnTypeRef @@ -1672,6 +1680,7 @@ class DeclarationsConverter( valueParametersList?.let { list -> valueParameters += convertValueParameters( list, + functionSymbol, if (isAnonymousFunction) ValueParameterDeclaration.LAMBDA else ValueParameterDeclaration.FUNCTION ).map { it.firValueParameter } } @@ -2224,12 +2233,13 @@ class DeclarationsConverter( */ fun convertValueParameters( valueParameters: LighterASTNode, + functionSymbol: FirFunctionSymbol<*>, valueParameterDeclaration: ValueParameterDeclaration, additionalAnnotations: List = emptyList() ): List { return valueParameters.forEachChildrenReturnList { node, container -> when (node.tokenType) { - VALUE_PARAMETER -> container += convertValueParameter(node, valueParameterDeclaration, additionalAnnotations) + VALUE_PARAMETER -> container += convertValueParameter(node, functionSymbol, valueParameterDeclaration, additionalAnnotations) } } } @@ -2239,6 +2249,7 @@ class DeclarationsConverter( */ fun convertValueParameter( valueParameter: LighterASTNode, + functionSymbol: FirFunctionSymbol<*>?, valueParameterDeclaration: ValueParameterDeclaration, additionalAnnotations: List = emptyList() ): ValueParameter { @@ -2278,6 +2289,7 @@ class DeclarationsConverter( additionalAnnotations = additionalAnnotations, name = name, defaultValue = firExpression, + containingFunctionSymbol = functionSymbol, destructuringDeclaration = destructuringDeclaration ) } diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt index b5d82aaffb5..f3386f384ad 100644 --- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt +++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt @@ -136,9 +136,11 @@ class ExpressionsConverter( val valueParameterList = mutableListOf() var block: LighterASTNode? = null var hasArrow = false + + val functionSymbol = FirAnonymousFunctionSymbol() lambdaExpression.getChildNodesByType(FUNCTION_LITERAL).first().forEachChildren { when (it.tokenType) { - VALUE_PARAMETER_LIST -> valueParameterList += declarationsConverter.convertValueParameters(it, ValueParameterDeclaration.LAMBDA) + VALUE_PARAMETER_LIST -> valueParameterList += declarationsConverter.convertValueParameters(it, functionSymbol, ValueParameterDeclaration.LAMBDA) BLOCK -> block = it ARROW -> hasArrow = true } @@ -152,7 +154,7 @@ class ExpressionsConverter( origin = FirDeclarationOrigin.Source returnTypeRef = implicitType receiverParameter = implicitType.asReceiverParameter() - symbol = FirAnonymousFunctionSymbol() + symbol = functionSymbol isLambda = true hasExplicitParameterList = hasArrow label = context.getLastLabel(lambdaExpression) ?: context.calleeNamesForLambda.lastOrNull()?.let { @@ -170,6 +172,7 @@ class ExpressionsConverter( val name = SpecialNames.DESTRUCT val multiParameter = buildValueParameter { source = valueParameter.firValueParameter.source + containingFunctionSymbol = functionSymbol moduleData = baseModuleData origin = FirDeclarationOrigin.Source returnTypeRef = valueParameter.firValueParameter.returnTypeRef @@ -1074,7 +1077,7 @@ class ExpressionsConverter( var blockNode: LighterASTNode? = null forLoop.forEachChildren { when (it.tokenType) { - VALUE_PARAMETER -> parameter = declarationsConverter.convertValueParameter(it, ValueParameterDeclaration.FOR_LOOP) + VALUE_PARAMETER -> parameter = declarationsConverter.convertValueParameter(it, null, ValueParameterDeclaration.FOR_LOOP) LOOP_RANGE -> rangeExpression = getAsFirExpression(it, "No range in for loop") BODY -> blockNode = it } @@ -1229,7 +1232,7 @@ class ExpressionsConverter( var blockNode: LighterASTNode? = null catchClause.forEachChildren { when (it.tokenType) { - VALUE_PARAMETER_LIST -> valueParameter = declarationsConverter.convertValueParameters(it, ValueParameterDeclaration.CATCH) + VALUE_PARAMETER_LIST -> valueParameter = declarationsConverter.convertValueParameters(it, FirAnonymousFunctionSymbol()/*TODO*/, ValueParameterDeclaration.CATCH) .firstOrNull() ?: return null BLOCK -> blockNode = it } diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/fir/ValueParameter.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/fir/ValueParameter.kt index 91520addef1..58ca9957bbd 100644 --- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/fir/ValueParameter.kt +++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/fir/ValueParameter.kt @@ -34,6 +34,7 @@ import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.builder.buildPropertyAccessExpression import org.jetbrains.kotlin.fir.lightTree.fir.modifier.Modifier import org.jetbrains.kotlin.fir.references.builder.buildPropertyFromParameterResolvedNamedReference +import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol import org.jetbrains.kotlin.fir.types.ConeClassLikeType @@ -54,6 +55,7 @@ class ValueParameter( private val additionalAnnotations: List, val name: Name, val defaultValue: FirExpression?, + private val containingFunctionSymbol: FirFunctionSymbol<*>?, val destructuringDeclaration: DestructuringDeclaration? = null ) { fun hasValOrVar(): Boolean { @@ -85,6 +87,9 @@ class ValueParameter( isCrossinline = modifiers.hasCrossinline() isNoinline = modifiers.hasNoinline() isVararg = modifiers.hasVararg() + containingFunctionSymbol = this@ValueParameter.containingFunctionSymbol + ?: error("containingFunctionSymbol should present when converting ValueParameter to a FirValueParameter") + annotations += this@ValueParameter.annotations annotations += additionalAnnotations } diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt index b21daa15d8d..22789e18e31 100644 --- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt +++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt @@ -202,10 +202,11 @@ open class RawFirBuilder( open fun convertValueParameter( valueParameter: KtParameter, + functionSymbol: FirFunctionSymbol<*>, defaultTypeRef: FirTypeRef? = null, valueParameterDeclaration: ValueParameterDeclaration, additionalAnnotations: List = emptyList() - ): FirValueParameter = valueParameter.toFirValueParameter(defaultTypeRef, valueParameterDeclaration, additionalAnnotations) + ): FirValueParameter = valueParameter.toFirValueParameter(defaultTypeRef, functionSymbol, valueParameterDeclaration, additionalAnnotations) private fun KtTypeReference?.toFirOrImplicitType(): FirTypeRef = convertSafe() ?: buildImplicitTypeRef { @@ -430,8 +431,9 @@ open class RawFirBuilder( extractAnnotationsTo(this) annotations += accessorAnnotationsFromProperty this@RawFirBuilder.context.firFunctionTargets += accessorTarget + symbol = FirPropertyAccessorSymbol() extractValueParametersTo( - this, ValueParameterDeclaration.SETTER, propertyTypeRefToUse, parameterAnnotationsFromProperty + this, symbol, ValueParameterDeclaration.SETTER, propertyTypeRefToUse, parameterAnnotationsFromProperty ) if (!isGetter && valueParameters.isEmpty()) { valueParameters += buildDefaultSetterValueParameter { @@ -443,7 +445,6 @@ open class RawFirBuilder( annotations += parameterAnnotationsFromProperty } } - symbol = FirPropertyAccessorSymbol() val outerContractDescription = this@toFirPropertyAccessor.obtainContractDescription() val bodyWithContractDescription = this@toFirPropertyAccessor.buildFirBody() this.body = bodyWithContractDescription.first @@ -546,8 +547,9 @@ open class RawFirBuilder( private fun KtParameter.toFirValueParameter( defaultTypeRef: FirTypeRef?, + functionSymbol: FirFunctionSymbol<*>, valueParameterDeclaration: ValueParameterDeclaration, - additionalAnnotations: List + additionalAnnotations: List, ): FirValueParameter { val name = convertValueParameterName(nameAsSafeName, nameIdentifier?.node?.text, valueParameterDeclaration) return buildValueParameter { @@ -571,6 +573,7 @@ open class RawFirBuilder( isCrossinline = hasModifier(CROSSINLINE_KEYWORD) isNoinline = hasModifier(NOINLINE_KEYWORD) isVararg = isVarArg + containingFunctionSymbol = functionSymbol val isFromPrimaryConstructor = valueParameterDeclaration == ValueParameterDeclaration.PRIMARY_CONSTRUCTOR for (annotationEntry in annotationEntries) { annotationEntry.convert().takeIf { @@ -771,13 +774,14 @@ open class RawFirBuilder( private fun KtDeclarationWithBody.extractValueParametersTo( container: FirFunctionBuilder, + functionSymbol: FirFunctionSymbol<*>, valueParameterDeclaration: ValueParameterDeclaration, defaultTypeRef: FirTypeRef? = null, additionalAnnotations: List = emptyList(), ) { for (valueParameter in valueParameters) { container.valueParameters += convertValueParameter( - valueParameter, defaultTypeRef, valueParameterDeclaration, additionalAnnotations = additionalAnnotations + valueParameter, functionSymbol, defaultTypeRef, valueParameterDeclaration, additionalAnnotations = additionalAnnotations ) } } @@ -950,7 +954,7 @@ open class RawFirBuilder( typeParameters += constructorTypeParametersFromConstructedClass(ownerTypeParameters) this.contextReceivers.addAll(convertContextReceivers(owner.contextReceivers)) this@toFirConstructor?.extractAnnotationsTo(this) - this@toFirConstructor?.extractValueParametersTo(this, ValueParameterDeclaration.PRIMARY_CONSTRUCTOR) + this@toFirConstructor?.extractValueParametersTo(this, symbol, ValueParameterDeclaration.PRIMARY_CONSTRUCTOR) this.body = null }.apply { containingClassForStaticMemberAttr = currentDispatchReceiverType()!!.lookupTag @@ -1312,10 +1316,11 @@ open class RawFirBuilder( val labelName: String? val isAnonymousFunction = function.name == null && !function.parent.let { it is KtFile || it is KtClassBody } + val functionSymbol: FirFunctionSymbol<*> val functionBuilder = if (isAnonymousFunction) { FirAnonymousFunctionBuilder().apply { receiverParameter = receiverType?.convertToReceiverParameter() - symbol = FirAnonymousFunctionSymbol() + symbol = FirAnonymousFunctionSymbol().also { functionSymbol = it } isLambda = false hasExplicitParameterList = true label = context.getLastLabel(function) @@ -1326,7 +1331,7 @@ open class RawFirBuilder( receiverParameter = receiverType?.convertToReceiverParameter() name = function.nameAsSafeName labelName = runIf(!name.isSpecial) { name.identifier } - symbol = FirNamedFunctionSymbol(callableIdForName(function.nameAsSafeName)) + symbol = FirNamedFunctionSymbol(callableIdForName(function.nameAsSafeName)).also { functionSymbol = it } dispatchReceiverType = currentDispatchReceiverType() status = FirDeclarationStatusImpl( if (function.isLocal) Visibilities.Local else function.visibility, @@ -1363,6 +1368,7 @@ open class RawFirBuilder( for (valueParameter in function.valueParameters) { valueParameters += convertValueParameter( valueParameter, + functionSymbol, null, if (isAnonymousFunction) ValueParameterDeclaration.LAMBDA else ValueParameterDeclaration.FUNCTION ) @@ -1444,6 +1450,7 @@ open class RawFirBuilder( val name = SpecialNames.DESTRUCT val multiParameter = buildValueParameter { source = valueParameter.toFirSourceElement() + containingFunctionSymbol = this@buildAnonymousFunction.symbol moduleData = baseModuleData origin = FirDeclarationOrigin.Source returnTypeRef = valueParameter.typeReference?.convertSafe() ?: buildImplicitTypeRef { @@ -1467,7 +1474,7 @@ open class RawFirBuilder( val typeRef = valueParameter.typeReference?.convertSafe() ?: buildImplicitTypeRef { source = implicitTypeRefSource } - convertValueParameter(valueParameter, typeRef, ValueParameterDeclaration.LAMBDA) + convertValueParameter(valueParameter, symbol, typeRef, ValueParameterDeclaration.LAMBDA) } } val expressionSource = expression.toFirSourceElement() @@ -1539,7 +1546,7 @@ open class RawFirBuilder( this@RawFirBuilder.context.firFunctionTargets += target extractAnnotationsTo(this) typeParameters += constructorTypeParametersFromConstructedClass(ownerTypeParameters) - extractValueParametersTo(this, ValueParameterDeclaration.FUNCTION) + extractValueParametersTo(this, symbol, ValueParameterDeclaration.FUNCTION) val (body, _) = buildFirBody() diff --git a/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt b/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt index 91374cfe493..224fa4f52ca 100644 --- a/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt +++ b/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/BaseFirBuilder.kt @@ -1157,6 +1157,7 @@ abstract class BaseFirBuilder(val baseSession: FirSession, val context: Conte createParameterTypeRefWithSourceKind(firProperty, KtFakeSourceElementKind.DataClassGeneratedMembers) valueParameters += buildValueParameter { source = parameterSource + containingFunctionSymbol = this@buildSimpleFunction.symbol moduleData = baseModuleData origin = FirDeclarationOrigin.Source returnTypeRef = propertyReturnTypeRef diff --git a/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt b/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt index 853eddc074d..a142efe76a8 100644 --- a/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt +++ b/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt @@ -447,8 +447,10 @@ fun FirPropertyBuilder.generateAccessorsByDelegate( status = FirDeclarationStatusImpl(setterStatus?.visibility ?: Visibilities.Unknown, Modality.FINAL).apply { isInline = setterStatus?.isInline ?: isInline } + symbol = FirPropertyAccessorSymbol() val parameter = buildValueParameter { source = fakeSource + containingFunctionSymbol = this@buildPropertyAccessor.symbol this.moduleData = moduleData origin = FirDeclarationOrigin.Source returnTypeRef = buildImplicitTypeRef() @@ -462,7 +464,6 @@ fun FirPropertyBuilder.generateAccessorsByDelegate( } } valueParameters += parameter - symbol = FirPropertyAccessorSymbol() body = FirSingleExpressionBlock( buildFunctionCall { source = fakeSource diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SamResolution.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SamResolution.kt index 36b2553769f..ec4a39f261d 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SamResolution.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SamResolution.kt @@ -136,7 +136,7 @@ class FirSamResolverImpl( val (functionSymbol, functionType) = resolveFunctionTypeIfSamInterface(firRegularClass) ?: return null val classId = firRegularClass.classId - val symbol = FirSyntheticFunctionSymbol( + val syntheticFunctionSymbol = FirSyntheticFunctionSymbol( CallableId( classId.packageFqName, classId.relativeClassName.parent().takeIf { !it.isRoot }, @@ -156,7 +156,7 @@ class FirSamResolverImpl( variance = Variance.INVARIANT isReified = false annotations += declaredTypeParameter.annotations - containingDeclarationSymbol = symbol + containingDeclarationSymbol = syntheticFunctionSymbol } } @@ -202,7 +202,7 @@ class FirSamResolverImpl( isSuspend = false isTailRec = false } - this.symbol = symbol + this.symbol = syntheticFunctionSymbol typeParameters += newTypeParameters.map { it.build() } val substitutedFunctionType = substitutor.substituteOrSelf(functionType) @@ -218,6 +218,7 @@ class FirSamResolverImpl( valueParameters += buildValueParameter { moduleData = session.moduleData + containingFunctionSymbol = syntheticFunctionSymbol origin = FirDeclarationOrigin.SamConstructor returnTypeRef = buildResolvedTypeRef { source = firRegularClass.source diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirCallCompleter.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirCallCompleter.kt index c3ea856fb08..469f434c098 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirCallCompleter.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirCallCompleter.kt @@ -293,6 +293,7 @@ class FirCallCompleter( val itType = parameters.single() buildValueParameter { source = lambdaAtom.atom.source?.fakeElement(KtFakeSourceElementKind.ItLambdaParameter) + containingFunctionSymbol = lambdaArgument.symbol moduleData = session.moduleData origin = FirDeclarationOrigin.Source returnTypeRef = itType.approximateLambdaInputType().toFirResolvedTypeRef() diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSyntheticCallGenerator.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSyntheticCallGenerator.kt index fb4c6ba76b7..45f1a8a1c17 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSyntheticCallGenerator.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSyntheticCallGenerator.kt @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.fir.resolve.createErrorReferenceWithExistingCandidat import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeInapplicableCandidateError import org.jetbrains.kotlin.fir.resolvedTypeFromPrototype import org.jetbrains.kotlin.fir.symbols.SyntheticCallableId +import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol @@ -270,7 +271,7 @@ class FirSyntheticCallGenerator( return generateMemberFunction(functionSymbol, callableId.callableName, typeArgument.typeRef).apply { typeParameters += typeParameter - valueParameters += argumentType.toValueParameter("branches", isVararg = true) + valueParameters += argumentType.toValueParameter("branches", functionSymbol, isVararg = true) }.build() } @@ -298,7 +299,7 @@ class FirSyntheticCallGenerator( typeArgument.typeRef ).apply { typeParameters += typeParameter - valueParameters += argumentType.toValueParameter("arg") + valueParameters += argumentType.toValueParameter("arg", functionSymbol) }.build() } @@ -333,8 +334,8 @@ class FirSyntheticCallGenerator( typeArgument.typeRef ).apply { typeParameters += typeParameter - valueParameters += leftArgumentType.toValueParameter("x") - valueParameters += rightArgumentType.toValueParameter("y") + valueParameters += leftArgumentType.toValueParameter("x", functionSymbol) + valueParameters += rightArgumentType.toValueParameter("y", functionSymbol) }.build() } @@ -363,11 +364,12 @@ class FirSyntheticCallGenerator( } private fun FirResolvedTypeRef.toValueParameter( - nameAsString: String, isVararg: Boolean = false + nameAsString: String, functionSymbol: FirFunctionSymbol<*>, isVararg: Boolean = false ): FirValueParameter { val name = Name.identifier(nameAsString) return buildValueParameter { moduleData = session.moduleData + containingFunctionSymbol = functionSymbol origin = FirDeclarationOrigin.Library this.name = name returnTypeRef = this@toValueParameter diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt index 7ecf28aa339..9d9c257c04f 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt @@ -915,6 +915,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirAbstractBodyResolve val name = Name.identifier("it") val itParam = buildValueParameter { source = lambda.source?.fakeElement(KtFakeSourceElementKind.ItLambdaParameter) + containingFunctionSymbol = resolvedLambdaAtom.atom.symbol moduleData = session.moduleData origin = FirDeclarationOrigin.Source returnTypeRef = singleParameterType.toFirResolvedTypeRef() diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirValueParameter.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirValueParameter.kt index 48b3c97cdf4..59fc36805f2 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirValueParameter.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirValueParameter.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.FirModuleData import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference +import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol import org.jetbrains.kotlin.fir.types.ConeSimpleKotlinType import org.jetbrains.kotlin.fir.types.FirTypeRef @@ -49,6 +50,7 @@ abstract class FirValueParameter : FirVariable(), FirControlFlowGraphOwner { abstract override val controlFlowGraphReference: FirControlFlowGraphReference? abstract override val symbol: FirValueParameterSymbol abstract val defaultValue: FirExpression? + abstract val containingFunctionSymbol: FirFunctionSymbol<*> abstract val isCrossinline: Boolean abstract val isNoinline: Boolean abstract val isVararg: Boolean diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirDefaultSetterValueParameterBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirDefaultSetterValueParameterBuilder.kt index 4ba3dca398a..8e926cba24a 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirDefaultSetterValueParameterBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirDefaultSetterValueParameterBuilder.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusIm import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference +import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol import org.jetbrains.kotlin.fir.types.ConeSimpleKotlinType import org.jetbrains.kotlin.fir.types.FirTypeRef @@ -64,6 +65,7 @@ class FirDefaultSetterValueParameterBuilder : FirAnnotationContainerBuilder { override val annotations: MutableList = mutableListOf() lateinit var symbol: FirValueParameterSymbol var defaultValue: FirExpression? = null + lateinit var containingFunctionSymbol: FirFunctionSymbol<*> var isCrossinline: Boolean = false var isNoinline: Boolean = false var isVararg: Boolean = false @@ -91,6 +93,7 @@ class FirDefaultSetterValueParameterBuilder : FirAnnotationContainerBuilder { annotations, symbol, defaultValue, + containingFunctionSymbol, isCrossinline, isNoinline, isVararg, diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirValueParameterBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirValueParameterBuilder.kt index df5fe73ef06..e84cf5eb2ea 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirValueParameterBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirValueParameterBuilder.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference +import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol import org.jetbrains.kotlin.fir.types.ConeSimpleKotlinType import org.jetbrains.kotlin.fir.types.FirTypeRef @@ -58,6 +59,7 @@ open class FirValueParameterBuilder : FirAnnotationContainerBuilder { override val annotations: MutableList = mutableListOf() open lateinit var symbol: FirValueParameterSymbol open var defaultValue: FirExpression? = null + open lateinit var containingFunctionSymbol: FirFunctionSymbol<*> open var isCrossinline: Boolean by kotlin.properties.Delegates.notNull() open var isNoinline: Boolean by kotlin.properties.Delegates.notNull() open var isVararg: Boolean by kotlin.properties.Delegates.notNull() @@ -79,6 +81,7 @@ open class FirValueParameterBuilder : FirAnnotationContainerBuilder { annotations, symbol, defaultValue, + containingFunctionSymbol, isCrossinline, isNoinline, isVararg, @@ -116,6 +119,7 @@ inline fun buildValueParameterCopy(original: FirValueParameter, init: FirValuePa copyBuilder.annotations.addAll(original.annotations) copyBuilder.symbol = original.symbol copyBuilder.defaultValue = original.defaultValue + copyBuilder.containingFunctionSymbol = original.containingFunctionSymbol copyBuilder.isCrossinline = original.isCrossinline copyBuilder.isNoinline = original.isNoinline copyBuilder.isVararg = original.isVararg diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultSetterValueParameter.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultSetterValueParameter.kt index 83094cc06b5..2f933c77c82 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultSetterValueParameter.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultSetterValueParameter.kt @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusIm import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference +import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol import org.jetbrains.kotlin.fir.types.ConeSimpleKotlinType import org.jetbrains.kotlin.fir.types.FirTypeRef @@ -59,6 +60,7 @@ internal class FirDefaultSetterValueParameter( override val annotations: MutableList, override val symbol: FirValueParameterSymbol, override var defaultValue: FirExpression?, + override val containingFunctionSymbol: FirFunctionSymbol<*>, override val isCrossinline: Boolean, override val isNoinline: Boolean, override val isVararg: Boolean, diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirValueParameterImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirValueParameterImpl.kt index 9eaa4dc598e..e0e4faf8733 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirValueParameterImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirValueParameterImpl.kt @@ -24,6 +24,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusIm import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference +import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol import org.jetbrains.kotlin.fir.types.ConeSimpleKotlinType import org.jetbrains.kotlin.fir.types.FirTypeRef @@ -53,6 +54,7 @@ internal class FirValueParameterImpl( override val annotations: MutableList, override val symbol: FirValueParameterSymbol, override var defaultValue: FirExpression?, + override val containingFunctionSymbol: FirFunctionSymbol<*>, override val isCrossinline: Boolean, override val isNoinline: Boolean, override val isVararg: Boolean, diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/EnumClassUtils.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/EnumClassUtils.kt index ce3588baca5..f7112175688 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/EnumClassUtils.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/EnumClassUtils.kt @@ -91,6 +91,7 @@ fun FirRegularClassBuilder.generateValueOfFunction( symbol = FirNamedFunctionSymbol(CallableId(packageFqName, classFqName, ENUM_VALUE_OF)) valueParameters += buildValueParameter vp@{ source = sourceElement + containingFunctionSymbol = this@buildSimpleFunction.symbol origin = FirDeclarationOrigin.Source this.moduleData = moduleData returnTypeRef = buildResolvedTypeRef { 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 1b7e295aa42..b7f8f0497e3 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 @@ -25,7 +25,6 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol import org.jetbrains.kotlin.fir.types.ConeSimpleKotlinType import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitUnitTypeRef -import org.jetbrains.kotlin.name.SpecialNames @OptIn(FirImplementationDetail::class) abstract class FirDefaultPropertyAccessor( @@ -127,7 +126,7 @@ class FirDefaultPropertySetter( propertySymbol: FirPropertySymbol, modality: Modality = Modality.FINAL, effectiveVisibility: EffectiveVisibility? = null, - symbol: FirPropertyAccessorSymbol = FirPropertyAccessorSymbol(), + propertyAccessorSymbol: FirPropertyAccessorSymbol = FirPropertyAccessorSymbol(), parameterAnnotations: List = emptyList(), ) : FirDefaultPropertyAccessor( source, @@ -137,6 +136,7 @@ class FirDefaultPropertySetter( valueParameters = mutableListOf( buildDefaultSetterValueParameter builder@{ this@builder.source = source?.fakeElement(KtFakeSourceElementKind.DefaultAccessor) + this@builder.containingFunctionSymbol = propertyAccessorSymbol this@builder.moduleData = moduleData this@builder.origin = origin this@builder.returnTypeRef = propertyTypeRef @@ -149,5 +149,5 @@ class FirDefaultPropertySetter( visibility = visibility, modality = modality, effectiveVisibility = effectiveVisibility, - symbol = symbol + symbol = propertyAccessorSymbol ) diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt index df2cc606094..ad23a883459 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt @@ -394,6 +394,9 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild valueParameter.configure { +symbol("FirValueParameterSymbol") +field("defaultValue", expression, nullable = true) + +field("containingFunctionSymbol", functionSymbolType, "*").apply { + withBindThis = false + } generateBooleanFields("crossinline", "noinline", "vararg") } diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/Types.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/Types.kt index ea3477f2597..1621c7ac4a4 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/Types.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/Types.kt @@ -66,6 +66,7 @@ val propertyBodyResolveStateType = type("fir.declarations", "FirPropertyBodyReso val stubReferenceType = generatedType("references.impl", "FirStubReference", firType = true) val firBasedSymbolType = type("fir.symbols", "FirBasedSymbol") +val functionSymbolType = type("fir.symbols.impl", "FirFunctionSymbol") val backingFieldSymbolType = type("fir.symbols.impl", "FirBackingFieldSymbol") val delegateFieldSymbolType = type("fir.symbols.impl", "FirDelegateFieldSymbol") val classSymbolType = type("fir.symbols.impl", "FirClassSymbol") diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/utils.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/utils.kt index 0063b0be343..7ec32488453 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/utils.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/utils.kt @@ -27,9 +27,9 @@ fun Builder.collectImports(): List { ImportKind.Builder, ) + implementation.fullQualifiedName!! + usedTypes.mapNotNull { it.fullQualifiedName } + builderDsl + "kotlin.contracts.*" is IntermediateBuilder -> { - val fqns = parents + allFields.mapNotNull { it.fullQualifiedName } + allFields.flatMap { + val fqns = parents + usedTypes.mapNotNull { it.fullQualifiedName } + allFields.mapNotNull { it.fullQualifiedName } + allFields.flatMap { it.arguments.mapNotNull { it.fullQualifiedName } - } + (materializedElement?.fullQualifiedName ?: throw IllegalStateException(type)) + builderDsl + } + (materializedElement?.fullQualifiedName ?: throw IllegalStateException(type)) + builderDsl fqns.filterRedundantImports(packageName, ImportKind.Builder) } }.sorted() diff --git a/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/MembersOfSerializerGenerator.kt b/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/MembersOfSerializerGenerator.kt index 7c43014a331..e744cd625c4 100644 --- a/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/MembersOfSerializerGenerator.kt +++ b/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/MembersOfSerializerGenerator.kt @@ -69,8 +69,10 @@ class MembersOfSerializerGenerator(session: FirSession) : FirDeclarationGenerati status = FirResolvedDeclarationStatusImpl(Visibilities.Public, Modality.FINAL, EffectiveVisibility.Public) returnTypeRef = session.builtinTypes.unitType dispatchReceiverType = dispatchReceiverClassId.toSimpleConeType() + symbol = FirNamedFunctionSymbol(callableId) valueParameters += buildValueParameter { moduleData = session.moduleData + containingFunctionSymbol = this@buildSimpleFunction.symbol resolvePhase = FirResolvePhase.BODY_RESOLVE origin = Key.origin returnTypeRef = buildResolvedTypeRef { @@ -85,7 +87,6 @@ class MembersOfSerializerGenerator(session: FirSession) : FirDeclarationGenerati body = buildBlock {} .apply { replaceTypeRef(session.builtinTypes.unitType) } name = callableId.callableName - symbol = FirNamedFunctionSymbol(callableId) } return listOf(function.symbol) } diff --git a/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/TopLevelDeclarationsGenerator.kt b/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/TopLevelDeclarationsGenerator.kt index a08552aedb6..faeaf77fc98 100644 --- a/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/TopLevelDeclarationsGenerator.kt +++ b/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/generators/TopLevelDeclarationsGenerator.kt @@ -56,7 +56,9 @@ class TopLevelDeclarationsGenerator(session: FirSession) : FirDeclarationGenerat EffectiveVisibility.Public ) returnTypeRef = session.builtinTypes.stringType + symbol = FirNamedFunctionSymbol(callableId) valueParameters += buildValueParameter { + containingFunctionSymbol = this@buildSimpleFunction.symbol resolvePhase = FirResolvePhase.BODY_RESOLVE moduleData = session.moduleData origin = Key.origin @@ -69,7 +71,6 @@ class TopLevelDeclarationsGenerator(session: FirSession) : FirDeclarationGenerat isNoinline = false isVararg = false } - symbol = FirNamedFunctionSymbol(callableId) name = callableId.callableName } return listOf(function.symbol) diff --git a/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/FirBuildersUtils.kt b/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/FirBuildersUtils.kt index 8e4c8a134d3..6d00125f5db 100644 --- a/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/FirBuildersUtils.kt +++ b/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/FirBuildersUtils.kt @@ -62,8 +62,14 @@ fun newSimpleTypeParameter(firSession: FirSession, containingDeclarationSymbol: addDefaultBoundIfNecessary() } -fun newSimpleValueParameter(firSession: FirSession, typeRef: FirResolvedTypeRef, name: Name) = buildValueParameter { +fun newSimpleValueParameter( + firSession: FirSession, + typeRef: FirResolvedTypeRef, + functionSymbol: FirFunctionSymbol<*>, + name: Name +) = buildValueParameter { moduleData = firSession.moduleData + this.containingFunctionSymbol = functionSymbol origin = SerializationPluginKey.origin this.name = name this.symbol = FirValueParameterSymbol(this.name) diff --git a/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/SerializationFirResolveExtension.kt b/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/SerializationFirResolveExtension.kt index 70fcbc3cf3b..76650de1fef 100644 --- a/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/SerializationFirResolveExtension.kt +++ b/plugins/kotlinx-serialization/kotlinx-serialization.k2/src/org/jetbrains/kotlinx/serialization/compiler/fir/SerializationFirResolveExtension.kt @@ -208,6 +208,7 @@ class SerializationFirResolveExtension(session: FirSession) : FirDeclarationGene newSimpleValueParameter( session, kSerializerId.constructClassLikeType(arrayOf(parametersAsArguments[i]), false).toFirResolvedTypeRef(), + symbol, Name.identifier("${SerialEntityNames.typeArgPrefix}$i") ) }) @@ -280,6 +281,7 @@ class SerializationFirResolveExtension(session: FirSession) : FirDeclarationGene newSimpleValueParameter( session, kSerializerId.constructClassLikeType(arrayOf(typeParam.toConeType()), false).toFirResolvedTypeRef(), + symbol, Name.identifier("${SerialEntityNames.typeArgPrefix}$i") ) }) diff --git a/plugins/lombok/lombok.k2/src/org/jetbrains/kotlin/lombok/k2/generators/AbstractConstructorGeneratorPart.kt b/plugins/lombok/lombok.k2/src/org/jetbrains/kotlin/lombok/k2/generators/AbstractConstructorGeneratorPart.kt index ea63d09aec0..581c1217c02 100644 --- a/plugins/lombok/lombok.k2/src/org/jetbrains/kotlin/lombok/k2/generators/AbstractConstructorGeneratorPart.kt +++ b/plugins/lombok/lombok.k2/src/org/jetbrains/kotlin/lombok/k2/generators/AbstractConstructorGeneratorPart.kt @@ -16,10 +16,7 @@ import org.jetbrains.kotlin.fir.declarations.utils.isInner import org.jetbrains.kotlin.fir.java.declarations.* import org.jetbrains.kotlin.fir.resolve.defaultType import org.jetbrains.kotlin.fir.symbols.SymbolInternals -import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol -import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol -import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol -import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol +import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.toEffectiveVisibility import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef import org.jetbrains.kotlin.fir.types.jvm.FirJavaTypeRef @@ -47,11 +44,12 @@ abstract class AbstractConstructorGeneratorPart val builder = if (staticName == null) { FirJavaConstructorBuilder().apply { - symbol = FirConstructorSymbol(classSymbol.classId.callableIdForConstructor()) + symbol = FirConstructorSymbol(classSymbol.classId.callableIdForConstructor()).also { constructorSymbol = it } classSymbol.fir.typeParameters.mapTo(typeParameters) { - buildConstructedClassTypeParameterRef { symbol = it.symbol } + buildConstructedClassTypeParameterRef { this.symbol = it.symbol } } substitutor = JavaTypeSubstitutor.Empty returnTypeRef = buildResolvedTypeRef { @@ -65,13 +63,13 @@ abstract class AbstractConstructorGeneratorPart typeRef } + containingFunctionSymbol = constructorSymbol name = field.name annotationBuilder = { emptyList() } isVararg = false diff --git a/plugins/lombok/lombok.k2/src/org/jetbrains/kotlin/lombok/k2/generators/BuilderGenerator.kt b/plugins/lombok/lombok.k2/src/org/jetbrains/kotlin/lombok/k2/generators/BuilderGenerator.kt index e33d0a508fa..0c3b4b9c91a 100644 --- a/plugins/lombok/lombok.k2/src/org/jetbrains/kotlin/lombok/k2/generators/BuilderGenerator.kt +++ b/plugins/lombok/lombok.k2/src/org/jetbrains/kotlin/lombok/k2/generators/BuilderGenerator.kt @@ -314,6 +314,7 @@ fun FirClassSymbol<*>.createJavaMethod( this.valueParameters += buildJavaValueParameter { moduleData = this@createJavaMethod.moduleData this.returnTypeRef = valueParameter.typeRef + containingFunctionSymbol = this@buildJavaMethod.symbol this.name = valueParameter.name annotationBuilder = { emptyList() } isVararg = false diff --git a/plugins/lombok/lombok.k2/src/org/jetbrains/kotlin/lombok/k2/generators/SetterGenerator.kt b/plugins/lombok/lombok.k2/src/org/jetbrains/kotlin/lombok/k2/generators/SetterGenerator.kt index 4858b526cbb..aeafc7d2548 100644 --- a/plugins/lombok/lombok.k2/src/org/jetbrains/kotlin/lombok/k2/generators/SetterGenerator.kt +++ b/plugins/lombok/lombok.k2/src/org/jetbrains/kotlin/lombok/k2/generators/SetterGenerator.kt @@ -83,6 +83,7 @@ class SetterGenerator(session: FirSession) : FirDeclarationGenerationExtension(s valueParameters += buildJavaValueParameter { moduleData = field.moduleData + containingFunctionSymbol = this@buildJavaMethod.symbol returnTypeRef = field.returnTypeRef name = field.name annotationBuilder = { emptyList() } diff --git a/plugins/lombok/lombok.k2/src/org/jetbrains/kotlin/lombok/k2/generators/WithGenerator.kt b/plugins/lombok/lombok.k2/src/org/jetbrains/kotlin/lombok/k2/generators/WithGenerator.kt index cdbc13df966..eb9f6b3767f 100644 --- a/plugins/lombok/lombok.k2/src/org/jetbrains/kotlin/lombok/k2/generators/WithGenerator.kt +++ b/plugins/lombok/lombok.k2/src/org/jetbrains/kotlin/lombok/k2/generators/WithGenerator.kt @@ -73,6 +73,7 @@ class WithGenerator(session: FirSession) : FirDeclarationGenerationExtension(ses valueParameters += buildJavaValueParameter { moduleData = field.moduleData + containingFunctionSymbol = this@buildJavaMethod.symbol returnTypeRef = field.returnTypeRef name = field.name annotationBuilder = { emptyList() } diff --git a/plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizeDeclarationGenerator.kt b/plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizeDeclarationGenerator.kt index d2d48dac706..35054fd7d1b 100644 --- a/plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizeDeclarationGenerator.kt +++ b/plugins/parcelize/parcelize-compiler/parcelize.k2/src/org/jetbrains/kotlin/parcelize/fir/FirParcelizeDeclarationGenerator.kt @@ -5,11 +5,11 @@ package org.jetbrains.kotlin.parcelize.fir +import org.jetbrains.kotlin.GeneratedDeclarationKey import org.jetbrains.kotlin.descriptors.EffectiveVisibility import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.GeneratedDeclarationKey import org.jetbrains.kotlin.fir.declarations.builder.FirSimpleFunctionBuilder import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction import org.jetbrains.kotlin.fir.declarations.builder.buildValueParameter @@ -30,9 +30,9 @@ import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef import org.jetbrains.kotlin.fir.types.classId import org.jetbrains.kotlin.fir.types.coneType -import org.jetbrains.kotlin.fir.types.toRegularClassSymbol import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl import org.jetbrains.kotlin.fir.types.isInt +import org.jetbrains.kotlin.fir.types.toRegularClassSymbol import org.jetbrains.kotlin.name.CallableId import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.parcelize.ParcelizeNames.DESCRIBE_CONTENTS_NAME @@ -104,12 +104,14 @@ class FirParcelizeDeclarationGenerator(session: FirSession) : FirDeclarationGene private fun generateWriteToParcel(owner: FirRegularClassSymbol, callableId: CallableId): FirNamedFunctionSymbol { return createFunction(owner, callableId) { + val functionSymbol = this.symbol returnTypeRef = session.builtinTypes.unitType valueParameters += buildValueParameter { moduleData = session.moduleData origin = key.origin name = DEST_NAME + containingFunctionSymbol = functionSymbol returnTypeRef = buildResolvedTypeRef { type = ConeClassLikeTypeImpl( ConeClassLikeLookupTagImpl(PARCEL_ID), @@ -127,6 +129,7 @@ class FirParcelizeDeclarationGenerator(session: FirSession) : FirDeclarationGene moduleData = session.moduleData origin = key.origin name = FLAGS_NAME + containingFunctionSymbol = functionSymbol returnTypeRef = session.builtinTypes.intType symbol = FirValueParameterSymbol(name) isCrossinline = false