[FIR] Initialize origin in all places with creating of declarations

This commit is contained in:
Dmitriy Novozhilov
2020-04-30 15:09:16 +03:00
parent e515b1c823
commit 41545cd2b4
27 changed files with 125 additions and 14 deletions
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.codegen.writeSyntheticClassMetadata
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.backend.FirMetadataSource
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirFunction
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
import org.jetbrains.kotlin.fir.declarations.builder.buildAnonymousFunction
@@ -55,6 +56,7 @@ class FirJvmClassCodegen(
val function = this
return buildAnonymousFunction {
session = function.session
origin = FirDeclarationOrigin.Source
symbol = FirAnonymousFunctionSymbol()
returnTypeRef = function.returnTypeRef
receiverTypeRef = function.receiverTypeRef
@@ -231,6 +231,7 @@ class DataClassMembersGenerator(val components: Fir2IrComponents) {
}
metadata = FirMetadataSource.Function(
buildSimpleFunction {
origin = FirDeclarationOrigin.Synthetic
this.name = name
this.symbol = FirNamedFunctionSymbol(CallableId(classId.packageFqName, classId.relativeClassName, name))
this.status = FirDeclarationStatusImpl(Visibilities.PUBLIC, Modality.FINAL)
@@ -245,6 +246,7 @@ class DataClassMembersGenerator(val components: Fir2IrComponents) {
this.valueParameters.add(
buildValueParameter {
this.name = irValueParameter.name
origin = FirDeclarationOrigin.Synthetic
this.session = components.session
this.returnTypeRef = FirImplicitNullableAnyTypeRef(null)
this.symbol = FirVariableSymbol(irValueParameter.name)
@@ -12,6 +12,7 @@ import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
import org.jetbrains.kotlin.fir.declarations.addDefaultBoundIfNecessary
@@ -95,6 +96,7 @@ class JavaSymbolProvider(
): FirTypeParameter {
return FirTypeParameterBuilder().apply {
this.session = this@JavaSymbolProvider.session
origin = FirDeclarationOrigin.Java
this.name = this@toFirTypeParameter.name
symbol = firSymbol
variance = INVARIANT
@@ -195,6 +195,7 @@ class JavaClassEnhancementScope(
buildValueParameter {
source = valueParameter.source
session = this@JavaClassEnhancementScope.session
origin = FirDeclarationOrigin.Enhancement
returnTypeRef = newTypeRef
this.name = valueParameter.name
symbol = FirVariableSymbol(this.name)
@@ -211,8 +212,6 @@ class JavaClassEnhancementScope(
val symbol = FirConstructorSymbol(methodId)
if (firMethod.isPrimary) {
FirPrimaryConstructorBuilder().apply {
source = firMethod.source
session = this@JavaClassEnhancementScope.session
returnTypeRef = newReturnTypeRef
status = FirDeclarationStatusImpl(firMethod.visibility, Modality.FINAL).apply {
isExpect = false
@@ -223,14 +222,15 @@ class JavaClassEnhancementScope(
}
} else {
FirConstructorBuilder().apply {
source = firMethod.source
session = this@JavaClassEnhancementScope.session
returnTypeRef = newReturnTypeRef
status = firMethod.status
this.symbol = symbol
}
}.apply {
source = firMethod.source
session = this@JavaClassEnhancementScope.session
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
origin = FirDeclarationOrigin.Enhancement
this.valueParameters += newValueParameters
this.typeParameters += firMethod.typeParameters
}
@@ -239,6 +239,7 @@ class JavaClassEnhancementScope(
FirSimpleFunctionBuilder().apply {
source = firMethod.source
session = this@JavaClassEnhancementScope.session
origin = FirDeclarationOrigin.Enhancement
returnTypeRef = newReturnTypeRef
receiverTypeRef = newReceiverTypeRef
this.name = name!!
@@ -127,6 +127,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
buildErrorFunction {
source = baseSource
session = this@BaseFirBuilder.baseSession
origin = FirDeclarationOrigin.Source
diagnostic = ConeSimpleDiagnostic(message, kind)
symbol = FirErrorFunctionSymbol()
}
@@ -695,6 +696,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
val componentFunction = buildSimpleFunction {
source = parameterSource
session = this@DataClassMembersGenerator.session
origin = FirDeclarationOrigin.Source
returnTypeRef = firProperty.returnTypeRef
receiverTypeRef = null
this.name = name
@@ -714,6 +716,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
buildSimpleFunction {
source = this@DataClassMembersGenerator.source.toFirSourceElement()
session = this@DataClassMembersGenerator.session
origin = FirDeclarationOrigin.Source
returnTypeRef = classTypeRef
name = copyName
status = FirDeclarationStatusImpl(Visibilities.PUBLIC, Modality.FINAL)
@@ -724,6 +727,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
valueParameters += buildValueParameter {
source = parameterSource
session = this@DataClassMembersGenerator.session
origin = FirDeclarationOrigin.Source
returnTypeRef = firProperty.returnTypeRef
name = propertyName
symbol = FirVariableSymbol(propertyName)
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.contracts.FirContractDescription
import org.jetbrains.kotlin.fir.contracts.builder.buildRawContractDescription
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.builder.*
@@ -280,6 +281,7 @@ fun generateTemporaryVariable(
buildProperty {
this.source = source
this.session = session
origin = FirDeclarationOrigin.Source
returnTypeRef = typeRef ?: buildImplicitTypeRef {
this.source = source
}
@@ -386,6 +388,7 @@ fun FirPropertyBuilder.generateAccessorsByDelegate(
val returnTarget = FirFunctionTarget(null, isLambda = false)
getter = buildPropertyAccessor {
this.session = session
origin = FirDeclarationOrigin.Source
returnTypeRef = buildImplicitTypeRef()
isGetter = true
status = FirDeclarationStatusImpl(Visibilities.UNKNOWN, Modality.FINAL)
@@ -412,11 +415,13 @@ fun FirPropertyBuilder.generateAccessorsByDelegate(
if (isVar && (setter == null || setter is FirDefaultPropertyAccessor)) {
setter = buildPropertyAccessor {
this.session = session
origin = FirDeclarationOrigin.Source
returnTypeRef = session.builtinTypes.unitType
isGetter = false
status = FirDeclarationStatusImpl(Visibilities.UNKNOWN, Modality.FINAL)
val parameter = buildValueParameter {
this.session = session
origin = FirDeclarationOrigin.Source
returnTypeRef = buildImplicitTypeRef()
name = DELEGATED_SETTER_PARAM
symbol = FirVariableSymbol(this@generateAccessorsByDelegate.name)
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.builder.generateResolvedAccessExpression
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirVariable
import org.jetbrains.kotlin.fir.declarations.builder.buildProperty
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
@@ -112,6 +113,7 @@ fun generateDestructuringBlock(
for ((index, entry) in multiDeclaration.entries.withIndex()) {
statements += buildProperty {
this.session = session
origin = FirDeclarationOrigin.Source
returnTypeRef = entry.returnTypeRef
name = entry.name
initializer = buildComponentCall {
@@ -88,6 +88,7 @@ class DeclarationsConverter(
return buildFile {
source = file.toFirSourceElement()
origin = FirDeclarationOrigin.Source
session = baseSession
name = fileName
packageFqName = context.packageFqName
@@ -391,6 +392,7 @@ class DeclarationsConverter(
classBuilder.apply {
source = classNode.toFirSourceElement()
session = baseSession
origin = FirDeclarationOrigin.Source
name = className
this.status = status
this.classKind = classKind
@@ -526,6 +528,7 @@ class DeclarationsConverter(
return withChildClassName(ANONYMOUS_OBJECT_NAME) {
buildAnonymousObject {
source = objectLiteral.toFirSourceElement()
origin = FirDeclarationOrigin.Source
session = baseSession
classKind = ClassKind.OBJECT
scopeProvider = baseScopeProvider
@@ -578,6 +581,7 @@ class DeclarationsConverter(
return buildEnumEntry {
source = enumEntry.toFirSourceElement()
session = baseSession
origin = FirDeclarationOrigin.Source
returnTypeRef = classWrapper.delegatedSelfTypeRef
name = enumEntryName
symbol = FirVariableSymbol(CallableId(context.currentClassId, enumEntryName))
@@ -593,6 +597,7 @@ class DeclarationsConverter(
buildAnonymousObject {
source = this@buildEnumEntry.source
session = baseSession
origin = FirDeclarationOrigin.Source
classKind = ClassKind.ENUM_ENTRY
scopeProvider = baseScopeProvider
symbol = FirAnonymousObjectSymbol()
@@ -693,6 +698,7 @@ class DeclarationsConverter(
buildPrimaryConstructor {
source = primaryConstructor?.toFirSourceElement()
session = baseSession
origin = FirDeclarationOrigin.Source
returnTypeRef = classWrapper.delegatedSelfTypeRef
this.status = status
symbol = FirConstructorSymbol(callableIdForClassConstructor())
@@ -719,6 +725,7 @@ class DeclarationsConverter(
return buildAnonymousInitializer {
source = anonymousInitializer.toFirSourceElement()
session = baseSession
origin = FirDeclarationOrigin.Source
body = if (stubMode) buildEmptyExpressionBlock() else firBlock
}
}
@@ -756,6 +763,7 @@ class DeclarationsConverter(
return buildConstructor {
source = secondaryConstructor.toFirSourceElement()
session = baseSession
origin = FirDeclarationOrigin.Source
returnTypeRef = delegatedSelfTypeRef
this.status = status
symbol = FirConstructorSymbol(callableIdForClassConstructor())
@@ -828,6 +836,7 @@ class DeclarationsConverter(
return@withChildClassName buildTypeAlias {
source = typeAlias.toFirSourceElement()
session = baseSession
origin = FirDeclarationOrigin.Source
name = typeAliasName
status = FirDeclarationStatusImpl(modifiers.getVisibility(), Modality.FINAL).apply {
isExpect = modifiers.hasExpect()
@@ -885,6 +894,7 @@ class DeclarationsConverter(
return buildProperty {
source = propertySource
session = baseSession
origin = FirDeclarationOrigin.Source
returnTypeRef = returnType
name = propertyName
this.isVar = isVar
@@ -940,11 +950,11 @@ class DeclarationsConverter(
val convertedAccessors = accessors.map { convertGetterOrSetter(it, returnType) }
this.getter = convertedAccessors.find { it.isGetter }
?: FirDefaultPropertyGetter(null, session, returnType, modifiers.getVisibility())
?: FirDefaultPropertyGetter(null, session, FirDeclarationOrigin.Source, returnType, modifiers.getVisibility())
this.setter =
if (isVar) {
convertedAccessors.find { it.isSetter }
?: FirDefaultPropertySetter(null, session, returnType, modifiers.getVisibility())
?: FirDefaultPropertySetter(null, session, FirDeclarationOrigin.Source, returnType, modifiers.getVisibility())
} else null
val receiver = delegateExpression?.let {
@@ -1003,6 +1013,7 @@ class DeclarationsConverter(
return buildProperty {
source = entry.toFirSourceElement()
session = baseSession
origin = FirDeclarationOrigin.Source
returnTypeRef = firType ?: implicitType
this.name = name
isVar = false
@@ -1022,6 +1033,7 @@ class DeclarationsConverter(
var returnType: FirTypeRef? = null
var firValueParameters: FirValueParameter = buildDefaultSetterValueParameter {
session = baseSession
origin = FirDeclarationOrigin.Source
returnTypeRef = propertyTypeRef
symbol = FirVariableSymbol(NAME_FOR_DEFAULT_VALUE_PARAMETER)
}
@@ -1042,7 +1054,7 @@ class DeclarationsConverter(
val sourceElement = getterOrSetter.toFirSourceElement()
if (block == null && expression == null) {
return FirDefaultPropertyAccessor
.createGetterOrSetter(sourceElement, baseSession, propertyTypeRef, modifiers.getVisibility(), isGetter)
.createGetterOrSetter(sourceElement, baseSession, FirDeclarationOrigin.Source, propertyTypeRef, modifiers.getVisibility(), isGetter)
.also {
it.annotations += modifiers.annotations
}
@@ -1051,6 +1063,7 @@ class DeclarationsConverter(
return buildPropertyAccessor {
source = sourceElement
session = baseSession
origin = FirDeclarationOrigin.Source
returnTypeRef = returnType ?: if (isGetter) propertyTypeRef else implicitUnitType
symbol = FirPropertyAccessorSymbol()
this.isGetter = isGetter
@@ -1092,6 +1105,7 @@ class DeclarationsConverter(
return buildValueParameter {
source = setterParameter.toFirSourceElement()
session = baseSession
origin = FirDeclarationOrigin.Source
returnTypeRef = if (firValueParameter.returnTypeRef == implicitType) propertyTypeRef else firValueParameter.returnTypeRef
name = firValueParameter.name
symbol = FirVariableSymbol(firValueParameter.name)
@@ -1180,6 +1194,7 @@ class DeclarationsConverter(
return functionBuilder.apply {
session = baseSession
origin = FirDeclarationOrigin.Source
returnTypeRef = returnType!!
context.firFunctionTargets += target
@@ -1382,6 +1397,7 @@ class DeclarationsConverter(
return buildTypeParameter {
source = typeParameter.toFirSourceElement()
session = baseSession
origin = FirDeclarationOrigin.Source
name = identifier.nameAsSafeName()
symbol = FirTypeParameterSymbol()
variance = typeParameterModifiers.getVariance()
@@ -1592,6 +1608,7 @@ class DeclarationsConverter(
val firValueParameter = buildValueParameter {
source = valueParameter.toFirSourceElement()
session = baseSession
origin = FirDeclarationOrigin.Source
returnTypeRef = firType ?: implicitType
this.name = name
symbol = FirVariableSymbol(name)
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.builder.*
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirVariable
import org.jetbrains.kotlin.fir.declarations.builder.buildAnonymousFunction
import org.jetbrains.kotlin.fir.declarations.builder.buildProperty
@@ -133,6 +134,7 @@ class ExpressionsConverter(
return buildAnonymousFunction {
source = expressionSource
session = baseSession
origin = FirDeclarationOrigin.Source
returnTypeRef = implicitType
receiverTypeRef = implicitType
symbol = FirAnonymousFunctionSymbol()
@@ -149,6 +151,7 @@ class ExpressionsConverter(
val name = Name.special("<destruct>")
val multiParameter = buildValueParameter {
session = baseSession
origin = FirDeclarationOrigin.Source
returnTypeRef = buildImplicitTypeRef()
this.name = name
symbol = FirVariableSymbol(name)
@@ -610,6 +613,7 @@ class ExpressionsConverter(
PROPERTY -> subjectVariable = (declarationsConverter.convertPropertyDeclaration(it) as FirVariable<*>).let { variable ->
buildProperty {
source = it.toFirSourceElement()
origin = FirDeclarationOrigin.Source
session = baseSession
returnTypeRef = variable.returnTypeRef
name = variable.name
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.lightTree.fir
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.builder.convertToArrayType
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirProperty
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
import org.jetbrains.kotlin.fir.declarations.builder.buildProperty
@@ -47,6 +48,7 @@ class ValueParameter(
return buildProperty {
source = firValueParameter.source
this.session = session
origin = FirDeclarationOrigin.Source
returnTypeRef = type
this.name = name
initializer = buildQualifiedAccessExpression {
@@ -66,8 +68,8 @@ class ValueParameter(
isLateInit = false
}
annotations += this@ValueParameter.firValueParameter.annotations
getter = FirDefaultPropertyGetter(null, session, type, modifiers.getVisibility())
setter = if (this.isVar) FirDefaultPropertySetter(null, session, type, modifiers.getVisibility()) else null
getter = FirDefaultPropertyGetter(null, session, FirDeclarationOrigin.Source, type, modifiers.getVisibility())
setter = if (this.isVar) FirDefaultPropertySetter(null, session, FirDeclarationOrigin.Source, type, modifiers.getVisibility()) else null
}
}
}
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.FirWhenSubject
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirVariable
import org.jetbrains.kotlin.fir.declarations.builder.buildProperty
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
@@ -104,6 +105,7 @@ internal fun generateDestructuringBlock(
statements += buildProperty {
source = entrySource
this.session = session
origin = FirDeclarationOrigin.Source
returnTypeRef = entry.typeReference.toFirOrImplicitTypeRef()
this.name = name
initializer = buildComponentCall {
@@ -271,7 +271,7 @@ class RawFirBuilder(
val propertySource = property.toFirSourceElement()
val accessorVisibility = this?.visibility ?: property.visibility
return FirDefaultPropertyAccessor
.createGetterOrSetter(propertySource, baseSession, propertyTypeRef, accessorVisibility, isGetter)
.createGetterOrSetter(propertySource, baseSession, FirDeclarationOrigin.Source, propertyTypeRef, accessorVisibility, isGetter)
.also {
if (this != null) {
it.extractAnnotationsFrom(this)
@@ -283,6 +283,7 @@ class RawFirBuilder(
return buildPropertyAccessor {
this.source = source
session = baseSession
origin = FirDeclarationOrigin.Source
returnTypeRef = if (isGetter) {
returnTypeReference?.convertSafe() ?: propertyTypeRef
} else {
@@ -297,6 +298,7 @@ class RawFirBuilder(
valueParameters += buildDefaultSetterValueParameter {
this.source = source
session = baseSession
origin = FirDeclarationOrigin.Source
returnTypeRef = propertyTypeRef
symbol = FirVariableSymbol(NAME_FOR_DEFAULT_VALUE_PARAMETER)
}
@@ -318,6 +320,7 @@ class RawFirBuilder(
return buildValueParameter {
source = toFirSourceElement()
session = baseSession
origin = FirDeclarationOrigin.Source
returnTypeRef = when {
typeReference != null -> typeReference.toFirOrErrorType()
defaultTypeRef != null -> defaultTypeRef
@@ -354,6 +357,7 @@ class RawFirBuilder(
return buildProperty {
source = parameterSource
session = baseSession
origin = FirDeclarationOrigin.Source
returnTypeRef = type
receiverTypeRef = null
name = propertyName
@@ -369,8 +373,8 @@ class RawFirBuilder(
symbol = FirPropertySymbol(callableIdForName(propertyName))
isLocal = false
this.status = status
getter = FirDefaultPropertyGetter(propertySource, baseSession, type, visibility)
setter = if (isMutable) FirDefaultPropertySetter(propertySource, baseSession, type, visibility) else null
getter = FirDefaultPropertyGetter(propertySource, baseSession, FirDeclarationOrigin.Source, type, visibility)
setter = if (isMutable) FirDefaultPropertySetter(propertySource, baseSession, FirDeclarationOrigin.Source, type, visibility) else null
extractAnnotationsTo(this)
}
}
@@ -544,6 +548,7 @@ class RawFirBuilder(
return buildPrimaryConstructor {
source = constructorSource
session = baseSession
origin = FirDeclarationOrigin.Source
returnTypeRef = delegatedSelfTypeRef
this.status = status
symbol = FirConstructorSymbol(callableIdForClassConstructor())
@@ -559,6 +564,7 @@ class RawFirBuilder(
return buildFile {
source = file.toFirSourceElement()
session = baseSession
origin = FirDeclarationOrigin.Source
name = file.name
packageFqName = context.packageFqName
for (annotationEntry in file.annotationEntries) {
@@ -586,6 +592,7 @@ class RawFirBuilder(
return buildEnumEntry {
source = toFirSourceElement()
session = baseSession
origin = FirDeclarationOrigin.Source
returnTypeRef = delegatedEnumSelfTypeRef
name = nameAsSafeName
status = FirDeclarationStatusImpl(Visibilities.PUBLIC, Modality.FINAL).apply {
@@ -602,6 +609,7 @@ class RawFirBuilder(
buildAnonymousObject {
source = toFirSourceElement()
session = baseSession
origin = FirDeclarationOrigin.Source
classKind = ClassKind.ENUM_ENTRY
scopeProvider = this@RawFirBuilder.baseScopeProvider
symbol = FirAnonymousObjectSymbol()
@@ -669,6 +677,7 @@ class RawFirBuilder(
classBuilder.apply {
source = classOrObject.toFirSourceElement()
session = baseSession
origin = FirDeclarationOrigin.Source
name = classOrObject.nameAsSafeName
this.status = status
this.classKind = classKind
@@ -739,6 +748,7 @@ class RawFirBuilder(
buildAnonymousObject {
source = expression.toFirSourceElement()
session = baseSession
origin = FirDeclarationOrigin.Source
classKind = ClassKind.OBJECT
scopeProvider = baseScopeProvider
symbol = FirAnonymousObjectSymbol()
@@ -774,6 +784,7 @@ class RawFirBuilder(
buildTypeAlias {
source = typeAlias.toFirSourceElement()
session = baseSession
origin = FirDeclarationOrigin.Source
name = typeAlias.nameAsSafeName
status = FirDeclarationStatusImpl(typeAlias.visibility, Modality.FINAL).apply {
isExpect = typeAlias.hasExpectModifier()
@@ -832,6 +843,7 @@ class RawFirBuilder(
return functionBuilder.apply {
source = function.toFirSourceElement()
session = baseSession
origin = FirDeclarationOrigin.Source
returnTypeRef = returnType
context.firFunctionTargets += target
@@ -873,6 +885,7 @@ class RawFirBuilder(
return buildAnonymousFunction {
source = literalSource
session = baseSession
origin = FirDeclarationOrigin.Source
returnTypeRef = returnType
receiverTypeRef = receiverType
symbol = FirAnonymousFunctionSymbol()
@@ -886,6 +899,7 @@ class RawFirBuilder(
val multiParameter = buildValueParameter {
source = valueParameter.toFirSourceElement()
session = baseSession
origin = FirDeclarationOrigin.Source
returnTypeRef = buildImplicitTypeRef {
source = multiDeclaration.toFirSourceElement()
}
@@ -959,6 +973,7 @@ class RawFirBuilder(
return buildConstructor {
source = this@toFirConstructor.toFirSourceElement()
session = baseSession
origin = FirDeclarationOrigin.Source
returnTypeRef = delegatedSelfTypeRef
val explicitVisibility = visibility
status = FirDeclarationStatusImpl(explicitVisibility, Modality.FINAL).apply {
@@ -1020,6 +1035,7 @@ class RawFirBuilder(
return buildProperty {
source = propertySource
session = baseSession
origin = FirDeclarationOrigin.Source
returnTypeRef = propertyType
name = propertyName
this.isVar = isVar
@@ -1087,6 +1103,7 @@ class RawFirBuilder(
return buildAnonymousInitializer {
source = initializer.toFirSourceElement()
session = baseSession
origin = FirDeclarationOrigin.Source
body = if (stubMode) buildEmptyExpressionBlock() else initializer.body.toFirBlock()
}
}
@@ -1178,6 +1195,7 @@ class RawFirBuilder(
return buildTypeParameter {
source = parameter.toFirSourceElement()
session = baseSession
origin = FirDeclarationOrigin.Source
name = parameterName
symbol = FirTypeParameterSymbol()
variance = parameter.variance
@@ -1310,6 +1328,7 @@ class RawFirBuilder(
buildProperty {
source = ktSubjectExpression.toFirSourceElement()
session = baseSession
origin = FirDeclarationOrigin.Source
returnTypeRef = ktSubjectExpression.typeReference.toFirOrImplicitType()
receiverTypeRef = null
this.name = name
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir
import org.jetbrains.kotlin.contracts.description.InvocationKind
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
import org.jetbrains.kotlin.fir.declarations.builder.buildAnonymousFunction
@@ -62,6 +63,7 @@ fun FirAnonymousFunction.copy(
receiverTypeRef: FirTypeRef? = this.receiverTypeRef,
source: FirSourceElement? = this.source,
session: FirSession = this.session,
origin: FirDeclarationOrigin = this.origin,
returnTypeRef: FirTypeRef = this.returnTypeRef,
valueParameters: List<FirValueParameter> = this.valueParameters,
body: FirBlock? = this.body,
@@ -74,6 +76,7 @@ fun FirAnonymousFunction.copy(
return buildAnonymousFunction {
this.source = source
this.session = session
this.origin = origin
this.returnTypeRef = returnTypeRef
this.receiverTypeRef = receiverTypeRef
symbol = this@copy.symbol
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.addDeclarations
import org.jetbrains.kotlin.fir.declarations.builder.*
@@ -84,6 +85,7 @@ fun deserializeClassToSymbol(
)
classBuilder.apply {
this.session = session
origin = FirDeclarationOrigin.Library
name = classId.shortClassName
this.status = status
classKind = ProtoEnumFlags.classKind(kind)
@@ -132,6 +134,7 @@ fun deserializeClassToSymbol(
val enumType = ConeClassLikeTypeImpl(symbol.toLookupTag(), emptyArray(), false)
val property = buildEnumEntry {
this.session = session
origin = FirDeclarationOrigin.Library
returnTypeRef = buildResolvedTypeRef { type = enumType }
name = enumEntryName
this.symbol = FirVariableSymbol(CallableId(classId, enumEntryName))
@@ -200,6 +203,7 @@ private fun AbstractFirRegularClassBuilder.addCloneForArrayIfNeeded(classId: Cla
}
declarations += buildSimpleFunction {
session = this@addCloneForArrayIfNeeded.session
origin = FirDeclarationOrigin.Library
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
returnTypeRef = buildResolvedTypeRef {
val typeArguments = if (classId.shortClassName == ARRAY) {
@@ -151,6 +151,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
val local = c.childContext(proto.typeParameterList)
return buildTypeAlias {
session = c.session
origin = FirDeclarationOrigin.Library
this.name = name
status = FirDeclarationStatusImpl(ProtoEnumFlags.visibility(Flags.VISIBILITY.get(flags)), Modality.FINAL).apply {
isExpect = Flags.IS_EXPECT_CLASS.get(flags)
@@ -176,6 +177,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
val isVar = Flags.IS_VAR.get(flags)
return buildProperty {
session = c.session
origin = FirDeclarationOrigin.Library
returnTypeRef = proto.returnType(c.typeTable).toTypeRef(local)
receiverTypeRef = proto.receiverType(c.typeTable)?.toTypeRef(local)
name = callableName
@@ -196,9 +198,9 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
typeParameters += local.typeDeserializer.ownTypeParameters.map { it.fir }
annotations += c.annotationDeserializer.loadPropertyAnnotations(proto, local.nameResolver)
getter = FirDefaultPropertyGetter(null, c.session, returnTypeRef, ProtoEnumFlags.visibility(Flags.VISIBILITY.get(getterFlags)))
getter = FirDefaultPropertyGetter(null, c.session, FirDeclarationOrigin.Library, returnTypeRef, ProtoEnumFlags.visibility(Flags.VISIBILITY.get(getterFlags)))
setter = if (isVar) {
FirDefaultPropertySetter(null, c.session, returnTypeRef, ProtoEnumFlags.visibility(Flags.VISIBILITY.get(setterFlags)))
FirDefaultPropertySetter(null, c.session, FirDeclarationOrigin.Library, returnTypeRef, ProtoEnumFlags.visibility(Flags.VISIBILITY.get(setterFlags)))
} else null
this.containerSource = c.containerSource
this.initializer = if (Flags.HAS_CONSTANT.get(flags)) {
@@ -227,6 +229,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
val simpleFunction = buildSimpleFunction {
session = c.session
origin = FirDeclarationOrigin.Library
returnTypeRef = proto.returnType(local.typeTable).toTypeRef(local)
receiverTypeRef = proto.receiverType(local.typeTable)?.toTypeRef(local)
name = callableName
@@ -283,6 +286,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
FirConstructorBuilder()
}.apply {
session = c.session
origin = FirDeclarationOrigin.Library
returnTypeRef = delegatedSelfType
status = FirDeclarationStatusImpl(ProtoEnumFlags.visibility(Flags.VISIBILITY.get(flags)), Modality.FINAL).apply {
isExpect = Flags.IS_EXPECT_FUNCTION.get(flags)
@@ -317,6 +321,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
val name = c.nameResolver.getName(proto.name)
buildValueParameter {
session = c.session
origin = FirDeclarationOrigin.Library
returnTypeRef = proto.type(c.typeTable).toTypeRef(c)
this.name = name
symbol = FirVariableSymbol(name)
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.deserialization
import org.jetbrains.kotlin.builtins.functions.FunctionClassDescriptor
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRefsOwner
import org.jetbrains.kotlin.fir.declarations.FirTypeParametersOwner
import org.jetbrains.kotlin.fir.declarations.addDefaultBoundIfNecessary
@@ -63,6 +64,7 @@ class FirTypeDeserializer(
}
builders += FirTypeParameterBuilder().apply {
session = this@FirTypeDeserializer.session
origin = FirDeclarationOrigin.Library
this.name = name
this.symbol = symbol
variance = proto.variance.convertVariance()
@@ -124,6 +124,7 @@ class FirSamResolverImpl(
FirTypeParameterBuilder().apply {
source = declaredTypeParameter.source
session = firSession
origin = FirDeclarationOrigin.SamConstructor
name = declaredTypeParameter.name
this.symbol = FirTypeParameterSymbol()
variance = Variance.INVARIANT
@@ -155,6 +156,7 @@ class FirSamResolverImpl(
return buildSimpleFunction {
session = firSession
name = classId.shortClassName
origin = FirDeclarationOrigin.SamConstructor
status = FirDeclarationStatusImpl(firRegularClass.visibility, Modality.FINAL).apply {
isExpect = firRegularClass.isExpect
isActual = firRegularClass.isActual
@@ -182,6 +184,7 @@ class FirSamResolverImpl(
valueParameters += buildValueParameter {
session = firSession
origin = FirDeclarationOrigin.SamConstructor
returnTypeRef = buildResolvedTypeRef {
source = firRegularClass.source
type = substitutedFunctionType
@@ -235,6 +235,7 @@ private fun prepareSubstitutingScopeForTypeAliasConstructors(
buildConstructor {
source = this@factory.source
this.session = session
origin = FirDeclarationOrigin.FakeOverride
returnTypeRef = this@factory.returnTypeRef.withReplacedConeType(newReturnType)
receiverTypeRef = this@factory.receiverTypeRef
status = this@factory.status
@@ -248,6 +249,7 @@ private fun prepareSubstitutingScopeForTypeAliasConstructors(
buildValueParameter {
source = valueParameter.source
this.session = session
origin = FirDeclarationOrigin.FakeOverride
returnTypeRef = valueParameter.returnTypeRef.withReplacedConeType(newParameterType)
name = valueParameter.name
symbol = FirVariableSymbol(valueParameter.symbol.callableId)
@@ -157,6 +157,7 @@ class FirBuiltinSymbolProvider(val session: FirSession, val kotlinScopeProvider:
FirRegularClassSymbol(this).apply symbol@{
buildClassImpl klass@{
session = this@FirBuiltinSymbolProvider.session
origin = FirDeclarationOrigin.Synthetic
name = relativeClassName.shortName()
status = FirDeclarationStatusImpl(Visibilities.PUBLIC, Modality.ABSTRACT).apply {
isExpect = false
@@ -174,6 +175,7 @@ class FirBuiltinSymbolProvider(val session: FirSession, val kotlinScopeProvider:
(1..arity).map {
buildTypeParameter {
session = this@FirBuiltinSymbolProvider.session
origin = FirDeclarationOrigin.Synthetic
name = Name.identifier("P$it")
symbol = FirTypeParameterSymbol()
variance = Variance.IN_VARIANCE
@@ -185,6 +187,7 @@ class FirBuiltinSymbolProvider(val session: FirSession, val kotlinScopeProvider:
typeParameters.add(
buildTypeParameter {
session = this@FirBuiltinSymbolProvider.session
origin = FirDeclarationOrigin.Synthetic
name = Name.identifier("R")
symbol = FirTypeParameterSymbol()
variance = Variance.OUT_VARIANCE
@@ -260,6 +263,7 @@ class FirBuiltinSymbolProvider(val session: FirSession, val kotlinScopeProvider:
addDeclaration(
buildSimpleFunction {
session = this@FirBuiltinSymbolProvider.session
origin = FirDeclarationOrigin.Synthetic
returnTypeRef = typeArguments.last()
this.name = name
status = functionStatus
@@ -273,6 +277,8 @@ class FirBuiltinSymbolProvider(val session: FirSession, val kotlinScopeProvider:
val parameterName = Name.identifier("p${index + 1}")
buildValueParameter {
session = this@FirBuiltinSymbolProvider.session
origin = FirDeclarationOrigin.Synthetic
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
returnTypeRef = typeArgument
this.name = parameterName
symbol = FirVariableSymbol(parameterName)
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.builder.buildClassImpl
import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction
@@ -37,6 +38,7 @@ class FirClonableSymbolProvider(session: FirSession, scopeProvider: FirScopeProv
private val klass = buildClassImpl {
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
origin = FirDeclarationOrigin.Library
this.session = session
status = FirDeclarationStatusImpl(
Visibilities.PUBLIC,
@@ -46,6 +48,7 @@ class FirClonableSymbolProvider(session: FirSession, scopeProvider: FirScopeProv
declarations += buildSimpleFunction {
this.session = session
resolvePhase = FirResolvePhase.ANALYZED_DEPENDENCIES
origin = FirDeclarationOrigin.Library
returnTypeRef = buildResolvedTypeRef {
type = session.builtinTypes.anyType.type
}
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.fir.resolve.inference
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.builder.buildValueParameter
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
@@ -159,6 +160,7 @@ class FirCallCompleter(
val itType = parameters.single()
buildValueParameter {
session = this@FirCallCompleter.session
origin = FirDeclarationOrigin.Source
returnTypeRef = buildResolvedTypeRef { type = itType.approximateLambdaInputType() }
this.name = name
symbol = FirVariableSymbol(name)
@@ -166,6 +166,7 @@ class FirSyntheticCallGenerator(
val typeParameter =
buildTypeParameter {
session = this@FirSyntheticCallGenerator.session
origin = FirDeclarationOrigin.Library
name = Name.identifier("K")
symbol = typeParameterSymbol
variance = Variance.INVARIANT
@@ -230,6 +231,7 @@ class FirSyntheticCallGenerator(
): FirSimpleFunctionBuilder {
return FirSimpleFunctionBuilder().apply {
session = this@FirSyntheticCallGenerator.session
origin = FirDeclarationOrigin.Synthetic
this.symbol = symbol
this.name = name
status = FirDeclarationStatusImpl(Visibilities.PUBLIC, Modality.FINAL).apply {
@@ -254,6 +256,7 @@ class FirSyntheticCallGenerator(
val name = Name.identifier(nameAsString)
return buildValueParameter {
session = this@FirSyntheticCallGenerator.session
origin = FirDeclarationOrigin.Library
this.name = name
returnTypeRef = this@toValueParameter
isCrossinline = false
@@ -566,6 +566,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor
val name = Name.identifier("it")
buildValueParameter {
session = this@FirDeclarationsResolveTransformer.session
origin = FirDeclarationOrigin.Source
returnTypeRef = buildResolvedTypeRef { type = singleParameterType }
this.name = name
symbol = FirVariableSymbol(name)
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.fir.scopes.impl
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirFunction
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
@@ -96,6 +97,7 @@ abstract class AbstractFirUseSiteMemberScope(
FirSimpleFunctionBuilder().apply {
source = firSimpleFunction.source
session = firSimpleFunction.session
origin = FirDeclarationOrigin.FakeOverride
returnTypeRef = firSimpleFunction.returnTypeRef
receiverTypeRef = firSimpleFunction.receiverTypeRef
name = firSimpleFunction.name
@@ -107,6 +109,7 @@ abstract class AbstractFirUseSiteMemberScope(
FirValueParameterBuilder().apply {
source = parameter.source
session = parameter.session
origin = FirDeclarationOrigin.FakeOverride
returnTypeRef = parameter.returnTypeRef
name = parameter.name
symbol = FirVariableSymbol(parameter.symbol.callableId)
@@ -168,6 +168,7 @@ class FirClassSubstitutionScope(
FirTypeParameterBuilder().apply {
source = typeParameter.source
session = typeParameter.session
origin = FirDeclarationOrigin.FakeOverride
name = typeParameter.name
symbol = FirTypeParameterSymbol()
variance = typeParameter.variance
@@ -285,6 +286,7 @@ class FirClassSubstitutionScope(
return buildSimpleFunction {
source = baseFunction.source
this.session = session
origin = FirDeclarationOrigin.FakeOverride
returnTypeRef = baseFunction.returnTypeRef.withReplacedReturnType(newReturnType)
receiverTypeRef = baseFunction.receiverTypeRef?.withReplacedConeType(newReceiverType)
name = baseFunction.name
@@ -298,6 +300,7 @@ class FirClassSubstitutionScope(
buildValueParameter {
source = valueParameter.source
this.session = session
origin = FirDeclarationOrigin.FakeOverride
returnTypeRef = valueParameter.returnTypeRef.withReplacedConeType(newType)
name = valueParameter.name
symbol = FirVariableSymbol(valueParameter.symbol.callableId)
@@ -355,6 +358,7 @@ class FirClassSubstitutionScope(
buildProperty {
source = baseProperty.source
this.session = session
origin = FirDeclarationOrigin.FakeOverride
returnTypeRef = baseProperty.returnTypeRef.withReplacedReturnType(newReturnType)
receiverTypeRef = baseProperty.receiverTypeRef?.withReplacedConeType(newReceiverType)
name = baseProperty.name
@@ -384,6 +388,7 @@ class FirClassSubstitutionScope(
buildField {
source = baseField.source
this.session = session
origin = FirDeclarationOrigin.FakeOverride
returnTypeRef = baseField.returnTypeRef.withReplacedConeType(newReturnType)
name = baseField.name
this.symbol = symbol
@@ -428,6 +433,7 @@ class FirClassSubstitutionScope(
return buildConstructor {
source = baseConstructor.source
this.session = session
origin = FirDeclarationOrigin.FakeOverride
returnTypeRef = baseConstructor.returnTypeRef.withReplacedReturnType(newReturnType)
receiverTypeRef = baseConstructor.receiverTypeRef?.withReplacedConeType(newReceiverType)
status = baseConstructor.status
@@ -440,6 +446,7 @@ class FirClassSubstitutionScope(
buildValueParameter {
source = valueParameter.source
this.session = session
origin = FirDeclarationOrigin.FakeOverride
returnTypeRef = valueParameter.returnTypeRef.withReplacedConeType(newType)
name = valueParameter.name
symbol = FirVariableSymbol(valueParameter.symbol.callableId)
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.builder.AbstractFirRegularClassBuilder
import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction
@@ -31,6 +32,7 @@ private val VALUE = Name.identifier("value")
fun AbstractFirRegularClassBuilder.generateValuesFunction(session: FirSession, packageFqName: FqName, classFqName: FqName) {
declarations += buildSimpleFunction {
source = this@generateValuesFunction.source
origin = FirDeclarationOrigin.Source
this.session = session
returnTypeRef = buildResolvedTypeRef {
source = this@generateValuesFunction.source
@@ -55,6 +57,7 @@ fun AbstractFirRegularClassBuilder.generateValuesFunction(session: FirSession, p
fun AbstractFirRegularClassBuilder.generateValueOfFunction(session: FirSession, packageFqName: FqName, classFqName: FqName) {
declarations += buildSimpleFunction {
source = this@generateValueOfFunction.source
origin = FirDeclarationOrigin.Source
this.session = session
returnTypeRef = buildResolvedTypeRef {
source = this@generateValueOfFunction.source
@@ -71,6 +74,7 @@ fun AbstractFirRegularClassBuilder.generateValueOfFunction(session: FirSession,
symbol = FirNamedFunctionSymbol(CallableId(packageFqName, classFqName, ENUM_VALUE_OF))
valueParameters += buildValueParameter vp@{
source = this@generateValueOfFunction.source
origin = FirDeclarationOrigin.Source
this@vp.session = session
returnTypeRef = FirImplicitStringTypeRef(source)
name = VALUE
@@ -107,6 +107,7 @@ class FirDefaultPropertySetter(
buildDefaultSetterValueParameter builder@{
this@builder.source = source
this@builder.session = session
this@builder.origin = origin
this@builder.returnTypeRef = propertyTypeRef
this@builder.symbol = FirVariableSymbol(CallableId(FqName.ROOT, Name.special("<default-setter-parameter>")))
}