[FIR] Add kind to diagnostics reported by RawFirBuilder

This commit is contained in:
Dmitriy Novozhilov
2019-10-31 12:16:31 +03:00
parent 8b5f568a15
commit 7503449e8d
9 changed files with 84 additions and 69 deletions
@@ -5,4 +5,13 @@
package org.jetbrains.kotlin.fir.diagnostics
class FirSimpleDiagnostic(override val reason: String) : FirDiagnostic()
class FirSimpleDiagnostic(override val reason: String, val kind: DiagnosticKind = DiagnosticKind.Other) : FirDiagnostic()
enum class DiagnosticKind {
Syntax,
ReturnNotAllowed,
UnresolvedLabel,
IllegalConstExpression,
ConstructorInObject,
Other
}
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.fir.expressions
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnostic
import org.jetbrains.kotlin.fir.diagnostics.FirSimpleDiagnostic
import org.jetbrains.kotlin.fir.expressions.impl.FirConstExpressionImpl
import org.jetbrains.kotlin.fir.expressions.impl.FirErrorExpressionImpl
@@ -24,8 +25,8 @@ inline val FirAnnotationCall.coneClassLikeType: ConeClassLikeType?
inline val FirAnnotationCall.classId: ClassId?
get() = coneClassLikeType?.lookupTag?.classId
fun <T> FirConstExpressionImpl(source: FirSourceElement?, kind: IrConstKind<T>, value: T?, errorReason: String): FirExpression =
value?.let { FirConstExpressionImpl(source, kind, it) } ?: FirErrorExpressionImpl(source, FirSimpleDiagnostic(errorReason))
fun <T> FirConstExpressionImpl(source: FirSourceElement?, kind: IrConstKind<T>, value: T?, diagnostic: FirDiagnostic): FirExpression =
value?.let { FirConstExpressionImpl(source, kind, it) } ?: FirErrorExpressionImpl(source, diagnostic)
inline val FirTypeOperatorCall.argument: FirExpression get() = arguments.first()
@@ -37,8 +38,7 @@ fun FirExpression.toResolvedCallableSymbol(): FirCallableSymbol<*>? {
return toResolvedCallableReference()?.resolvedSymbol as FirCallableSymbol<*>?
}
fun FirErrorLoop(source: FirSourceElement?, reason: String): FirErrorLoop {
val diagnostic = FirSimpleDiagnostic(reason)
fun FirErrorLoop(source: FirSourceElement?, diagnostic: FirDiagnostic): FirErrorLoop {
return FirErrorLoopImpl(source, diagnostic).apply {
condition = FirErrorExpressionImpl(source, diagnostic)
}