[FIR] Add specific symbols for value parameters and enum entries

Make FirVariableSymbol a sealed class
This commit is contained in:
Dmitriy Novozhilov
2021-06-26 11:54:02 +03:00
parent 62d781a70f
commit 511e564b20
30 changed files with 92 additions and 84 deletions
@@ -24,10 +24,7 @@ import org.jetbrains.kotlin.fir.resolve.providers.impl.FirCloneableSymbolProvide
import org.jetbrains.kotlin.fir.resolve.providers.impl.FirCloneableSymbolProvider.Companion.CLONEABLE_CLASS_ID import org.jetbrains.kotlin.fir.resolve.providers.impl.FirCloneableSymbolProvider.Companion.CLONEABLE_CLASS_ID
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
import org.jetbrains.kotlin.fir.types.ConeAttributes import org.jetbrains.kotlin.fir.types.ConeAttributes
import org.jetbrains.kotlin.fir.types.ConeClassLikeType import org.jetbrains.kotlin.fir.types.ConeClassLikeType
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
@@ -166,7 +163,7 @@ fun deserializeClassToSymbol(
this.origin = FirDeclarationOrigin.Library this.origin = FirDeclarationOrigin.Library
returnTypeRef = buildResolvedTypeRef { type = enumType } returnTypeRef = buildResolvedTypeRef { type = enumType }
name = enumEntryName name = enumEntryName
this.symbol = FirVariableSymbol(CallableId(classId, enumEntryName)) this.symbol = FirEnumEntrySymbol(CallableId(classId, enumEntryName))
this.status = FirResolvedDeclarationStatusImpl( this.status = FirResolvedDeclarationStatusImpl(
Visibilities.Public, Visibilities.Public,
Modality.FINAL, Modality.FINAL,
@@ -11,7 +11,9 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.containingClassAttr import org.jetbrains.kotlin.fir.containingClassAttr
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.builder.* import org.jetbrains.kotlin.fir.declarations.builder.*
import org.jetbrains.kotlin.fir.declarations.impl.* import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyGetter
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertySetter
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl
import org.jetbrains.kotlin.fir.declarations.utils.sourceElement import org.jetbrains.kotlin.fir.declarations.utils.sourceElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirExpression
@@ -19,8 +21,9 @@ import org.jetbrains.kotlin.fir.expressions.builder.buildExpressionStub
import org.jetbrains.kotlin.fir.resolve.defaultType import org.jetbrains.kotlin.fir.resolve.defaultType
import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.toEffectiveVisibility import org.jetbrains.kotlin.fir.toEffectiveVisibility
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
import org.jetbrains.kotlin.fir.types.computeTypeAttributes
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
import org.jetbrains.kotlin.fir.types.impl.FirImplicitUnitTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitUnitTypeRef
@@ -515,7 +518,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
origin = FirDeclarationOrigin.Library origin = FirDeclarationOrigin.Library
returnTypeRef = proto.type(c.typeTable).toTypeRef(c) returnTypeRef = proto.type(c.typeTable).toTypeRef(c)
this.name = name this.name = name
symbol = FirVariableSymbol(name) symbol = FirValueParameterSymbol(name)
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
defaultValue = defaultValue(flags) defaultValue = defaultValue(flags)
if (addDefaultValue) { if (addDefaultValue) {
@@ -8,9 +8,14 @@ package org.jetbrains.kotlin.fir.resolve.providers.impl
import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.builtins.StandardNames
import org.jetbrains.kotlin.builtins.functions.FunctionClassKind import org.jetbrains.kotlin.builtins.functions.FunctionClassKind
import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.FirModuleData
import org.jetbrains.kotlin.fir.caches.* import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.ThreadSafeMutableState
import org.jetbrains.kotlin.fir.caches.createCache
import org.jetbrains.kotlin.fir.caches.firCachesFactory
import org.jetbrains.kotlin.fir.caches.getValue
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.builder.buildRegularClass import org.jetbrains.kotlin.fir.declarations.builder.buildRegularClass
import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction
import org.jetbrains.kotlin.fir.declarations.builder.buildTypeParameter import org.jetbrains.kotlin.fir.declarations.builder.buildTypeParameter
@@ -326,7 +331,7 @@ private class SyntheticFunctionalInterfaceCache(private val moduleData: FirModul
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
returnTypeRef = typeArgument returnTypeRef = typeArgument
this.name = parameterName this.name = parameterName
symbol = FirVariableSymbol(parameterName) symbol = FirValueParameterSymbol(parameterName)
defaultValue = null defaultValue = null
isCrossinline = false isCrossinline = false
isNoinline = false isNoinline = false
@@ -12,7 +12,10 @@ import org.jetbrains.kotlin.fir.backend.Fir2IrComponents
import org.jetbrains.kotlin.fir.backend.FirMetadataSource import org.jetbrains.kotlin.fir.backend.FirMetadataSource
import org.jetbrains.kotlin.fir.backend.declareThisReceiverParameter import org.jetbrains.kotlin.fir.backend.declareThisReceiverParameter
import org.jetbrains.kotlin.fir.backend.toIrType import org.jetbrains.kotlin.fir.backend.toIrType
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.FirClass
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction
import org.jetbrains.kotlin.fir.declarations.builder.buildValueParameter import org.jetbrains.kotlin.fir.declarations.builder.buildValueParameter
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
@@ -21,7 +24,7 @@ import org.jetbrains.kotlin.fir.moduleData
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
import org.jetbrains.kotlin.fir.types.ConeStarProjection import org.jetbrains.kotlin.fir.types.ConeStarProjection
import org.jetbrains.kotlin.fir.types.constructType import org.jetbrains.kotlin.fir.types.constructType
import org.jetbrains.kotlin.fir.types.impl.FirImplicitBooleanTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitBooleanTypeRef
@@ -279,7 +282,7 @@ class DataClassMembersGenerator(val components: Fir2IrComponents) {
origin = FirDeclarationOrigin.Synthetic origin = FirDeclarationOrigin.Synthetic
moduleData = components.session.moduleData moduleData = components.session.moduleData
this.returnTypeRef = FirImplicitNullableAnyTypeRef(null) this.returnTypeRef = FirImplicitNullableAnyTypeRef(null)
this.symbol = FirVariableSymbol(this.name) this.symbol = FirValueParameterSymbol(this.name)
isCrossinline = false isCrossinline = false
isNoinline = false isNoinline = false
isVararg = false isVararg = false
@@ -382,7 +382,7 @@ class JavaSymbolProvider(
javaField.isEnumEntry -> buildEnumEntry { javaField.isEnumEntry -> buildEnumEntry {
source = (javaField as? JavaElementImpl<*>)?.psi?.toFirPsiSourceElement() source = (javaField as? JavaElementImpl<*>)?.psi?.toFirPsiSourceElement()
moduleData = this@JavaSymbolProvider.baseModuleData moduleData = this@JavaSymbolProvider.baseModuleData
symbol = FirVariableSymbol(fieldId) symbol = FirEnumEntrySymbol(fieldId)
name = fieldName name = fieldName
status = FirResolvedDeclarationStatusImpl( status = FirResolvedDeclarationStatusImpl(
javaField.visibility, javaField.visibility,
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusIm
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirTransformer
@@ -34,7 +34,7 @@ class FirJavaValueParameter @FirImplementationDetail constructor(
override val attributes: FirDeclarationAttributes, override val attributes: FirDeclarationAttributes,
override var returnTypeRef: FirTypeRef, override var returnTypeRef: FirTypeRef,
override val name: Name, override val name: Name,
override val symbol: FirVariableSymbol<FirValueParameter>, override val symbol: FirValueParameterSymbol,
annotationBuilder: () -> List<FirAnnotationCall>, annotationBuilder: () -> List<FirAnnotationCall>,
override var defaultValue: FirExpression?, override var defaultValue: FirExpression?,
override val isVararg: Boolean, override val isVararg: Boolean,
@@ -182,7 +182,7 @@ class FirJavaValueParameterBuilder {
attributes, attributes,
returnTypeRef, returnTypeRef,
name, name,
symbol = FirVariableSymbol(name), symbol = FirValueParameterSymbol(name),
annotationBuilder, annotationBuilder,
defaultValue, defaultValue,
isVararg, isVararg,
@@ -26,7 +26,8 @@ import org.jetbrains.kotlin.fir.java.declarations.*
import org.jetbrains.kotlin.fir.java.toConeKotlinTypeProbablyFlexible import org.jetbrains.kotlin.fir.java.toConeKotlinTypeProbablyFlexible
import org.jetbrains.kotlin.fir.scopes.jvm.computeJvmDescriptor import org.jetbrains.kotlin.fir.scopes.jvm.computeJvmDescriptor
import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.jvm.FirJavaTypeRef import org.jetbrains.kotlin.fir.types.jvm.FirJavaTypeRef
import org.jetbrains.kotlin.load.java.AnnotationQualifierApplicabilityType import org.jetbrains.kotlin.load.java.AnnotationQualifierApplicabilityType
import org.jetbrains.kotlin.load.java.typeEnhancement.* import org.jetbrains.kotlin.load.java.typeEnhancement.*
@@ -222,7 +223,7 @@ class FirSignatureEnhancement(
origin = FirDeclarationOrigin.Enhancement origin = FirDeclarationOrigin.Enhancement
returnTypeRef = enhancedReturnType returnTypeRef = enhancedReturnType
this.name = valueParameter.name this.name = valueParameter.name
symbol = FirVariableSymbol(this.name) symbol = FirValueParameterSymbol(this.name)
defaultValue = valueParameter.defaultValue defaultValue = valueParameter.defaultValue
isCrossinline = valueParameter.isCrossinline isCrossinline = valueParameter.isCrossinline
isNoinline = valueParameter.isNoinline isNoinline = valueParameter.isNoinline
@@ -651,7 +651,7 @@ class DeclarationsConverter(
origin = FirDeclarationOrigin.Source origin = FirDeclarationOrigin.Source
returnTypeRef = classWrapper.delegatedSelfTypeRef returnTypeRef = classWrapper.delegatedSelfTypeRef
name = enumEntryName name = enumEntryName
symbol = FirVariableSymbol(CallableId(context.currentClassId, enumEntryName)) symbol = FirEnumEntrySymbol(CallableId(context.currentClassId, enumEntryName))
status = FirDeclarationStatusImpl(Visibilities.Public, Modality.FINAL).apply { status = FirDeclarationStatusImpl(Visibilities.Public, Modality.FINAL).apply {
isStatic = true isStatic = true
isExpect = classWrapper.hasExpect() isExpect = classWrapper.hasExpect()
@@ -1204,7 +1204,7 @@ class DeclarationsConverter(
moduleData = baseModuleData moduleData = baseModuleData
origin = FirDeclarationOrigin.Source origin = FirDeclarationOrigin.Source
returnTypeRef = propertyTypeRef returnTypeRef = propertyTypeRef
symbol = FirVariableSymbol(NAME_FOR_DEFAULT_VALUE_PARAMETER) symbol = FirValueParameterSymbol(NAME_FOR_DEFAULT_VALUE_PARAMETER)
} }
var block: LighterASTNode? = null var block: LighterASTNode? = null
var expression: LighterASTNode? = null var expression: LighterASTNode? = null
@@ -1327,7 +1327,7 @@ class DeclarationsConverter(
origin = FirDeclarationOrigin.Source origin = FirDeclarationOrigin.Source
returnTypeRef = if (firValueParameter.returnTypeRef == implicitType) propertyTypeRef else firValueParameter.returnTypeRef returnTypeRef = if (firValueParameter.returnTypeRef == implicitType) propertyTypeRef else firValueParameter.returnTypeRef
name = firValueParameter.name name = firValueParameter.name
symbol = FirVariableSymbol(firValueParameter.name) symbol = FirValueParameterSymbol(firValueParameter.name)
defaultValue = firValueParameter.defaultValue defaultValue = firValueParameter.defaultValue
isCrossinline = modifiers.hasCrossinline() || firValueParameter.isCrossinline isCrossinline = modifiers.hasCrossinline() || firValueParameter.isCrossinline
isNoinline = modifiers.hasNoinline() || firValueParameter.isNoinline isNoinline = modifiers.hasNoinline() || firValueParameter.isNoinline
@@ -1967,7 +1967,7 @@ class DeclarationsConverter(
origin = FirDeclarationOrigin.Source origin = FirDeclarationOrigin.Source
returnTypeRef = firType ?: implicitType returnTypeRef = firType ?: implicitType
this.name = name this.name = name
symbol = FirVariableSymbol(name) symbol = FirValueParameterSymbol(name)
defaultValue = firExpression defaultValue = firExpression
isCrossinline = modifiers.hasCrossinline() isCrossinline = modifiers.hasCrossinline()
isNoinline = modifiers.hasNoinline() isNoinline = modifiers.hasNoinline()
@@ -36,7 +36,7 @@ import org.jetbrains.kotlin.fir.references.builder.buildExplicitThisReference
import org.jetbrains.kotlin.fir.references.builder.buildSimpleNamedReference import org.jetbrains.kotlin.fir.references.builder.buildSimpleNamedReference
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
import org.jetbrains.kotlin.fir.types.FirTypeProjection import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.lexer.KtTokens.* import org.jetbrains.kotlin.lexer.KtTokens.*
@@ -157,7 +157,7 @@ class ExpressionsConverter(
origin = FirDeclarationOrigin.Source origin = FirDeclarationOrigin.Source
returnTypeRef = valueParameter.firValueParameter.returnTypeRef returnTypeRef = valueParameter.firValueParameter.returnTypeRef
this.name = name this.name = name
symbol = FirVariableSymbol(name) symbol = FirValueParameterSymbol(name)
defaultValue = null defaultValue = null
isCrossinline = false isCrossinline = false
isNoinline = false isNoinline = false
@@ -364,7 +364,7 @@ open class RawFirBuilder(
moduleData = baseModuleData moduleData = baseModuleData
origin = FirDeclarationOrigin.Source origin = FirDeclarationOrigin.Source
returnTypeRef = propertyTypeRef returnTypeRef = propertyTypeRef
symbol = FirVariableSymbol(NAME_FOR_DEFAULT_VALUE_PARAMETER) symbol = FirValueParameterSymbol(NAME_FOR_DEFAULT_VALUE_PARAMETER)
} }
} }
symbol = FirPropertyAccessorSymbol() symbol = FirPropertyAccessorSymbol()
@@ -421,7 +421,7 @@ open class RawFirBuilder(
else -> null.toFirOrImplicitType() else -> null.toFirOrImplicitType()
} }
this.name = name this.name = name
symbol = FirVariableSymbol(name) symbol = FirValueParameterSymbol(name)
defaultValue = if (hasDefaultValue()) { defaultValue = if (hasDefaultValue()) {
{ this@toFirValueParameter.defaultValue }.toFirExpression("Should have default value") { this@toFirValueParameter.defaultValue }.toFirExpression("Should have default value")
} else null } else null
@@ -751,7 +751,7 @@ open class RawFirBuilder(
isStatic = true isStatic = true
isExpect = containingClassOrObject?.hasExpectModifier() == true isExpect = containingClassOrObject?.hasExpectModifier() == true
} }
symbol = FirVariableSymbol(callableIdForName(nameAsSafeName)) symbol = FirEnumEntrySymbol(callableIdForName(nameAsSafeName))
if (ownerClassHasDefaultConstructor && ktEnumEntry.initializerList == null && if (ownerClassHasDefaultConstructor && ktEnumEntry.initializerList == null &&
ktEnumEntry.annotationEntries.isEmpty() && ktEnumEntry.body == null ktEnumEntry.annotationEntries.isEmpty() && ktEnumEntry.body == null
) { ) {
@@ -1146,7 +1146,7 @@ open class RawFirBuilder(
source = multiDeclaration.toFirSourceElement(FirFakeSourceElementKind.ImplicitTypeRef) source = multiDeclaration.toFirSourceElement(FirFakeSourceElementKind.ImplicitTypeRef)
} }
this.name = name this.name = name
symbol = FirVariableSymbol(name) symbol = FirValueParameterSymbol(name)
isCrossinline = false isCrossinline = false
isNoinline = false isNoinline = false
isVararg = false isVararg = false
@@ -1146,7 +1146,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
origin = FirDeclarationOrigin.Source origin = FirDeclarationOrigin.Source
returnTypeRef = propertyReturnTypeRef returnTypeRef = propertyReturnTypeRef
name = propertyName name = propertyName
symbol = FirVariableSymbol(propertyName) symbol = FirValueParameterSymbol(propertyName)
defaultValue = generateComponentAccess(parameterSource, firProperty, classTypeRef, propertyReturnTypeRef) defaultValue = generateComponentAccess(parameterSource, firProperty, classTypeRef, propertyReturnTypeRef)
isCrossinline = false isCrossinline = false
isNoinline = false isNoinline = false
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.contracts.FirContractDescription import org.jetbrains.kotlin.fir.contracts.FirContractDescription
import org.jetbrains.kotlin.fir.contracts.builder.buildLegacyRawContractDescription import org.jetbrains.kotlin.fir.contracts.builder.buildLegacyRawContractDescription
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirProperty
import org.jetbrains.kotlin.fir.declarations.FirVariable import org.jetbrains.kotlin.fir.declarations.FirVariable
import org.jetbrains.kotlin.fir.declarations.builder.* import org.jetbrains.kotlin.fir.declarations.builder.*
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
@@ -29,8 +28,10 @@ import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference
import org.jetbrains.kotlin.fir.references.builder.buildSimpleNamedReference import org.jetbrains.kotlin.fir.references.builder.buildSimpleNamedReference
import org.jetbrains.kotlin.fir.symbols.constructStarProjectedType import org.jetbrains.kotlin.fir.symbols.constructStarProjectedType
import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.ConeStarProjection
import org.jetbrains.kotlin.fir.types.builder.* import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.builder.buildImplicitTypeRef
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
import org.jetbrains.kotlin.fir.types.impl.* import org.jetbrains.kotlin.fir.types.impl.*
import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -451,7 +452,7 @@ fun FirPropertyBuilder.generateAccessorsByDelegate(
origin = FirDeclarationOrigin.Source origin = FirDeclarationOrigin.Source
returnTypeRef = buildImplicitTypeRef() returnTypeRef = buildImplicitTypeRef()
name = DELEGATED_SETTER_PARAM name = DELEGATED_SETTER_PARAM
symbol = FirVariableSymbol(this@generateAccessorsByDelegate.name) symbol = FirValueParameterSymbol(this@generateAccessorsByDelegate.name)
isCrossinline = false isCrossinline = false
isNoinline = false isNoinline = false
isVararg = false isVararg = false
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
import org.jetbrains.kotlin.fir.typeContext import org.jetbrains.kotlin.fir.typeContext
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
@@ -208,7 +208,7 @@ class FirSamResolverImpl(
type = substitutedFunctionType type = substitutedFunctionType
} }
name = SAM_PARAMETER_NAME name = SAM_PARAMETER_NAME
this.symbol = FirVariableSymbol(SAM_PARAMETER_NAME) this.symbol = FirValueParameterSymbol(SAM_PARAMETER_NAME)
isCrossinline = false isCrossinline = false
isNoinline = false isNoinline = false
isVararg = false isVararg = false
@@ -27,7 +27,7 @@ import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirAbstractBod
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.resultType import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.resultType
import org.jetbrains.kotlin.fir.resolve.typeFromCallee import org.jetbrains.kotlin.fir.resolve.typeFromCallee
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
import org.jetbrains.kotlin.fir.visitors.transformSingle import org.jetbrains.kotlin.fir.visitors.transformSingle
@@ -235,7 +235,7 @@ class FirCallCompleter(
origin = FirDeclarationOrigin.Source origin = FirDeclarationOrigin.Source
returnTypeRef = itType.approximateLambdaInputType().toFirResolvedTypeRef() returnTypeRef = itType.approximateLambdaInputType().toFirResolvedTypeRef()
this.name = name this.name = name
symbol = FirVariableSymbol(name) symbol = FirValueParameterSymbol(name)
defaultValue = null defaultValue = null
isCrossinline = false isCrossinline = false
isNoinline = false isNoinline = false
@@ -28,7 +28,7 @@ import org.jetbrains.kotlin.fir.resolvedTypeFromPrototype
import org.jetbrains.kotlin.fir.symbols.SyntheticCallableId import org.jetbrains.kotlin.fir.symbols.SyntheticCallableId
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
import org.jetbrains.kotlin.fir.typeContext import org.jetbrains.kotlin.fir.typeContext
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
@@ -356,7 +356,7 @@ class FirSyntheticCallGenerator(
isCrossinline = false isCrossinline = false
isNoinline = false isNoinline = false
this.isVararg = isVararg this.isVararg = isVararg
symbol = FirVariableSymbol(name) symbol = FirValueParameterSymbol(name)
resolvePhase = FirResolvePhase.BODY_RESOLVE resolvePhase = FirResolvePhase.BODY_RESOLVE
} }
} }
@@ -35,7 +35,7 @@ import org.jetbrains.kotlin.fir.resolve.transformers.*
import org.jetbrains.kotlin.fir.resolve.withExpectedType import org.jetbrains.kotlin.fir.resolve.withExpectedType
import org.jetbrains.kotlin.fir.scopes.impl.FirMemberTypeParameterScope import org.jetbrains.kotlin.fir.scopes.impl.FirMemberTypeParameterScope
import org.jetbrains.kotlin.fir.symbols.constructStarProjectedType import org.jetbrains.kotlin.fir.symbols.constructStarProjectedType
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.builder.buildErrorTypeRef import org.jetbrains.kotlin.fir.types.builder.buildErrorTypeRef
import org.jetbrains.kotlin.fir.types.builder.buildImplicitTypeRef import org.jetbrains.kotlin.fir.types.builder.buildImplicitTypeRef
@@ -676,7 +676,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor
origin = FirDeclarationOrigin.Source origin = FirDeclarationOrigin.Source
returnTypeRef = singleParameterType.toFirResolvedTypeRef() returnTypeRef = singleParameterType.toFirResolvedTypeRef()
this.name = name this.name = name
symbol = FirVariableSymbol(name) symbol = FirValueParameterSymbol(name)
isCrossinline = false isCrossinline = false
isNoinline = false isNoinline = false
isVararg = false isVararg = false
@@ -245,7 +245,7 @@ object FirFakeOverrideGenerator {
buildValueParameterCopy(valueParameter) { buildValueParameterCopy(valueParameter) {
origin = FirDeclarationOrigin.SubstitutionOverride origin = FirDeclarationOrigin.SubstitutionOverride
returnTypeRef = valueParameter.returnTypeRef.withReplacedConeType(newType) returnTypeRef = valueParameter.returnTypeRef.withReplacedConeType(newType)
symbol = FirVariableSymbol(valueParameter.symbol.callableId) symbol = FirValueParameterSymbol(valueParameter.name)
} }
} }
} }
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.fir.FirModuleData
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirEnumEntrySymbol
import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -35,7 +35,6 @@ abstract class FirEnumEntry : FirVariable<FirEnumEntry>() {
abstract override val containerSource: DeserializedContainerSource? abstract override val containerSource: DeserializedContainerSource?
abstract override val dispatchReceiverType: ConeKotlinType? abstract override val dispatchReceiverType: ConeKotlinType?
abstract override val name: Name abstract override val name: Name
abstract override val symbol: FirVariableSymbol<FirEnumEntry>
abstract override val initializer: FirExpression? abstract override val initializer: FirExpression?
abstract override val delegate: FirExpression? abstract override val delegate: FirExpression?
abstract override val isVar: Boolean abstract override val isVar: Boolean
@@ -43,6 +42,7 @@ abstract class FirEnumEntry : FirVariable<FirEnumEntry>() {
abstract override val getter: FirPropertyAccessor? abstract override val getter: FirPropertyAccessor?
abstract override val setter: FirPropertyAccessor? abstract override val setter: FirPropertyAccessor?
abstract override val annotations: List<FirAnnotationCall> abstract override val annotations: List<FirAnnotationCall>
abstract override val symbol: FirEnumEntrySymbol
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitEnumEntry(this, data) override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitEnumEntry(this, data)
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -36,7 +36,6 @@ abstract class FirValueParameter : FirVariable<FirValueParameter>(), FirControlF
abstract override val containerSource: DeserializedContainerSource? abstract override val containerSource: DeserializedContainerSource?
abstract override val dispatchReceiverType: ConeKotlinType? abstract override val dispatchReceiverType: ConeKotlinType?
abstract override val name: Name abstract override val name: Name
abstract override val symbol: FirVariableSymbol<FirValueParameter>
abstract override val initializer: FirExpression? abstract override val initializer: FirExpression?
abstract override val delegate: FirExpression? abstract override val delegate: FirExpression?
abstract override val isVar: Boolean abstract override val isVar: Boolean
@@ -45,6 +44,7 @@ abstract class FirValueParameter : FirVariable<FirValueParameter>(), FirControlF
abstract override val setter: FirPropertyAccessor? abstract override val setter: FirPropertyAccessor?
abstract override val annotations: List<FirAnnotationCall> abstract override val annotations: List<FirAnnotationCall>
abstract override val controlFlowGraphReference: FirControlFlowGraphReference? abstract override val controlFlowGraphReference: FirControlFlowGraphReference?
abstract override val symbol: FirValueParameterSymbol
abstract val defaultValue: FirExpression? abstract val defaultValue: FirExpression?
abstract val isCrossinline: Boolean abstract val isCrossinline: Boolean
abstract val isNoinline: Boolean abstract val isNoinline: Boolean
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusIm
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -45,7 +45,6 @@ class FirDefaultSetterValueParameterBuilder : FirAnnotationContainerBuilder {
var receiverTypeRef: FirTypeRef? = null var receiverTypeRef: FirTypeRef? = null
var containerSource: DeserializedContainerSource? = null var containerSource: DeserializedContainerSource? = null
var dispatchReceiverType: ConeKotlinType? = null var dispatchReceiverType: ConeKotlinType? = null
lateinit var symbol: FirVariableSymbol<FirValueParameter>
var initializer: FirExpression? = null var initializer: FirExpression? = null
var delegate: FirExpression? = null var delegate: FirExpression? = null
var isVar: Boolean = false var isVar: Boolean = false
@@ -53,6 +52,7 @@ class FirDefaultSetterValueParameterBuilder : FirAnnotationContainerBuilder {
var getter: FirPropertyAccessor? = null var getter: FirPropertyAccessor? = null
var setter: FirPropertyAccessor? = null var setter: FirPropertyAccessor? = null
override val annotations: MutableList<FirAnnotationCall> = mutableListOf() override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
lateinit var symbol: FirValueParameterSymbol
var defaultValue: FirExpression? = null var defaultValue: FirExpression? = null
var isCrossinline: Boolean = false var isCrossinline: Boolean = false
var isNoinline: Boolean = false var isNoinline: Boolean = false
@@ -69,7 +69,6 @@ class FirDefaultSetterValueParameterBuilder : FirAnnotationContainerBuilder {
receiverTypeRef, receiverTypeRef,
containerSource, containerSource,
dispatchReceiverType, dispatchReceiverType,
symbol,
initializer, initializer,
delegate, delegate,
isVar, isVar,
@@ -77,6 +76,7 @@ class FirDefaultSetterValueParameterBuilder : FirAnnotationContainerBuilder {
getter, getter,
setter, setter,
annotations, annotations,
symbol,
defaultValue, defaultValue,
isCrossinline, isCrossinline,
isNoinline, isNoinline,
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRef
import org.jetbrains.kotlin.fir.declarations.impl.FirEnumEntryImpl import org.jetbrains.kotlin.fir.declarations.impl.FirEnumEntryImpl
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirEnumEntrySymbol
import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -45,9 +45,9 @@ class FirEnumEntryBuilder : FirAnnotationContainerBuilder {
var containerSource: DeserializedContainerSource? = null var containerSource: DeserializedContainerSource? = null
var dispatchReceiverType: ConeKotlinType? = null var dispatchReceiverType: ConeKotlinType? = null
lateinit var name: Name lateinit var name: Name
lateinit var symbol: FirVariableSymbol<FirEnumEntry>
var initializer: FirExpression? = null var initializer: FirExpression? = null
override val annotations: MutableList<FirAnnotationCall> = mutableListOf() override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
lateinit var symbol: FirEnumEntrySymbol
override fun build(): FirEnumEntry { override fun build(): FirEnumEntry {
return FirEnumEntryImpl( return FirEnumEntryImpl(
@@ -62,9 +62,9 @@ class FirEnumEntryBuilder : FirAnnotationContainerBuilder {
containerSource, containerSource,
dispatchReceiverType, dispatchReceiverType,
name, name,
symbol,
initializer, initializer,
annotations, annotations,
symbol,
) )
} }
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -45,8 +45,8 @@ open class FirValueParameterBuilder : FirAnnotationContainerBuilder {
open var containerSource: DeserializedContainerSource? = null open var containerSource: DeserializedContainerSource? = null
open var dispatchReceiverType: ConeKotlinType? = null open var dispatchReceiverType: ConeKotlinType? = null
open lateinit var name: Name open lateinit var name: Name
open lateinit var symbol: FirVariableSymbol<FirValueParameter>
override val annotations: MutableList<FirAnnotationCall> = mutableListOf() override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
open lateinit var symbol: FirValueParameterSymbol
open var defaultValue: FirExpression? = null open var defaultValue: FirExpression? = null
open var isCrossinline: Boolean by kotlin.properties.Delegates.notNull<Boolean>() open var isCrossinline: Boolean by kotlin.properties.Delegates.notNull<Boolean>()
open var isNoinline: Boolean by kotlin.properties.Delegates.notNull<Boolean>() open var isNoinline: Boolean by kotlin.properties.Delegates.notNull<Boolean>()
@@ -63,8 +63,8 @@ open class FirValueParameterBuilder : FirAnnotationContainerBuilder {
containerSource, containerSource,
dispatchReceiverType, dispatchReceiverType,
name, name,
symbol,
annotations, annotations,
symbol,
defaultValue, defaultValue,
isCrossinline, isCrossinline,
isNoinline, isNoinline,
@@ -97,8 +97,8 @@ inline fun buildValueParameterCopy(original: FirValueParameter, init: FirValuePa
copyBuilder.containerSource = original.containerSource copyBuilder.containerSource = original.containerSource
copyBuilder.dispatchReceiverType = original.dispatchReceiverType copyBuilder.dispatchReceiverType = original.dispatchReceiverType
copyBuilder.name = original.name copyBuilder.name = original.name
copyBuilder.symbol = original.symbol
copyBuilder.annotations.addAll(original.annotations) copyBuilder.annotations.addAll(original.annotations)
copyBuilder.symbol = original.symbol
copyBuilder.defaultValue = original.defaultValue copyBuilder.defaultValue = original.defaultValue
copyBuilder.isCrossinline = original.isCrossinline copyBuilder.isCrossinline = original.isCrossinline
copyBuilder.isNoinline = original.isNoinline copyBuilder.isNoinline = original.isNoinline
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusIm
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -40,7 +40,6 @@ internal class FirDefaultSetterValueParameter(
override var receiverTypeRef: FirTypeRef?, override var receiverTypeRef: FirTypeRef?,
override val containerSource: DeserializedContainerSource?, override val containerSource: DeserializedContainerSource?,
override val dispatchReceiverType: ConeKotlinType?, override val dispatchReceiverType: ConeKotlinType?,
override val symbol: FirVariableSymbol<FirValueParameter>,
override var initializer: FirExpression?, override var initializer: FirExpression?,
override var delegate: FirExpression?, override var delegate: FirExpression?,
override val isVar: Boolean, override val isVar: Boolean,
@@ -48,6 +47,7 @@ internal class FirDefaultSetterValueParameter(
override var getter: FirPropertyAccessor?, override var getter: FirPropertyAccessor?,
override var setter: FirPropertyAccessor?, override var setter: FirPropertyAccessor?,
override val annotations: MutableList<FirAnnotationCall>, override val annotations: MutableList<FirAnnotationCall>,
override val symbol: FirValueParameterSymbol,
override var defaultValue: FirExpression?, override var defaultValue: FirExpression?,
override val isCrossinline: Boolean, override val isCrossinline: Boolean,
override val isNoinline: Boolean, override val isNoinline: Boolean,
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRef import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRef
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirEnumEntrySymbol
import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -40,9 +40,9 @@ internal class FirEnumEntryImpl(
override val containerSource: DeserializedContainerSource?, override val containerSource: DeserializedContainerSource?,
override val dispatchReceiverType: ConeKotlinType?, override val dispatchReceiverType: ConeKotlinType?,
override val name: Name, override val name: Name,
override val symbol: FirVariableSymbol<FirEnumEntry>,
override var initializer: FirExpression?, override var initializer: FirExpression?,
override val annotations: MutableList<FirAnnotationCall>, override val annotations: MutableList<FirAnnotationCall>,
override val symbol: FirEnumEntrySymbol,
) : FirEnumEntry() { ) : FirEnumEntry() {
override val receiverTypeRef: FirTypeRef? get() = null override val receiverTypeRef: FirTypeRef? get() = null
override val delegate: FirExpression? get() = null override val delegate: FirExpression? get() = null
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusIm
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -40,8 +40,8 @@ internal class FirValueParameterImpl(
override val containerSource: DeserializedContainerSource?, override val containerSource: DeserializedContainerSource?,
override val dispatchReceiverType: ConeKotlinType?, override val dispatchReceiverType: ConeKotlinType?,
override val name: Name, override val name: Name,
override val symbol: FirVariableSymbol<FirValueParameter>,
override val annotations: MutableList<FirAnnotationCall>, override val annotations: MutableList<FirAnnotationCall>,
override val symbol: FirValueParameterSymbol,
override var defaultValue: FirExpression?, override var defaultValue: FirExpression?,
override val isCrossinline: Boolean, override val isCrossinline: Boolean,
override val isNoinline: Boolean, override val isNoinline: Boolean,
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusIm
import org.jetbrains.kotlin.fir.expressions.builder.buildEmptyExpressionBlock import org.jetbrains.kotlin.fir.expressions.builder.buildEmptyExpressionBlock
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
import org.jetbrains.kotlin.fir.types.impl.FirImplicitStringTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitStringTypeRef
@@ -93,7 +93,7 @@ fun FirRegularClassBuilder.generateValueOfFunction(
this.moduleData = moduleData this.moduleData = moduleData
returnTypeRef = FirImplicitStringTypeRef(source) returnTypeRef = FirImplicitStringTypeRef(source)
name = VALUE name = VALUE
this@vp.symbol = FirVariableSymbol(VALUE) this@vp.symbol = FirValueParameterSymbol(VALUE)
isCrossinline = false isCrossinline = false
isNoinline = false isNoinline = false
isVararg = false isVararg = false
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.builder.buildDefaultSetterValueParameter import org.jetbrains.kotlin.fir.declarations.builder.buildDefaultSetterValueParameter
import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertyAccessorSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.impl.FirImplicitUnitTypeRef import org.jetbrains.kotlin.fir.types.impl.FirImplicitUnitTypeRef
@@ -120,7 +121,7 @@ class FirDefaultPropertySetter(
this@builder.moduleData = moduleData this@builder.moduleData = moduleData
this@builder.origin = origin this@builder.origin = origin
this@builder.returnTypeRef = propertyTypeRef this@builder.returnTypeRef = propertyTypeRef
this@builder.symbol = FirVariableSymbol(CallableId(FqName.ROOT, Name.special("<default-setter-parameter>"))) this@builder.symbol = FirValueParameterSymbol(Name.special("<default-setter-parameter>"))
} }
), ),
isGetter = false, isGetter = false,
@@ -5,19 +5,14 @@
package org.jetbrains.kotlin.fir.symbols.impl package org.jetbrains.kotlin.fir.symbols.impl
import org.jetbrains.kotlin.fir.declarations.FirErrorProperty import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.FirField
import org.jetbrains.kotlin.fir.declarations.FirProperty
import org.jetbrains.kotlin.fir.declarations.FirVariable
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.name.CallableId import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
open class FirVariableSymbol<E : FirVariable<E>>(override val callableId: CallableId) : FirCallableSymbol<E>() { sealed class FirVariableSymbol<E : FirVariable<E>>(override val callableId: CallableId) : FirCallableSymbol<E>()
constructor(name: Name) : this(CallableId(name)) // TODO?
}
open class FirPropertySymbol( open class FirPropertySymbol(
callableId: CallableId, callableId: CallableId,
@@ -40,6 +35,13 @@ class FirDelegateFieldSymbol(callableId: CallableId) : FirVariableSymbol<FirProp
class FirFieldSymbol(callableId: CallableId) : FirVariableSymbol<FirField>(callableId) class FirFieldSymbol(callableId: CallableId) : FirVariableSymbol<FirField>(callableId)
class FirEnumEntrySymbol(callableId: CallableId) : FirVariableSymbol<FirEnumEntry>(callableId)
class FirValueParameterSymbol(name: Name) : FirVariableSymbol<FirValueParameter>(CallableId(name)) {
val name: Name
get() = callableId.callableName
}
class FirErrorPropertySymbol( class FirErrorPropertySymbol(
val diagnostic: ConeDiagnostic val diagnostic: ConeDiagnostic
) : FirVariableSymbol<FirErrorProperty>(CallableId(FqName.ROOT, null, NAME)) { ) : FirVariableSymbol<FirErrorProperty>(CallableId(FqName.ROOT, null, NAME)) {
@@ -46,11 +46,6 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
+annotations +annotations
} }
// symbolOwner.configure {
// withArg("DE, symbolOwner, declaration)
// +symbolWithPackage("fir.symbols", "FirBasedSymbol", "DE)
// }
typeParameterRef.configure { typeParameterRef.configure {
+symbol(typeParameterSymbolType.type) +symbol(typeParameterSymbolType.type)
} }
@@ -383,6 +378,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
valueParameter.configure { valueParameter.configure {
parentArg(variable, "E", valueParameter) parentArg(variable, "E", valueParameter)
+symbol("FirValueParameterSymbol")
+field("defaultValue", expression, nullable = true) +field("defaultValue", expression, nullable = true)
generateBooleanFields("crossinline", "noinline", "vararg") generateBooleanFields("crossinline", "noinline", "vararg")
} }
@@ -408,6 +404,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
enumEntry.configure { enumEntry.configure {
parentArg(variable, "E", enumEntry) parentArg(variable, "E", enumEntry)
+symbol("FirEnumEntrySymbol")
} }
field.configure { field.configure {
@@ -417,7 +414,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
anonymousInitializer.configure { anonymousInitializer.configure {
parentArg(declaration, "E", anonymousInitializer) parentArg(declaration, "E", anonymousInitializer)
+body(nullable = true) +body(nullable = true)
+symbol(anonymousInitializerSymbolType.type) +symbol("FirAnonymousInitializerSymbol")
} }
file.configure { file.configure {
@@ -426,7 +423,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
+declarations.withTransform() +declarations.withTransform()
+stringField("name") +stringField("name")
+field("packageFqName", fqNameType) +field("packageFqName", fqNameType)
+symbol(fileSymbolType.type) +symbol("FirFileSymbol")
} }
import.configure { import.configure {
@@ -71,8 +71,6 @@ val classLikeSymbolType = type("fir.symbols.impl", "FirClassLikeSymbol<*>")
val typeParameterSymbolType = type("fir.symbols.impl", "FirTypeParameterSymbol") val typeParameterSymbolType = type("fir.symbols.impl", "FirTypeParameterSymbol")
val emptyArgumentListType = type("fir.expressions", "FirEmptyArgumentList") val emptyArgumentListType = type("fir.expressions", "FirEmptyArgumentList")
val firScopeProviderType = type("fir.scopes", "FirScopeProvider") val firScopeProviderType = type("fir.scopes", "FirScopeProvider")
val anonymousInitializerSymbolType = type("fir.symbols.impl", "FirAnonymousInitializerSymbol")
val fileSymbolType = type("fir.symbols.impl", "FirFileSymbol")
val pureAbstractElementType = generatedType("FirPureAbstractElement") val pureAbstractElementType = generatedType("FirPureAbstractElement")
val coneEffectDeclarationType = type("fir.contracts.description", "ConeEffectDeclaration") val coneEffectDeclarationType = type("fir.contracts.description", "ConeEffectDeclaration")