[FIR] Don't inherit FIR diagnostics from FE 1.0 diagnostics

This commit is contained in:
Dmitriy Novozhilov
2021-06-08 18:19:49 +03:00
parent 3d544be655
commit d807ac2f05
8 changed files with 35 additions and 48 deletions
@@ -1,5 +1,4 @@
# Note that this file is also present in idea/src/META-INF/services # Note that this file is also present in idea/src/META-INF/services
org.jetbrains.kotlin.resolve.jvm.diagnostics.DefaultErrorMessagesJvm org.jetbrains.kotlin.resolve.jvm.diagnostics.DefaultErrorMessagesJvm
org.jetbrains.kotlin.js.resolve.diagnostics.DefaultErrorMessagesJs org.jetbrains.kotlin.js.resolve.diagnostics.DefaultErrorMessagesJs
org.jetbrains.kotlin.fir.analysis.diagnostics.FirDefaultErrorMessages org.jetbrains.kotlin.resolve.konan.diagnostics.DefaultErrorMessagesNative
org.jetbrains.kotlin.resolve.konan.diagnostics.DefaultErrorMessagesNative
@@ -147,10 +147,11 @@ object FirKotlinToJvmBytecodeCompiler {
firAnalyzerFacade.runResolution() firAnalyzerFacade.runResolution()
val firDiagnostics = firAnalyzerFacade.runCheckers().values.flatten() val firDiagnostics = firAnalyzerFacade.runCheckers().values.flatten()
AnalyzerWithCompilerReport.reportDiagnostics( // TODO
SimpleGenericDiagnostics(firDiagnostics), // AnalyzerWithCompilerReport.reportDiagnostics(
environment.messageCollector // SimpleGenericDiagnostics(firDiagnostics),
) // environment.messageCollector
// )
performanceManager?.notifyAnalysisFinished() performanceManager?.notifyAnalysisFinished()
if (syntaxErrors || firDiagnostics.any { it.severity == Severity.ERROR }) { if (syntaxErrors || firDiagnostics.any { it.severity == Severity.ERROR }) {
@@ -377,11 +377,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.WRONG_SETTER_PARA
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.WRONG_SETTER_RETURN_TYPE import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.WRONG_SETTER_RETURN_TYPE
@Suppress("unused") @Suppress("unused")
class FirDefaultErrorMessages : DefaultErrorMessages.Extension { class FirDefaultErrorMessages {
override fun getMap(): DiagnosticFactoryToRendererMap {
return MAP.psiDiagnosticMap
}
companion object { companion object {
fun getRendererForDiagnostic(diagnostic: FirDiagnostic<*>): FirDiagnosticRenderer<*> { fun getRendererForDiagnostic(diagnostic: FirDiagnostic<*>): FirDiagnosticRenderer<*> {
val factory = diagnostic.factory val factory = diagnostic.factory
@@ -8,25 +8,23 @@ package org.jetbrains.kotlin.fir.analysis.diagnostics
import com.intellij.openapi.util.TextRange import com.intellij.openapi.util.TextRange
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile import com.intellij.psi.PsiFile
import org.jetbrains.kotlin.diagnostics.Diagnostic
import org.jetbrains.kotlin.diagnostics.Severity import org.jetbrains.kotlin.diagnostics.Severity
import org.jetbrains.kotlin.diagnostics.UnboundDiagnostic
import org.jetbrains.kotlin.fir.FirLightSourceElement import org.jetbrains.kotlin.fir.FirLightSourceElement
import org.jetbrains.kotlin.fir.FirPsiSourceElement import org.jetbrains.kotlin.fir.FirPsiSourceElement
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
// ------------------------------ diagnostics ------------------------------ // ------------------------------ diagnostics ------------------------------
sealed class FirDiagnostic<out E : FirSourceElement> : UnboundDiagnostic { sealed class FirDiagnostic<out E : FirSourceElement> {
abstract val element: E abstract val element: E
abstract override val severity: Severity abstract val severity: Severity
abstract override val factory: AbstractFirDiagnosticFactory<*, *> abstract val factory: AbstractFirDiagnosticFactory<*, *>
abstract val positioningStrategy: SourceElementPositioningStrategy<*> abstract val positioningStrategy: SourceElementPositioningStrategy<*>
override val textRanges: List<TextRange> val textRanges: List<TextRange>
get() = positioningStrategy.markDiagnostic(this) get() = positioningStrategy.markDiagnostic(this)
override val isValid: Boolean val isValid: Boolean
get() = positioningStrategy.isValid(element) get() = positioningStrategy.isValid(element)
} }
@@ -62,13 +60,16 @@ sealed class FirDiagnosticWithParameters4<out E : FirSourceElement, A, B, C, D>
// ------------------------------ psi diagnostics ------------------------------ // ------------------------------ psi diagnostics ------------------------------
interface FirPsiDiagnostic<P : PsiElement> : Diagnostic { interface FirPsiDiagnostic<P : PsiElement> {
val factory: AbstractFirDiagnosticFactory<*, P>
val element: FirPsiSourceElement<P> val element: FirPsiSourceElement<P>
val textRanges: List<TextRange>
val severity: Severity
override val psiElement: PsiElement val psiElement: PsiElement
get() = element.psi get() = element.psi
override val psiFile: PsiFile val psiFile: PsiFile
get() = psiElement.containingFile get() = psiElement.containingFile
} }
@@ -119,7 +120,7 @@ data class FirPsiDiagnosticWithParameters4<P : PsiElement, A, B, C, D>(
// ------------------------------ light tree diagnostics ------------------------------ // ------------------------------ light tree diagnostics ------------------------------
interface FirLightDiagnostic : UnboundDiagnostic { interface FirLightDiagnostic {
val element: FirLightSourceElement val element: FirLightSourceElement
} }
@@ -1,16 +1,9 @@
/*
* 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") @file:Suppress("UNCHECKED_CAST")
package org.jetbrains.kotlin.fir.analysis.diagnostics package org.jetbrains.kotlin.fir.analysis.diagnostics
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.diagnostics.DiagnosticFactory
import org.jetbrains.kotlin.diagnostics.Severity import org.jetbrains.kotlin.diagnostics.Severity
import org.jetbrains.kotlin.diagnostics.rendering.DiagnosticRenderer
import org.jetbrains.kotlin.fir.FirLightSourceElement import org.jetbrains.kotlin.fir.FirLightSourceElement
import org.jetbrains.kotlin.fir.FirPsiSourceElement import org.jetbrains.kotlin.fir.FirPsiSourceElement
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
@@ -19,16 +12,11 @@ import org.jetbrains.kotlin.fir.FirSourceElement
annotation class InternalDiagnosticFactoryMethod annotation class InternalDiagnosticFactoryMethod
sealed class AbstractFirDiagnosticFactory<D : FirDiagnostic<*>, P : PsiElement>( sealed class AbstractFirDiagnosticFactory<D : FirDiagnostic<*>, P : PsiElement>(
override val name: String, val name: String,
override val severity: Severity, val severity: Severity,
val defaultPositioningStrategy: SourceElementPositioningStrategy<P>, val defaultPositioningStrategy: SourceElementPositioningStrategy<P>,
) : DiagnosticFactory<D>(name, severity) { ) {
abstract val firRenderer: FirDiagnosticRenderer<D> abstract val firRenderer: FirDiagnosticRenderer<D>
override var defaultRenderer: DiagnosticRenderer<D>?
get() = firRenderer
set(_) {
}
} }
class FirDiagnosticFactory0<P : PsiElement>( class FirDiagnosticFactory0<P : PsiElement>(
@@ -5,12 +5,10 @@
package org.jetbrains.kotlin.fir.analysis.diagnostics package org.jetbrains.kotlin.fir.analysis.diagnostics
import org.jetbrains.kotlin.diagnostics.rendering.DiagnosticFactoryToRendererMap
import org.jetbrains.kotlin.diagnostics.rendering.DiagnosticParameterRenderer import org.jetbrains.kotlin.diagnostics.rendering.DiagnosticParameterRenderer
class FirDiagnosticFactoryToRendererMap(val name: String) { class FirDiagnosticFactoryToRendererMap(val name: String) {
private val renderersMap: MutableMap<AbstractFirDiagnosticFactory<*, *>, FirDiagnosticRenderer<*>> = mutableMapOf() private val renderersMap: MutableMap<AbstractFirDiagnosticFactory<*, *>, FirDiagnosticRenderer<*>> = mutableMapOf()
val psiDiagnosticMap: DiagnosticFactoryToRendererMap = DiagnosticFactoryToRendererMap()
operator fun get(factory: AbstractFirDiagnosticFactory<*, *>): FirDiagnosticRenderer<*>? = renderersMap[factory] operator fun get(factory: AbstractFirDiagnosticFactory<*, *>): FirDiagnosticRenderer<*>? = renderersMap[factory]
@@ -58,6 +56,5 @@ class FirDiagnosticFactoryToRendererMap(val name: String) {
private fun put(factory: AbstractFirDiagnosticFactory<*, *>, renderer: FirDiagnosticRenderer<*>) { private fun put(factory: AbstractFirDiagnosticFactory<*, *>, renderer: FirDiagnosticRenderer<*>) {
renderersMap[factory] = renderer renderersMap[factory] = renderer
psiDiagnosticMap.put(factory, renderer)
} }
} }
@@ -6,11 +6,11 @@
package org.jetbrains.kotlin.fir.analysis.diagnostics package org.jetbrains.kotlin.fir.analysis.diagnostics
import org.jetbrains.kotlin.diagnostics.rendering.* import org.jetbrains.kotlin.diagnostics.rendering.*
import java.text.MessageFormat
interface FirDiagnosticRenderer<D : FirDiagnostic<*>> : DiagnosticRenderer<D> { sealed interface FirDiagnosticRenderer<D : FirDiagnostic<*>> {
override fun render(diagnostic: D): String fun render(diagnostic: D): String
fun renderParameters(diagnostic: D): Array<out Any?>
override fun renderParameters(diagnostic: D): Array<out Any?>
} }
class SimpleFirDiagnosticRenderer(private val message: String) : FirDiagnosticRenderer<FirSimpleDiagnostic<*>> { class SimpleFirDiagnosticRenderer(private val message: String) : FirDiagnosticRenderer<FirSimpleDiagnostic<*>> {
@@ -19,13 +19,19 @@ class SimpleFirDiagnosticRenderer(private val message: String) : FirDiagnosticRe
} }
override fun renderParameters(diagnostic: FirSimpleDiagnostic<*>): Array<out Any?> { override fun renderParameters(diagnostic: FirSimpleDiagnostic<*>): Array<out Any?> {
return arrayOf() return emptyArray()
} }
} }
sealed class AbstractFirDiagnosticWithParametersRenderer<D : FirDiagnostic<*>>( sealed class AbstractFirDiagnosticWithParametersRenderer<D : FirDiagnostic<*>>(
protected val message: String protected val message: String
) : FirDiagnosticRenderer<D>, AbstractDiagnosticWithParametersRenderer<D>(message) ) : FirDiagnosticRenderer<D> {
private val messageFormat = MessageFormat(message)
final override fun render(diagnostic: D): String {
return messageFormat.format(renderParameters(diagnostic))
}
}
class FirDiagnosticWithParameters1Renderer<A>( class FirDiagnosticWithParameters1Renderer<A>(
message: String, message: String,
@@ -1,5 +1,4 @@
# Note that this file is also present in compiler/cli/src/META-INF/services # Note that this file is also present in compiler/cli/src/META-INF/services
org.jetbrains.kotlin.resolve.jvm.diagnostics.DefaultErrorMessagesJvm org.jetbrains.kotlin.resolve.jvm.diagnostics.DefaultErrorMessagesJvm
org.jetbrains.kotlin.js.resolve.diagnostics.DefaultErrorMessagesJs org.jetbrains.kotlin.js.resolve.diagnostics.DefaultErrorMessagesJs
org.jetbrains.kotlin.fir.analysis.diagnostics.FirDefaultErrorMessages org.jetbrains.kotlin.resolve.konan.diagnostics.DefaultErrorMessagesNative
org.jetbrains.kotlin.resolve.konan.diagnostics.DefaultErrorMessagesNative