[FIR] introduce FirValueParameter.containingFunctionSymbol

^KT-55034 fixed
This commit is contained in:
Ilya Kirillov
2022-07-20 16:01:48 +02:00
parent c8e3103af9
commit 7781ad67d4
39 changed files with 175 additions and 76 deletions
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.FirModuleData
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
import org.jetbrains.kotlin.fir.types.ConeSimpleKotlinType
import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -49,6 +50,7 @@ abstract class FirValueParameter : FirVariable(), FirControlFlowGraphOwner {
abstract override val controlFlowGraphReference: FirControlFlowGraphReference?
abstract override val symbol: FirValueParameterSymbol
abstract val defaultValue: FirExpression?
abstract val containingFunctionSymbol: FirFunctionSymbol<*>
abstract val isCrossinline: Boolean
abstract val isNoinline: Boolean
abstract val isVararg: Boolean
@@ -29,6 +29,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusIm
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
import org.jetbrains.kotlin.fir.types.ConeSimpleKotlinType
import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -64,6 +65,7 @@ class FirDefaultSetterValueParameterBuilder : FirAnnotationContainerBuilder {
override val annotations: MutableList<FirAnnotation> = mutableListOf()
lateinit var symbol: FirValueParameterSymbol
var defaultValue: FirExpression? = null
lateinit var containingFunctionSymbol: FirFunctionSymbol<*>
var isCrossinline: Boolean = false
var isNoinline: Boolean = false
var isVararg: Boolean = false
@@ -91,6 +93,7 @@ class FirDefaultSetterValueParameterBuilder : FirAnnotationContainerBuilder {
annotations,
symbol,
defaultValue,
containingFunctionSymbol,
isCrossinline,
isNoinline,
isVararg,
@@ -29,6 +29,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
import org.jetbrains.kotlin.fir.types.ConeSimpleKotlinType
import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -58,6 +59,7 @@ open class FirValueParameterBuilder : FirAnnotationContainerBuilder {
override val annotations: MutableList<FirAnnotation> = mutableListOf()
open lateinit var symbol: FirValueParameterSymbol
open var defaultValue: FirExpression? = null
open lateinit var containingFunctionSymbol: FirFunctionSymbol<*>
open var isCrossinline: Boolean by kotlin.properties.Delegates.notNull<Boolean>()
open var isNoinline: Boolean by kotlin.properties.Delegates.notNull<Boolean>()
open var isVararg: Boolean by kotlin.properties.Delegates.notNull<Boolean>()
@@ -79,6 +81,7 @@ open class FirValueParameterBuilder : FirAnnotationContainerBuilder {
annotations,
symbol,
defaultValue,
containingFunctionSymbol,
isCrossinline,
isNoinline,
isVararg,
@@ -116,6 +119,7 @@ inline fun buildValueParameterCopy(original: FirValueParameter, init: FirValuePa
copyBuilder.annotations.addAll(original.annotations)
copyBuilder.symbol = original.symbol
copyBuilder.defaultValue = original.defaultValue
copyBuilder.containingFunctionSymbol = original.containingFunctionSymbol
copyBuilder.isCrossinline = original.isCrossinline
copyBuilder.isNoinline = original.isNoinline
copyBuilder.isVararg = original.isVararg
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusIm
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
import org.jetbrains.kotlin.fir.types.ConeSimpleKotlinType
import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -59,6 +60,7 @@ internal class FirDefaultSetterValueParameter(
override val annotations: MutableList<FirAnnotation>,
override val symbol: FirValueParameterSymbol,
override var defaultValue: FirExpression?,
override val containingFunctionSymbol: FirFunctionSymbol<*>,
override val isCrossinline: Boolean,
override val isNoinline: Boolean,
override val isVararg: Boolean,
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusIm
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
import org.jetbrains.kotlin.fir.types.ConeSimpleKotlinType
import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -53,6 +54,7 @@ internal class FirValueParameterImpl(
override val annotations: MutableList<FirAnnotation>,
override val symbol: FirValueParameterSymbol,
override var defaultValue: FirExpression?,
override val containingFunctionSymbol: FirFunctionSymbol<*>,
override val isCrossinline: Boolean,
override val isNoinline: Boolean,
override val isVararg: Boolean,
@@ -91,6 +91,7 @@ fun FirRegularClassBuilder.generateValueOfFunction(
symbol = FirNamedFunctionSymbol(CallableId(packageFqName, classFqName, ENUM_VALUE_OF))
valueParameters += buildValueParameter vp@{
source = sourceElement
containingFunctionSymbol = this@buildSimpleFunction.symbol
origin = FirDeclarationOrigin.Source
this.moduleData = moduleData
returnTypeRef = buildResolvedTypeRef {
@@ -25,7 +25,6 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
import org.jetbrains.kotlin.fir.types.ConeSimpleKotlinType
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.impl.FirImplicitUnitTypeRef
import org.jetbrains.kotlin.name.SpecialNames
@OptIn(FirImplementationDetail::class)
abstract class FirDefaultPropertyAccessor(
@@ -127,7 +126,7 @@ class FirDefaultPropertySetter(
propertySymbol: FirPropertySymbol,
modality: Modality = Modality.FINAL,
effectiveVisibility: EffectiveVisibility? = null,
symbol: FirPropertyAccessorSymbol = FirPropertyAccessorSymbol(),
propertyAccessorSymbol: FirPropertyAccessorSymbol = FirPropertyAccessorSymbol(),
parameterAnnotations: List<FirAnnotation> = emptyList(),
) : FirDefaultPropertyAccessor(
source,
@@ -137,6 +136,7 @@ class FirDefaultPropertySetter(
valueParameters = mutableListOf(
buildDefaultSetterValueParameter builder@{
this@builder.source = source?.fakeElement(KtFakeSourceElementKind.DefaultAccessor)
this@builder.containingFunctionSymbol = propertyAccessorSymbol
this@builder.moduleData = moduleData
this@builder.origin = origin
this@builder.returnTypeRef = propertyTypeRef
@@ -149,5 +149,5 @@ class FirDefaultPropertySetter(
visibility = visibility,
modality = modality,
effectiveVisibility = effectiveVisibility,
symbol = symbol
symbol = propertyAccessorSymbol
)
@@ -394,6 +394,9 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
valueParameter.configure {
+symbol("FirValueParameterSymbol")
+field("defaultValue", expression, nullable = true)
+field("containingFunctionSymbol", functionSymbolType, "*").apply {
withBindThis = false
}
generateBooleanFields("crossinline", "noinline", "vararg")
}
@@ -66,6 +66,7 @@ val propertyBodyResolveStateType = type("fir.declarations", "FirPropertyBodyReso
val stubReferenceType = generatedType("references.impl", "FirStubReference", firType = true)
val firBasedSymbolType = type("fir.symbols", "FirBasedSymbol")
val functionSymbolType = type("fir.symbols.impl", "FirFunctionSymbol")
val backingFieldSymbolType = type("fir.symbols.impl", "FirBackingFieldSymbol")
val delegateFieldSymbolType = type("fir.symbols.impl", "FirDelegateFieldSymbol")
val classSymbolType = type("fir.symbols.impl", "FirClassSymbol")
@@ -27,9 +27,9 @@ fun Builder.collectImports(): List<String> {
ImportKind.Builder,
) + implementation.fullQualifiedName!! + usedTypes.mapNotNull { it.fullQualifiedName } + builderDsl + "kotlin.contracts.*"
is IntermediateBuilder -> {
val fqns = parents + allFields.mapNotNull { it.fullQualifiedName } + allFields.flatMap {
val fqns = parents + usedTypes.mapNotNull { it.fullQualifiedName } + allFields.mapNotNull { it.fullQualifiedName } + allFields.flatMap {
it.arguments.mapNotNull { it.fullQualifiedName }
} + (materializedElement?.fullQualifiedName ?: throw IllegalStateException(type)) + builderDsl
} + (materializedElement?.fullQualifiedName ?: throw IllegalStateException(type)) + builderDsl
fqns.filterRedundantImports(packageName, ImportKind.Builder)
}
}.sorted()