[FIR] Switch names of FirDiagnostic and ConeDiagnostic
This commit is contained in:
+3
-3
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.PersistentCheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.collectors.components.*
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.ConeDiagnostic
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnostic
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||
@@ -27,7 +27,7 @@ abstract class AbstractDiagnosticCollector(
|
||||
override val session: FirSession,
|
||||
override val scopeSession: ScopeSession = ScopeSession()
|
||||
) : SessionHolder {
|
||||
fun collectDiagnostics(firFile: FirFile): Iterable<ConeDiagnostic> {
|
||||
fun collectDiagnostics(firFile: FirFile): Iterable<FirDiagnostic> {
|
||||
if (!componentsInitialized) {
|
||||
throw IllegalStateException("Components are not initialized")
|
||||
}
|
||||
@@ -37,7 +37,7 @@ abstract class AbstractDiagnosticCollector(
|
||||
}
|
||||
|
||||
protected abstract fun initializeCollector()
|
||||
protected abstract fun getCollectedDiagnostics(): Iterable<ConeDiagnostic>
|
||||
protected abstract fun getCollectedDiagnostics(): Iterable<FirDiagnostic>
|
||||
abstract fun runCheck(block: (DiagnosticReporter) -> Unit)
|
||||
|
||||
private val components: MutableList<AbstractDiagnosticCollectorComponent> = mutableListOf()
|
||||
|
||||
+4
-4
@@ -6,7 +6,7 @@
|
||||
package org.jetbrains.kotlin.fir.analysis.collectors
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.ConeDiagnostic
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnostic
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.SimpleDiagnosticReporter
|
||||
import java.util.*
|
||||
@@ -42,10 +42,10 @@ class ParallelDiagnosticsCollector(session: FirSession, private val numberOfThre
|
||||
futures.clear()
|
||||
}
|
||||
|
||||
override fun getCollectedDiagnostics(): Iterable<ConeDiagnostic> {
|
||||
override fun getCollectedDiagnostics(): Iterable<FirDiagnostic> {
|
||||
futures.forEach { it.get() }
|
||||
return Iterable {
|
||||
object : Iterator<ConeDiagnostic> {
|
||||
object : Iterator<FirDiagnostic> {
|
||||
private val globalIterator = reporters.iterator()
|
||||
private var localIterator = globalIterator.next().diagnostics.iterator()
|
||||
|
||||
@@ -60,7 +60,7 @@ class ParallelDiagnosticsCollector(session: FirSession, private val numberOfThre
|
||||
return localIterator.hasNext()
|
||||
}
|
||||
|
||||
override fun next(): ConeDiagnostic {
|
||||
override fun next(): FirDiagnostic {
|
||||
update()
|
||||
return localIterator.next()
|
||||
}
|
||||
|
||||
+2
-2
@@ -6,7 +6,7 @@
|
||||
package org.jetbrains.kotlin.fir.analysis.collectors
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.ConeDiagnostic
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnostic
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.SimpleDiagnosticReporter
|
||||
|
||||
@@ -17,7 +17,7 @@ class SimpleDiagnosticsCollector(session: FirSession) : AbstractDiagnosticCollec
|
||||
reporter = SimpleDiagnosticReporter()
|
||||
}
|
||||
|
||||
override fun getCollectedDiagnostics(): Iterable<ConeDiagnostic> {
|
||||
override fun getCollectedDiagnostics(): Iterable<FirDiagnostic> {
|
||||
return reporter.diagnostics
|
||||
}
|
||||
|
||||
|
||||
+15
-26
@@ -12,10 +12,7 @@ import org.jetbrains.kotlin.diagnostics.Errors
|
||||
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollector
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.ConeDiagnostic
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.onSource
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.*
|
||||
import org.jetbrains.kotlin.fir.declarations.FirErrorFunction
|
||||
import org.jetbrains.kotlin.fir.diagnostics.*
|
||||
import org.jetbrains.kotlin.fir.expressions.FirErrorExpression
|
||||
@@ -50,25 +47,25 @@ class ErrorNodeDiagnosticCollectorComponent(collector: AbstractDiagnosticCollect
|
||||
runCheck { reportFirDiagnostic(errorFunction.diagnostic, source, it) }
|
||||
}
|
||||
|
||||
private fun reportFirDiagnostic(diagnostic: FirDiagnostic, source: FirSourceElement, reporter: DiagnosticReporter) {
|
||||
private fun reportFirDiagnostic(diagnostic: ConeDiagnostic, source: FirSourceElement, reporter: DiagnosticReporter) {
|
||||
val coneDiagnostic = when (diagnostic) {
|
||||
is FirUnresolvedReferenceError -> FirErrors.UNRESOLVED_REFERENCE.onSource(source, diagnostic.name?.asString())
|
||||
is FirUnresolvedSymbolError -> FirErrors.UNRESOLVED_REFERENCE.onSource(source, diagnostic.classId.asString())
|
||||
is FirUnresolvedNameError -> FirErrors.UNRESOLVED_REFERENCE.onSource(source, diagnostic.name.asString())
|
||||
is FirInapplicableCandidateError -> FirErrors.INAPPLICABLE_CANDIDATE.onSource(source, diagnostic.candidates.map { it.symbol })
|
||||
is FirAmbiguityError -> FirErrors.AMBIGUITY.onSource(source, diagnostic.candidates)
|
||||
is FirOperatorAmbiguityError -> FirErrors.ASSIGN_OPERATOR_AMBIGUITY.onSource(source, diagnostic.candidates)
|
||||
is FirVariableExpectedError -> Errors.VARIABLE_EXPECTED.onSource(source)
|
||||
is FirTypeMismatchError -> FirErrors.TYPE_MISMATCH.onSource(source, diagnostic.expectedType, diagnostic.actualType)
|
||||
is FirSimpleDiagnostic -> diagnostic.getFactory().onSource(source)
|
||||
is FirDiagnosticWithParameters1<*> -> diagnostic.getFactory().tryOnSource(source, diagnostic.a)
|
||||
is FirStubDiagnostic -> null
|
||||
is ConeUnresolvedReferenceError -> FirErrors.UNRESOLVED_REFERENCE.onSource(source, diagnostic.name?.asString())
|
||||
is ConeUnresolvedSymbolError -> FirErrors.UNRESOLVED_REFERENCE.onSource(source, diagnostic.classId.asString())
|
||||
is ConeUnresolvedNameError -> FirErrors.UNRESOLVED_REFERENCE.onSource(source, diagnostic.name.asString())
|
||||
is ConeInapplicableCandidateError -> FirErrors.INAPPLICABLE_CANDIDATE.onSource(source, diagnostic.candidates.map { it.symbol })
|
||||
is ConeAmbiguityError -> FirErrors.AMBIGUITY.onSource(source, diagnostic.candidates)
|
||||
is ConeOperatorAmbiguityError -> FirErrors.ASSIGN_OPERATOR_AMBIGUITY.onSource(source, diagnostic.candidates)
|
||||
is ConeVariableExpectedError -> Errors.VARIABLE_EXPECTED.onSource(source)
|
||||
is ConeTypeMismatchError -> FirErrors.TYPE_MISMATCH.onSource(source, diagnostic.expectedType, diagnostic.actualType)
|
||||
is ConeSimpleDiagnostic -> diagnostic.getFactory().onSource(source)
|
||||
is ConeSimpleDiagnosticWithParameters1<*> -> diagnostic.getFactory().tryOnSource(source, diagnostic.a)
|
||||
is ConeStubDiagnostic -> null
|
||||
else -> throw IllegalArgumentException("Unsupported diagnostic type: ${diagnostic.javaClass}")
|
||||
}
|
||||
reporter.report(coneDiagnostic)
|
||||
}
|
||||
|
||||
private fun FirSimpleDiagnostic.getFactory(): DiagnosticFactory0<PsiElement> {
|
||||
private fun ConeSimpleDiagnostic.getFactory(): DiagnosticFactory0<PsiElement> {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
return when (kind) {
|
||||
DiagnosticKind.Syntax -> FirErrors.SYNTAX_ERROR
|
||||
@@ -89,19 +86,11 @@ class ErrorNodeDiagnosticCollectorComponent(collector: AbstractDiagnosticCollect
|
||||
} as DiagnosticFactory0<PsiElement>
|
||||
}
|
||||
|
||||
private fun FirDiagnosticWithParameters1<*>.getFactory(): DiagnosticFactory1<PsiElement, Any?> {
|
||||
private fun ConeSimpleDiagnosticWithParameters1<*>.getFactory(): DiagnosticFactory1<PsiElement, Any?> {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
return when (kind) {
|
||||
DiagnosticKind.SuperNotAllowed -> Errors.SUPER_IS_NOT_AN_EXPRESSION
|
||||
else -> throw IllegalArgumentException("Unsupported diagnostic kind: $kind at $javaClass")
|
||||
} as DiagnosticFactory1<PsiElement, Any?>
|
||||
}
|
||||
|
||||
private inline fun <reified E : PsiElement, reified A> DiagnosticFactory1<E, A>.tryOnSource(
|
||||
source: FirSourceElement,
|
||||
a: Any?
|
||||
): ConeDiagnostic? {
|
||||
val aa = a as? A ?: throw IllegalArgumentException("Parameter passed to the factory is of incompatible type!")
|
||||
return onSource(source, aa)
|
||||
}
|
||||
}
|
||||
+3
-3
@@ -6,13 +6,13 @@
|
||||
package org.jetbrains.kotlin.fir.analysis.diagnostics
|
||||
|
||||
abstract class DiagnosticReporter {
|
||||
abstract fun report(diagnostic: ConeDiagnostic?)
|
||||
abstract fun report(diagnostic: FirDiagnostic?)
|
||||
}
|
||||
|
||||
class SimpleDiagnosticReporter : DiagnosticReporter() {
|
||||
val diagnostics: MutableList<ConeDiagnostic> = mutableListOf()
|
||||
val diagnostics: MutableList<FirDiagnostic> = mutableListOf()
|
||||
|
||||
override fun report(diagnostic: ConeDiagnostic?) {
|
||||
override fun report(diagnostic: FirDiagnostic?) {
|
||||
if (diagnostic == null) return
|
||||
diagnostics += diagnostic
|
||||
}
|
||||
|
||||
+17
-9
@@ -10,31 +10,39 @@ import org.jetbrains.kotlin.diagnostics.*
|
||||
import org.jetbrains.kotlin.fir.FirSourceElement
|
||||
import org.jetbrains.kotlin.fir.psi
|
||||
|
||||
class ConeDiagnostic(
|
||||
class FirDiagnostic(
|
||||
val diagnostic: Diagnostic,
|
||||
val source: FirSourceElement
|
||||
)
|
||||
|
||||
inline fun <reified E : PsiElement> DiagnosticFactory0<E>.onSource(source: FirSourceElement): ConeDiagnostic? {
|
||||
inline fun <reified E : PsiElement> DiagnosticFactory0<E>.onSource(source: FirSourceElement): FirDiagnostic? {
|
||||
val psi = source.psi as? E
|
||||
?: throw IllegalArgumentException("Incompatible PSI: expected ${E::class}, actual ${source.psi?.let { it::class }}")
|
||||
return ConeDiagnostic(this.on(psi), source)
|
||||
return FirDiagnostic(this.on(psi), source)
|
||||
}
|
||||
|
||||
inline fun <reified E : PsiElement, A> DiagnosticFactory1<E, A>.onSource(source: FirSourceElement, a: A): ConeDiagnostic? {
|
||||
inline fun <reified E : PsiElement, A> DiagnosticFactory1<E, A>.onSource(source: FirSourceElement, a: A): FirDiagnostic? {
|
||||
val psi = source.psi as? E
|
||||
?: throw IllegalArgumentException("Incompatible PSI: expected ${E::class}, actual ${source.psi?.let { it::class }}")
|
||||
return ConeDiagnostic(this.on(psi, a), source)
|
||||
return FirDiagnostic(this.on(psi, a), source)
|
||||
}
|
||||
|
||||
inline fun <reified E : PsiElement, A, B> DiagnosticFactory2<E, A, B>.onSource(source: FirSourceElement, a: A, b: B): ConeDiagnostic? {
|
||||
inline fun <reified E : PsiElement, A, B> DiagnosticFactory2<E, A, B>.onSource(source: FirSourceElement, a: A, b: B): FirDiagnostic? {
|
||||
val psi = source.psi as? E
|
||||
?: throw IllegalArgumentException("Incompatible PSI: expected ${E::class}, actual ${source.psi?.let { it::class }}")
|
||||
return ConeDiagnostic(this.on(psi, a, b), source)
|
||||
return FirDiagnostic(this.on(psi, a, b), source)
|
||||
}
|
||||
|
||||
inline fun <reified E : PsiElement, A, B, C> DiagnosticFactory3<E, A, B, C>.onSource(source: FirSourceElement, a: A, b: B, c: C): ConeDiagnostic? {
|
||||
inline fun <reified E : PsiElement, A, B, C> DiagnosticFactory3<E, A, B, C>.onSource(source: FirSourceElement, a: A, b: B, c: C): FirDiagnostic? {
|
||||
val psi = source.psi as? E
|
||||
?: throw IllegalArgumentException("Incompatible PSI: expected ${E::class}, actual ${source.psi?.let { it::class }}")
|
||||
return ConeDiagnostic(this.on(psi, a, b, c), source)
|
||||
return FirDiagnostic(this.on(psi, a, b, c), source)
|
||||
}
|
||||
|
||||
inline fun <reified E : PsiElement, reified A> DiagnosticFactory1<E, A>.tryOnSource(
|
||||
source: FirSourceElement,
|
||||
a: Any?
|
||||
): FirDiagnostic? {
|
||||
val aa = a as? A ?: throw IllegalArgumentException("Parameter passed to the factory is of incompatible type!")
|
||||
return onSource(source, aa)
|
||||
}
|
||||
Reference in New Issue
Block a user