FIR: provide 'replaceSource' only for FirQualifiedAccess inheritors

This commit is contained in:
Mikhail Glukhikh
2021-03-12 13:00:42 +03:00
parent 4d65b0ef5a
commit c641fa739b
263 changed files with 181 additions and 835 deletions
@@ -37,7 +37,7 @@ import org.jetbrains.kotlin.serialization.deserialization.descriptors.Deserializ
object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuilder) {
fun configureFields() = configure {
AbstractFirTreeBuilder.baseFirElement.configure {
+field("source", sourceElementType, nullable = true, withReplace = true)
+field("source", sourceElementType, nullable = true)
}
annotationContainer.configure {
@@ -195,6 +195,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
qualifiedAccess.configure {
+typeArguments.withTransform()
+receivers
+field("source", sourceElementType, nullable = true, withReplace = true)
}
constExpression.configure {
@@ -203,8 +204,13 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
+field("value", "T", null)
}
qualifiedAccessExpression.configure {
+field("source", sourceElementType, nullable = true, withReplace = true)
}
functionCall.configure {
+field("calleeReference", namedReference)
+field("source", sourceElementType, nullable = true, withReplace = true)
}
comparisonExpression.configure {
@@ -451,6 +457,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
+field("originalExpression", qualifiedAccessExpression)
+field("typesFromSmartCast", "Collection<ConeKotlinType>", null, customType = coneKotlinTypeType)
+field("originalType", typeRef)
+field("source", sourceElementType, nullable = true, withReplace = true)
}
safeCallExpression.configure {
@@ -468,6 +475,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
callableReferenceAccess.configure {
+field("calleeReference", namedReference, withReplace = true).withTransform()
+booleanField("hasQuestionMarkAtLHS", withReplace = true)
+field("source", sourceElementType, nullable = true, withReplace = true)
}
getClassCall.configure {
@@ -583,6 +591,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
thisReceiverExpression.configure {
+field("calleeReference", thisReference)
+field("source", sourceElementType, nullable = true, withReplace = true)
}
whenExpression.configure {
@@ -95,7 +95,8 @@ fun SmartPrinter.printElement(element: Element) {
}
allFields.filter { it.withReplace }.forEach {
it.replaceDeclaration(overridenFields[it, it], forceNullable = it.useNullableForReplace)
val override = overridenFields[it, it] && !(it.name == "source" && fullQualifiedName.endsWith("FirQualifiedAccess"))
it.replaceDeclaration(override, forceNullable = it.useNullableForReplace)
for (overridenType in it.overridenTypes) {
it.replaceDeclaration(true, overridenType)
}