[FIR] introduce FirValueParameter.containingFunctionSymbol
^KT-55034 fixed
This commit is contained in:
+3
@@ -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<FirAnnotation>
|
||||
@@ -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
|
||||
|
||||
+5
@@ -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<ProtoBuf.ValueParameter>,
|
||||
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
|
||||
|
||||
+1
@@ -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
|
||||
|
||||
+3
-1
@@ -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
|
||||
|
||||
@@ -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() }
|
||||
|
||||
+5
@@ -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<FirAnnotation>,
|
||||
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<FirAnnotation>
|
||||
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()
|
||||
}
|
||||
|
||||
+23
-22
@@ -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 {
|
||||
|
||||
@@ -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<FirAnnotation>.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
|
||||
|
||||
@@ -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")
|
||||
|
||||
+6
-1
@@ -191,12 +191,13 @@ object FirFakeOverrideGenerator {
|
||||
newContextReceiverTypes: List<ConeKotlinType?>?,
|
||||
newReturnType: ConeKotlinType?,
|
||||
fakeOverrideSubstitution: FakeOverrideSubstitution?,
|
||||
symbolForOverride: FirBasedSymbol<*>,
|
||||
symbolForOverride: FirFunctionSymbol<*>,
|
||||
): List<FirTypeParameterRef> {
|
||||
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<ConeKotlinType?>?,
|
||||
newReceiverType: ConeKotlinType?,
|
||||
newContextReceiverTypes: List<ConeKotlinType?>?,
|
||||
@@ -280,6 +284,7 @@ object FirFakeOverrideGenerator {
|
||||
origin = FirDeclarationOrigin.SubstitutionOverride
|
||||
returnTypeRef = valueParameter.returnTypeRef.withReplacedConeType(newType)
|
||||
symbol = FirValueParameterSymbol(valueParameter.name)
|
||||
containingFunctionSymbol = fakeFunctionSymbol
|
||||
}.apply {
|
||||
originalForSubstitutionOverrideAttr = valueParameter
|
||||
}
|
||||
|
||||
+20
-8
@@ -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<ValueParameter>()
|
||||
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<FirAnnotation>
|
||||
): 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<FirAnnotation> = emptyList()
|
||||
): List<ValueParameter> {
|
||||
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<FirAnnotation> = emptyList()
|
||||
): ValueParameter {
|
||||
@@ -2278,6 +2289,7 @@ class DeclarationsConverter(
|
||||
additionalAnnotations = additionalAnnotations,
|
||||
name = name,
|
||||
defaultValue = firExpression,
|
||||
containingFunctionSymbol = functionSymbol,
|
||||
destructuringDeclaration = destructuringDeclaration
|
||||
)
|
||||
}
|
||||
|
||||
+7
-4
@@ -136,9 +136,11 @@ class ExpressionsConverter(
|
||||
val valueParameterList = mutableListOf<ValueParameter>()
|
||||
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
|
||||
}
|
||||
|
||||
+5
@@ -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<FirAnnotation>,
|
||||
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
|
||||
}
|
||||
|
||||
+17
-10
@@ -202,10 +202,11 @@ open class RawFirBuilder(
|
||||
|
||||
open fun convertValueParameter(
|
||||
valueParameter: KtParameter,
|
||||
functionSymbol: FirFunctionSymbol<*>,
|
||||
defaultTypeRef: FirTypeRef? = null,
|
||||
valueParameterDeclaration: ValueParameterDeclaration,
|
||||
additionalAnnotations: List<FirAnnotation> = 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<FirAnnotation>
|
||||
additionalAnnotations: List<FirAnnotation>,
|
||||
): 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<FirAnnotation>().takeIf {
|
||||
@@ -771,13 +774,14 @@ open class RawFirBuilder(
|
||||
|
||||
private fun KtDeclarationWithBody.extractValueParametersTo(
|
||||
container: FirFunctionBuilder,
|
||||
functionSymbol: FirFunctionSymbol<*>,
|
||||
valueParameterDeclaration: ValueParameterDeclaration,
|
||||
defaultTypeRef: FirTypeRef? = null,
|
||||
additionalAnnotations: List<FirAnnotation> = 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()
|
||||
|
||||
+1
@@ -1157,6 +1157,7 @@ abstract class BaseFirBuilder<T>(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
|
||||
|
||||
+2
-1
@@ -447,8 +447,10 @@ fun <T> 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 <T> FirPropertyBuilder.generateAccessorsByDelegate(
|
||||
}
|
||||
}
|
||||
valueParameters += parameter
|
||||
symbol = FirPropertyAccessorSymbol()
|
||||
body = FirSingleExpressionBlock(
|
||||
buildFunctionCall {
|
||||
source = fakeSource
|
||||
|
||||
@@ -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
|
||||
|
||||
+1
@@ -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()
|
||||
|
||||
+7
-5
@@ -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
|
||||
|
||||
+1
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
+3
@@ -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<FirAnnotation> = 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,
|
||||
|
||||
+4
@@ -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<FirAnnotation> = 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<Boolean>()
|
||||
open var isNoinline: Boolean by kotlin.properties.Delegates.notNull<Boolean>()
|
||||
open var isVararg: Boolean by kotlin.properties.Delegates.notNull<Boolean>()
|
||||
@@ -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
|
||||
|
||||
+2
@@ -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<FirAnnotation>,
|
||||
override val symbol: FirValueParameterSymbol,
|
||||
override var defaultValue: FirExpression?,
|
||||
override val containingFunctionSymbol: FirFunctionSymbol<*>,
|
||||
override val isCrossinline: Boolean,
|
||||
override val isNoinline: Boolean,
|
||||
override val isVararg: Boolean,
|
||||
|
||||
+2
@@ -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<FirAnnotation>,
|
||||
override val symbol: FirValueParameterSymbol,
|
||||
override var defaultValue: FirExpression?,
|
||||
override val containingFunctionSymbol: FirFunctionSymbol<*>,
|
||||
override val isCrossinline: Boolean,
|
||||
override val isNoinline: Boolean,
|
||||
override val isVararg: Boolean,
|
||||
|
||||
@@ -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 {
|
||||
|
||||
+3
-3
@@ -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<FirAnnotation> = 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
|
||||
)
|
||||
|
||||
+3
@@ -394,6 +394,9 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
valueParameter.configure {
|
||||
+symbol("FirValueParameterSymbol")
|
||||
+field("defaultValue", expression, nullable = true)
|
||||
+field("containingFunctionSymbol", functionSymbolType, "*").apply {
|
||||
withBindThis = false
|
||||
}
|
||||
generateBooleanFields("crossinline", "noinline", "vararg")
|
||||
}
|
||||
|
||||
|
||||
@@ -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")
|
||||
|
||||
+2
-2
@@ -27,9 +27,9 @@ fun Builder.collectImports(): List<String> {
|
||||
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()
|
||||
|
||||
+2
-1
@@ -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)
|
||||
}
|
||||
|
||||
+2
-1
@@ -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)
|
||||
|
||||
+7
-1
@@ -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)
|
||||
|
||||
+2
@@ -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")
|
||||
)
|
||||
})
|
||||
|
||||
+7
-8
@@ -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<T : ConeLombokAnnotations.Constr
|
||||
val staticName = constructorInfo.staticName?.let { Name.identifier(it) }
|
||||
|
||||
val substitutor: JavaTypeSubstitutor
|
||||
val constructorSymbol: FirFunctionSymbol<*>
|
||||
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<T : ConeLombokAnnotations.Constr
|
||||
} else {
|
||||
FirJavaMethodBuilder().apply {
|
||||
name = staticName
|
||||
val methodSymbol = FirNamedFunctionSymbol(CallableId(classSymbol.classId, staticName))
|
||||
val methodSymbol = FirNamedFunctionSymbol(CallableId(classSymbol.classId, staticName)).also { constructorSymbol = it }
|
||||
symbol = methodSymbol
|
||||
|
||||
val classTypeParameterSymbols = classSymbol.fir.typeParameters.map { it.symbol }
|
||||
classTypeParameterSymbols.mapTo(typeParameters) {
|
||||
buildTypeParameterCopy(it.fir) {
|
||||
symbol = FirTypeParameterSymbol()
|
||||
this.symbol = FirTypeParameterSymbol()
|
||||
containingDeclarationSymbol = methodSymbol
|
||||
}
|
||||
}
|
||||
@@ -128,6 +126,7 @@ abstract class AbstractConstructorGeneratorPart<T : ConeLombokAnnotations.Constr
|
||||
}
|
||||
else -> typeRef
|
||||
}
|
||||
containingFunctionSymbol = constructorSymbol
|
||||
name = field.name
|
||||
annotationBuilder = { emptyList() }
|
||||
isVararg = false
|
||||
|
||||
+1
@@ -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
|
||||
|
||||
+1
@@ -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() }
|
||||
|
||||
+1
@@ -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() }
|
||||
|
||||
+5
-2
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user