From bd642375193b188b4e115f06b58bee5a2763d164 Mon Sep 17 00:00:00 2001 From: Tianyu Geng Date: Mon, 29 Mar 2021 14:41:58 -0700 Subject: [PATCH] FIR checker: fix checker registration Previously, composed checker passes the `allXXX` flavor of checkers to each category of checkrs. This makes the composed checkers non-transparent: behavior changes after composing. In addition, nested composing would create redundant checkers. As a result, some checkers registered in the IDE mode (org.jetbrains.kotlin.idea.fir.low.level.api.diagnostics.AbstractFirIdeDiagnosticsCollector) are not invoked with the FIR plugin. This change does two things: 1. pass on checkers to composed checkers without combining 2. use combined checkers in DeclarationCheckersDiagnosticComponent and ExpressionCheckersDiagnosticComponent --- .../generator/CheckersConfiguration.kt | 14 +++---- .../fir/checkers/generator/Generator.kt | 7 ++-- .../kotlin/fir/checkers/generator/Main.kt | 1 + .../ComposedDeclarationCheckers.kt | 20 ++++++---- .../declaration/DeclarationCheckers.kt | 16 ++++---- .../FirDeclarationCheckerAliases.kt | 2 + .../expression/ComposedExpressionCheckers.kt | 12 +++--- .../checkers/expression/ExpressionCheckers.kt | 10 ++--- .../DeclarationCheckersDiagnosticComponent.kt | 30 +++++++------- .../ExpressionCheckersDiagnosticComponent.kt | 40 ++++++++++--------- idea/testData/checker/Bounds.fir.kt | 2 +- idea/testData/checker/Bounds2.fir.kt | 6 +-- .../checker/BoundsWithSubstitutors.fir.kt | 6 +-- idea/testData/checker/Builders.fir.kt | 2 +- idea/testData/checker/MultipleBounds.fir.kt | 12 +++--- 15 files changed, 96 insertions(+), 84 deletions(-) diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/CheckersConfiguration.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/CheckersConfiguration.kt index 632b92fafda..10eb1daf1ce 100644 --- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/CheckersConfiguration.kt +++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/CheckersConfiguration.kt @@ -6,7 +6,7 @@ package org.jetbrains.kotlin.fir.checkers.generator import kotlin.reflect.KClass -import kotlin.reflect.full.superclasses +import kotlin.reflect.full.allSuperclasses class CheckersConfiguration( val aliases: Map, String>, @@ -17,19 +17,17 @@ class CheckersConfiguration( init { val parents: MutableMap, List>> = mutableMapOf() for (firKClass in aliases.keys) { - val directParents = mutableListOf>() + val allParents = mutableListOf>() bfs( firKClass, - childrenExtractor = { it.superclasses } + childrenExtractor = { it.allSuperclasses } ) { if (it in aliases) { - directParents += it - false - } else { - true + allParents += it } + true } - parents[firKClass] = directParents + parents[firKClass] = allParents } parentsMap = parents } diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/Generator.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/Generator.kt index 2d54ceb3470..2b4d3b0ee81 100644 --- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/Generator.kt +++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/Generator.kt @@ -5,7 +5,8 @@ package org.jetbrains.kotlin.fir.checkers.generator -import org.jetbrains.kotlin.fir.tree.generator.printer.* +import org.jetbrains.kotlin.fir.tree.generator.printer.printCopyright +import org.jetbrains.kotlin.fir.tree.generator.printer.printGeneratedMessage import org.jetbrains.kotlin.fir.tree.generator.util.writeToFileUsingSmartPrinterIfFileContentChanged import org.jetbrains.kotlin.util.SmartPrinter import org.jetbrains.kotlin.util.withIndent @@ -77,7 +78,7 @@ class Generator( print("$CHECKERS_COMPONENT_INTERNAL_ANNOTATION internal val ${alias.allFieldName}: ${alias.setType} get() = ${alias.fieldName}") for (parent in configuration.parentsMap.getValue(kClass)) { val parentAlias = configuration.aliases.getValue(parent) - print(" + ${parentAlias.allFieldName}") + print(" + ${parentAlias.fieldName}") } println() } @@ -124,7 +125,7 @@ class Generator( println("internal fun register(checkers: $checkersComponentName) {") withIndent { for (alias in configuration.aliases.values) { - println("_${alias.fieldName} += checkers.${alias.allFieldName}") + println("_${alias.fieldName} += checkers.${alias.fieldName}") } for (fieldName in configuration.additionalCheckers.keys) { println("_$fieldName += checkers.$fieldName") diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/Main.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/Main.kt index 1b7b133ac44..c13c8492bea 100644 --- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/Main.kt +++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/Main.kt @@ -29,6 +29,7 @@ fun main(args: Array) { alias("BasicDeclarationChecker") alias("MemberDeclarationChecker") alias>("FunctionChecker") + alias("SimpleFunctionChecker") alias("PropertyChecker") alias>("ClassChecker") alias("RegularClassChecker") diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/declaration/ComposedDeclarationCheckers.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/declaration/ComposedDeclarationCheckers.kt index 716247fd568..d4900c077c5 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/declaration/ComposedDeclarationCheckers.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/declaration/ComposedDeclarationCheckers.kt @@ -21,6 +21,8 @@ internal class ComposedDeclarationCheckers : DeclarationCheckers() { get() = _memberDeclarationCheckers override val functionCheckers: Set get() = _functionCheckers + override val simpleFunctionCheckers: Set + get() = _simpleFunctionCheckers override val propertyCheckers: Set get() = _propertyCheckers override val classCheckers: Set @@ -39,6 +41,7 @@ internal class ComposedDeclarationCheckers : DeclarationCheckers() { private val _basicDeclarationCheckers: MutableSet = mutableSetOf() private val _memberDeclarationCheckers: MutableSet = mutableSetOf() private val _functionCheckers: MutableSet = mutableSetOf() + private val _simpleFunctionCheckers: MutableSet = mutableSetOf() private val _propertyCheckers: MutableSet = mutableSetOf() private val _classCheckers: MutableSet = mutableSetOf() private val _regularClassCheckers: MutableSet = mutableSetOf() @@ -49,14 +52,15 @@ internal class ComposedDeclarationCheckers : DeclarationCheckers() { @CheckersComponentInternal internal fun register(checkers: DeclarationCheckers) { - _basicDeclarationCheckers += checkers.allBasicDeclarationCheckers - _memberDeclarationCheckers += checkers.allMemberDeclarationCheckers - _functionCheckers += checkers.allFunctionCheckers - _propertyCheckers += checkers.allPropertyCheckers - _classCheckers += checkers.allClassCheckers - _regularClassCheckers += checkers.allRegularClassCheckers - _constructorCheckers += checkers.allConstructorCheckers - _fileCheckers += checkers.allFileCheckers + _basicDeclarationCheckers += checkers.basicDeclarationCheckers + _memberDeclarationCheckers += checkers.memberDeclarationCheckers + _functionCheckers += checkers.functionCheckers + _simpleFunctionCheckers += checkers.simpleFunctionCheckers + _propertyCheckers += checkers.propertyCheckers + _classCheckers += checkers.classCheckers + _regularClassCheckers += checkers.regularClassCheckers + _constructorCheckers += checkers.constructorCheckers + _fileCheckers += checkers.fileCheckers _controlFlowAnalyserCheckers += checkers.controlFlowAnalyserCheckers _variableAssignmentCfaBasedCheckers += checkers.variableAssignmentCfaBasedCheckers } diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/declaration/DeclarationCheckers.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/declaration/DeclarationCheckers.kt index a479744b463..99ee2ef55de 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/declaration/DeclarationCheckers.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/declaration/DeclarationCheckers.kt @@ -22,6 +22,7 @@ abstract class DeclarationCheckers { open val basicDeclarationCheckers: Set = emptySet() open val memberDeclarationCheckers: Set = emptySet() open val functionCheckers: Set = emptySet() + open val simpleFunctionCheckers: Set = emptySet() open val propertyCheckers: Set = emptySet() open val classCheckers: Set = emptySet() open val regularClassCheckers: Set = emptySet() @@ -32,11 +33,12 @@ abstract class DeclarationCheckers { open val variableAssignmentCfaBasedCheckers: Set = emptySet() @CheckersComponentInternal internal val allBasicDeclarationCheckers: Set get() = basicDeclarationCheckers - @CheckersComponentInternal internal val allMemberDeclarationCheckers: Set get() = memberDeclarationCheckers + allBasicDeclarationCheckers - @CheckersComponentInternal internal val allFunctionCheckers: Set get() = functionCheckers + allBasicDeclarationCheckers - @CheckersComponentInternal internal val allPropertyCheckers: Set get() = propertyCheckers + allMemberDeclarationCheckers - @CheckersComponentInternal internal val allClassCheckers: Set get() = classCheckers + allBasicDeclarationCheckers - @CheckersComponentInternal internal val allRegularClassCheckers: Set get() = regularClassCheckers + allMemberDeclarationCheckers + allClassCheckers - @CheckersComponentInternal internal val allConstructorCheckers: Set get() = constructorCheckers + allFunctionCheckers - @CheckersComponentInternal internal val allFileCheckers: Set get() = fileCheckers + allBasicDeclarationCheckers + @CheckersComponentInternal internal val allMemberDeclarationCheckers: Set get() = memberDeclarationCheckers + basicDeclarationCheckers + @CheckersComponentInternal internal val allFunctionCheckers: Set get() = functionCheckers + basicDeclarationCheckers + @CheckersComponentInternal internal val allSimpleFunctionCheckers: Set get() = simpleFunctionCheckers + functionCheckers + basicDeclarationCheckers + memberDeclarationCheckers + @CheckersComponentInternal internal val allPropertyCheckers: Set get() = propertyCheckers + basicDeclarationCheckers + memberDeclarationCheckers + @CheckersComponentInternal internal val allClassCheckers: Set get() = classCheckers + basicDeclarationCheckers + @CheckersComponentInternal internal val allRegularClassCheckers: Set get() = regularClassCheckers + memberDeclarationCheckers + basicDeclarationCheckers + classCheckers + @CheckersComponentInternal internal val allConstructorCheckers: Set get() = constructorCheckers + functionCheckers + basicDeclarationCheckers + memberDeclarationCheckers + @CheckersComponentInternal internal val allFileCheckers: Set get() = fileCheckers + basicDeclarationCheckers } diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirDeclarationCheckerAliases.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirDeclarationCheckerAliases.kt index 23e8f7dda22..ef044c9c79b 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirDeclarationCheckerAliases.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirDeclarationCheckerAliases.kt @@ -18,10 +18,12 @@ import org.jetbrains.kotlin.fir.declarations.FirFunction import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration import org.jetbrains.kotlin.fir.declarations.FirProperty import org.jetbrains.kotlin.fir.declarations.FirRegularClass +import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction typealias FirBasicDeclarationChecker = FirDeclarationChecker typealias FirMemberDeclarationChecker = FirDeclarationChecker typealias FirFunctionChecker = FirDeclarationChecker> +typealias FirSimpleFunctionChecker = FirDeclarationChecker typealias FirPropertyChecker = FirDeclarationChecker typealias FirClassChecker = FirDeclarationChecker> typealias FirRegularClassChecker = FirDeclarationChecker diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/expression/ComposedExpressionCheckers.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/expression/ComposedExpressionCheckers.kt index f3e5f53d1bf..328f46cbf6e 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/expression/ComposedExpressionCheckers.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/expression/ComposedExpressionCheckers.kt @@ -35,11 +35,11 @@ internal class ComposedExpressionCheckers : ExpressionCheckers() { @CheckersComponentInternal internal fun register(checkers: ExpressionCheckers) { - _basicExpressionCheckers += checkers.allBasicExpressionCheckers - _qualifiedAccessCheckers += checkers.allQualifiedAccessCheckers - _functionCallCheckers += checkers.allFunctionCallCheckers - _variableAssignmentCheckers += checkers.allVariableAssignmentCheckers - _tryExpressionCheckers += checkers.allTryExpressionCheckers - _whenExpressionCheckers += checkers.allWhenExpressionCheckers + _basicExpressionCheckers += checkers.basicExpressionCheckers + _qualifiedAccessCheckers += checkers.qualifiedAccessCheckers + _functionCallCheckers += checkers.functionCallCheckers + _variableAssignmentCheckers += checkers.variableAssignmentCheckers + _tryExpressionCheckers += checkers.tryExpressionCheckers + _whenExpressionCheckers += checkers.whenExpressionCheckers } } diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/expression/ExpressionCheckers.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/expression/ExpressionCheckers.kt index 116e76cfb52..d9928258896 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/expression/ExpressionCheckers.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/expression/ExpressionCheckers.kt @@ -25,9 +25,9 @@ abstract class ExpressionCheckers { open val whenExpressionCheckers: Set = emptySet() @CheckersComponentInternal internal val allBasicExpressionCheckers: Set get() = basicExpressionCheckers - @CheckersComponentInternal internal val allQualifiedAccessCheckers: Set get() = qualifiedAccessCheckers + allBasicExpressionCheckers - @CheckersComponentInternal internal val allFunctionCallCheckers: Set get() = functionCallCheckers + allQualifiedAccessCheckers - @CheckersComponentInternal internal val allVariableAssignmentCheckers: Set get() = variableAssignmentCheckers + allBasicExpressionCheckers - @CheckersComponentInternal internal val allTryExpressionCheckers: Set get() = tryExpressionCheckers + allBasicExpressionCheckers - @CheckersComponentInternal internal val allWhenExpressionCheckers: Set get() = whenExpressionCheckers + allBasicExpressionCheckers + @CheckersComponentInternal internal val allQualifiedAccessCheckers: Set get() = qualifiedAccessCheckers + basicExpressionCheckers + @CheckersComponentInternal internal val allFunctionCallCheckers: Set get() = functionCallCheckers + qualifiedAccessCheckers + basicExpressionCheckers + @CheckersComponentInternal internal val allVariableAssignmentCheckers: Set get() = variableAssignmentCheckers + basicExpressionCheckers + @CheckersComponentInternal internal val allTryExpressionCheckers: Set get() = tryExpressionCheckers + basicExpressionCheckers + @CheckersComponentInternal internal val allWhenExpressionCheckers: Set get() = whenExpressionCheckers + basicExpressionCheckers } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/DeclarationCheckersDiagnosticComponent.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/DeclarationCheckersDiagnosticComponent.kt index 9890349d53b..075a470ee75 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/DeclarationCheckersDiagnosticComponent.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/DeclarationCheckersDiagnosticComponent.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.fir.analysis.collectors.components +import org.jetbrains.kotlin.fir.analysis.CheckersComponentInternal import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.analysis.checkers.declaration.DeclarationCheckers import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirDeclarationChecker @@ -13,65 +14,66 @@ import org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollector import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.declarations.* +@OptIn(CheckersComponentInternal::class) class DeclarationCheckersDiagnosticComponent( collector: AbstractDiagnosticCollector, private val checkers: DeclarationCheckers = collector.session.checkersComponent.declarationCheckers, ) : AbstractDiagnosticCollectorComponent(collector) { override fun visitFile(file: FirFile, data: CheckerContext) { - checkers.fileCheckers.check(file, data, reporter) + checkers.allFileCheckers.check(file, data, reporter) } override fun visitProperty(property: FirProperty, data: CheckerContext) { - (checkers.memberDeclarationCheckers + checkers.propertyCheckers).check(property, data, reporter) + checkers.allPropertyCheckers.check(property, data, reporter) } override fun > visitClass(klass: FirClass, data: CheckerContext) { - checkers.classCheckers.check(klass, data, reporter) + checkers.allClassCheckers.check(klass, data, reporter) } override fun visitRegularClass(regularClass: FirRegularClass, data: CheckerContext) { - (checkers.memberDeclarationCheckers + checkers.regularClassCheckers).check(regularClass, data, reporter) + checkers.allRegularClassCheckers.check(regularClass, data, reporter) } override fun visitSimpleFunction(simpleFunction: FirSimpleFunction, data: CheckerContext) { - (checkers.memberDeclarationCheckers + checkers.functionCheckers).check(simpleFunction, data, reporter) + checkers.allSimpleFunctionCheckers.check(simpleFunction, data, reporter) } override fun visitTypeAlias(typeAlias: FirTypeAlias, data: CheckerContext) { - checkers.memberDeclarationCheckers.check(typeAlias, data, reporter) + checkers.allMemberDeclarationCheckers.check(typeAlias, data, reporter) } override fun visitConstructor(constructor: FirConstructor, data: CheckerContext) { - (checkers.memberDeclarationCheckers + checkers.constructorCheckers).check(constructor, data, reporter) + checkers.allConstructorCheckers.check(constructor, data, reporter) } override fun visitAnonymousFunction(anonymousFunction: FirAnonymousFunction, data: CheckerContext) { - checkers.basicDeclarationCheckers.check(anonymousFunction, data, reporter) + checkers.allBasicDeclarationCheckers.check(anonymousFunction, data, reporter) } override fun visitPropertyAccessor(propertyAccessor: FirPropertyAccessor, data: CheckerContext) { - checkers.basicDeclarationCheckers.check(propertyAccessor, data, reporter) + checkers.allBasicDeclarationCheckers.check(propertyAccessor, data, reporter) } override fun visitValueParameter(valueParameter: FirValueParameter, data: CheckerContext) { - checkers.basicDeclarationCheckers.check(valueParameter, data, reporter) + checkers.allBasicDeclarationCheckers.check(valueParameter, data, reporter) } override fun visitTypeParameter(typeParameter: FirTypeParameter, data: CheckerContext) { - checkers.basicDeclarationCheckers.check(typeParameter, data, reporter) + checkers.allBasicDeclarationCheckers.check(typeParameter, data, reporter) } override fun visitEnumEntry(enumEntry: FirEnumEntry, data: CheckerContext) { - checkers.basicDeclarationCheckers.check(enumEntry, data, reporter) + checkers.allBasicDeclarationCheckers.check(enumEntry, data, reporter) } override fun visitAnonymousObject(anonymousObject: FirAnonymousObject, data: CheckerContext) { - (checkers.classCheckers + checkers.basicDeclarationCheckers).check(anonymousObject, data, reporter) + checkers.allClassCheckers.check(anonymousObject, data, reporter) } override fun visitAnonymousInitializer(anonymousInitializer: FirAnonymousInitializer, data: CheckerContext) { - checkers.basicDeclarationCheckers.check(anonymousInitializer, data, reporter) + checkers.allBasicDeclarationCheckers.check(anonymousInitializer, data, reporter) } private fun Collection>.check( diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ExpressionCheckersDiagnosticComponent.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ExpressionCheckersDiagnosticComponent.kt index c8138ca5bbc..c8e8f4da5b8 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ExpressionCheckersDiagnosticComponent.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ExpressionCheckersDiagnosticComponent.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.fir.analysis.collectors.components +import org.jetbrains.kotlin.fir.analysis.CheckersComponentInternal import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.analysis.checkers.expression.ExpressionCheckers import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirExpressionChecker @@ -14,85 +15,86 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction import org.jetbrains.kotlin.fir.expressions.* +@OptIn(CheckersComponentInternal::class) class ExpressionCheckersDiagnosticComponent( collector: AbstractDiagnosticCollector, private val checkers: ExpressionCheckers = collector.session.checkersComponent.expressionCheckers, ) : AbstractDiagnosticCollectorComponent(collector) { override fun visitAnonymousFunction(anonymousFunction: FirAnonymousFunction, data: CheckerContext) { - checkers.basicExpressionCheckers.check(anonymousFunction, data, reporter) + checkers.allBasicExpressionCheckers.check(anonymousFunction, data, reporter) } override fun visitTypeOperatorCall(typeOperatorCall: FirTypeOperatorCall, data: CheckerContext) { - checkers.basicExpressionCheckers.check(typeOperatorCall, data, reporter) + checkers.allBasicExpressionCheckers.check(typeOperatorCall, data, reporter) } override fun visitConstExpression(constExpression: FirConstExpression, data: CheckerContext) { - checkers.basicExpressionCheckers.check(constExpression, data, reporter) + checkers.allBasicExpressionCheckers.check(constExpression, data, reporter) } override fun visitAnnotationCall(annotationCall: FirAnnotationCall, data: CheckerContext) { - checkers.basicExpressionCheckers.check(annotationCall, data, reporter) + checkers.allBasicExpressionCheckers.check(annotationCall, data, reporter) } override fun visitQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression, data: CheckerContext) { - checkers.qualifiedAccessCheckers.check(qualifiedAccessExpression, data, reporter) + checkers.allQualifiedAccessCheckers.check(qualifiedAccessExpression, data, reporter) } override fun visitFunctionCall(functionCall: FirFunctionCall, data: CheckerContext) { - checkers.functionCallCheckers.check(functionCall, data, reporter) + checkers.allFunctionCallCheckers.check(functionCall, data, reporter) } override fun visitCallableReferenceAccess(callableReferenceAccess: FirCallableReferenceAccess, data: CheckerContext) { - checkers.qualifiedAccessCheckers.check(callableReferenceAccess, data, reporter) + checkers.allQualifiedAccessCheckers.check(callableReferenceAccess, data, reporter) } override fun visitThisReceiverExpression(thisReceiverExpression: FirThisReceiverExpression, data: CheckerContext) { - checkers.basicExpressionCheckers.check(thisReceiverExpression, data, reporter) + checkers.allBasicExpressionCheckers.check(thisReceiverExpression, data, reporter) } override fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier, data: CheckerContext) { - checkers.basicExpressionCheckers.check(resolvedQualifier, data, reporter) + checkers.allBasicExpressionCheckers.check(resolvedQualifier, data, reporter) } override fun visitWhenExpression(whenExpression: FirWhenExpression, data: CheckerContext) { - checkers.whenExpressionCheckers.check(whenExpression, data, reporter) + checkers.allWhenExpressionCheckers.check(whenExpression, data, reporter) } override fun visitBinaryLogicExpression(binaryLogicExpression: FirBinaryLogicExpression, data: CheckerContext) { - checkers.basicExpressionCheckers.check(binaryLogicExpression, data, reporter) + checkers.allBasicExpressionCheckers.check(binaryLogicExpression, data, reporter) } override fun visitArrayOfCall(arrayOfCall: FirArrayOfCall, data: CheckerContext) { - checkers.basicExpressionCheckers.check(arrayOfCall, data, reporter) + checkers.allBasicExpressionCheckers.check(arrayOfCall, data, reporter) } override fun visitStringConcatenationCall(stringConcatenationCall: FirStringConcatenationCall, data: CheckerContext) { - checkers.basicExpressionCheckers.check(stringConcatenationCall, data, reporter) + checkers.allBasicExpressionCheckers.check(stringConcatenationCall, data, reporter) } override fun visitCheckNotNullCall(checkNotNullCall: FirCheckNotNullCall, data: CheckerContext) { - checkers.basicExpressionCheckers.check(checkNotNullCall, data, reporter) + checkers.allBasicExpressionCheckers.check(checkNotNullCall, data, reporter) } override fun visitTryExpression(tryExpression: FirTryExpression, data: CheckerContext) { - checkers.tryExpressionCheckers.check(tryExpression, data, reporter) + checkers.allTryExpressionCheckers.check(tryExpression, data, reporter) } override fun visitClassReferenceExpression(classReferenceExpression: FirClassReferenceExpression, data: CheckerContext) { - checkers.basicExpressionCheckers.check(classReferenceExpression, data, reporter) + checkers.allBasicExpressionCheckers.check(classReferenceExpression, data, reporter) } override fun visitGetClassCall(getClassCall: FirGetClassCall, data: CheckerContext) { - checkers.basicExpressionCheckers.check(getClassCall, data, reporter) + checkers.allBasicExpressionCheckers.check(getClassCall, data, reporter) } override fun visitEqualityOperatorCall(equalityOperatorCall: FirEqualityOperatorCall, data: CheckerContext) { - checkers.basicExpressionCheckers.check(equalityOperatorCall, data, reporter) + checkers.allBasicExpressionCheckers.check(equalityOperatorCall, data, reporter) } override fun visitVariableAssignment(variableAssignment: FirVariableAssignment, data: CheckerContext) { - checkers.variableAssignmentCheckers.check(variableAssignment, data, reporter) + checkers.allVariableAssignmentCheckers.check(variableAssignment, data, reporter) } private fun Collection>.check( diff --git a/idea/testData/checker/Bounds.fir.kt b/idea/testData/checker/Bounds.fir.kt index e6b2b1508c8..d4852f6eb24 100644 --- a/idea/testData/checker/Bounds.fir.kt +++ b/idea/testData/checker/Bounds.fir.kt @@ -4,7 +4,7 @@ class Pair abstract class C, X : (B) -> Pair, B>>() : B() { // 2 errors - val a = B() // error + val a = B<Char>() // error abstract val x : (B) -> B } diff --git a/idea/testData/checker/Bounds2.fir.kt b/idea/testData/checker/Bounds2.fir.kt index c1f8aa0b20a..9d5a48881bd 100644 --- a/idea/testData/checker/Bounds2.fir.kt +++ b/idea/testData/checker/Bounds2.fir.kt @@ -1,10 +1,10 @@ fun test() { - foo() + foo<Int?>() foo() bar() bar() - bar() - bar() + bar<Double?>() + bar<Double>() 1.buzz() } diff --git a/idea/testData/checker/BoundsWithSubstitutors.fir.kt b/idea/testData/checker/BoundsWithSubstitutors.fir.kt index bb18fd0b503..a904462848d 100644 --- a/idea/testData/checker/BoundsWithSubstitutors.fir.kt +++ b/idea/testData/checker/BoundsWithSubstitutors.fir.kt @@ -6,10 +6,10 @@ class C : A() val a = B() - val a1 = B() + val a1 = B<Int>() class X() val b = X, C>>() - val b0 = X() - val b1 = X, String>>() + val b0 = XAny?>() + val b1 = XX, String>>() diff --git a/idea/testData/checker/Builders.fir.kt b/idea/testData/checker/Builders.fir.kt index fa639fe2640..b87f1eb8891 100644 --- a/idea/testData/checker/Builders.fir.kt +++ b/idea/testData/checker/Builders.fir.kt @@ -16,7 +16,7 @@ import java.util.* protected fun initTag(init : T.() -> Unit) : T { - val tag = T.create() + val tag = T.create() tag.init() children.add(tag) return tag diff --git a/idea/testData/checker/MultipleBounds.fir.kt b/idea/testData/checker/MultipleBounds.fir.kt index 3e7642616bb..60363170b58 100644 --- a/idea/testData/checker/MultipleBounds.fir.kt +++ b/idea/testData/checker/MultipleBounds.fir.kt @@ -22,16 +22,16 @@ class Test1() { fun test(t : T) { - T.foo() - T.bar() + T.foo() + T.bar() t.foo() t.bar() } } fun test() { - Test1() - Test1() + Test1<B>() + Test1<A>() Test1() } @@ -50,8 +50,8 @@ fun test2(t : T) T : B, B : T { - T.foo() - T.bar() + T.foo() + T.bar() t.foo() t.bar() }