org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnostic.kt Maven / Gradle / Ivy
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir.analysis.diagnostics
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.diagnostics.Diagnostic
import org.jetbrains.kotlin.diagnostics.Severity
import org.jetbrains.kotlin.fir.FirLightSourceElement
import org.jetbrains.kotlin.fir.FirPsiSourceElement
import org.jetbrains.kotlin.fir.FirSourceElement
// ------------------------------ diagnostics ------------------------------
sealed class FirDiagnostic {
abstract val element: E
abstract val severity: Severity
abstract val factory: AbstractFirDiagnosticFactory<*, *>
}
sealed class FirSimpleDiagnostic : FirDiagnostic() {
abstract override val factory: FirDiagnosticFactory0<*, *>
}
sealed class FirDiagnosticWithParameters1 : FirDiagnostic() {
abstract val a: A
abstract override val factory: FirDiagnosticFactory1<*, *, A>
}
sealed class FirDiagnosticWithParameters2 : FirDiagnostic() {
abstract val a: A
abstract val b: B
abstract override val factory: FirDiagnosticFactory2<*, *, A, B>
}
sealed class FirDiagnosticWithParameters3 : FirDiagnostic() {
abstract val a: A
abstract val b: B
abstract val c: C
abstract override val factory: FirDiagnosticFactory3<*, *, A, B, C>
}
// ------------------------------ psi diagnostics ------------------------------
interface FirPsiDiagnostic {
fun asPsiBasedDiagnostic(): Diagnostic
val element: FirPsiSourceElement
}
data class FirPsiSimpleDiagnostic
(
override val element: FirPsiSourceElement
,
override val severity: Severity,
override val factory: FirDiagnosticFactory0, P>
) : FirSimpleDiagnostic>(), FirPsiDiagnostic {
override fun asPsiBasedDiagnostic(): Diagnostic {
return factory.psiDiagnosticFactory.on(element.psi)
}
}
data class FirPsiDiagnosticWithParameters1
(
override val element: FirPsiSourceElement
,
override val a: A,
override val severity: Severity,
override val factory: FirDiagnosticFactory1, P, A>
) : FirDiagnosticWithParameters1, A>(), FirPsiDiagnostic {
override fun asPsiBasedDiagnostic(): Diagnostic {
return factory.psiDiagnosticFactory.on(element.psi, a)
}
}
data class FirPsiDiagnosticWithParameters2
(
override val element: FirPsiSourceElement
,
override val a: A,
override val b: B,
override val severity: Severity,
override val factory: FirDiagnosticFactory2, P, A, B>
) : FirDiagnosticWithParameters2, A, B>(), FirPsiDiagnostic {
override fun asPsiBasedDiagnostic(): Diagnostic {
return factory.psiDiagnosticFactory.on(element.psi, a, b)
}
}
data class FirPsiDiagnosticWithParameters3
(
override val element: FirPsiSourceElement
,
override val a: A,
override val b: B,
override val c: C,
override val severity: Severity,
override val factory: FirDiagnosticFactory3, P, A, B, C>
) : FirDiagnosticWithParameters3, A, B, C>(), FirPsiDiagnostic {
override fun asPsiBasedDiagnostic(): Diagnostic {
return factory.psiDiagnosticFactory.on(element.psi, a, b, c)
}
}
// ------------------------------ light tree diagnostics ------------------------------
interface FirLightDiagnostic {
val element: FirLightSourceElement
}
data class FirLightSimpleDiagnostic(
override val element: FirLightSourceElement,
override val severity: Severity,
override val factory: FirDiagnosticFactory0<*, *>
) : FirSimpleDiagnostic(), FirLightDiagnostic
data class FirLightDiagnosticWithParameters1(
override val element: FirLightSourceElement,
override val a: A,
override val severity: Severity,
override val factory: FirDiagnosticFactory1<*, *, A>
) : FirDiagnosticWithParameters1(), FirLightDiagnostic
data class FirLightDiagnosticWithParameters2(
override val element: FirLightSourceElement,
override val a: A,
override val b: B,
override val severity: Severity,
override val factory: FirDiagnosticFactory2<*, *, A, B>
) : FirDiagnosticWithParameters2(), FirLightDiagnostic
data class FirLightDiagnosticWithParameters3(
override val element: FirLightSourceElement,
override val a: A,
override val b: B,
override val c: C,
override val severity: Severity,
override val factory: FirDiagnosticFactory3<*, *, A, B, C>
) : FirDiagnosticWithParameters3(), FirLightDiagnostic