K2 checkers: separate report committer from other diagnostic components
This commit is contained in:
+4
-3
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.analysis.checkers.expression.ExpressionCheckers
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.type.ComposedTypeCheckers
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.type.TypeCheckers
|
||||
import org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollector
|
||||
import org.jetbrains.kotlin.fir.analysis.collectors.DiagnosticCollectorComponents
|
||||
import org.jetbrains.kotlin.fir.analysis.collectors.components.*
|
||||
import org.jetbrains.kotlin.fir.analysis.extensions.FirAdditionalCheckersExtension
|
||||
import org.jetbrains.kotlin.fir.analysis.extensions.additionalCheckers
|
||||
@@ -46,7 +47,7 @@ private object CheckersFactory {
|
||||
session: FirSession,
|
||||
reporter: DiagnosticReporter,
|
||||
useExtendedCheckers: Boolean
|
||||
): List<AbstractDiagnosticCollectorComponent> {
|
||||
): DiagnosticCollectorComponents {
|
||||
val module = session.firKtModuleBasedModuleData.ktModule
|
||||
val platform = module.platform.componentPlatforms.first()
|
||||
val extensionCheckers = session.extensionService.additionalCheckers
|
||||
@@ -54,7 +55,7 @@ private object CheckersFactory {
|
||||
val expressionCheckers = createExpressionCheckers(useExtendedCheckers, platform, extensionCheckers)
|
||||
val typeCheckers = createTypeCheckers(useExtendedCheckers, platform, extensionCheckers)
|
||||
|
||||
return buildList {
|
||||
val regularComponents = buildList {
|
||||
if (!useExtendedCheckers) {
|
||||
add(ErrorNodeDiagnosticCollectorComponent(session, reporter))
|
||||
}
|
||||
@@ -62,8 +63,8 @@ private object CheckersFactory {
|
||||
add(ExpressionCheckersDiagnosticComponent(session, reporter, expressionCheckers))
|
||||
add(TypeCheckersDiagnosticComponent(session, reporter, typeCheckers))
|
||||
add(ControlFlowAnalysisDiagnosticComponent(session, reporter, declarationCheckers))
|
||||
add(ReportCommitterDiagnosticComponent(session, reporter))
|
||||
}
|
||||
return DiagnosticCollectorComponents(regularComponents, ReportCommitterDiagnosticComponent(session, reporter))
|
||||
}
|
||||
|
||||
|
||||
|
||||
+7
-4
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.diagnostics.fir.Persisten
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.diagnostics.fir.PersistentCheckerContextFactory
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.collectors.components.AbstractDiagnosticCollectorComponent
|
||||
import org.jetbrains.kotlin.fir.analysis.collectors.DiagnosticCollectorComponents
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.resolve.SessionHolderImpl
|
||||
import org.jetbrains.kotlin.name.StandardClassIds
|
||||
@@ -44,7 +44,7 @@ internal class SingleNonLocalDeclarationDiagnosticRetriever(
|
||||
private class Visitor(
|
||||
private val structureElementDeclaration: FirDeclaration,
|
||||
context: CheckerContext,
|
||||
components: List<AbstractDiagnosticCollectorComponent>
|
||||
components: DiagnosticCollectorComponents
|
||||
) : LLFirDiagnosticVisitor(context, components) {
|
||||
private var insideAlwaysVisitableDeclarations = 0
|
||||
|
||||
@@ -61,7 +61,10 @@ internal class SingleNonLocalDeclarationDiagnosticRetriever(
|
||||
return when {
|
||||
structureElementDeclaration !is FirRegularClass -> true
|
||||
structureElementDeclaration == declaration -> true
|
||||
declaration.hasAnnotation(StandardClassIds.Annotations.Suppress) -> true
|
||||
declaration.hasAnnotation(StandardClassIds.Annotations.Suppress) -> {
|
||||
useRegularComponents = false
|
||||
true
|
||||
}
|
||||
else -> false
|
||||
}
|
||||
}
|
||||
@@ -104,7 +107,7 @@ internal object FileDiagnosticRetriever : FileStructureElementDiagnosticRetrieve
|
||||
}
|
||||
|
||||
private class Visitor(
|
||||
components: List<AbstractDiagnosticCollectorComponent>,
|
||||
components: DiagnosticCollectorComponents,
|
||||
moduleComponents: LLFirModuleResolveComponents,
|
||||
) : LLFirDiagnosticVisitor(
|
||||
PersistentCheckerContextFactory.createEmptyPersistenceCheckerContext(
|
||||
|
||||
+2
-2
@@ -6,9 +6,9 @@
|
||||
package org.jetbrains.kotlin.analysis.low.level.api.fir.diagnostics
|
||||
|
||||
import org.jetbrains.kotlin.fir.analysis.collectors.CheckerRunningDiagnosticCollectorVisitor
|
||||
import org.jetbrains.kotlin.fir.analysis.collectors.components.AbstractDiagnosticCollectorComponent
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.diagnostics.fir.LLFirStructureElementDiagnosticsCollector
|
||||
import org.jetbrains.kotlin.fir.analysis.collectors.DiagnosticCollectorComponents
|
||||
|
||||
internal class FileStructureElementDiagnosticsCollector private constructor(private val useExtendedCheckers: Boolean) {
|
||||
companion object {
|
||||
@@ -18,7 +18,7 @@ internal class FileStructureElementDiagnosticsCollector private constructor(priv
|
||||
|
||||
fun collectForStructureElement(
|
||||
firDeclaration: FirDeclaration,
|
||||
createVisitor: (components: List<AbstractDiagnosticCollectorComponent>) -> CheckerRunningDiagnosticCollectorVisitor,
|
||||
createVisitor: (components: DiagnosticCollectorComponents) -> CheckerRunningDiagnosticCollectorVisitor,
|
||||
): FileStructureElementDiagnosticList {
|
||||
val reporter = LLFirDiagnosticReporter()
|
||||
val collector = LLFirStructureElementDiagnosticsCollector(
|
||||
|
||||
+12
-6
@@ -8,16 +8,18 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.diagnostics
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.collectors.CheckerRunningDiagnosticCollectorVisitor
|
||||
import org.jetbrains.kotlin.fir.analysis.collectors.components.AbstractDiagnosticCollectorComponent
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkCanceled
|
||||
import org.jetbrains.kotlin.fir.analysis.collectors.DiagnosticCollectorComponents
|
||||
|
||||
internal open class LLFirDiagnosticVisitor(
|
||||
context: CheckerContext,
|
||||
components: List<AbstractDiagnosticCollectorComponent>,
|
||||
components: DiagnosticCollectorComponents,
|
||||
) : CheckerRunningDiagnosticCollectorVisitor(context, components) {
|
||||
private val beforeElementDiagnosticCollectionHandler = context.session.beforeElementDiagnosticCollectionHandler
|
||||
|
||||
protected var useRegularComponents = true
|
||||
|
||||
override fun visitNestedElements(element: FirElement) {
|
||||
if (element is FirDeclaration) {
|
||||
beforeElementDiagnosticCollectionHandler?.beforeGoingNestedDeclaration(element, context)
|
||||
@@ -26,10 +28,14 @@ internal open class LLFirDiagnosticVisitor(
|
||||
}
|
||||
|
||||
override fun checkElement(element: FirElement) {
|
||||
beforeElementDiagnosticCollectionHandler?.beforeCollectingForElement(element)
|
||||
components.forEach {
|
||||
checkCanceled()
|
||||
element.accept(it, context)
|
||||
if (useRegularComponents) {
|
||||
beforeElementDiagnosticCollectionHandler?.beforeCollectingForElement(element)
|
||||
components.regularComponents.forEach {
|
||||
checkCanceled()
|
||||
element.accept(it, context)
|
||||
}
|
||||
}
|
||||
checkCanceled()
|
||||
element.accept(components.reportCommitter, context)
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -7,18 +7,18 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.diagnostics.fir
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.analysis.collectors.CheckerRunningDiagnosticCollectorVisitor
|
||||
import org.jetbrains.kotlin.fir.analysis.collectors.components.AbstractDiagnosticCollectorComponent
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.diagnostics.AbstractLLFirDiagnosticsCollector
|
||||
import org.jetbrains.kotlin.fir.analysis.collectors.DiagnosticCollectorComponents
|
||||
|
||||
internal class LLFirStructureElementDiagnosticsCollector(
|
||||
session: FirSession,
|
||||
private val doCreateVisitor: (components: List<AbstractDiagnosticCollectorComponent>) -> CheckerRunningDiagnosticCollectorVisitor,
|
||||
private val doCreateVisitor: (components: DiagnosticCollectorComponents) -> CheckerRunningDiagnosticCollectorVisitor,
|
||||
useExtendedCheckers: Boolean,
|
||||
) : AbstractLLFirDiagnosticsCollector(
|
||||
session,
|
||||
useExtendedCheckers,
|
||||
) {
|
||||
override fun createVisitor(components: List<AbstractDiagnosticCollectorComponent>): CheckerRunningDiagnosticCollectorVisitor {
|
||||
override fun createVisitor(components: DiagnosticCollectorComponents): CheckerRunningDiagnosticCollectorVisitor {
|
||||
return doCreateVisitor(components)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user