[FIR] extended checkers infrastructure refactoring

Removed strange way to enable Extended Checkers and add new way to do it
This commit is contained in:
vladislavf7@gmail.com
2020-07-16 15:03:29 +03:00
committed by Dmitriy Novozhilov
parent 38543ce2a3
commit ab2128f55d
11 changed files with 39 additions and 25 deletions
@@ -13,16 +13,12 @@ import org.jetbrains.kotlin.fir.analysis.checkers.extended.RedundantVisibilityMo
object CommonDeclarationCheckers : DeclarationCheckers() { object CommonDeclarationCheckers : DeclarationCheckers() {
override val declarationCheckers: List<FirBasicDeclarationChecker> = listOf( override val declarationCheckers: List<FirBasicDeclarationChecker> = listOf(
FirAnnotationClassDeclarationChecker, FirAnnotationClassDeclarationChecker,
FirModifierChecker, FirModifierChecker
RedundantVisibilityModifierChecker,
RedundantReturnUnitType
) )
override val memberDeclarationCheckers: List<FirMemberDeclarationChecker> = listOf( override val memberDeclarationCheckers: List<FirMemberDeclarationChecker> = listOf(
FirInfixFunctionDeclarationChecker, FirInfixFunctionDeclarationChecker,
FirExposedVisibilityChecker, FirExposedVisibilityChecker
RedundantModalityModifierChecker,
RedundantExplicitTypeChecker
) )
override val constructorCheckers: List<FirConstructorChecker> = listOf( override val constructorCheckers: List<FirConstructorChecker> = listOf(
@@ -0,0 +1,23 @@
/*
* 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.
*/
package org.jetbrains.kotlin.fir.analysis.checkers.declaration
import org.jetbrains.kotlin.fir.analysis.checkers.extended.RedundantExplicitTypeChecker
import org.jetbrains.kotlin.fir.analysis.checkers.extended.RedundantModalityModifierChecker
import org.jetbrains.kotlin.fir.analysis.checkers.extended.RedundantReturnUnitType
import org.jetbrains.kotlin.fir.analysis.checkers.extended.RedundantVisibilityModifierChecker
object ExtendedDeclarationCheckers : DeclarationCheckers() {
override val declarationCheckers = listOf(
RedundantVisibilityModifierChecker,
RedundantReturnUnitType
)
override val memberDeclarationCheckers = listOf(
RedundantExplicitTypeChecker,
RedundantModalityModifierChecker
)
}
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
abstract class FirDeclarationChecker<in D : FirDeclaration> { abstract class FirDeclarationChecker<in D : FirDeclaration> {
abstract fun check(declaration: D, context: CheckerContext, reporter: DiagnosticReporter) abstract fun check(declaration: D, context: CheckerContext, reporter: DiagnosticReporter)
open val isExtended = false
} }
typealias FirBasicDeclarationChecker = FirDeclarationChecker<FirDeclaration> typealias FirBasicDeclarationChecker = FirDeclarationChecker<FirDeclaration>
@@ -20,8 +20,6 @@ import org.jetbrains.kotlin.psi.KtDeclaration
import org.jetbrains.kotlin.psi.psiUtil.modalityModifier import org.jetbrains.kotlin.psi.psiUtil.modalityModifier
object RedundantModalityModifierChecker : FirMemberDeclarationChecker() { object RedundantModalityModifierChecker : FirMemberDeclarationChecker() {
override val isExtended = true
override fun check(declaration: FirMemberDeclaration, context: CheckerContext, reporter: DiagnosticReporter) { override fun check(declaration: FirMemberDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
if (declaration.source is FirFakeSourceElement<*>) return if (declaration.source is FirFakeSourceElement<*>) return
@@ -15,8 +15,6 @@ import org.jetbrains.kotlin.fir.expressions.impl.FirSingleExpressionBlock
import org.jetbrains.kotlin.fir.types.isUnit import org.jetbrains.kotlin.fir.types.isUnit
object RedundantReturnUnitType : FirBasicDeclarationChecker() { object RedundantReturnUnitType : FirBasicDeclarationChecker() {
override val isExtended = true
override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) { override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
if (declaration !is FirSimpleFunction) return if (declaration !is FirSimpleFunction) return
if (declaration.body is FirSingleExpressionBlock) return if (declaration.body is FirSingleExpressionBlock) return
@@ -20,8 +20,6 @@ import org.jetbrains.kotlin.fir.toFirPsiSourceElement
import org.jetbrains.kotlin.psi.psiUtil.visibilityModifier import org.jetbrains.kotlin.psi.psiUtil.visibilityModifier
object RedundantVisibilityModifierChecker : FirBasicDeclarationChecker() { object RedundantVisibilityModifierChecker : FirBasicDeclarationChecker() {
override val isExtended = true
override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) { override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
if (declaration is FirConstructor && declaration.source is FirFakeSourceElement<*>) return if (declaration is FirConstructor && declaration.source is FirFakeSourceElement<*>) return
if (declaration.source is FirFakeSourceElement<*>) return if (declaration.source is FirFakeSourceElement<*>) return
@@ -196,9 +196,9 @@ abstract class AbstractDiagnosticCollector(
} }
} }
fun AbstractDiagnosticCollector.registerAllComponents(checkExtended: Boolean = false) { fun AbstractDiagnosticCollector.registerAllComponents() {
initializeComponents( initializeComponents(
DeclarationCheckersDiagnosticComponent(this, checkExtended), DeclarationCheckersDiagnosticComponent(this),
ExpressionCheckersDiagnosticComponent(this), ExpressionCheckersDiagnosticComponent(this),
ErrorNodeDiagnosticCollectorComponent(this), ErrorNodeDiagnosticCollectorComponent(this),
ControlFlowAnalysisDiagnosticComponent(this), ControlFlowAnalysisDiagnosticComponent(this),
@@ -11,10 +11,10 @@ import org.jetbrains.kotlin.fir.analysis.extensions.additionalCheckers
import org.jetbrains.kotlin.fir.extensions.extensionService import org.jetbrains.kotlin.fir.extensions.extensionService
object FirDiagnosticsCollector { object FirDiagnosticsCollector {
fun create(session: FirSession, checkExtended: Boolean = false): AbstractDiagnosticCollector { fun create(session: FirSession): AbstractDiagnosticCollector {
session.registerAdditionalCheckers() session.registerAdditionalCheckers()
val collector = SimpleDiagnosticsCollector(session) val collector = SimpleDiagnosticsCollector(session)
collector.registerAllComponents(checkExtended) collector.registerAllComponents()
return collector return collector
} }
@@ -13,8 +13,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
class DeclarationCheckersDiagnosticComponent( class DeclarationCheckersDiagnosticComponent(
collector: AbstractDiagnosticCollector, collector: AbstractDiagnosticCollector
private val checkExtended: Boolean
) : AbstractDiagnosticCollectorComponent(collector) { ) : AbstractDiagnosticCollectorComponent(collector) {
private val checkers = session.checkersComponent.declarationCheckers private val checkers = session.checkersComponent.declarationCheckers
@@ -72,9 +71,7 @@ class DeclarationCheckersDiagnosticComponent(
reporter: DiagnosticReporter reporter: DiagnosticReporter
) { ) {
for (checker in this) { for (checker in this) {
if (!checker.isExtended || checkExtended) { checker.check(declaration, context, reporter)
checker.check(declaration, context, reporter)
}
} }
} }
} }
@@ -5,6 +5,11 @@
package org.jetbrains.kotlin.fir package org.jetbrains.kotlin.fir
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.ExtendedDeclarationCheckers
import org.jetbrains.kotlin.fir.analysis.checkersComponent
abstract class AbstractExtendedFirDiagnosticsTest : AbstractFirDiagnosticsTest() { abstract class AbstractExtendedFirDiagnosticsTest : AbstractFirDiagnosticsTest() {
override fun useExtendedCheckersIfNeeded(): Boolean = true override fun configureSession(session: FirSession) {
session.checkersComponent.register(ExtendedDeclarationCheckers)
}
} }
@@ -276,7 +276,7 @@ abstract class AbstractFirDiagnosticsTest : AbstractFirBaseDiagnosticsTest() {
} }
private fun createCollector(session: FirSession): AbstractDiagnosticCollector { private fun createCollector(session: FirSession): AbstractDiagnosticCollector {
return FirDiagnosticsCollector.create(session, useExtendedCheckersIfNeeded()) return FirDiagnosticsCollector.create(session)
} }
private fun checkCfgDump(testDataFile: File, firFiles: List<FirFile>) { private fun checkCfgDump(testDataFile: File, firFiles: List<FirFile>) {
@@ -360,5 +360,4 @@ abstract class AbstractFirDiagnosticsTest : AbstractFirBaseDiagnosticsTest() {
} }
internal open fun useExtendedCheckersIfNeeded() = false
} }