FIR tree generator: merge fields from parents properly
This commit is contained in:
-8
@@ -204,13 +204,8 @@ 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 {
|
||||
@@ -457,7 +452,6 @@ 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 {
|
||||
@@ -475,7 +469,6 @@ 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 {
|
||||
@@ -591,7 +584,6 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
|
||||
thisReceiverExpression.configure {
|
||||
+field("calleeReference", thisReference)
|
||||
+field("source", sourceElementType, nullable = true, withReplace = true)
|
||||
}
|
||||
|
||||
whenExpression.configure {
|
||||
|
||||
+17
-3
@@ -104,7 +104,7 @@ class Element(val name: String, kind: Kind) : AbstractElement {
|
||||
}
|
||||
|
||||
val parentFields: List<Field> by lazy {
|
||||
val result = LinkedHashSet<Field>()
|
||||
val result = LinkedHashMap<String, Field>()
|
||||
parents.forEach { parent ->
|
||||
val fields = parent.allFields.map { field ->
|
||||
val copy = (field as? SimpleField)?.let { simpleField ->
|
||||
@@ -119,9 +119,23 @@ class Element(val name: String, kind: Kind) : AbstractElement {
|
||||
fromParent = true
|
||||
}
|
||||
}
|
||||
result.addAll(fields)
|
||||
fields.forEach {
|
||||
result.merge(it.name, it) { previousField, thisField ->
|
||||
val resultField = previousField.copy()
|
||||
if (thisField.withReplace) {
|
||||
resultField.withReplace = true
|
||||
}
|
||||
if (thisField.useNullableForReplace) {
|
||||
resultField.useNullableForReplace = true
|
||||
}
|
||||
if (thisField.isMutable) {
|
||||
resultField.isMutable = true
|
||||
}
|
||||
resultField
|
||||
}
|
||||
}
|
||||
}
|
||||
result.toList()
|
||||
result.values.toList()
|
||||
}
|
||||
|
||||
override val allFirFields: List<Field> by lazy {
|
||||
|
||||
Reference in New Issue
Block a user