From 56b2a984ce4acf760e456f7c67fee21bdb327675 Mon Sep 17 00:00:00 2001 From: Nikolay Lunyak Date: Fri, 20 Aug 2021 03:15:09 +0300 Subject: [PATCH] [FIR] Quick fix FirModifierChecker --- .../diagnostics/FirDiagnosticsList.kt | 6 --- .../fir/analysis/diagnostics/FirErrors.kt | 2 - .../checkers/CommonDeclarationCheckers.kt | 1 - .../fir/analysis/checkers/FirHelpers.kt | 1 + .../FirBackingFieldModifiersChecker.kt | 46 ------------------- .../diagnostics/FirDefaultErrorMessages.kt | 12 ----- .../kotlin/resolve/ModifierCheckerHelpers.kt | 6 +-- .../descriptors/annotations/KotlinTarget.kt | 2 + .../kotlin/resolve/AnnotationTargetLists.kt | 1 + .../diagnostics/KtFirDataClassConverters.kt | 14 ------ .../api/fir/diagnostics/KtFirDiagnostics.kt | 10 ---- .../fir/diagnostics/KtFirDiagnosticsImpl.kt | 7 +++ 12 files changed, 14 insertions(+), 94 deletions(-) delete mode 100644 compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirBackingFieldModifiersChecker.kt diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt index d7e51d2c494..afbeaebbd33 100644 --- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt +++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt @@ -877,12 +877,6 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") { val PROPERTY_FIELD_DECLARATION_MISSING_INITIALIZER by error() val PROPERTY_MUST_HAVE_GETTER by error() val PROPERTY_MUST_HAVE_SETTER by error() - val INAPPLICABLE_BACKING_FIELD_VISIBILITY by error { - parameter("modifier") - } - val INAPPLICABLE_BACKING_FIELD_MODIFIER by error { - parameter("modifier") - } val EXPLICIT_BACKING_FIELD_IN_INTERFACE by error() val EXPLICIT_BACKING_FIELD_IN_ABSTRACT_PROPERTY by error() val ABSTRACT_PROPERTY_IN_PRIMARY_CONSTRUCTOR_PARAMETERS by error(PositioningStrategy.ABSTRACT_MODIFIER) diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt index 69660296646..a2936a983d5 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt @@ -484,8 +484,6 @@ object FirErrors { val PROPERTY_FIELD_DECLARATION_MISSING_INITIALIZER by error0() val PROPERTY_MUST_HAVE_GETTER by error0() val PROPERTY_MUST_HAVE_SETTER by error0() - val INAPPLICABLE_BACKING_FIELD_VISIBILITY by error1() - val INAPPLICABLE_BACKING_FIELD_MODIFIER by error1() val EXPLICIT_BACKING_FIELD_IN_INTERFACE by error0() val EXPLICIT_BACKING_FIELD_IN_ABSTRACT_PROPERTY by error0() val ABSTRACT_PROPERTY_IN_PRIMARY_CONSTRUCTOR_PARAMETERS by error0(SourceElementPositioningStrategies.ABSTRACT_MODIFIER) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonDeclarationCheckers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonDeclarationCheckers.kt index f8aeb893656..d1fab8306e2 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonDeclarationCheckers.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonDeclarationCheckers.kt @@ -62,7 +62,6 @@ object CommonDeclarationCheckers : DeclarationCheckers() { override val backingFieldCheckers: Set get() = setOf( - FirBackingFieldModifiersChecker, FirExplicitBackingFieldInInterfaceChecker, ) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt index cf50be24bf4..eca6aa1d3e5 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirHelpers.kt @@ -742,6 +742,7 @@ fun getActualTargetList(annotated: FirDeclaration): AnnotationTargetList { } is FirTypeAlias -> TargetLists.T_TYPEALIAS is FirPropertyAccessor -> if (annotated.isGetter) TargetLists.T_PROPERTY_GETTER else TargetLists.T_PROPERTY_SETTER + is FirBackingField -> TargetLists.T_BACKING_FIELD is FirFile -> TargetLists.T_FILE is FirTypeParameter -> TargetLists.T_TYPE_PARAMETER is FirAnonymousInitializer -> TargetLists.T_INITIALIZER diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirBackingFieldModifiersChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirBackingFieldModifiersChecker.kt deleted file mode 100644 index c387ef30e5f..00000000000 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirBackingFieldModifiersChecker.kt +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2010-2021 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.FirModifier -import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext -import org.jetbrains.kotlin.fir.analysis.checkers.getModifierList -import org.jetbrains.kotlin.fir.analysis.checkers.toVisibilityOrNull -import org.jetbrains.kotlin.fir.analysis.diagnostics.* -import org.jetbrains.kotlin.fir.declarations.FirBackingField -import org.jetbrains.kotlin.lexer.KtModifierKeywordToken -import org.jetbrains.kotlin.lexer.KtTokens - -object FirBackingFieldModifiersChecker : FirBackingFieldChecker() { - private val ALLOWED_MODIFIERS = setOf( - KtTokens.PRIVATE_KEYWORD, - KtTokens.INTERNAL_KEYWORD, - ) - - override fun check(declaration: FirBackingField, context: CheckerContext, reporter: DiagnosticReporter) { - val modifiers = declaration.source - ?.getModifierList() - ?.modifiers - ?: return - - modifiers.forEach { - if (it.token in ALLOWED_MODIFIERS) { - return@forEach - } - - val diagnostic = reportInapplicable(it) - reporter.reportOn(it.source, diagnostic, it.token, context) - } - } - - private fun reportInapplicable(modifier: FirModifier<*>): FirDiagnosticFactory1 { - return if (modifier.token.toVisibilityOrNull() != null) { - FirErrors.INAPPLICABLE_BACKING_FIELD_VISIBILITY - } else { - FirErrors.INAPPLICABLE_BACKING_FIELD_MODIFIER - } - } -} diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDefaultErrorMessages.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDefaultErrorMessages.kt index 70227da94c4..970ae73d914 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDefaultErrorMessages.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDefaultErrorMessages.kt @@ -270,8 +270,6 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MANY_LAMBDA_EXPRE import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.METHOD_OF_ANY_IMPLEMENTED_IN_INTERFACE import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MISPLACED_TYPE_PARAMETER_CONSTRAINTS import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MISSING_VAL_ON_ANNOTATION_PARAMETER -import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.INAPPLICABLE_BACKING_FIELD_MODIFIER -import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.INAPPLICABLE_BACKING_FIELD_VISIBILITY import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MODIFIER_FORM_FOR_NON_BUILT_IN_SUSPEND import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MULTIPLE_VARARG_PARAMETERS import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MUST_BE_INITIALIZED @@ -1291,16 +1289,6 @@ class FirDefaultErrorMessages { PROPERTY_MUST_HAVE_SETTER, "This property needs a custom setter, because it's type is not a subtype of the backing field's type" ) - map.put( - INAPPLICABLE_BACKING_FIELD_VISIBILITY, - "Explicit backing field declarations may only be private or internal, but not ''{0}''", - TO_STRING - ) - map.put( - INAPPLICABLE_BACKING_FIELD_MODIFIER, - "Modifier ''{0}'' is not applicable to explicit backing field declarations", - TO_STRING - ) map.put( EXPLICIT_BACKING_FIELD_IN_INTERFACE, "Backing fields are not allowed inside interfaces" diff --git a/compiler/psi/src/org/jetbrains/kotlin/resolve/ModifierCheckerHelpers.kt b/compiler/psi/src/org/jetbrains/kotlin/resolve/ModifierCheckerHelpers.kt index c50c415526f..6dc0e25ea32 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/resolve/ModifierCheckerHelpers.kt +++ b/compiler/psi/src/org/jetbrains/kotlin/resolve/ModifierCheckerHelpers.kt @@ -147,7 +147,7 @@ val featureDependenciesTargets = mapOf( val defaultVisibilityTargets: EnumSet = EnumSet.of( KotlinTarget.CLASS_ONLY, KotlinTarget.OBJECT, KotlinTarget.INTERFACE, KotlinTarget.ENUM_CLASS, KotlinTarget.ANNOTATION_CLASS, KotlinTarget.MEMBER_FUNCTION, KotlinTarget.TOP_LEVEL_FUNCTION, KotlinTarget.PROPERTY_GETTER, KotlinTarget.PROPERTY_SETTER, - KotlinTarget.MEMBER_PROPERTY, KotlinTarget.TOP_LEVEL_PROPERTY, KotlinTarget.CONSTRUCTOR, KotlinTarget.TYPEALIAS + KotlinTarget.MEMBER_PROPERTY, KotlinTarget.TOP_LEVEL_PROPERTY, KotlinTarget.CONSTRUCTOR, KotlinTarget.TYPEALIAS, ) val possibleTargetMap = mapOf( @@ -177,9 +177,9 @@ val possibleTargetMap = mapOf( SEALED_KEYWORD to EnumSet.of(KotlinTarget.CLASS_ONLY, KotlinTarget.INTERFACE), INNER_KEYWORD to EnumSet.of(KotlinTarget.CLASS_ONLY), OVERRIDE_KEYWORD to EnumSet.of(KotlinTarget.MEMBER_PROPERTY, KotlinTarget.MEMBER_FUNCTION), - PRIVATE_KEYWORD to defaultVisibilityTargets, + PRIVATE_KEYWORD to defaultVisibilityTargets + KotlinTarget.BACKING_FIELD, PUBLIC_KEYWORD to defaultVisibilityTargets, - INTERNAL_KEYWORD to defaultVisibilityTargets, + INTERNAL_KEYWORD to defaultVisibilityTargets + KotlinTarget.BACKING_FIELD, PROTECTED_KEYWORD to EnumSet.of( KotlinTarget.CLASS_ONLY, KotlinTarget.OBJECT, diff --git a/core/compiler.common/src/org/jetbrains/kotlin/descriptors/annotations/KotlinTarget.kt b/core/compiler.common/src/org/jetbrains/kotlin/descriptors/annotations/KotlinTarget.kt index ed0d20ea818..b9525cb1b51 100644 --- a/core/compiler.common/src/org/jetbrains/kotlin/descriptors/annotations/KotlinTarget.kt +++ b/core/compiler.common/src/org/jetbrains/kotlin/descriptors/annotations/KotlinTarget.kt @@ -56,6 +56,8 @@ enum class KotlinTarget(val description: String, val isDefault: Boolean = true) TOP_LEVEL_PROPERTY_WITH_DELEGATE("top level property with delegate", false), TOP_LEVEL_PROPERTY_WITHOUT_FIELD_OR_DELEGATE("top level property without backing field or delegate", false), + BACKING_FIELD("backing field"), + INITIALIZER("initializer", false), DESTRUCTURING_DECLARATION("destructuring declaration", false), LAMBDA_EXPRESSION("lambda expression", false), diff --git a/core/compiler.common/src/org/jetbrains/kotlin/resolve/AnnotationTargetLists.kt b/core/compiler.common/src/org/jetbrains/kotlin/resolve/AnnotationTargetLists.kt index 85231f8e119..066f472c1a4 100644 --- a/core/compiler.common/src/org/jetbrains/kotlin/resolve/AnnotationTargetLists.kt +++ b/core/compiler.common/src/org/jetbrains/kotlin/resolve/AnnotationTargetLists.kt @@ -54,6 +54,7 @@ object AnnotationTargetLists { val T_PROPERTY_GETTER = targetList(PROPERTY_GETTER) val T_PROPERTY_SETTER = targetList(PROPERTY_SETTER) + val T_BACKING_FIELD = targetList(BACKING_FIELD) val T_VALUE_PARAMETER_WITHOUT_VAL = targetList(VALUE_PARAMETER) diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt index eb647e86aaa..c9624efc3f5 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt @@ -2430,20 +2430,6 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert token, ) } - add(FirErrors.INAPPLICABLE_BACKING_FIELD_VISIBILITY) { firDiagnostic -> - InapplicableBackingFieldVisibilityImpl( - firDiagnostic.a, - firDiagnostic as FirPsiDiagnostic, - token, - ) - } - add(FirErrors.INAPPLICABLE_BACKING_FIELD_MODIFIER) { firDiagnostic -> - InapplicableBackingFieldModifierImpl( - firDiagnostic.a, - firDiagnostic as FirPsiDiagnostic, - token, - ) - } add(FirErrors.EXPLICIT_BACKING_FIELD_IN_INTERFACE) { firDiagnostic -> ExplicitBackingFieldInInterfaceImpl( firDiagnostic as FirPsiDiagnostic, diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnostics.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnostics.kt index c59ac9e5b30..b8073f24b4e 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnostics.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnostics.kt @@ -1719,16 +1719,6 @@ sealed class KtFirDiagnostic : KtDiagnosticWithPsi { override val diagnosticClass get() = PropertyMustHaveSetter::class } - abstract class InapplicableBackingFieldVisibility : KtFirDiagnostic() { - override val diagnosticClass get() = InapplicableBackingFieldVisibility::class - abstract val modifier: KtModifierKeywordToken - } - - abstract class InapplicableBackingFieldModifier : KtFirDiagnostic() { - override val diagnosticClass get() = InapplicableBackingFieldModifier::class - abstract val modifier: KtModifierKeywordToken - } - abstract class ExplicitBackingFieldInInterface : KtFirDiagnostic() { override val diagnosticClass get() = ExplicitBackingFieldInInterface::class } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnosticsImpl.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnosticsImpl.kt index bb977de405c..fe752821311 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnosticsImpl.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnosticsImpl.kt @@ -2818,6 +2818,13 @@ internal class ExplicitBackingFieldInAbstractPropertyImpl( override val firDiagnostic: FirPsiDiagnostic by weakRef(firDiagnostic) } +internal class AbstractPropertyInPrimaryConstructorParametersImpl( + firDiagnostic: FirPsiDiagnostic, + override val token: ValidityToken, +) : KtFirDiagnostic.AbstractPropertyInPrimaryConstructorParameters(), KtAbstractFirDiagnostic { + override val firDiagnostic: FirPsiDiagnostic by weakRef(firDiagnostic) +} + internal class ExpectedDeclarationWithBodyImpl( firDiagnostic: FirPsiDiagnostic, override val token: ValidityToken,