FIR: Unify all references to FIR nodes from non-parents
This commit is contained in:
+12
@@ -269,6 +269,18 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
|
||||
defaultFalse("isNullableLHSForCallableReference")
|
||||
}
|
||||
|
||||
// builder(safeCallExpression) {
|
||||
// useTypes(safeCallCheckedSubjectType)
|
||||
// }
|
||||
//
|
||||
// builder(checkedSafeCallSubject) {
|
||||
// useTypes(expressionType)
|
||||
// }
|
||||
//
|
||||
// builder(whenSubjectExpression) {
|
||||
// useTypes(whenExpressionType)
|
||||
// }
|
||||
|
||||
val elementsWithDefaultTypeRef = listOf(
|
||||
thisReceiverExpression,
|
||||
callableReferenceAccess,
|
||||
|
||||
+10
-1
@@ -286,9 +286,10 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
|
||||
|
||||
impl(whenSubjectExpression) {
|
||||
default("typeRef") {
|
||||
value = "whenSubject.whenExpression.subject!!.typeRef"
|
||||
value = "whenRef.value.subject!!.typeRef"
|
||||
withGetter = true
|
||||
}
|
||||
useTypes(whenExpressionType)
|
||||
}
|
||||
|
||||
impl(wrappedDelegateExpression) {
|
||||
@@ -443,6 +444,14 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
|
||||
}
|
||||
}
|
||||
|
||||
impl(safeCallExpression) {
|
||||
useTypes(safeCallCheckedSubjectType)
|
||||
}
|
||||
|
||||
impl(checkedSafeCallSubject) {
|
||||
useTypes(expressionType)
|
||||
}
|
||||
|
||||
noImpl(userTypeRef)
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -441,13 +441,13 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
safeCallExpression.configure {
|
||||
+field("receiver", expression).withTransform()
|
||||
// Special node that might be used as a reference to receiver of a safe call after null check
|
||||
+field("checkedSubject", safeCallCheckedSubjectReferenceType)
|
||||
+field("checkedSubjectRef", safeCallCheckedSubjectReferenceType)
|
||||
// One that uses checkedReceiver as a receiver
|
||||
+field("regularQualifiedAccess", qualifiedAccess, withReplace = true).withTransform()
|
||||
}
|
||||
|
||||
checkedSafeCallSubject.configure {
|
||||
+field("originalReceiverReference", safeCallReceiverReferenceType)
|
||||
+field("originalReceiverRef", safeCallOriginalReceiverReferenceType)
|
||||
}
|
||||
|
||||
callableReferenceAccess.configure {
|
||||
@@ -498,7 +498,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
}
|
||||
|
||||
whenSubjectExpression.configure {
|
||||
+field("whenSubject", whenSubjectType)
|
||||
+field("whenRef", whenRefType)
|
||||
}
|
||||
|
||||
wrappedExpression.configure {
|
||||
|
||||
+9
-3
@@ -37,9 +37,15 @@ val classIdType = type(ClassId::class)
|
||||
val annotationUseSiteTargetType = type(AnnotationUseSiteTarget::class)
|
||||
val operationKindType = type("fir.expressions", "LogicOperationKind")
|
||||
val coneKotlinTypeType = type(ConeKotlinType::class)
|
||||
val whenSubjectType = type("fir", "FirWhenSubject")
|
||||
val safeCallReceiverReferenceType = type("fir", "FirSafeCallOriginalReceiverReference")
|
||||
val safeCallCheckedSubjectReferenceType = type("fir", "FirSafeCallCheckedSubjectReference")
|
||||
|
||||
val whenExpressionType = generatedType("expressions", "FirWhenExpression")
|
||||
val expressionType = generatedType("expressions", "FirExpression")
|
||||
val safeCallCheckedSubjectType = generatedType("expressions", "FirCheckedSafeCallSubject")
|
||||
|
||||
val whenRefType = generatedType("", "FirExpressionRef<FirWhenExpression>")
|
||||
val safeCallOriginalReceiverReferenceType = generatedType("", "FirExpressionRef<FirExpression>")
|
||||
val safeCallCheckedSubjectReferenceType = generatedType("", "FirExpressionRef<FirCheckedSafeCallSubject>")
|
||||
|
||||
val firSessionType = type("fir", "FirSession")
|
||||
val emptyCfgReferenceType = generatedType("references.impl", "FirEmptyControlFlowGraphReference")
|
||||
val noReceiverExpressionType = generatedType("expressions.impl", "FirNoReceiverExpression")
|
||||
|
||||
Reference in New Issue
Block a user