org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticFactoryDsl.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.*
import org.jetbrains.kotlin.fir.FirSourceElement
import kotlin.properties.ReadOnlyProperty
import kotlin.reflect.KProperty
fun warning0(
positioningStrategy: SourceElementPositioningStrategy = SourceElementPositioningStrategy.DEFAULT
): DiagnosticFactory0DelegateProvider {
return DiagnosticFactory0DelegateProvider(Severity.WARNING, positioningStrategy)
}
fun warning1(
positioningStrategy: SourceElementPositioningStrategy = SourceElementPositioningStrategy.DEFAULT
): DiagnosticFactory1DelegateProvider {
return DiagnosticFactory1DelegateProvider(Severity.WARNING, positioningStrategy)
}
fun warning2(
positioningStrategy: SourceElementPositioningStrategy = SourceElementPositioningStrategy.DEFAULT
): DiagnosticFactory2DelegateProvider {
return DiagnosticFactory2DelegateProvider(Severity.WARNING, positioningStrategy)
}
fun warning3(
positioningStrategy: SourceElementPositioningStrategy = SourceElementPositioningStrategy.DEFAULT
): DiagnosticFactory3DelegateProvider {
return DiagnosticFactory3DelegateProvider(Severity.WARNING, positioningStrategy)
}
fun error0(
positioningStrategy: SourceElementPositioningStrategy = SourceElementPositioningStrategy.DEFAULT
): DiagnosticFactory0DelegateProvider {
return DiagnosticFactory0DelegateProvider(Severity.ERROR, positioningStrategy)
}
fun error1(
positioningStrategy: SourceElementPositioningStrategy = SourceElementPositioningStrategy.DEFAULT
): DiagnosticFactory1DelegateProvider {
return DiagnosticFactory1DelegateProvider(Severity.ERROR, positioningStrategy)
}
fun error2(
positioningStrategy: SourceElementPositioningStrategy = SourceElementPositioningStrategy.DEFAULT
): DiagnosticFactory2DelegateProvider {
return DiagnosticFactory2DelegateProvider(Severity.ERROR, positioningStrategy)
}
fun error3(
positioningStrategy: SourceElementPositioningStrategy = SourceElementPositioningStrategy.DEFAULT
): DiagnosticFactory3DelegateProvider {
return DiagnosticFactory3DelegateProvider(Severity.ERROR, positioningStrategy)
}
/**
* Note that those functions can be applicable only for factories
* that takes `PsiElement` as first type parameter
*/
fun existing0(): DiagnosticFactory0DelegateProvider {
return DiagnosticFactory0DelegateProvider(Severity.ERROR, SourceElementPositioningStrategy.DEFAULT)
}
fun existing1(): DiagnosticFactory1DelegateProvider {
return DiagnosticFactory1DelegateProvider(Severity.ERROR, SourceElementPositioningStrategy.DEFAULT)
}
fun existing2(): DiagnosticFactory2DelegateProvider {
return DiagnosticFactory2DelegateProvider(Severity.ERROR, SourceElementPositioningStrategy.DEFAULT)
}
fun existing3(): DiagnosticFactory3DelegateProvider {
return DiagnosticFactory3DelegateProvider(Severity.ERROR, SourceElementPositioningStrategy.DEFAULT)
}
// ------------------------------ Providers ------------------------------
class DiagnosticFactory0DelegateProvider(
private val severity: Severity,
private val positioningStrategy: SourceElementPositioningStrategy
) {
operator fun provideDelegate(thisRef: Any?, prop: KProperty<*>): ReadOnlyProperty> {
return DummyDelegate(FirDiagnosticFactory0(prop.name, severity, positioningStrategy))
}
}
class DiagnosticFactory1DelegateProvider(
private val severity: Severity,
private val positioningStrategy: SourceElementPositioningStrategy
) {
operator fun provideDelegate(thisRef: Any?, prop: KProperty<*>): ReadOnlyProperty> {
return DummyDelegate(FirDiagnosticFactory1(prop.name, severity, positioningStrategy))
}
}
class DiagnosticFactory2DelegateProvider(
private val severity: Severity,
private val positioningStrategy: SourceElementPositioningStrategy
) {
operator fun provideDelegate(thisRef: Any?, prop: KProperty<*>): ReadOnlyProperty> {
return DummyDelegate(FirDiagnosticFactory2(prop.name, severity, positioningStrategy))
}
}
class DiagnosticFactory3DelegateProvider(
private val severity: Severity,
private val positioningStrategy: SourceElementPositioningStrategy
) {
operator fun provideDelegate(thisRef: Any?, prop: KProperty<*>): ReadOnlyProperty> {
return DummyDelegate(FirDiagnosticFactory3(prop.name, severity, positioningStrategy))
}
}
private class DummyDelegate(val value: T) : ReadOnlyProperty {
override fun getValue(thisRef: Any?, property: KProperty<*>): T {
return value
}
}