FIR IDE: add PSI type parameter to KtDiagnostic

This commit is contained in:
Ilya Kirillov
2021-02-02 21:18:05 +01:00
parent e008ad03a2
commit 79baffb69d
14 changed files with 359 additions and 559 deletions
@@ -24,6 +24,7 @@ import com.intellij.openapi.progress.ProgressIndicator
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.psi.PsiFile import com.intellij.psi.PsiFile
import org.jetbrains.kotlin.diagnostics.Severity import org.jetbrains.kotlin.diagnostics.Severity
import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.analyze import org.jetbrains.kotlin.idea.frontend.api.analyze
import org.jetbrains.kotlin.idea.frontend.api.diagnostics.KtDiagnostic import org.jetbrains.kotlin.idea.frontend.api.diagnostics.KtDiagnostic
import org.jetbrains.kotlin.idea.frontend.api.diagnostics.KtDiagnosticWithPsi import org.jetbrains.kotlin.idea.frontend.api.diagnostics.KtDiagnosticWithPsi
@@ -48,16 +49,19 @@ class KotlinHighLevelDiagnosticHighlightingPass(
} }
} }
private fun addDiagnostic(diagnostic: KtDiagnosticWithPsi) { private fun KtAnalysisSession.addDiagnostic(diagnostic: KtDiagnosticWithPsi<*>) {
val fixes = service<KtQuickFixService>().getQuickFixesFor(diagnostic as KtFirDiagnostic) val fixes = with(service<KtQuickFixService>()) { getQuickFixesFor(diagnostic as KtFirDiagnostic) }
annotationHolder.runAnnotatorWithContext(diagnostic.psi) { element, annotator -> annotationHolder.runAnnotatorWithContext(diagnostic.psi) { _, _ ->
annotationHolder.newAnnotation(diagnostic.getHighlightSeverity(), diagnostic.getMessageToRender()) diagnostic.textRanges.forEach { range ->
.addFixes(fixes) annotationHolder.newAnnotation(diagnostic.getHighlightSeverity(), diagnostic.getMessageToRender())
.create() .addFixes(fixes)
.range(range)
.create()
}
} }
} }
private fun KtDiagnosticWithPsi.getHighlightSeverity() = when (severity) { private fun KtDiagnosticWithPsi<*>.getHighlightSeverity() = when (severity) {
Severity.INFO -> HighlightSeverity.INFORMATION Severity.INFO -> HighlightSeverity.INFORMATION
Severity.ERROR -> HighlightSeverity.ERROR Severity.ERROR -> HighlightSeverity.ERROR
Severity.WARNING -> HighlightSeverity.WARNING Severity.WARNING -> HighlightSeverity.WARNING
@@ -7,13 +7,15 @@ package org.jetbrains.kotlin.idea.quickfix
import com.intellij.codeInsight.intention.IntentionAction import com.intellij.codeInsight.intention.IntentionAction
import com.intellij.openapi.extensions.ExtensionPointName import com.intellij.openapi.extensions.ExtensionPointName
import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.diagnostics.KtDiagnosticWithPsi
import org.jetbrains.kotlin.idea.frontend.api.fir.diagnostics.KtFirDiagnostic import org.jetbrains.kotlin.idea.frontend.api.fir.diagnostics.KtFirDiagnostic
class KtQuickFixService { class KtQuickFixService {
private val list = KtQuickFixesList.createCombined(KtQuickFixRegistrar.allQuickFixesList()) private val list = KtQuickFixesList.createCombined(KtQuickFixRegistrar.allQuickFixesList())
fun getQuickFixesFor(diagnostic: KtFirDiagnostic): List<IntentionAction> = fun KtAnalysisSession.getQuickFixesFor(diagnostic: KtDiagnosticWithPsi<*>): List<IntentionAction> =
list.getQuickFixesFor(diagnostic) with(list) { getQuickFixesFor(diagnostic) }
} }
abstract class KtQuickFixRegistrar { abstract class KtQuickFixRegistrar {
@@ -6,9 +6,9 @@
package org.jetbrains.kotlin.idea.quickfix package org.jetbrains.kotlin.idea.quickfix
import com.intellij.codeInsight.intention.IntentionAction import com.intellij.codeInsight.intention.IntentionAction
import org.jetbrains.kotlin.idea.fir.low.level.api.annotations.PrivateForInline import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.idea.frontend.api.KtAnalysisSession
import org.jetbrains.kotlin.idea.frontend.api.diagnostics.KtDiagnosticWithPsi import org.jetbrains.kotlin.idea.frontend.api.diagnostics.KtDiagnosticWithPsi
import org.jetbrains.kotlin.idea.frontend.api.fir.diagnostics.KtFirDiagnostic
import kotlin.reflect.KClass import kotlin.reflect.KClass
@RequiresOptIn @RequiresOptIn
@@ -16,9 +16,9 @@ annotation class ForKtQuickFixesListBuilder()
class KtQuickFixesListBuilder private constructor() { class KtQuickFixesListBuilder private constructor() {
val quickFixes = mutableMapOf<KClass<out KtDiagnosticWithPsi>, MutableList<QuickFixFactory>>() val quickFixes = mutableMapOf<KClass<out KtDiagnosticWithPsi<*>>, MutableList<QuickFixFactory>>()
inline fun <reified D : KtDiagnosticWithPsi> register(quickFixFactory: QuickFixFactory) { inline fun <reified PSI : PsiElement, reified D : KtDiagnosticWithPsi<PSI>> register(quickFixFactory: QuickFixFactory) {
quickFixes.getOrPut(D::class) { mutableListOf() }.add(quickFixFactory) quickFixes.getOrPut(D::class) { mutableListOf() }.add(quickFixFactory)
} }
@@ -30,17 +30,22 @@ class KtQuickFixesListBuilder private constructor() {
} }
} }
class KtQuickFixesList @ForKtQuickFixesListBuilder constructor(private val quickFixes: Map<KClass<out KtDiagnosticWithPsi>, List<QuickFixFactory>>) { class KtQuickFixesList @ForKtQuickFixesListBuilder constructor(private val quickFixes: Map<KClass<out KtDiagnosticWithPsi<*>>, List<QuickFixFactory>>) {
fun getQuickFixesFor(diagnostic: KtDiagnosticWithPsi): List<IntentionAction> { fun KtAnalysisSession.getQuickFixesFor(diagnostic: KtDiagnosticWithPsi<*>): List<IntentionAction> {
val factories = quickFixes[diagnostic.diagnosticClass] ?: return emptyList() val factories = quickFixes[diagnostic.diagnosticClass] ?: return emptyList()
return factories.mapNotNull { it.createQuickFix(diagnostic) } return factories.flatMap { createQuickFixes(it, diagnostic) }
} }
private fun QuickFixFactory.createQuickFix( @Suppress("UNCHECKED_CAST")
diagnostic: KtDiagnosticWithPsi private fun KtAnalysisSession.createQuickFixes(
) = when (this) { quickFixFactory: QuickFixFactory,
is QuickFixesPsiBasedFactory -> createQuickFix(diagnostic.psi) diagnostic: KtDiagnosticWithPsi<PsiElement>
else -> error("Unsupported QuickFixFactory $this") ): List<IntentionAction> = when (quickFixFactory) {
is QuickFixesPsiBasedFactory<*> -> quickFixFactory.createQuickFix(diagnostic.psi)
is QuickFixesHLApiBasedFactory<*, *> -> with(quickFixFactory as QuickFixesHLApiBasedFactory<PsiElement, KtDiagnosticWithPsi<*>>) {
createQuickFix(diagnostic)
}
else -> error("Unsupported QuickFixFactory $quickFixFactory")
} }
companion object { companion object {
@@ -85,7 +85,7 @@ abstract class KtAnalysisSession(final override val token: ValidityToken) : Vali
fun KtElement.getDiagnostics(): Collection<KtDiagnostic> = diagnosticProvider.getDiagnosticsForElement(this) fun KtElement.getDiagnostics(): Collection<KtDiagnostic> = diagnosticProvider.getDiagnosticsForElement(this)
fun KtFile.collectDiagnosticsForFile(): Collection<KtDiagnosticWithPsi> = diagnosticProvider.collectDiagnosticsForFile(this) fun KtFile.collectDiagnosticsForFile(): Collection<KtDiagnosticWithPsi<*>> = diagnosticProvider.collectDiagnosticsForFile(this)
fun KtSymbolWithKind.getContainingSymbol(): KtSymbolWithKind? = containingDeclarationProvider.getContainingDeclaration(this) fun KtSymbolWithKind.getContainingSymbol(): KtSymbolWithKind? = containingDeclarationProvider.getContainingDeclaration(this)
@@ -10,6 +10,6 @@ import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
abstract class KtDiagnosticProvider : KtAnalysisSessionComponent() { abstract class KtDiagnosticProvider : KtAnalysisSessionComponent() {
abstract fun getDiagnosticsForElement(element: KtElement): Collection<KtDiagnosticWithPsi> abstract fun getDiagnosticsForElement(element: KtElement): Collection<KtDiagnosticWithPsi<*>>
abstract fun collectDiagnosticsForFile(ktFile: KtFile): Collection<KtDiagnosticWithPsi> abstract fun collectDiagnosticsForFile(ktFile: KtFile): Collection<KtDiagnosticWithPsi<*>>
} }
@@ -18,10 +18,10 @@ interface KtDiagnostic : ValidityTokenOwner {
val defaultMessage: String val defaultMessage: String
} }
interface KtDiagnosticWithPsi : KtDiagnostic { interface KtDiagnosticWithPsi<out PSI: PsiElement> : KtDiagnostic {
val psi: PsiElement val psi: PSI
val textRanges: Collection<TextRange> val textRanges: Collection<TextRange>
val diagnosticClass: KClass<out KtDiagnosticWithPsi> val diagnosticClass: KClass<out KtDiagnosticWithPsi<PSI>>
} }
class KtNonBoundToPsiErrorDiagnostic( class KtNonBoundToPsiErrorDiagnostic(
@@ -31,9 +31,11 @@ object KtDiagnosticClassImplementationRenderer : AbstractDiagnosticsDataClassRen
withIndent { withIndent {
printParameters(diagnostic) printParameters(diagnostic)
} }
inBracketsWithIndent(") : KtFirDiagnostic.${diagnostic.className}(), KtAbstractFirDiagnostic") { print(") : KtFirDiagnostic.${diagnostic.className}(), KtAbstractFirDiagnostic<")
printTypeWithShortNames(diagnostic.original.psiType)
print(">")
inBracketsWithIndent {
println("override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)") println("override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)")
printOverridePsiProperty(diagnostic)
} }
} }
@@ -45,19 +47,6 @@ object KtDiagnosticClassImplementationRenderer : AbstractDiagnosticsDataClassRen
println("override val token: ValidityToken,") println("override val token: ValidityToken,")
} }
private fun SmartPrinter.printOverridePsiProperty(diagnostic: HLDiagnostic) {
print("override val psi: ")
printTypeWithShortNames(diagnostic.original.psiType)
withIndent {
print(" get() = super.psi")
if (diagnostic.original.psiType.classifier != PsiElement::class) {
print(" as ")
printTypeWithShortNames(diagnostic.original.psiType)
}
}
println()
}
private fun SmartPrinter.printParameter(parameter: HLDiagnosticParameter) { private fun SmartPrinter.printParameter(parameter: HLDiagnosticParameter) {
print("override val ${parameter.name}: ") print("override val ${parameter.name}: ")
printTypeWithShortNames(parameter.type) printTypeWithShortNames(parameter.type)
@@ -19,7 +19,7 @@ object KtDiagnosticClassRenderer : AbstractDiagnosticsDataClassRenderer() {
} }
private fun SmartPrinter.printDiagnosticClasses(diagnosticList: HLDiagnosticList) { private fun SmartPrinter.printDiagnosticClasses(diagnosticList: HLDiagnosticList) {
inBracketsWithIndent("sealed class KtFirDiagnostic : KtDiagnosticWithPsi") { inBracketsWithIndent("sealed class KtFirDiagnostic<PSI: PsiElement> : KtDiagnosticWithPsi<PSI>") {
for (diagnostic in diagnosticList.diagnostics) { for (diagnostic in diagnosticList.diagnostics) {
printDiagnosticClass(diagnostic) printDiagnosticClass(diagnostic)
println() println()
@@ -28,21 +28,15 @@ object KtDiagnosticClassRenderer : AbstractDiagnosticsDataClassRenderer() {
} }
private fun SmartPrinter.printDiagnosticClass(diagnostic: HLDiagnostic) { private fun SmartPrinter.printDiagnosticClass(diagnostic: HLDiagnostic) {
inBracketsWithIndent("abstract class ${diagnostic.className} : KtFirDiagnostic()") { print("abstract class ${diagnostic.className} : KtFirDiagnostic<")
printTypeWithShortNames(diagnostic.original.psiType)
print(">()")
inBracketsWithIndent {
println("override val diagnosticClass get() = ${diagnostic.className}::class") println("override val diagnosticClass get() = ${diagnostic.className}::class")
printPsiParameter(diagnostic)
printDiagnosticParameters(diagnostic) printDiagnosticParameters(diagnostic)
} }
} }
private fun SmartPrinter.printPsiParameter(diagnostic: HLDiagnostic) {
if (diagnostic.original.psiType.classifier != PsiElement::class) {
print("abstract override val psi: ")
printTypeWithShortNames(diagnostic.original.psiType)
println()
}
}
private fun SmartPrinter.printDiagnosticParameters(diagnostic: HLDiagnostic) { private fun SmartPrinter.printDiagnosticParameters(diagnostic: HLDiagnostic) {
diagnostic.parameters.forEach { parameter -> diagnostic.parameters.forEach { parameter ->
print("abstract val ${parameter.name}: ") print("abstract val ${parameter.name}: ")
@@ -58,5 +52,6 @@ object KtDiagnosticClassRenderer : AbstractDiagnosticsDataClassRenderer() {
override val defaultImports = listOf( override val defaultImports = listOf(
"org.jetbrains.kotlin.idea.frontend.api.diagnostics.KtDiagnosticWithPsi", "org.jetbrains.kotlin.idea.frontend.api.diagnostics.KtDiagnosticWithPsi",
"com.intellij.psi.PsiElement",
) )
} }
@@ -21,7 +21,7 @@ internal interface KtFirAnalysisSessionComponent {
val firResolveState get() = analysisSession.firResolveState val firResolveState get() = analysisSession.firResolveState
fun ConeKotlinType.asKtType() = analysisSession.firSymbolBuilder.buildKtType(this) fun ConeKotlinType.asKtType() = analysisSession.firSymbolBuilder.buildKtType(this)
fun FirPsiDiagnostic<*>.asKtDiagnostic(): KtDiagnosticWithPsi = fun FirPsiDiagnostic<*>.asKtDiagnostic(): KtDiagnosticWithPsi<*> =
(analysisSession.diagnosticProvider as KtFirDiagnosticProvider).firDiagnosticAsKtDiagnostic(this) (analysisSession.diagnosticProvider as KtFirDiagnosticProvider).firDiagnosticAsKtDiagnostic(this)
fun ConeDiagnostic.asKtDiagnostic(source: FirSourceElement): KtDiagnostic? = fun ConeDiagnostic.asKtDiagnostic(source: FirSourceElement): KtDiagnostic? =
@@ -26,18 +26,18 @@ internal class KtFirDiagnosticProvider(
override val analysisSession: KtFirAnalysisSession, override val analysisSession: KtFirAnalysisSession,
override val token: ValidityToken, override val token: ValidityToken,
) : KtDiagnosticProvider(), KtFirAnalysisSessionComponent { ) : KtDiagnosticProvider(), KtFirAnalysisSessionComponent {
override fun getDiagnosticsForElement(element: KtElement): Collection<KtDiagnosticWithPsi> = withValidityAssertion { override fun getDiagnosticsForElement(element: KtElement): Collection<KtDiagnosticWithPsi<*>> = withValidityAssertion {
element.getDiagnostics(firResolveState).map { it.asKtDiagnostic() } element.getDiagnostics(firResolveState).map { it.asKtDiagnostic() }
} }
override fun collectDiagnosticsForFile(ktFile: KtFile): Collection<KtDiagnosticWithPsi> = override fun collectDiagnosticsForFile(ktFile: KtFile): Collection<KtDiagnosticWithPsi<*>> =
ktFile.collectDiagnosticsForFile(firResolveState).map { it.asKtDiagnostic() } ktFile.collectDiagnosticsForFile(firResolveState).map { it.asKtDiagnostic() }
fun firDiagnosticAsKtDiagnostic(diagnostic: FirPsiDiagnostic<*>): KtDiagnosticWithPsi { fun firDiagnosticAsKtDiagnostic(diagnostic: FirPsiDiagnostic<*>): KtDiagnosticWithPsi<*> {
return KT_DIAGNOSTIC_CONVERTER.convert(analysisSession, diagnostic as FirDiagnostic<*>) return KT_DIAGNOSTIC_CONVERTER.convert(analysisSession, diagnostic as FirDiagnostic<*>)
} }
fun coneDiagnosticAsKtDiagnostic(coneDiagnostic: ConeDiagnostic, source: FirSourceElement): KtDiagnosticWithPsi? { fun coneDiagnosticAsKtDiagnostic(coneDiagnostic: ConeDiagnostic, source: FirSourceElement): KtDiagnosticWithPsi<*>? {
val firDiagnostic = coneDiagnostic.toFirDiagnostic(source) ?: return null val firDiagnostic = coneDiagnostic.toFirDiagnostic(source) ?: return null
check(firDiagnostic is FirPsiDiagnostic<*>) check(firDiagnostic is FirPsiDiagnostic<*>)
return firDiagnosticAsKtDiagnostic(firDiagnostic) return firDiagnosticAsKtDiagnostic(firDiagnostic)
@@ -12,23 +12,23 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.KtFirAnalysisSession
internal interface KtFirDiagnosticCreator internal interface KtFirDiagnosticCreator
internal fun interface KtFirDiagnostic0Creator : KtFirDiagnosticCreator { internal fun interface KtFirDiagnostic0Creator : KtFirDiagnosticCreator {
fun KtFirAnalysisSession.create(diagnostic: FirSimpleDiagnostic<*>): KtFirDiagnostic fun KtFirAnalysisSession.create(diagnostic: FirSimpleDiagnostic<*>): KtFirDiagnostic<*>
} }
internal fun interface KtFirDiagnostic1Creator<A : Any> : KtFirDiagnosticCreator { internal fun interface KtFirDiagnostic1Creator<A : Any> : KtFirDiagnosticCreator {
fun KtFirAnalysisSession.create(diagnostic: FirDiagnosticWithParameters1<*, A>): KtFirDiagnostic fun KtFirAnalysisSession.create(diagnostic: FirDiagnosticWithParameters1<*, A>): KtFirDiagnostic<*>
} }
internal fun interface KtFirDiagnostic2Creator<A : Any, B : Any> : KtFirDiagnosticCreator { internal fun interface KtFirDiagnostic2Creator<A : Any, B : Any> : KtFirDiagnosticCreator {
fun KtFirAnalysisSession.create(diagnostic: FirDiagnosticWithParameters2<*, A, B>): KtFirDiagnostic fun KtFirAnalysisSession.create(diagnostic: FirDiagnosticWithParameters2<*, A, B>): KtFirDiagnostic<*>
} }
internal fun interface KtFirDiagnostic3Creator<A : Any, B : Any, C : Any> : KtFirDiagnosticCreator { internal fun interface KtFirDiagnostic3Creator<A : Any, B : Any, C : Any> : KtFirDiagnosticCreator {
fun KtFirAnalysisSession.create(diagnostic: FirDiagnosticWithParameters3<*, A, B, C>): KtFirDiagnostic fun KtFirAnalysisSession.create(diagnostic: FirDiagnosticWithParameters3<*, A, B, C>): KtFirDiagnostic<*>
} }
internal class KtDiagnosticConverter(private val conversions: Map<AbstractFirDiagnosticFactory<*, *, *>, KtFirDiagnosticCreator>) { internal class KtDiagnosticConverter(private val conversions: Map<AbstractFirDiagnosticFactory<*, *, *>, KtFirDiagnosticCreator>) {
fun convert(analysisSession: KtFirAnalysisSession, diagnostic: FirDiagnostic<*>): KtFirDiagnostic { fun convert(analysisSession: KtFirAnalysisSession, diagnostic: FirDiagnostic<*>): KtFirDiagnostic<*> {
val creator = conversions[diagnostic.factory] val creator = conversions[diagnostic.factory]
?: error("No conversion was found for ${diagnostic.factory}") ?: error("No conversion was found for ${diagnostic.factory}")
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirPsiDiagnostic
import org.jetbrains.kotlin.idea.frontend.api.diagnostics.KtDiagnostic import org.jetbrains.kotlin.idea.frontend.api.diagnostics.KtDiagnostic
import org.jetbrains.kotlin.idea.frontend.api.diagnostics.KtDiagnosticWithPsi import org.jetbrains.kotlin.idea.frontend.api.diagnostics.KtDiagnosticWithPsi
internal interface KtAbstractFirDiagnostic : KtDiagnosticWithPsi { internal interface KtAbstractFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
val firDiagnostic: FirPsiDiagnostic<*> val firDiagnostic: FirPsiDiagnostic<*>
override val factoryName: String override val factoryName: String
@@ -34,8 +34,9 @@ internal interface KtAbstractFirDiagnostic : KtDiagnosticWithPsi {
override val textRanges: Collection<TextRange> override val textRanges: Collection<TextRange>
get() = firDiagnostic.textRanges get() = firDiagnostic.textRanges
override val psi: PsiElement @Suppress("UNCHECKED_CAST")
get() = firDiagnostic.psiElement override val psi: PSI
get() = firDiagnostic.psiElement as PSI
override val severity: Severity override val severity: Severity
get() = firDiagnostic.severity get() = firDiagnostic.severity
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.idea.frontend.api.symbols.KtVariableSymbol
import org.jetbrains.kotlin.idea.frontend.api.types.KtType import org.jetbrains.kotlin.idea.frontend.api.types.KtType
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtCallableDeclaration
import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtClassOrObject
import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtDeclaration
import org.jetbrains.kotlin.psi.KtDestructuringDeclaration import org.jetbrains.kotlin.psi.KtDestructuringDeclaration
@@ -35,710 +36,656 @@ import org.jetbrains.kotlin.psi.KtTypeReference
* DO NOT MODIFY IT MANUALLY * DO NOT MODIFY IT MANUALLY
*/ */
sealed class KtFirDiagnostic : KtDiagnosticWithPsi { sealed class KtFirDiagnostic<PSI: PsiElement> : KtDiagnosticWithPsi<PSI> {
abstract class Syntax : KtFirDiagnostic() { abstract class Syntax : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = Syntax::class override val diagnosticClass get() = Syntax::class
} }
abstract class OtherError : KtFirDiagnostic() { abstract class OtherError : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = OtherError::class override val diagnosticClass get() = OtherError::class
} }
abstract class IllegalConstExpression : KtFirDiagnostic() { abstract class IllegalConstExpression : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = IllegalConstExpression::class override val diagnosticClass get() = IllegalConstExpression::class
} }
abstract class IllegalUnderscore : KtFirDiagnostic() { abstract class IllegalUnderscore : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = IllegalUnderscore::class override val diagnosticClass get() = IllegalUnderscore::class
} }
abstract class ExpressionRequired : KtFirDiagnostic() { abstract class ExpressionRequired : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = ExpressionRequired::class override val diagnosticClass get() = ExpressionRequired::class
} }
abstract class BreakOrContinueOutsideALoop : KtFirDiagnostic() { abstract class BreakOrContinueOutsideALoop : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = BreakOrContinueOutsideALoop::class override val diagnosticClass get() = BreakOrContinueOutsideALoop::class
} }
abstract class NotALoopLabel : KtFirDiagnostic() { abstract class NotALoopLabel : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = NotALoopLabel::class override val diagnosticClass get() = NotALoopLabel::class
} }
abstract class VariableExpected : KtFirDiagnostic() { abstract class VariableExpected : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = VariableExpected::class override val diagnosticClass get() = VariableExpected::class
} }
abstract class ReturnNotAllowed : KtFirDiagnostic() { abstract class ReturnNotAllowed : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = ReturnNotAllowed::class override val diagnosticClass get() = ReturnNotAllowed::class
} }
abstract class DelegationInInterface : KtFirDiagnostic() { abstract class DelegationInInterface : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = DelegationInInterface::class override val diagnosticClass get() = DelegationInInterface::class
} }
abstract class Hidden : KtFirDiagnostic() { abstract class Hidden : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = Hidden::class override val diagnosticClass get() = Hidden::class
abstract val hidden: KtSymbol abstract val hidden: KtSymbol
} }
abstract class UnresolvedReference : KtFirDiagnostic() { abstract class UnresolvedReference : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = UnresolvedReference::class override val diagnosticClass get() = UnresolvedReference::class
abstract val reference: String abstract val reference: String
} }
abstract class UnresolvedLabel : KtFirDiagnostic() { abstract class UnresolvedLabel : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = UnresolvedLabel::class override val diagnosticClass get() = UnresolvedLabel::class
} }
abstract class DeserializationError : KtFirDiagnostic() { abstract class DeserializationError : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = DeserializationError::class override val diagnosticClass get() = DeserializationError::class
} }
abstract class ErrorFromJavaResolution : KtFirDiagnostic() { abstract class ErrorFromJavaResolution : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = ErrorFromJavaResolution::class override val diagnosticClass get() = ErrorFromJavaResolution::class
} }
abstract class UnknownCallableKind : KtFirDiagnostic() { abstract class UnknownCallableKind : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = UnknownCallableKind::class override val diagnosticClass get() = UnknownCallableKind::class
} }
abstract class MissingStdlibClass : KtFirDiagnostic() { abstract class MissingStdlibClass : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = MissingStdlibClass::class override val diagnosticClass get() = MissingStdlibClass::class
} }
abstract class NoThis : KtFirDiagnostic() { abstract class NoThis : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = NoThis::class override val diagnosticClass get() = NoThis::class
} }
abstract class SuperIsNotAnExpression : KtFirDiagnostic() { abstract class SuperIsNotAnExpression : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = SuperIsNotAnExpression::class override val diagnosticClass get() = SuperIsNotAnExpression::class
} }
abstract class SuperNotAvailable : KtFirDiagnostic() { abstract class SuperNotAvailable : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = SuperNotAvailable::class override val diagnosticClass get() = SuperNotAvailable::class
} }
abstract class AbstractSuperCall : KtFirDiagnostic() { abstract class AbstractSuperCall : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = AbstractSuperCall::class override val diagnosticClass get() = AbstractSuperCall::class
} }
abstract class InstanceAccessBeforeSuperCall : KtFirDiagnostic() { abstract class InstanceAccessBeforeSuperCall : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = InstanceAccessBeforeSuperCall::class override val diagnosticClass get() = InstanceAccessBeforeSuperCall::class
abstract val target: String abstract val target: String
} }
abstract class TypeParameterAsSupertype : KtFirDiagnostic() { abstract class TypeParameterAsSupertype : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = TypeParameterAsSupertype::class override val diagnosticClass get() = TypeParameterAsSupertype::class
} }
abstract class EnumAsSupertype : KtFirDiagnostic() { abstract class EnumAsSupertype : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = EnumAsSupertype::class override val diagnosticClass get() = EnumAsSupertype::class
} }
abstract class RecursionInSupertypes : KtFirDiagnostic() { abstract class RecursionInSupertypes : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = RecursionInSupertypes::class override val diagnosticClass get() = RecursionInSupertypes::class
} }
abstract class NotASupertype : KtFirDiagnostic() { abstract class NotASupertype : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = NotASupertype::class override val diagnosticClass get() = NotASupertype::class
} }
abstract class SuperclassNotAccessibleFromInterface : KtFirDiagnostic() { abstract class SuperclassNotAccessibleFromInterface : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = SuperclassNotAccessibleFromInterface::class override val diagnosticClass get() = SuperclassNotAccessibleFromInterface::class
} }
abstract class QualifiedSupertypeExtendedByOtherSupertype : KtFirDiagnostic() { abstract class QualifiedSupertypeExtendedByOtherSupertype : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = QualifiedSupertypeExtendedByOtherSupertype::class override val diagnosticClass get() = QualifiedSupertypeExtendedByOtherSupertype::class
abstract val otherSuperType: KtClassLikeSymbol abstract val otherSuperType: KtClassLikeSymbol
} }
abstract class SupertypeInitializedInInterface : KtFirDiagnostic() { abstract class SupertypeInitializedInInterface : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = SupertypeInitializedInInterface::class override val diagnosticClass get() = SupertypeInitializedInInterface::class
} }
abstract class InterfaceWithSuperclass : KtFirDiagnostic() { abstract class InterfaceWithSuperclass : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = InterfaceWithSuperclass::class override val diagnosticClass get() = InterfaceWithSuperclass::class
} }
abstract class ClassInSupertypeForEnum : KtFirDiagnostic() { abstract class ClassInSupertypeForEnum : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = ClassInSupertypeForEnum::class override val diagnosticClass get() = ClassInSupertypeForEnum::class
} }
abstract class SealedSupertype : KtFirDiagnostic() { abstract class SealedSupertype : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = SealedSupertype::class override val diagnosticClass get() = SealedSupertype::class
} }
abstract class SealedSupertypeInLocalClass : KtFirDiagnostic() { abstract class SealedSupertypeInLocalClass : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = SealedSupertypeInLocalClass::class override val diagnosticClass get() = SealedSupertypeInLocalClass::class
} }
abstract class ConstructorInObject : KtFirDiagnostic() { abstract class ConstructorInObject : KtFirDiagnostic<KtDeclaration>() {
override val diagnosticClass get() = ConstructorInObject::class override val diagnosticClass get() = ConstructorInObject::class
abstract override val psi: KtDeclaration
} }
abstract class ConstructorInInterface : KtFirDiagnostic() { abstract class ConstructorInInterface : KtFirDiagnostic<KtDeclaration>() {
override val diagnosticClass get() = ConstructorInInterface::class override val diagnosticClass get() = ConstructorInInterface::class
abstract override val psi: KtDeclaration
} }
abstract class NonPrivateConstructorInEnum : KtFirDiagnostic() { abstract class NonPrivateConstructorInEnum : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = NonPrivateConstructorInEnum::class override val diagnosticClass get() = NonPrivateConstructorInEnum::class
} }
abstract class NonPrivateConstructorInSealed : KtFirDiagnostic() { abstract class NonPrivateConstructorInSealed : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = NonPrivateConstructorInSealed::class override val diagnosticClass get() = NonPrivateConstructorInSealed::class
} }
abstract class CyclicConstructorDelegationCall : KtFirDiagnostic() { abstract class CyclicConstructorDelegationCall : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = CyclicConstructorDelegationCall::class override val diagnosticClass get() = CyclicConstructorDelegationCall::class
} }
abstract class PrimaryConstructorDelegationCallExpected : KtFirDiagnostic() { abstract class PrimaryConstructorDelegationCallExpected : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = PrimaryConstructorDelegationCallExpected::class override val diagnosticClass get() = PrimaryConstructorDelegationCallExpected::class
} }
abstract class SupertypeInitializedWithoutPrimaryConstructor : KtFirDiagnostic() { abstract class SupertypeInitializedWithoutPrimaryConstructor : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = SupertypeInitializedWithoutPrimaryConstructor::class override val diagnosticClass get() = SupertypeInitializedWithoutPrimaryConstructor::class
} }
abstract class DelegationSuperCallInEnumConstructor : KtFirDiagnostic() { abstract class DelegationSuperCallInEnumConstructor : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = DelegationSuperCallInEnumConstructor::class override val diagnosticClass get() = DelegationSuperCallInEnumConstructor::class
} }
abstract class PrimaryConstructorRequiredForDataClass : KtFirDiagnostic() { abstract class PrimaryConstructorRequiredForDataClass : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = PrimaryConstructorRequiredForDataClass::class override val diagnosticClass get() = PrimaryConstructorRequiredForDataClass::class
} }
abstract class ExplicitDelegationCallRequired : KtFirDiagnostic() { abstract class ExplicitDelegationCallRequired : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = ExplicitDelegationCallRequired::class override val diagnosticClass get() = ExplicitDelegationCallRequired::class
} }
abstract class SealedClassConstructorCall : KtFirDiagnostic() { abstract class SealedClassConstructorCall : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = SealedClassConstructorCall::class override val diagnosticClass get() = SealedClassConstructorCall::class
} }
abstract class AnnotationArgumentKclassLiteralOfTypeParameterError : KtFirDiagnostic() { abstract class AnnotationArgumentKclassLiteralOfTypeParameterError : KtFirDiagnostic<KtExpression>() {
override val diagnosticClass get() = AnnotationArgumentKclassLiteralOfTypeParameterError::class override val diagnosticClass get() = AnnotationArgumentKclassLiteralOfTypeParameterError::class
abstract override val psi: KtExpression
} }
abstract class AnnotationArgumentMustBeConst : KtFirDiagnostic() { abstract class AnnotationArgumentMustBeConst : KtFirDiagnostic<KtExpression>() {
override val diagnosticClass get() = AnnotationArgumentMustBeConst::class override val diagnosticClass get() = AnnotationArgumentMustBeConst::class
abstract override val psi: KtExpression
} }
abstract class AnnotationArgumentMustBeEnumConst : KtFirDiagnostic() { abstract class AnnotationArgumentMustBeEnumConst : KtFirDiagnostic<KtExpression>() {
override val diagnosticClass get() = AnnotationArgumentMustBeEnumConst::class override val diagnosticClass get() = AnnotationArgumentMustBeEnumConst::class
abstract override val psi: KtExpression
} }
abstract class AnnotationArgumentMustBeKclassLiteral : KtFirDiagnostic() { abstract class AnnotationArgumentMustBeKclassLiteral : KtFirDiagnostic<KtExpression>() {
override val diagnosticClass get() = AnnotationArgumentMustBeKclassLiteral::class override val diagnosticClass get() = AnnotationArgumentMustBeKclassLiteral::class
abstract override val psi: KtExpression
} }
abstract class AnnotationClassMember : KtFirDiagnostic() { abstract class AnnotationClassMember : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = AnnotationClassMember::class override val diagnosticClass get() = AnnotationClassMember::class
} }
abstract class AnnotationParameterDefaultValueMustBeConstant : KtFirDiagnostic() { abstract class AnnotationParameterDefaultValueMustBeConstant : KtFirDiagnostic<KtExpression>() {
override val diagnosticClass get() = AnnotationParameterDefaultValueMustBeConstant::class override val diagnosticClass get() = AnnotationParameterDefaultValueMustBeConstant::class
abstract override val psi: KtExpression
} }
abstract class InvalidTypeOfAnnotationMember : KtFirDiagnostic() { abstract class InvalidTypeOfAnnotationMember : KtFirDiagnostic<KtTypeReference>() {
override val diagnosticClass get() = InvalidTypeOfAnnotationMember::class override val diagnosticClass get() = InvalidTypeOfAnnotationMember::class
abstract override val psi: KtTypeReference
} }
abstract class LocalAnnotationClassError : KtFirDiagnostic() { abstract class LocalAnnotationClassError : KtFirDiagnostic<KtClassOrObject>() {
override val diagnosticClass get() = LocalAnnotationClassError::class override val diagnosticClass get() = LocalAnnotationClassError::class
abstract override val psi: KtClassOrObject
} }
abstract class MissingValOnAnnotationParameter : KtFirDiagnostic() { abstract class MissingValOnAnnotationParameter : KtFirDiagnostic<KtParameter>() {
override val diagnosticClass get() = MissingValOnAnnotationParameter::class override val diagnosticClass get() = MissingValOnAnnotationParameter::class
abstract override val psi: KtParameter
} }
abstract class NonConstValUsedInConstantExpression : KtFirDiagnostic() { abstract class NonConstValUsedInConstantExpression : KtFirDiagnostic<KtExpression>() {
override val diagnosticClass get() = NonConstValUsedInConstantExpression::class override val diagnosticClass get() = NonConstValUsedInConstantExpression::class
abstract override val psi: KtExpression
} }
abstract class NotAnAnnotationClass : KtFirDiagnostic() { abstract class NotAnAnnotationClass : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = NotAnAnnotationClass::class override val diagnosticClass get() = NotAnAnnotationClass::class
abstract val annotationName: String abstract val annotationName: String
} }
abstract class NullableTypeOfAnnotationMember : KtFirDiagnostic() { abstract class NullableTypeOfAnnotationMember : KtFirDiagnostic<KtTypeReference>() {
override val diagnosticClass get() = NullableTypeOfAnnotationMember::class override val diagnosticClass get() = NullableTypeOfAnnotationMember::class
abstract override val psi: KtTypeReference
} }
abstract class VarAnnotationParameter : KtFirDiagnostic() { abstract class VarAnnotationParameter : KtFirDiagnostic<KtParameter>() {
override val diagnosticClass get() = VarAnnotationParameter::class override val diagnosticClass get() = VarAnnotationParameter::class
abstract override val psi: KtParameter
} }
abstract class ExposedTypealiasExpandedType : KtFirDiagnostic() { abstract class ExposedTypealiasExpandedType : KtFirDiagnostic<KtNamedDeclaration>() {
override val diagnosticClass get() = ExposedTypealiasExpandedType::class override val diagnosticClass get() = ExposedTypealiasExpandedType::class
abstract override val psi: KtNamedDeclaration
abstract val elementVisibility: Visibility abstract val elementVisibility: Visibility
abstract val restrictingDeclaration: KtSymbol abstract val restrictingDeclaration: KtSymbol
abstract val restrictingVisibility: Visibility abstract val restrictingVisibility: Visibility
} }
abstract class ExposedFunctionReturnType : KtFirDiagnostic() { abstract class ExposedFunctionReturnType : KtFirDiagnostic<KtNamedDeclaration>() {
override val diagnosticClass get() = ExposedFunctionReturnType::class override val diagnosticClass get() = ExposedFunctionReturnType::class
abstract override val psi: KtNamedDeclaration
abstract val elementVisibility: Visibility abstract val elementVisibility: Visibility
abstract val restrictingDeclaration: KtSymbol abstract val restrictingDeclaration: KtSymbol
abstract val restrictingVisibility: Visibility abstract val restrictingVisibility: Visibility
} }
abstract class ExposedReceiverType : KtFirDiagnostic() { abstract class ExposedReceiverType : KtFirDiagnostic<KtTypeReference>() {
override val diagnosticClass get() = ExposedReceiverType::class override val diagnosticClass get() = ExposedReceiverType::class
abstract override val psi: KtTypeReference
abstract val elementVisibility: Visibility abstract val elementVisibility: Visibility
abstract val restrictingDeclaration: KtSymbol abstract val restrictingDeclaration: KtSymbol
abstract val restrictingVisibility: Visibility abstract val restrictingVisibility: Visibility
} }
abstract class ExposedPropertyType : KtFirDiagnostic() { abstract class ExposedPropertyType : KtFirDiagnostic<KtNamedDeclaration>() {
override val diagnosticClass get() = ExposedPropertyType::class override val diagnosticClass get() = ExposedPropertyType::class
abstract override val psi: KtNamedDeclaration
abstract val elementVisibility: Visibility abstract val elementVisibility: Visibility
abstract val restrictingDeclaration: KtSymbol abstract val restrictingDeclaration: KtSymbol
abstract val restrictingVisibility: Visibility abstract val restrictingVisibility: Visibility
} }
abstract class ExposedParameterType : KtFirDiagnostic() { abstract class ExposedParameterType : KtFirDiagnostic<KtParameter>() {
override val diagnosticClass get() = ExposedParameterType::class override val diagnosticClass get() = ExposedParameterType::class
abstract override val psi: KtParameter
abstract val elementVisibility: Visibility abstract val elementVisibility: Visibility
abstract val restrictingDeclaration: KtSymbol abstract val restrictingDeclaration: KtSymbol
abstract val restrictingVisibility: Visibility abstract val restrictingVisibility: Visibility
} }
abstract class ExposedSuperInterface : KtFirDiagnostic() { abstract class ExposedSuperInterface : KtFirDiagnostic<KtTypeReference>() {
override val diagnosticClass get() = ExposedSuperInterface::class override val diagnosticClass get() = ExposedSuperInterface::class
abstract override val psi: KtTypeReference
abstract val elementVisibility: Visibility abstract val elementVisibility: Visibility
abstract val restrictingDeclaration: KtSymbol abstract val restrictingDeclaration: KtSymbol
abstract val restrictingVisibility: Visibility abstract val restrictingVisibility: Visibility
} }
abstract class ExposedSuperClass : KtFirDiagnostic() { abstract class ExposedSuperClass : KtFirDiagnostic<KtTypeReference>() {
override val diagnosticClass get() = ExposedSuperClass::class override val diagnosticClass get() = ExposedSuperClass::class
abstract override val psi: KtTypeReference
abstract val elementVisibility: Visibility abstract val elementVisibility: Visibility
abstract val restrictingDeclaration: KtSymbol abstract val restrictingDeclaration: KtSymbol
abstract val restrictingVisibility: Visibility abstract val restrictingVisibility: Visibility
} }
abstract class ExposedTypeParameterBound : KtFirDiagnostic() { abstract class ExposedTypeParameterBound : KtFirDiagnostic<KtTypeReference>() {
override val diagnosticClass get() = ExposedTypeParameterBound::class override val diagnosticClass get() = ExposedTypeParameterBound::class
abstract override val psi: KtTypeReference
abstract val elementVisibility: Visibility abstract val elementVisibility: Visibility
abstract val restrictingDeclaration: KtSymbol abstract val restrictingDeclaration: KtSymbol
abstract val restrictingVisibility: Visibility abstract val restrictingVisibility: Visibility
} }
abstract class InapplicableInfixModifier : KtFirDiagnostic() { abstract class InapplicableInfixModifier : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = InapplicableInfixModifier::class override val diagnosticClass get() = InapplicableInfixModifier::class
abstract val modifier: String abstract val modifier: String
} }
abstract class RepeatedModifier : KtFirDiagnostic() { abstract class RepeatedModifier : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = RepeatedModifier::class override val diagnosticClass get() = RepeatedModifier::class
abstract val modifier: KtModifierKeywordToken abstract val modifier: KtModifierKeywordToken
} }
abstract class RedundantModifier : KtFirDiagnostic() { abstract class RedundantModifier : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = RedundantModifier::class override val diagnosticClass get() = RedundantModifier::class
abstract val redundantModifier: KtModifierKeywordToken abstract val redundantModifier: KtModifierKeywordToken
abstract val conflictingModifier: KtModifierKeywordToken abstract val conflictingModifier: KtModifierKeywordToken
} }
abstract class DeprecatedModifierPair : KtFirDiagnostic() { abstract class DeprecatedModifierPair : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = DeprecatedModifierPair::class override val diagnosticClass get() = DeprecatedModifierPair::class
abstract val deprecatedModifier: KtModifierKeywordToken abstract val deprecatedModifier: KtModifierKeywordToken
abstract val conflictingModifier: KtModifierKeywordToken abstract val conflictingModifier: KtModifierKeywordToken
} }
abstract class IncompatibleModifiers : KtFirDiagnostic() { abstract class IncompatibleModifiers : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = IncompatibleModifiers::class override val diagnosticClass get() = IncompatibleModifiers::class
abstract val modifier1: KtModifierKeywordToken abstract val modifier1: KtModifierKeywordToken
abstract val modifier2: KtModifierKeywordToken abstract val modifier2: KtModifierKeywordToken
} }
abstract class RedundantOpenInInterface : KtFirDiagnostic() { abstract class RedundantOpenInInterface : KtFirDiagnostic<KtModifierListOwner>() {
override val diagnosticClass get() = RedundantOpenInInterface::class override val diagnosticClass get() = RedundantOpenInInterface::class
abstract override val psi: KtModifierListOwner
} }
abstract class NoneApplicable : KtFirDiagnostic() { abstract class NoneApplicable : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = NoneApplicable::class override val diagnosticClass get() = NoneApplicable::class
abstract val candidates: List<KtSymbol> abstract val candidates: List<KtSymbol>
} }
abstract class InapplicableCandidate : KtFirDiagnostic() { abstract class InapplicableCandidate : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = InapplicableCandidate::class override val diagnosticClass get() = InapplicableCandidate::class
abstract val candidate: KtSymbol abstract val candidate: KtSymbol
} }
abstract class InapplicableLateinitModifier : KtFirDiagnostic() { abstract class InapplicableLateinitModifier : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = InapplicableLateinitModifier::class override val diagnosticClass get() = InapplicableLateinitModifier::class
abstract val reason: String abstract val reason: String
} }
abstract class Ambiguity : KtFirDiagnostic() { abstract class Ambiguity : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = Ambiguity::class override val diagnosticClass get() = Ambiguity::class
abstract val candidates: List<KtSymbol> abstract val candidates: List<KtSymbol>
} }
abstract class AssignOperatorAmbiguity : KtFirDiagnostic() { abstract class AssignOperatorAmbiguity : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = AssignOperatorAmbiguity::class override val diagnosticClass get() = AssignOperatorAmbiguity::class
abstract val candidates: List<KtSymbol> abstract val candidates: List<KtSymbol>
} }
abstract class TypeMismatch : KtFirDiagnostic() { abstract class TypeMismatch : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = TypeMismatch::class override val diagnosticClass get() = TypeMismatch::class
abstract val expectedType: KtType abstract val expectedType: KtType
abstract val actualType: KtType abstract val actualType: KtType
} }
abstract class RecursionInImplicitTypes : KtFirDiagnostic() { abstract class RecursionInImplicitTypes : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = RecursionInImplicitTypes::class override val diagnosticClass get() = RecursionInImplicitTypes::class
} }
abstract class InferenceError : KtFirDiagnostic() { abstract class InferenceError : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = InferenceError::class override val diagnosticClass get() = InferenceError::class
} }
abstract class ProjectionOnNonClassTypeArgument : KtFirDiagnostic() { abstract class ProjectionOnNonClassTypeArgument : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = ProjectionOnNonClassTypeArgument::class override val diagnosticClass get() = ProjectionOnNonClassTypeArgument::class
} }
abstract class UpperBoundViolated : KtFirDiagnostic() { abstract class UpperBoundViolated : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = UpperBoundViolated::class override val diagnosticClass get() = UpperBoundViolated::class
abstract val typeParameter: KtTypeParameterSymbol abstract val typeParameter: KtTypeParameterSymbol
abstract val violatedType: KtType abstract val violatedType: KtType
} }
abstract class TypeArgumentsNotAllowed : KtFirDiagnostic() { abstract class TypeArgumentsNotAllowed : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = TypeArgumentsNotAllowed::class override val diagnosticClass get() = TypeArgumentsNotAllowed::class
} }
abstract class WrongNumberOfTypeArguments : KtFirDiagnostic() { abstract class WrongNumberOfTypeArguments : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = WrongNumberOfTypeArguments::class override val diagnosticClass get() = WrongNumberOfTypeArguments::class
abstract val expectedCount: Int abstract val expectedCount: Int
abstract val classifier: KtClassLikeSymbol abstract val classifier: KtClassLikeSymbol
} }
abstract class NoTypeForTypeParameter : KtFirDiagnostic() { abstract class NoTypeForTypeParameter : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = NoTypeForTypeParameter::class override val diagnosticClass get() = NoTypeForTypeParameter::class
} }
abstract class TypeParametersInObject : KtFirDiagnostic() { abstract class TypeParametersInObject : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = TypeParametersInObject::class override val diagnosticClass get() = TypeParametersInObject::class
} }
abstract class IllegalProjectionUsage : KtFirDiagnostic() { abstract class IllegalProjectionUsage : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = IllegalProjectionUsage::class override val diagnosticClass get() = IllegalProjectionUsage::class
} }
abstract class TypeParametersInEnum : KtFirDiagnostic() { abstract class TypeParametersInEnum : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = TypeParametersInEnum::class override val diagnosticClass get() = TypeParametersInEnum::class
} }
abstract class ConflictingProjection : KtFirDiagnostic() { abstract class ConflictingProjection : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = ConflictingProjection::class override val diagnosticClass get() = ConflictingProjection::class
abstract val type: String abstract val type: String
} }
abstract class VarianceOnTypeParameterNotAllowed : KtFirDiagnostic() { abstract class VarianceOnTypeParameterNotAllowed : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = VarianceOnTypeParameterNotAllowed::class override val diagnosticClass get() = VarianceOnTypeParameterNotAllowed::class
} }
abstract class ReturnTypeMismatchOnOverride : KtFirDiagnostic() { abstract class ReturnTypeMismatchOnOverride : KtFirDiagnostic<KtCallableDeclaration>() {
override val diagnosticClass get() = ReturnTypeMismatchOnOverride::class override val diagnosticClass get() = ReturnTypeMismatchOnOverride::class
abstract val returnType: String abstract val function: KtSymbol
abstract val superFunction: KtSymbol abstract val superFunction: KtSymbol
} }
abstract class PropertyTypeMismatchOnOverride : KtFirDiagnostic() { abstract class PropertyTypeMismatchOnOverride : KtFirDiagnostic<KtCallableDeclaration>() {
override val diagnosticClass get() = PropertyTypeMismatchOnOverride::class override val diagnosticClass get() = PropertyTypeMismatchOnOverride::class
abstract val propertyType: String abstract val property: KtSymbol
abstract val targetProperty: KtSymbol abstract val targetProperty: KtSymbol
} }
abstract class VarTypeMismatchOnOverride : KtFirDiagnostic() { abstract class VarTypeMismatchOnOverride : KtFirDiagnostic<KtCallableDeclaration>() {
override val diagnosticClass get() = VarTypeMismatchOnOverride::class override val diagnosticClass get() = VarTypeMismatchOnOverride::class
abstract val variableType: String abstract val variable: KtSymbol
abstract val targetVariable: KtSymbol abstract val targetVariable: KtSymbol
} }
abstract class ManyCompanionObjects : KtFirDiagnostic() { abstract class ManyCompanionObjects : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = ManyCompanionObjects::class override val diagnosticClass get() = ManyCompanionObjects::class
} }
abstract class ConflictingOverloads : KtFirDiagnostic() { abstract class ConflictingOverloads : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = ConflictingOverloads::class override val diagnosticClass get() = ConflictingOverloads::class
abstract val conflictingOverloads: String abstract val conflictingOverloads: String
} }
abstract class Redeclaration : KtFirDiagnostic() { abstract class Redeclaration : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = Redeclaration::class override val diagnosticClass get() = Redeclaration::class
abstract val conflictingDeclaration: String abstract val conflictingDeclaration: String
} }
abstract class AnyMethodImplementedInInterface : KtFirDiagnostic() { abstract class AnyMethodImplementedInInterface : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = AnyMethodImplementedInInterface::class override val diagnosticClass get() = AnyMethodImplementedInInterface::class
} }
abstract class LocalObjectNotAllowed : KtFirDiagnostic() { abstract class LocalObjectNotAllowed : KtFirDiagnostic<KtNamedDeclaration>() {
override val diagnosticClass get() = LocalObjectNotAllowed::class override val diagnosticClass get() = LocalObjectNotAllowed::class
abstract override val psi: KtNamedDeclaration
abstract val objectName: Name abstract val objectName: Name
} }
abstract class LocalInterfaceNotAllowed : KtFirDiagnostic() { abstract class LocalInterfaceNotAllowed : KtFirDiagnostic<KtNamedDeclaration>() {
override val diagnosticClass get() = LocalInterfaceNotAllowed::class override val diagnosticClass get() = LocalInterfaceNotAllowed::class
abstract override val psi: KtNamedDeclaration
abstract val interfaceName: Name abstract val interfaceName: Name
} }
abstract class AbstractFunctionInNonAbstractClass : KtFirDiagnostic() { abstract class AbstractFunctionInNonAbstractClass : KtFirDiagnostic<KtFunction>() {
override val diagnosticClass get() = AbstractFunctionInNonAbstractClass::class override val diagnosticClass get() = AbstractFunctionInNonAbstractClass::class
abstract override val psi: KtFunction
abstract val function: KtSymbol abstract val function: KtSymbol
abstract val containingClass: KtSymbol abstract val containingClass: KtSymbol
} }
abstract class AbstractFunctionWithBody : KtFirDiagnostic() { abstract class AbstractFunctionWithBody : KtFirDiagnostic<KtFunction>() {
override val diagnosticClass get() = AbstractFunctionWithBody::class override val diagnosticClass get() = AbstractFunctionWithBody::class
abstract override val psi: KtFunction
abstract val function: KtSymbol abstract val function: KtSymbol
} }
abstract class NonAbstractFunctionWithNoBody : KtFirDiagnostic() { abstract class NonAbstractFunctionWithNoBody : KtFirDiagnostic<KtFunction>() {
override val diagnosticClass get() = NonAbstractFunctionWithNoBody::class override val diagnosticClass get() = NonAbstractFunctionWithNoBody::class
abstract override val psi: KtFunction
abstract val function: KtSymbol abstract val function: KtSymbol
} }
abstract class PrivateFunctionWithNoBody : KtFirDiagnostic() { abstract class PrivateFunctionWithNoBody : KtFirDiagnostic<KtFunction>() {
override val diagnosticClass get() = PrivateFunctionWithNoBody::class override val diagnosticClass get() = PrivateFunctionWithNoBody::class
abstract override val psi: KtFunction
abstract val function: KtSymbol abstract val function: KtSymbol
} }
abstract class NonMemberFunctionNoBody : KtFirDiagnostic() { abstract class NonMemberFunctionNoBody : KtFirDiagnostic<KtFunction>() {
override val diagnosticClass get() = NonMemberFunctionNoBody::class override val diagnosticClass get() = NonMemberFunctionNoBody::class
abstract override val psi: KtFunction
abstract val function: KtSymbol abstract val function: KtSymbol
} }
abstract class FunctionDeclarationWithNoName : KtFirDiagnostic() { abstract class FunctionDeclarationWithNoName : KtFirDiagnostic<KtFunction>() {
override val diagnosticClass get() = FunctionDeclarationWithNoName::class override val diagnosticClass get() = FunctionDeclarationWithNoName::class
abstract override val psi: KtFunction
} }
abstract class AnonymousFunctionParameterWithDefaultValue : KtFirDiagnostic() { abstract class AnonymousFunctionParameterWithDefaultValue : KtFirDiagnostic<KtParameter>() {
override val diagnosticClass get() = AnonymousFunctionParameterWithDefaultValue::class override val diagnosticClass get() = AnonymousFunctionParameterWithDefaultValue::class
abstract override val psi: KtParameter
} }
abstract class UselessVarargOnParameter : KtFirDiagnostic() { abstract class UselessVarargOnParameter : KtFirDiagnostic<KtParameter>() {
override val diagnosticClass get() = UselessVarargOnParameter::class override val diagnosticClass get() = UselessVarargOnParameter::class
abstract override val psi: KtParameter
} }
abstract class AbstractPropertyInNonAbstractClass : KtFirDiagnostic() { abstract class AbstractPropertyInNonAbstractClass : KtFirDiagnostic<KtModifierListOwner>() {
override val diagnosticClass get() = AbstractPropertyInNonAbstractClass::class override val diagnosticClass get() = AbstractPropertyInNonAbstractClass::class
abstract override val psi: KtModifierListOwner
abstract val property: KtSymbol abstract val property: KtSymbol
abstract val containingClass: KtSymbol abstract val containingClass: KtSymbol
} }
abstract class PrivatePropertyInInterface : KtFirDiagnostic() { abstract class PrivatePropertyInInterface : KtFirDiagnostic<KtProperty>() {
override val diagnosticClass get() = PrivatePropertyInInterface::class override val diagnosticClass get() = PrivatePropertyInInterface::class
abstract override val psi: KtProperty
} }
abstract class AbstractPropertyWithInitializer : KtFirDiagnostic() { abstract class AbstractPropertyWithInitializer : KtFirDiagnostic<KtExpression>() {
override val diagnosticClass get() = AbstractPropertyWithInitializer::class override val diagnosticClass get() = AbstractPropertyWithInitializer::class
abstract override val psi: KtExpression
} }
abstract class PropertyInitializerInInterface : KtFirDiagnostic() { abstract class PropertyInitializerInInterface : KtFirDiagnostic<KtExpression>() {
override val diagnosticClass get() = PropertyInitializerInInterface::class override val diagnosticClass get() = PropertyInitializerInInterface::class
abstract override val psi: KtExpression
} }
abstract class PropertyWithNoTypeNoInitializer : KtFirDiagnostic() { abstract class PropertyWithNoTypeNoInitializer : KtFirDiagnostic<KtProperty>() {
override val diagnosticClass get() = PropertyWithNoTypeNoInitializer::class override val diagnosticClass get() = PropertyWithNoTypeNoInitializer::class
abstract override val psi: KtProperty
} }
abstract class AbstractDelegatedProperty : KtFirDiagnostic() { abstract class AbstractDelegatedProperty : KtFirDiagnostic<KtPropertyDelegate>() {
override val diagnosticClass get() = AbstractDelegatedProperty::class override val diagnosticClass get() = AbstractDelegatedProperty::class
abstract override val psi: KtPropertyDelegate
} }
abstract class DelegatedPropertyInInterface : KtFirDiagnostic() { abstract class DelegatedPropertyInInterface : KtFirDiagnostic<KtPropertyDelegate>() {
override val diagnosticClass get() = DelegatedPropertyInInterface::class override val diagnosticClass get() = DelegatedPropertyInInterface::class
abstract override val psi: KtPropertyDelegate
} }
abstract class AbstractPropertyWithGetter : KtFirDiagnostic() { abstract class AbstractPropertyWithGetter : KtFirDiagnostic<KtPropertyAccessor>() {
override val diagnosticClass get() = AbstractPropertyWithGetter::class override val diagnosticClass get() = AbstractPropertyWithGetter::class
abstract override val psi: KtPropertyAccessor
} }
abstract class AbstractPropertyWithSetter : KtFirDiagnostic() { abstract class AbstractPropertyWithSetter : KtFirDiagnostic<KtPropertyAccessor>() {
override val diagnosticClass get() = AbstractPropertyWithSetter::class override val diagnosticClass get() = AbstractPropertyWithSetter::class
abstract override val psi: KtPropertyAccessor
} }
abstract class PrivateSetterForAbstractProperty : KtFirDiagnostic() { abstract class PrivateSetterForAbstractProperty : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = PrivateSetterForAbstractProperty::class override val diagnosticClass get() = PrivateSetterForAbstractProperty::class
} }
abstract class PrivateSetterForOpenProperty : KtFirDiagnostic() { abstract class PrivateSetterForOpenProperty : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = PrivateSetterForOpenProperty::class override val diagnosticClass get() = PrivateSetterForOpenProperty::class
} }
abstract class ExpectedPrivateDeclaration : KtFirDiagnostic() { abstract class ExpectedPrivateDeclaration : KtFirDiagnostic<KtModifierListOwner>() {
override val diagnosticClass get() = ExpectedPrivateDeclaration::class override val diagnosticClass get() = ExpectedPrivateDeclaration::class
abstract override val psi: KtModifierListOwner
} }
abstract class ExpectedDeclarationWithBody : KtFirDiagnostic() { abstract class ExpectedDeclarationWithBody : KtFirDiagnostic<KtDeclaration>() {
override val diagnosticClass get() = ExpectedDeclarationWithBody::class override val diagnosticClass get() = ExpectedDeclarationWithBody::class
abstract override val psi: KtDeclaration
} }
abstract class ExpectedPropertyInitializer : KtFirDiagnostic() { abstract class ExpectedPropertyInitializer : KtFirDiagnostic<KtExpression>() {
override val diagnosticClass get() = ExpectedPropertyInitializer::class override val diagnosticClass get() = ExpectedPropertyInitializer::class
abstract override val psi: KtExpression
} }
abstract class ExpectedDelegatedProperty : KtFirDiagnostic() { abstract class ExpectedDelegatedProperty : KtFirDiagnostic<KtPropertyDelegate>() {
override val diagnosticClass get() = ExpectedDelegatedProperty::class override val diagnosticClass get() = ExpectedDelegatedProperty::class
abstract override val psi: KtPropertyDelegate
} }
abstract class InitializerRequiredForDestructuringDeclaration : KtFirDiagnostic() { abstract class InitializerRequiredForDestructuringDeclaration : KtFirDiagnostic<KtDestructuringDeclaration>() {
override val diagnosticClass get() = InitializerRequiredForDestructuringDeclaration::class override val diagnosticClass get() = InitializerRequiredForDestructuringDeclaration::class
abstract override val psi: KtDestructuringDeclaration
} }
abstract class ComponentFunctionMissing : KtFirDiagnostic() { abstract class ComponentFunctionMissing : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = ComponentFunctionMissing::class override val diagnosticClass get() = ComponentFunctionMissing::class
abstract val missingFunctionName: Name abstract val missingFunctionName: Name
abstract val destructingType: KtType abstract val destructingType: KtType
} }
abstract class ComponentFunctionAmbiguity : KtFirDiagnostic() { abstract class ComponentFunctionAmbiguity : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = ComponentFunctionAmbiguity::class override val diagnosticClass get() = ComponentFunctionAmbiguity::class
abstract val functionWithAmbiguityName: Name abstract val functionWithAmbiguityName: Name
abstract val candidates: List<KtSymbol> abstract val candidates: List<KtSymbol>
} }
abstract class UninitializedVariable : KtFirDiagnostic() { abstract class UninitializedVariable : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = UninitializedVariable::class override val diagnosticClass get() = UninitializedVariable::class
abstract val variable: KtVariableSymbol abstract val variable: KtVariableSymbol
} }
abstract class WrongInvocationKind : KtFirDiagnostic() { abstract class WrongInvocationKind : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = WrongInvocationKind::class override val diagnosticClass get() = WrongInvocationKind::class
abstract val declaration: KtSymbol abstract val declaration: KtSymbol
abstract val requiredRange: EventOccurrencesRange abstract val requiredRange: EventOccurrencesRange
abstract val actualRange: EventOccurrencesRange abstract val actualRange: EventOccurrencesRange
} }
abstract class LeakedInPlaceLambda : KtFirDiagnostic() { abstract class LeakedInPlaceLambda : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = LeakedInPlaceLambda::class override val diagnosticClass get() = LeakedInPlaceLambda::class
abstract val lambda: KtSymbol abstract val lambda: KtSymbol
} }
abstract class WrongImpliesCondition : KtFirDiagnostic() { abstract class WrongImpliesCondition : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = WrongImpliesCondition::class override val diagnosticClass get() = WrongImpliesCondition::class
} }
abstract class RedundantVisibilityModifier : KtFirDiagnostic() { abstract class RedundantVisibilityModifier : KtFirDiagnostic<KtModifierListOwner>() {
override val diagnosticClass get() = RedundantVisibilityModifier::class override val diagnosticClass get() = RedundantVisibilityModifier::class
abstract override val psi: KtModifierListOwner
} }
abstract class RedundantModalityModifier : KtFirDiagnostic() { abstract class RedundantModalityModifier : KtFirDiagnostic<KtModifierListOwner>() {
override val diagnosticClass get() = RedundantModalityModifier::class override val diagnosticClass get() = RedundantModalityModifier::class
abstract override val psi: KtModifierListOwner
} }
abstract class RedundantReturnUnitType : KtFirDiagnostic() { abstract class RedundantReturnUnitType : KtFirDiagnostic<PsiTypeElement>() {
override val diagnosticClass get() = RedundantReturnUnitType::class override val diagnosticClass get() = RedundantReturnUnitType::class
abstract override val psi: PsiTypeElement
} }
abstract class RedundantExplicitType : KtFirDiagnostic() { abstract class RedundantExplicitType : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = RedundantExplicitType::class override val diagnosticClass get() = RedundantExplicitType::class
} }
abstract class RedundantSingleExpressionStringTemplate : KtFirDiagnostic() { abstract class RedundantSingleExpressionStringTemplate : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = RedundantSingleExpressionStringTemplate::class override val diagnosticClass get() = RedundantSingleExpressionStringTemplate::class
} }
abstract class CanBeVal : KtFirDiagnostic() { abstract class CanBeVal : KtFirDiagnostic<KtDeclaration>() {
override val diagnosticClass get() = CanBeVal::class override val diagnosticClass get() = CanBeVal::class
abstract override val psi: KtDeclaration
} }
abstract class CanBeReplacedWithOperatorAssignment : KtFirDiagnostic() { abstract class CanBeReplacedWithOperatorAssignment : KtFirDiagnostic<KtExpression>() {
override val diagnosticClass get() = CanBeReplacedWithOperatorAssignment::class override val diagnosticClass get() = CanBeReplacedWithOperatorAssignment::class
abstract override val psi: KtExpression
} }
abstract class RedundantCallOfConversionMethod : KtFirDiagnostic() { abstract class RedundantCallOfConversionMethod : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = RedundantCallOfConversionMethod::class override val diagnosticClass get() = RedundantCallOfConversionMethod::class
} }
abstract class ArrayEqualityOperatorCanBeReplacedWithEquals : KtFirDiagnostic() { abstract class ArrayEqualityOperatorCanBeReplacedWithEquals : KtFirDiagnostic<KtExpression>() {
override val diagnosticClass get() = ArrayEqualityOperatorCanBeReplacedWithEquals::class override val diagnosticClass get() = ArrayEqualityOperatorCanBeReplacedWithEquals::class
abstract override val psi: KtExpression
} }
abstract class EmptyRange : KtFirDiagnostic() { abstract class EmptyRange : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = EmptyRange::class override val diagnosticClass get() = EmptyRange::class
} }
abstract class RedundantSetterParameterType : KtFirDiagnostic() { abstract class RedundantSetterParameterType : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = RedundantSetterParameterType::class override val diagnosticClass get() = RedundantSetterParameterType::class
} }
abstract class UnusedVariable : KtFirDiagnostic() { abstract class UnusedVariable : KtFirDiagnostic<KtNamedDeclaration>() {
override val diagnosticClass get() = UnusedVariable::class override val diagnosticClass get() = UnusedVariable::class
abstract override val psi: KtNamedDeclaration
} }
abstract class AssignedValueIsNeverRead : KtFirDiagnostic() { abstract class AssignedValueIsNeverRead : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = AssignedValueIsNeverRead::class override val diagnosticClass get() = AssignedValueIsNeverRead::class
} }
abstract class VariableInitializerIsRedundant : KtFirDiagnostic() { abstract class VariableInitializerIsRedundant : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = VariableInitializerIsRedundant::class override val diagnosticClass get() = VariableInitializerIsRedundant::class
} }
abstract class VariableNeverRead : KtFirDiagnostic() { abstract class VariableNeverRead : KtFirDiagnostic<KtNamedDeclaration>() {
override val diagnosticClass get() = VariableNeverRead::class override val diagnosticClass get() = VariableNeverRead::class
abstract override val psi: KtNamedDeclaration
} }
abstract class UselessCallOnNotNull : KtFirDiagnostic() { abstract class UselessCallOnNotNull : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = UselessCallOnNotNull::class override val diagnosticClass get() = UselessCallOnNotNull::class
} }