diff --git a/compiler/fir/analysis-tests/testData/resolve/diagnostics/conflictingProjection.kt b/compiler/fir/analysis-tests/testData/resolve/diagnostics/conflictingProjection.kt index 2e46ea04ee0..dc0dda94171 100644 --- a/compiler/fir/analysis-tests/testData/resolve/diagnostics/conflictingProjection.kt +++ b/compiler/fir/analysis-tests/testData/resolve/diagnostics/conflictingProjection.kt @@ -18,37 +18,37 @@ typealias A1 = None typealias A2 = None typealias A3 = None -typealias A4<in K> = None -typealias A5<in K> = None -typealias A6<in K> = None +typealias A4<in K> = None +typealias A5<in K> = None +typealias A6<in K> = None -typealias A7<out K> = None -typealias A8<out K> = None -typealias A9<out K> = None +typealias A7<out K> = None +typealias A8<out K> = None +typealias A9<out K> = None typealias A10 = In typealias A11 = In typealias A12 = In -typealias A13<in K> = In -typealias A14<in K> = In -typealias A15<in K> = In +typealias A13<in K> = In +typealias A14<in K> = In +typealias A15<in K> = In -typealias A16<out K> = In -typealias A17<out K> = In -typealias A18<out K> = In +typealias A16<out K> = In +typealias A17<out K> = In +typealias A18<out K> = In typealias A19 = Out typealias A20 = Out typealias A21 = Out -typealias A22<in K> = Out -typealias A23<in K> = Out -typealias A24<in K> = Out +typealias A22<in K> = Out +typealias A23<in K> = Out +typealias A24<in K> = Out -typealias A25<out K> = Out -typealias A26<out K> = Out -typealias A27<out K> = Out +typealias A25<out K> = Out +typealias A26<out K> = Out +typealias A27<out K> = Out class Outer { inner class Intermediate { diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt index 42702776618..129114cca3c 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt @@ -107,7 +107,7 @@ object FirErrors { val REDUNDANT_MODIFIER by error2() val DEPRECATED_MODIFIER_PAIR by error2() val INCOMPATIBLE_MODIFIERS by error2() - val REDUNDANT_OPEN_IN_INTERFACE by warning0(SourceElementPositioningStrategies.MODALITY_MODIFIER) + val REDUNDANT_OPEN_IN_INTERFACE by warning0(SourceElementPositioningStrategies.OPEN_MODIFIER) // Applicability val NONE_APPLICABLE by error1>>() @@ -131,7 +131,7 @@ object FirErrors { val ILLEGAL_PROJECTION_USAGE by error0() val TYPE_PARAMETERS_IN_ENUM by error0() val CONFLICTING_PROJECTION by error1() - val VARIANCE_ON_TYPE_PARAMETER_NOT_ALLOWED by error0() + val VARIANCE_ON_TYPE_PARAMETER_NOT_ALLOWED by error0(SourceElementPositioningStrategies.VARIANCE_MODIFIER) val CATCH_PARAMETER_WITH_DEFAULT_VALUE by error0() val REIFIED_TYPE_IN_CATCH_CLAUSE by error0() val TYPE_PARAMETER_IN_CATCH_CLAUSE by error0() @@ -152,10 +152,10 @@ object FirErrors { val LOCAL_INTERFACE_NOT_ALLOWED by error1(SourceElementPositioningStrategies.DECLARATION_NAME) // Functions - val ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS by error2(SourceElementPositioningStrategies.MODALITY_MODIFIER) - val ABSTRACT_FUNCTION_WITH_BODY by error1(SourceElementPositioningStrategies.MODALITY_MODIFIER) + val ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS by error2(SourceElementPositioningStrategies.ABSTRACT_MODIFIER) + val ABSTRACT_FUNCTION_WITH_BODY by error1(SourceElementPositioningStrategies.ABSTRACT_MODIFIER) val NON_ABSTRACT_FUNCTION_WITH_NO_BODY by error1(SourceElementPositioningStrategies.DECLARATION_SIGNATURE) - val PRIVATE_FUNCTION_WITH_NO_BODY by error1(SourceElementPositioningStrategies.VISIBILITY_MODIFIER) + val PRIVATE_FUNCTION_WITH_NO_BODY by error1(SourceElementPositioningStrategies.PRIVATE_MODIFIER) val NON_MEMBER_FUNCTION_NO_BODY by error1(SourceElementPositioningStrategies.DECLARATION_SIGNATURE) val FUNCTION_DECLARATION_WITH_NO_NAME by error0(SourceElementPositioningStrategies.DECLARATION_SIGNATURE) @@ -165,8 +165,8 @@ object FirErrors { val USELESS_VARARG_ON_PARAMETER by warning0() // Properties & accessors - val ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS by error2(SourceElementPositioningStrategies.MODALITY_MODIFIER) - val PRIVATE_PROPERTY_IN_INTERFACE by error0(SourceElementPositioningStrategies.VISIBILITY_MODIFIER) + val ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS by error2(SourceElementPositioningStrategies.ABSTRACT_MODIFIER) + val PRIVATE_PROPERTY_IN_INTERFACE by error0(SourceElementPositioningStrategies.PRIVATE_MODIFIER) val ABSTRACT_PROPERTY_WITH_INITIALIZER by error0() // TODO: val MUST_BE_INITIALIZED by error0(SourceElementPositioningStrategies.DECLARATION_SIGNATURE) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/LightTreePositioningStrategies.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/LightTreePositioningStrategies.kt index b455c9860e6..dd80267b25a 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/LightTreePositioningStrategies.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/LightTreePositioningStrategies.kt @@ -262,6 +262,24 @@ object LightTreePositioningStrategies { val MODALITY_MODIFIER: LightTreePositioningStrategy = ModifierSetBasedLightTreePositioningStrategy(MODALITY_MODIFIERS) + val ABSTRACT_MODIFIER: LightTreePositioningStrategy = + ModifierSetBasedLightTreePositioningStrategy(TokenSet.create(KtTokens.ABSTRACT_KEYWORD)) + + val OPEN_MODIFIER: LightTreePositioningStrategy = + ModifierSetBasedLightTreePositioningStrategy(TokenSet.create(KtTokens.OPEN_KEYWORD)) + + val OVERRIDE_MODIFIER: LightTreePositioningStrategy = + ModifierSetBasedLightTreePositioningStrategy(TokenSet.create(KtTokens.OVERRIDE_KEYWORD)) + + val PRIVATE_MODIFIER: LightTreePositioningStrategy = + ModifierSetBasedLightTreePositioningStrategy(TokenSet.create(KtTokens.PRIVATE_KEYWORD)) + + val LATEINIT_MODIFIER: LightTreePositioningStrategy = + ModifierSetBasedLightTreePositioningStrategy(TokenSet.create(KtTokens.LATEINIT_KEYWORD)) + + val VARIANCE_MODIFIER: LightTreePositioningStrategy = + ModifierSetBasedLightTreePositioningStrategy(TokenSet.create(KtTokens.IN_KEYWORD, KtTokens.OUT_KEYWORD)) + val OPERATOR: LightTreePositioningStrategy = object : LightTreePositioningStrategy() { override fun mark( node: LighterASTNode, diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/SourceElementPositioningStrategies.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/SourceElementPositioningStrategies.kt index e7938c4c305..86c42f79947 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/SourceElementPositioningStrategies.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/SourceElementPositioningStrategies.kt @@ -53,6 +53,36 @@ object SourceElementPositioningStrategies { PositioningStrategies.MODALITY_MODIFIER ) + val ABSTRACT_MODIFIER = SourceElementPositioningStrategy( + LightTreePositioningStrategies.ABSTRACT_MODIFIER, + PositioningStrategies.ABSTRACT_MODIFIER + ) + + val OPEN_MODIFIER = SourceElementPositioningStrategy( + LightTreePositioningStrategies.OPEN_MODIFIER, + PositioningStrategies.OPEN_MODIFIER + ) + + val OVERRIDE_MODIFIER = SourceElementPositioningStrategy( + LightTreePositioningStrategies.OVERRIDE_MODIFIER, + PositioningStrategies.OVERRIDE_MODIFIER + ) + + val PRIVATE_MODIFIER = SourceElementPositioningStrategy( + LightTreePositioningStrategies.PRIVATE_MODIFIER, + PositioningStrategies.PRIVATE_MODIFIER + ) + + val LATEINIT_MODIFIER = SourceElementPositioningStrategy( + LightTreePositioningStrategies.LATEINIT_MODIFIER, + PositioningStrategies.LATEINIT_MODIFIER + ) + + val VARIANCE_MODIFIER = SourceElementPositioningStrategy( + LightTreePositioningStrategies.VARIANCE_MODIFIER, + PositioningStrategies.VARIANCE_MODIFIER + ) + val OPERATOR = SourceElementPositioningStrategy( LightTreePositioningStrategies.OPERATOR, PositioningStrategies.OPERATOR diff --git a/compiler/testData/diagnostics/tests/typealias/parameterRestrictions.fir.kt b/compiler/testData/diagnostics/tests/typealias/parameterRestrictions.fir.kt index d8e6cad4ce7..09ef7d29798 100644 --- a/compiler/testData/diagnostics/tests/typealias/parameterRestrictions.fir.kt +++ b/compiler/testData/diagnostics/tests/typealias/parameterRestrictions.fir.kt @@ -1,6 +1,6 @@ // !DIAGNOSTICS: -UNUSED_TYPEALIAS_PARAMETER -typealias WithVariance<in X, out Y> = Int +typealias WithVariance<in X, out Y> = Int typealias WithBounds1 = Int typealias WithBounds2 = Int