Rearrange fir diagnostic for further reuse
This commit is contained in:
+6
-6
@@ -16,8 +16,8 @@ import org.jetbrains.kotlin.analysis.api.fir.types.KtFirType
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtSubstitutor
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnostic
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirPsiDiagnostic
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.KtDiagnostic
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.KtPsiDiagnostic
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.toFirDiagnostics
|
||||
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
|
||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
|
||||
@@ -41,17 +41,17 @@ internal interface KtFirAnalysisSessionComponent {
|
||||
|
||||
fun ConeKotlinType.asKtType() = analysisSession.firSymbolBuilder.typeBuilder.buildKtType(this)
|
||||
|
||||
fun FirPsiDiagnostic.asKtDiagnostic(): KtDiagnosticWithPsi<*> =
|
||||
KT_DIAGNOSTIC_CONVERTER.convert(analysisSession, this as FirDiagnostic)
|
||||
fun KtPsiDiagnostic.asKtDiagnostic(): KtDiagnosticWithPsi<*> =
|
||||
KT_DIAGNOSTIC_CONVERTER.convert(analysisSession, this as KtDiagnostic)
|
||||
|
||||
fun ConeDiagnostic.asKtDiagnostic(
|
||||
source: KtSourceElement,
|
||||
qualifiedAccessSource: KtSourceElement?,
|
||||
diagnosticCache: MutableList<FirDiagnostic>
|
||||
diagnosticCache: MutableList<KtDiagnostic>
|
||||
): KtDiagnosticWithPsi<*>? {
|
||||
val firDiagnostic = toFirDiagnostics(analysisSession.rootModuleSession, source, qualifiedAccessSource).firstOrNull() ?: return null
|
||||
diagnosticCache += firDiagnostic
|
||||
check(firDiagnostic is FirPsiDiagnostic)
|
||||
check(firDiagnostic is KtPsiDiagnostic)
|
||||
return firDiagnostic.asKtDiagnostic()
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtSubstitutor
|
||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFir
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnostic
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.KtDiagnostic
|
||||
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.fir.realPsi
|
||||
@@ -49,7 +49,7 @@ internal class KtFirCallResolver(
|
||||
override val analysisSession: KtFirAnalysisSession,
|
||||
override val token: ValidityToken,
|
||||
) : AbstractKtCallResolver(), KtFirAnalysisSessionComponent {
|
||||
private val diagnosticCache = mutableListOf<FirDiagnostic>()
|
||||
private val diagnosticCache = mutableListOf<KtDiagnostic>()
|
||||
private val cache: ConcurrentHashMap<KtElement, KtCall?> = ConcurrentHashMap()
|
||||
|
||||
override fun resolveAccessorCall(call: KtSimpleNameExpression): KtCall? = withValidityAssertion {
|
||||
|
||||
+4
-5
@@ -5,16 +5,15 @@
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api.fir.components
|
||||
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnostic
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.DiagnosticCheckerFilter
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.collectDiagnosticsForFile
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getDiagnostics
|
||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||
import org.jetbrains.kotlin.analysis.api.components.KtDiagnosticCheckerFilter
|
||||
import org.jetbrains.kotlin.analysis.api.components.KtDiagnosticProvider
|
||||
import org.jetbrains.kotlin.analysis.api.diagnostics.KtDiagnosticWithPsi
|
||||
import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.DiagnosticCheckerFilter
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.collectDiagnosticsForFile
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getDiagnostics
|
||||
import org.jetbrains.kotlin.psi.KtElement
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
|
||||
|
||||
+6
-6
@@ -8,22 +8,22 @@ package org.jetbrains.kotlin.analysis.api.fir.diagnostics
|
||||
import com.intellij.openapi.util.TextRange
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.analysis.api.ValidityTokenOwner
|
||||
import org.jetbrains.kotlin.diagnostics.Severity
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDefaultErrorMessages
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnostic
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirPsiDiagnostic
|
||||
import org.jetbrains.kotlin.analysis.api.diagnostics.KtDiagnosticWithPsi
|
||||
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
|
||||
import org.jetbrains.kotlin.diagnostics.Severity
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDefaultErrorMessages
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.KtDiagnostic
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.KtPsiDiagnostic
|
||||
|
||||
internal interface KtAbstractFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI>, ValidityTokenOwner {
|
||||
val firDiagnostic: FirPsiDiagnostic
|
||||
val firDiagnostic: KtPsiDiagnostic
|
||||
|
||||
override val factoryName: String
|
||||
get() = withValidityAssertion { firDiagnostic.factory.name }
|
||||
|
||||
override val defaultMessage: String
|
||||
get() = withValidityAssertion {
|
||||
val diagnostic = firDiagnostic as FirDiagnostic
|
||||
val diagnostic = firDiagnostic as KtDiagnostic
|
||||
|
||||
val firDiagnosticRenderer = FirDefaultErrorMessages.getRendererForDiagnostic(diagnostic)
|
||||
return firDiagnosticRenderer.render(diagnostic)
|
||||
|
||||
+19
-19
@@ -5,33 +5,33 @@
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api.fir.diagnostics
|
||||
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.*
|
||||
import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.*
|
||||
|
||||
internal interface KtFirDiagnosticCreator
|
||||
|
||||
internal fun interface KtFirDiagnostic0Creator : KtFirDiagnosticCreator {
|
||||
fun KtFirAnalysisSession.create(diagnostic: FirSimpleDiagnostic): KtFirDiagnostic<*>
|
||||
fun KtFirAnalysisSession.create(diagnostic: KtSimpleDiagnostic): KtFirDiagnostic<*>
|
||||
}
|
||||
|
||||
internal fun interface KtFirDiagnostic1Creator<A> : KtFirDiagnosticCreator {
|
||||
fun KtFirAnalysisSession.create(diagnostic: FirDiagnosticWithParameters1<A>): KtFirDiagnostic<*>
|
||||
fun KtFirAnalysisSession.create(diagnostic: KtDiagnosticWithParameters1<A>): KtFirDiagnostic<*>
|
||||
}
|
||||
|
||||
internal fun interface KtFirDiagnostic2Creator<A, B> : KtFirDiagnosticCreator {
|
||||
fun KtFirAnalysisSession.create(diagnostic: FirDiagnosticWithParameters2<A, B>): KtFirDiagnostic<*>
|
||||
fun KtFirAnalysisSession.create(diagnostic: KtDiagnosticWithParameters2<A, B>): KtFirDiagnostic<*>
|
||||
}
|
||||
|
||||
internal fun interface KtFirDiagnostic3Creator<A, B, C> : KtFirDiagnosticCreator {
|
||||
fun KtFirAnalysisSession.create(diagnostic: FirDiagnosticWithParameters3<A, B, C>): KtFirDiagnostic<*>
|
||||
fun KtFirAnalysisSession.create(diagnostic: KtDiagnosticWithParameters3<A, B, C>): KtFirDiagnostic<*>
|
||||
}
|
||||
|
||||
internal fun interface KtFirDiagnostic4Creator<A, B, C, D> : KtFirDiagnosticCreator {
|
||||
fun KtFirAnalysisSession.create(diagnostic: FirDiagnosticWithParameters4<A, B, C, D>): KtFirDiagnostic<*>
|
||||
fun KtFirAnalysisSession.create(diagnostic: KtDiagnosticWithParameters4<A, B, C, D>): KtFirDiagnostic<*>
|
||||
}
|
||||
|
||||
internal class KtDiagnosticConverter(private val conversions: Map<AbstractFirDiagnosticFactory, KtFirDiagnosticCreator>) {
|
||||
fun convert(analysisSession: KtFirAnalysisSession, diagnostic: FirDiagnostic): KtFirDiagnostic<*> {
|
||||
internal class KtDiagnosticConverter(private val conversions: Map<AbstractKtDiagnosticFactory, KtFirDiagnosticCreator>) {
|
||||
fun convert(analysisSession: KtFirAnalysisSession, diagnostic: KtDiagnostic): KtFirDiagnostic<*> {
|
||||
val creator = conversions[diagnostic.factory]
|
||||
?: error("No conversion was found for ${diagnostic.factory}")
|
||||
|
||||
@@ -39,19 +39,19 @@ internal class KtDiagnosticConverter(private val conversions: Map<AbstractFirDia
|
||||
return with(analysisSession) {
|
||||
when (creator) {
|
||||
is KtFirDiagnostic0Creator -> with(creator) {
|
||||
create(diagnostic as FirSimpleDiagnostic)
|
||||
create(diagnostic as KtSimpleDiagnostic)
|
||||
}
|
||||
is KtFirDiagnostic1Creator<*> -> with(creator as KtFirDiagnostic1Creator<Any?>) {
|
||||
create(diagnostic as FirDiagnosticWithParameters1<Any?>)
|
||||
create(diagnostic as KtDiagnosticWithParameters1<Any?>)
|
||||
}
|
||||
is KtFirDiagnostic2Creator<*, *> -> with(creator as KtFirDiagnostic2Creator<Any?, Any?>) {
|
||||
create(diagnostic as FirDiagnosticWithParameters2<Any?, Any?>)
|
||||
create(diagnostic as KtDiagnosticWithParameters2<Any?, Any?>)
|
||||
}
|
||||
is KtFirDiagnostic3Creator<*, *, *> -> with(creator as KtFirDiagnostic3Creator<Any?, Any?, Any?>) {
|
||||
create(diagnostic as FirDiagnosticWithParameters3<Any?, Any?, Any?>)
|
||||
create(diagnostic as KtDiagnosticWithParameters3<Any?, Any?, Any?>)
|
||||
}
|
||||
is KtFirDiagnostic4Creator<*, *, *, *> -> with(creator as KtFirDiagnostic4Creator<Any?, Any?, Any?, Any?>) {
|
||||
create(diagnostic as FirDiagnosticWithParameters4<Any?, Any?, Any?, Any?>)
|
||||
create(diagnostic as KtDiagnosticWithParameters4<Any?, Any?, Any?, Any?>)
|
||||
}
|
||||
else -> error("Invalid KtFirDiagnosticCreator ${creator::class.simpleName}")
|
||||
}
|
||||
@@ -60,25 +60,25 @@ internal class KtDiagnosticConverter(private val conversions: Map<AbstractFirDia
|
||||
}
|
||||
|
||||
internal class KtDiagnosticConverterBuilder private constructor() {
|
||||
private val conversions = mutableMapOf<AbstractFirDiagnosticFactory, KtFirDiagnosticCreator>()
|
||||
private val conversions = mutableMapOf<AbstractKtDiagnosticFactory, KtFirDiagnosticCreator>()
|
||||
|
||||
fun add(diagnostic: FirDiagnosticFactory0, creator: KtFirDiagnostic0Creator) {
|
||||
fun add(diagnostic: KtDiagnosticFactory0, creator: KtFirDiagnostic0Creator) {
|
||||
conversions[diagnostic] = creator
|
||||
}
|
||||
|
||||
fun <A> add(diagnostic: FirDiagnosticFactory1<A>, creator: KtFirDiagnostic1Creator<A>) {
|
||||
fun <A> add(diagnostic: KtDiagnosticFactory1<A>, creator: KtFirDiagnostic1Creator<A>) {
|
||||
conversions[diagnostic] = creator
|
||||
}
|
||||
|
||||
fun <A, B> add(diagnostic: FirDiagnosticFactory2<A, B>, creator: KtFirDiagnostic2Creator<A, B>) {
|
||||
fun <A, B> add(diagnostic: KtDiagnosticFactory2<A, B>, creator: KtFirDiagnostic2Creator<A, B>) {
|
||||
conversions[diagnostic] = creator
|
||||
}
|
||||
|
||||
fun <A, B, C> add(diagnostic: FirDiagnosticFactory3<A, B, C>, creator: KtFirDiagnostic3Creator<A, B, C>) {
|
||||
fun <A, B, C> add(diagnostic: KtDiagnosticFactory3<A, B, C>, creator: KtFirDiagnostic3Creator<A, B, C>) {
|
||||
conversions[diagnostic] = creator
|
||||
}
|
||||
|
||||
fun <A, B, C, D> add(diagnostic: FirDiagnosticFactory4<A, B, C, D>, creator: KtFirDiagnostic4Creator<A, B, C, D>) {
|
||||
fun <A, B, C, D> add(diagnostic: KtDiagnosticFactory4<A, B, C, D>, creator: KtFirDiagnostic4Creator<A, B, C, D>) {
|
||||
conversions[diagnostic] = creator
|
||||
}
|
||||
|
||||
|
||||
+612
-612
File diff suppressed because it is too large
Load Diff
+613
-619
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user