All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticFactory.kt Maven / Gradle / Ivy

There is a newer version: 2.0.0
Show newest version
/*
 * 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.
 */

@file:Suppress("UNCHECKED_CAST")

package org.jetbrains.kotlin.fir.analysis.diagnostics

import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.diagnostics.*
import org.jetbrains.kotlin.fir.FirLightSourceElement
import org.jetbrains.kotlin.fir.FirPsiSourceElement
import org.jetbrains.kotlin.fir.FirSourceElement

sealed class AbstractFirDiagnosticFactory>(
    val name: String,
    val severity: Severity,
) {
    abstract val psiDiagnosticFactory: DiagnosticFactoryWithPsiElement<*, *>

    override fun toString(): String {
        return name
    }
}

class FirDiagnosticFactory0(
    name: String, severity: Severity, override val psiDiagnosticFactory: DiagnosticFactory0

) : AbstractFirDiagnosticFactory>(name, severity) { fun on(element: E): FirSimpleDiagnostic { return when (element) { is FirPsiSourceElement<*> -> FirPsiSimpleDiagnostic( element as FirPsiSourceElement

, severity, this as FirDiagnosticFactory0, P> ) is FirLightSourceElement -> FirLightSimpleDiagnostic(element, severity, this) else -> incorrectElement(element) } as FirSimpleDiagnostic } } class FirDiagnosticFactory1( name: String, severity: Severity, override val psiDiagnosticFactory: DiagnosticFactory1 ) : AbstractFirDiagnosticFactory>(name, severity) { fun on(element: E, a: A): FirDiagnosticWithParameters1 { return when (element) { is FirPsiSourceElement<*> -> FirPsiDiagnosticWithParameters1( element as FirPsiSourceElement

, a, severity, this as FirDiagnosticFactory1, P, A> ) is FirLightSourceElement -> FirLightDiagnosticWithParameters1(element, a, severity, this) else -> incorrectElement(element) } as FirDiagnosticWithParameters1 } } class FirDiagnosticFactory2( name: String, severity: Severity, override val psiDiagnosticFactory: DiagnosticFactory2 ) : AbstractFirDiagnosticFactory>(name, severity) { fun on(element: E, a: A, b: B): FirDiagnosticWithParameters2 { return when (element) { is FirPsiSourceElement<*> -> FirPsiDiagnosticWithParameters2( element as FirPsiSourceElement

, a, b, severity, this as FirDiagnosticFactory2, P, A, B> ) is FirLightSourceElement -> FirLightDiagnosticWithParameters2(element, a, b, severity, this) else -> incorrectElement(element) } as FirDiagnosticWithParameters2 } } class FirDiagnosticFactory3( name: String, severity: Severity, override val psiDiagnosticFactory: DiagnosticFactory3 ) : AbstractFirDiagnosticFactory>(name, severity) { fun on(element: E, a: A, b: B, c: C): FirDiagnosticWithParameters3 { return when (element) { is FirPsiSourceElement<*> -> FirPsiDiagnosticWithParameters3( element as FirPsiSourceElement

, a, b, c, severity, this as FirDiagnosticFactory3, P, A, B, C> ) is FirLightSourceElement -> FirLightDiagnosticWithParameters3(element, a, b, c, severity, this) else -> incorrectElement(element) } as FirDiagnosticWithParameters3 } } private fun incorrectElement(element: FirSourceElement): Nothing { throw IllegalArgumentException("Unknown element type: ${element::class}") }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy