[FIR] Introduce FirDiagnostic in FIR instead of errorReason
This commit is contained in:
+7
-4
@@ -59,7 +59,10 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
|
||||
val anonymousFunction = element("AnonymousFunction", Declaration, function, expression)
|
||||
val anonymousObject = element("AnonymousObject", Declaration, klass, expression)
|
||||
|
||||
val diagnosticHolder = element("DiagnosticHolder", Diagnostics)
|
||||
|
||||
val loop = element("Loop", Expression, statement, targetElement, annotationContainer)
|
||||
val errorLoop = element("ErrorLoop", Expression, loop, diagnosticHolder)
|
||||
val doWhileLoop = element("DoWhileLoop", Expression, loop)
|
||||
val whileLoop = element("WhileLoop", Expression, loop)
|
||||
|
||||
@@ -88,8 +91,8 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
|
||||
val arrayOfCall = element("ArrayOfCall", Expression, expression, call)
|
||||
val arraySetCall = element("ArraySetCall", Expression, qualifiedAccess, call)
|
||||
val classReferenceExpression = element("ClassReferenceExpression", Expression, expression)
|
||||
val errorExpression = element("ErrorExpression", Expression, expression)
|
||||
val errorFunction = element("ErrorFunction", Declaration, function)
|
||||
val errorExpression = element("ErrorExpression", Expression, expression, diagnosticHolder)
|
||||
val errorFunction = element("ErrorFunction", Declaration, function, diagnosticHolder)
|
||||
val qualifiedAccessExpression = element("QualifiedAccessExpression", Expression, expression, qualifiedAccess)
|
||||
val functionCall = element("FunctionCall", Expression, qualifiedAccessExpression, call)
|
||||
val componentCall = element("ComponentCall", Expression, functionCall)
|
||||
@@ -113,7 +116,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
|
||||
val wrappedDelegateExpression = element("WrappedDelegateExpression", Expression, wrappedExpression)
|
||||
|
||||
val namedReference = element("NamedReference", Reference, reference)
|
||||
val errorNamedReference = element("ErrorNamedReference", Reference, namedReference)
|
||||
val errorNamedReference = element("ErrorNamedReference", Reference, namedReference, diagnosticHolder)
|
||||
val superReference = element("SuperReference", Reference, reference)
|
||||
val thisReference = element("ThisReference", Reference, reference)
|
||||
val controlFlowGraphReference = element("ControlFlowGraphReference", Reference, reference)
|
||||
@@ -125,7 +128,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
|
||||
val resolvedCallableReference = element("ResolvedCallableReference", Reference, resolvedNamedReference)
|
||||
|
||||
val resolvedTypeRef = element("ResolvedTypeRef", TypeRef, typeRef)
|
||||
val errorTypeRef = element("ErrorTypeRef", TypeRef, resolvedTypeRef)
|
||||
val errorTypeRef = element("ErrorTypeRef", TypeRef, resolvedTypeRef, diagnosticHolder)
|
||||
val delegatedTypeRef = element("DelegatedTypeRef", TypeRef, typeRef)
|
||||
val typeRefWithNullability = element("TypeRefWithNullability", TypeRef, typeRef)
|
||||
val userTypeRef = element("UserTypeRef", TypeRef, typeRefWithNullability)
|
||||
|
||||
+5
-7
@@ -224,11 +224,9 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
|
||||
noSource()
|
||||
}
|
||||
|
||||
impl(errorExpression)
|
||||
|
||||
impl(loop, "FirErrorLoop") {
|
||||
impl(errorLoop) {
|
||||
default("block", "FirEmptyExpressionBlock()")
|
||||
default("condition", "FirErrorExpressionImpl(source, \"error loop\")")
|
||||
default("condition", "FirErrorExpressionImpl(source, diagnostic)")
|
||||
defaultNull("label")
|
||||
useTypes(emptyExpressionBlock)
|
||||
}
|
||||
@@ -496,13 +494,13 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
|
||||
impl(resolvedTypeRef)
|
||||
|
||||
val errorTypeRefImpl = impl(errorTypeRef) {
|
||||
default("type", "ConeClassErrorType(reason)")
|
||||
default("type", "ConeClassErrorType(diagnostic.reason)")
|
||||
useTypes(coneClassErrorTypeType)
|
||||
}
|
||||
|
||||
impl(errorFunction) {
|
||||
defaultNull("receiverTypeRef", "body", withGetter = true)
|
||||
default("returnTypeRef", "FirErrorTypeRefImpl(null, reason)")
|
||||
default("returnTypeRef", "FirErrorTypeRefImpl(null, diagnostic)")
|
||||
useTypes(errorTypeRefImpl)
|
||||
}
|
||||
|
||||
@@ -524,7 +522,7 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
|
||||
}
|
||||
|
||||
impl(errorNamedReference) {
|
||||
default("name", "Name.special(\"<\$errorReason>\")")
|
||||
default("name", "Name.special(\"<\$diagnostic.reason>\")")
|
||||
defaultNull("candidateSymbol", withGetter = true)
|
||||
}
|
||||
|
||||
|
||||
+4
-13
@@ -59,6 +59,10 @@ object NodeConfigurator : AbstractFieldConfigurator() {
|
||||
+field("calleeReference", reference).withTransform()
|
||||
}
|
||||
|
||||
diagnosticHolder.configure {
|
||||
+field("diagnostic", firDiagnosticType)
|
||||
}
|
||||
|
||||
declaration.configure {
|
||||
+field("session", firSessionType)
|
||||
+field("resolvePhase", resolvePhaseType, withReplace = true).apply { isMutable = true }
|
||||
@@ -95,7 +99,6 @@ object NodeConfigurator : AbstractFieldConfigurator() {
|
||||
|
||||
errorFunction.configure {
|
||||
parentArg(function, "F", errorFunction)
|
||||
+stringField("reason")
|
||||
+symbol("FirErrorFunctionSymbol")
|
||||
}
|
||||
|
||||
@@ -398,10 +401,6 @@ object NodeConfigurator : AbstractFieldConfigurator() {
|
||||
+intField("componentIndex")
|
||||
}
|
||||
|
||||
errorExpression.configure {
|
||||
+stringField("reason")
|
||||
}
|
||||
|
||||
expressionWithSmartcast.configure {
|
||||
+field("originalExpression", qualifiedAccessExpression)
|
||||
+field("typesFromSmartcast", "Collection<ConeKotlinType>", null, customType = coneKotlinTypeType)
|
||||
@@ -493,10 +492,6 @@ object NodeConfigurator : AbstractFieldConfigurator() {
|
||||
+field("type", coneKotlinTypeType)
|
||||
}
|
||||
|
||||
errorTypeRef.configure {
|
||||
+stringField("reason")
|
||||
}
|
||||
|
||||
delegatedTypeRef.configure {
|
||||
+field("delegate", expression, nullable = true)
|
||||
+field(typeRef)
|
||||
@@ -533,10 +528,6 @@ object NodeConfigurator : AbstractFieldConfigurator() {
|
||||
+field(varianceType)
|
||||
}
|
||||
|
||||
errorNamedReference.configure {
|
||||
+stringField("errorReason")
|
||||
}
|
||||
|
||||
contractDescription.configure {
|
||||
+fieldList("effects", effectDeclarationType)
|
||||
}
|
||||
|
||||
+2
-1
@@ -62,4 +62,5 @@ val classSymbolType = type("fir.symbols.impl", "FirClassSymbol")
|
||||
|
||||
val pureAbstractElementType = generatedType("FirPureAbstractElement")
|
||||
val effectDeclarationType = type("fir.contracts.description", "ConeEffectDeclaration")
|
||||
val emptyContractDescriptionType = generatedType("contracts.impl", "FirEmptyContractDescription")
|
||||
val emptyContractDescriptionType = generatedType("contracts.impl", "FirEmptyContractDescription")
|
||||
val firDiagnosticType = generatedType("diagnostics", "FirDiagnostic")
|
||||
+1
@@ -125,6 +125,7 @@ class Element(val name: String, kind: Kind) : AbstractElement {
|
||||
Reference("references"),
|
||||
TypeRef("types"),
|
||||
Contracts("contracts"),
|
||||
Diagnostics("diagnostics"),
|
||||
Other("")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user