From ebed224f82a14f3d4dcb7892bd60248de4246fd9 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 3 Mar 2022 11:44:33 +0300 Subject: [PATCH] FE 1.0: use TYPE_VARIANCE_CONFLICT deprecation factory --- .../diagnostics/KtFirDataClassConverters.kt | 4 +- .../api/fir/diagnostics/KtFirDiagnostics.kt | 4 +- .../fir/diagnostics/KtFirDiagnosticsImpl.kt | 4 +- .../resolve/fromBuilder/typeParameters.kt | 2 +- .../diagnostics/FirDiagnosticsList.kt | 2 +- .../fir/analysis/diagnostics/FirErrors.kt | 2 +- .../declaration/FirClassVarianceChecker.kt | 2 +- .../diagnostics/FirErrorsDefaultMessages.kt | 4 +- .../jetbrains/kotlin/diagnostics/Errors.java | 7 ++-- .../rendering/DefaultErrorMessages.java | 3 -- .../kotlin/resolve/VarianceChecker.kt | 35 ++++++++-------- .../generics/innerClasses/innerVariance.kt | 8 ++-- .../tests/inner/typeVarianceConflict.fir.kt | 8 ++-- .../inner/typeVarianceConflictFeatureOn.kt | 2 +- .../testData/diagnostics/tests/kt13401.fir.kt | 4 +- .../testData/diagnostics/tests/kt13401.kt | 2 +- .../tests/typealias/kt14498a.fir.kt | 4 +- .../diagnostics/tests/variance/Class.kt | 16 +++---- .../diagnostics/tests/variance/Function.kt | 20 ++++----- .../tests/variance/FunctionTypes.kt | 8 ++-- .../tests/variance/InPosition.fir.kt | 24 +++++------ .../diagnostics/tests/variance/InPosition.kt | 24 +++++------ .../tests/variance/InvariantPosition.fir.kt | 42 +++++++++---------- .../tests/variance/InvariantPosition.kt | 42 +++++++++---------- .../tests/variance/NullableTypes.kt | 8 ++-- .../tests/variance/OutPosition.fir.kt | 20 ++++----- .../diagnostics/tests/variance/OutPosition.kt | 20 ++++----- .../tests/variance/PrimaryConstructor.kt | 12 +++--- .../diagnostics/tests/variance/ValProperty.kt | 24 +++++------ .../diagnostics/tests/variance/VarProperty.kt | 36 ++++++++-------- .../diagnostics/tests/variance/Visibility.kt | 20 ++++----- 31 files changed, 204 insertions(+), 209 deletions(-) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt index ffb50bdabcb..ec0bf1a4198 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt @@ -1911,8 +1911,8 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert token, ) } - add(FirErrors.TYPE_VARIANCE_CONFLICT) { firDiagnostic -> - TypeVarianceConflictImpl( + add(FirErrors.TYPE_VARIANCE_CONFLICT_ERROR) { firDiagnostic -> + TypeVarianceConflictErrorImpl( firSymbolBuilder.classifierBuilder.buildTypeParameterSymbol(firDiagnostic.a), firDiagnostic.b, firDiagnostic.c, diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt index 4b76eb0b7c1..16713e3b378 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt @@ -1358,8 +1358,8 @@ sealed class KtFirDiagnostic : KtDiagnosticWithPsi { abstract val typeB: KtType } - abstract class TypeVarianceConflict : KtFirDiagnostic() { - override val diagnosticClass get() = TypeVarianceConflict::class + abstract class TypeVarianceConflictError : KtFirDiagnostic() { + override val diagnosticClass get() = TypeVarianceConflictError::class abstract val typeParameter: KtTypeParameterSymbol abstract val typeParameterVariance: Variance abstract val variance: Variance diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt index ad12388df8d..43e70bb0870 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt @@ -1632,14 +1632,14 @@ internal class IncompatibleTypesWarningImpl( override val token: ValidityToken, ) : KtFirDiagnostic.IncompatibleTypesWarning(), KtAbstractFirDiagnostic -internal class TypeVarianceConflictImpl( +internal class TypeVarianceConflictErrorImpl( override val typeParameter: KtTypeParameterSymbol, override val typeParameterVariance: Variance, override val variance: Variance, override val containingType: KtType, override val firDiagnostic: KtPsiDiagnostic, override val token: ValidityToken, -) : KtFirDiagnostic.TypeVarianceConflict(), KtAbstractFirDiagnostic +) : KtFirDiagnostic.TypeVarianceConflictError(), KtAbstractFirDiagnostic internal class TypeVarianceConflictInExpandedTypeImpl( override val typeParameter: KtTypeParameterSymbol, diff --git a/compiler/fir/analysis-tests/testData/resolve/fromBuilder/typeParameters.kt b/compiler/fir/analysis-tests/testData/resolve/fromBuilder/typeParameters.kt index 23f5085fe70..e1b2b3f3043 100644 --- a/compiler/fir/analysis-tests/testData/resolve/fromBuilder/typeParameters.kt +++ b/compiler/fir/analysis-tests/testData/resolve/fromBuilder/typeParameters.kt @@ -1,7 +1,7 @@ interface List { operator fun get(index: Int): T - infix fun concat(other: List<T>): List + infix fun concat(other: List<T>): List } typealias StringList = List<out String> 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 b2837a6bf7e..92e5043b2c0 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 @@ -647,7 +647,7 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") { parameter("typeB") } - val TYPE_VARIANCE_CONFLICT by error(PositioningStrategy.DECLARATION_SIGNATURE_OR_DEFAULT) { + val TYPE_VARIANCE_CONFLICT_ERROR by error(PositioningStrategy.DECLARATION_SIGNATURE_OR_DEFAULT) { parameter("typeParameter") parameter("typeParameterVariance") parameter("variance") 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 25df0477e36..49a02a342c6 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 @@ -401,7 +401,7 @@ object FirErrors { val DYNAMIC_UPPER_BOUND by error0() val INCOMPATIBLE_TYPES by error2() val INCOMPATIBLE_TYPES_WARNING by warning2() - val TYPE_VARIANCE_CONFLICT by error4(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT) + val TYPE_VARIANCE_CONFLICT_ERROR by error4(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT) val TYPE_VARIANCE_CONFLICT_IN_EXPANDED_TYPE by error4(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT) val SMARTCAST_IMPOSSIBLE by error4() val REDUNDANT_NULLABLE by warning0(SourceElementPositioningStrategies.REDUNDANT_NULLABLE) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirClassVarianceChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirClassVarianceChecker.kt index 792aa40f7e6..ef2e2bf1a0b 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirClassVarianceChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirClassVarianceChecker.kt @@ -118,7 +118,7 @@ object FirClassVarianceChecker : FirClassChecker() { !fullyExpandedType.attributes.contains(CompilerConeAttributes.UnsafeVariance) ) { val factory = - if (isInAbbreviation) FirErrors.TYPE_VARIANCE_CONFLICT_IN_EXPANDED_TYPE else FirErrors.TYPE_VARIANCE_CONFLICT + if (isInAbbreviation) FirErrors.TYPE_VARIANCE_CONFLICT_IN_EXPANDED_TYPE else FirErrors.TYPE_VARIANCE_CONFLICT_ERROR reporter.reportOn( resultSource, factory, diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt index 84f9b75bc22..890fc4c85ae 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt @@ -495,7 +495,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.TYPE_PARAMETER_IN import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.TYPE_PARAMETER_IS_NOT_AN_EXPRESSION import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.TYPE_PARAMETER_ON_LHS_OF_DOT -import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.TYPE_VARIANCE_CONFLICT +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.TYPE_VARIANCE_CONFLICT_ERROR import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.TYPE_VARIANCE_CONFLICT_IN_EXPANDED_TYPE import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.UNCHECKED_CAST import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.UNDERSCORE_IS_RESERVED @@ -1084,7 +1084,7 @@ object FirErrorsDefaultMessages : BaseDiagnosticRendererFactory() { ) map.put( - TYPE_VARIANCE_CONFLICT, + TYPE_VARIANCE_CONFLICT_ERROR, "Type parameter {0} is declared as ''{1}'' but occurs in ''{2}'' position in type {3}", SYMBOL, RENDER_POSITION_VARIANCE, RENDER_POSITION_VARIANCE, RENDER_TYPE ) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java index 5688907cf89..3673760e946 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java @@ -43,6 +43,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import static org.jetbrains.kotlin.config.LanguageFeature.ReportTypeVarianceConflictOnQualifierArguments; import static org.jetbrains.kotlin.diagnostics.ClassicPositioningStrategies.ACTUAL_DECLARATION_NAME; import static org.jetbrains.kotlin.diagnostics.ClassicPositioningStrategies.INCOMPATIBLE_DECLARATION; import static org.jetbrains.kotlin.diagnostics.PositioningStrategies.*; @@ -197,10 +198,8 @@ public interface Errors { DiagnosticFactory1.create(ERROR, VARIANCE_IN_PROJECTION); DiagnosticFactory1 REDUNDANT_PROJECTION = DiagnosticFactory1.create(WARNING, VARIANCE_IN_PROJECTION); - DiagnosticFactory1 TYPE_VARIANCE_CONFLICT = - DiagnosticFactory1.create(ERROR, DECLARATION_SIGNATURE_OR_DEFAULT); - DiagnosticFactory1 TYPE_VARIANCE_CONFLICT_WARNING = - DiagnosticFactory1.create(WARNING, DECLARATION_SIGNATURE_OR_DEFAULT); + DiagnosticFactoryForDeprecation1 TYPE_VARIANCE_CONFLICT = + DiagnosticFactoryForDeprecation1.create(LanguageFeature.ReportTypeVarianceConflictOnQualifierArguments, DECLARATION_SIGNATURE_OR_DEFAULT); DiagnosticFactory1 TYPE_VARIANCE_CONFLICT_IN_EXPANDED_TYPE = DiagnosticFactory1.create(ERROR, DECLARATION_SIGNATURE_OR_DEFAULT); DiagnosticFactory0 FINITE_BOUNDS_VIOLATION = DiagnosticFactory0.create(ERROR); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java index 596b6df0f0f..02dfdb06a9d 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java @@ -807,9 +807,6 @@ public class DefaultErrorMessages { }; MAP.put(TYPE_VARIANCE_CONFLICT, "Type parameter {0} is declared as ''{1}'' but occurs in ''{2}'' position in type {3}", varianceConflictDataRenderer); - MAP.put(TYPE_VARIANCE_CONFLICT_WARNING, "Type parameter {0} is declared as ''{1}'' but occurs in ''{2}'' position in type {3}. " + - "This diagnostic will become an error soon. See https://youtrack.jetbrains.com/issue/KT-50947", - varianceConflictDataRenderer); MAP.put(TYPE_VARIANCE_CONFLICT_IN_EXPANDED_TYPE, "Type parameter {0} is declared as ''{1}'' but occurs in ''{2}'' position in abbreviated type {3}", varianceConflictDataRenderer); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/VarianceChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/VarianceChecker.kt index 7724d42f86d..af223c89640 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/VarianceChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/VarianceChecker.kt @@ -18,9 +18,8 @@ package org.jetbrains.kotlin.resolve import com.intellij.psi.PsiElement import org.jetbrains.kotlin.builtins.StandardNames -import org.jetbrains.kotlin.config.LanguageFeature -import org.jetbrains.kotlin.config.LanguageFeature.ReportTypeVarianceConflictOnQualifierArguments import org.jetbrains.kotlin.config.LanguageVersionSettings +import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.impl.FunctionDescriptorImpl import org.jetbrains.kotlin.descriptors.impl.PropertyAccessorDescriptorImpl @@ -157,19 +156,20 @@ class VarianceCheckerCore( && !type.annotations.hasAnnotation(StandardNames.FqNames.unsafeVariance) ) { val varianceConflictDiagnosticData = VarianceConflictDiagnosticData(containingType, classifierDescriptor, position) - val diagnostic = - when { - isArgumentFromQualifier -> { - if (languageVersionSettings?.supportsFeature(ReportTypeVarianceConflictOnQualifierArguments) == true) { - Errors.TYPE_VARIANCE_CONFLICT - } else { - Errors.TYPE_VARIANCE_CONFLICT_WARNING - } - } - isInAbbreviation -> Errors.TYPE_VARIANCE_CONFLICT_IN_EXPANDED_TYPE - else -> Errors.TYPE_VARIANCE_CONFLICT - } - diagnosticSink.report(diagnostic.on(psiElement, varianceConflictDiagnosticData)) + when { + isArgumentFromQualifier -> + diagnosticSink.report( + Errors.TYPE_VARIANCE_CONFLICT.on( + languageVersionSettings ?: LanguageVersionSettingsImpl.DEFAULT, + psiElement, + varianceConflictDiagnosticData + ) + ) + isInAbbreviation -> + diagnosticSink.report(Errors.TYPE_VARIANCE_CONFLICT_IN_EXPANDED_TYPE.on(psiElement, varianceConflictDiagnosticData)) + else -> + diagnosticSink.report(Errors.TYPE_VARIANCE_CONFLICT.errorFactory.on(psiElement, varianceConflictDiagnosticData)) + } } return declarationVariance.allowsPosition(position) } @@ -178,11 +178,10 @@ class VarianceCheckerCore( for (argument in arguments) { if (argument?.typeParameter == null || argument.projection.isStarProjection) continue - val projectionKind = TypeCheckingProcedure.getEffectiveProjectionKind(argument.typeParameter!!, argument.projection)!! - val newPosition = when (projectionKind) { + val newPosition = when (TypeCheckingProcedure.getEffectiveProjectionKind(argument.typeParameter!!, argument.projection)!!) { EnrichedProjectionKind.OUT -> position EnrichedProjectionKind.IN -> position.opposite() - EnrichedProjectionKind.INV -> Variance.INVARIANT + EnrichedProjectionKind.INV -> INVARIANT EnrichedProjectionKind.STAR -> null // CONFLICTING_PROJECTION error was reported } if (newPosition != null) { diff --git a/compiler/testData/diagnostics/tests/generics/innerClasses/innerVariance.kt b/compiler/testData/diagnostics/tests/generics/innerClasses/innerVariance.kt index ed2593a7c15..0a8d25ea382 100644 --- a/compiler/testData/diagnostics/tests/generics/innerClasses/innerVariance.kt +++ b/compiler/testData/diagnostics/tests/generics/innerClasses/innerVariance.kt @@ -2,10 +2,10 @@ // !DIAGNOSTICS: -UNUSED_PARAMETER class Outer { inner class Inner { - fun unsafe1(x: E) {} - fun unsafe2(x: Collection<E?>) {} - fun unsafe3(): F? = null - fun unsafe4(): Collection<F>? = null + fun unsafe1(x: E) {} + fun unsafe2(x: Collection<E?>) {} + fun unsafe3(): F? = null + fun unsafe4(): Collection<F>? = null } // Should be errors diff --git a/compiler/testData/diagnostics/tests/inner/typeVarianceConflict.fir.kt b/compiler/testData/diagnostics/tests/inner/typeVarianceConflict.fir.kt index 46d5ceaad76..2543ccf3144 100644 --- a/compiler/testData/diagnostics/tests/inner/typeVarianceConflict.fir.kt +++ b/compiler/testData/diagnostics/tests/inner/typeVarianceConflict.fir.kt @@ -8,16 +8,16 @@ class Bar { abstract class Foo { abstract fun yuckyEventHandler( - fn: Bar<T>.Inner.() -> Unit + fn: Bar<T>.Inner.() -> Unit ): () -> Unit - abstract fun second(fn: Bar<T>.Inner) + abstract fun second(fn: Bar<T>.Inner) - abstract fun third(fn: Bar<T>.Inner.SuperInner) + abstract fun third(fn: Bar<T>.Inner.SuperInner) } abstract class Baz { abstract fun yuckyEventHandler( - fn: Bar<T>.Inner.() -> Unit + fn: Bar<T>.Inner.() -> Unit ): () -> Unit } diff --git a/compiler/testData/diagnostics/tests/inner/typeVarianceConflictFeatureOn.kt b/compiler/testData/diagnostics/tests/inner/typeVarianceConflictFeatureOn.kt index 2b65d876a5a..578c9603737 100644 --- a/compiler/testData/diagnostics/tests/inner/typeVarianceConflictFeatureOn.kt +++ b/compiler/testData/diagnostics/tests/inner/typeVarianceConflictFeatureOn.kt @@ -7,6 +7,6 @@ class Bar { abstract class Foo { abstract fun yuckyEventHandler( - fn: Bar<T>.Inner.() -> Unit + fn: Bar<T>.Inner.() -> Unit ): () -> Unit } diff --git a/compiler/testData/diagnostics/tests/kt13401.fir.kt b/compiler/testData/diagnostics/tests/kt13401.fir.kt index f195c6b5397..f31b0943c0f 100644 --- a/compiler/testData/diagnostics/tests/kt13401.fir.kt +++ b/compiler/testData/diagnostics/tests/kt13401.fir.kt @@ -9,9 +9,9 @@ interface Super { } // Related variance errors class Owner { - inner class InnerT>(val u: U) { + inner class InnerT>(val u: U) { fun getT() = u } - fun foo(arg: Inner<*>) = arg.getT() + fun foo(arg: Inner<*>) = arg.getT() } diff --git a/compiler/testData/diagnostics/tests/kt13401.kt b/compiler/testData/diagnostics/tests/kt13401.kt index 80333d3389c..1611a20340c 100644 --- a/compiler/testData/diagnostics/tests/kt13401.kt +++ b/compiler/testData/diagnostics/tests/kt13401.kt @@ -9,7 +9,7 @@ interface Super { } // Related variance errors class Owner { - inner class InnerT>(val u: U) { + inner class InnerT>(val u: U) { fun getT() = u } diff --git a/compiler/testData/diagnostics/tests/typealias/kt14498a.fir.kt b/compiler/testData/diagnostics/tests/typealias/kt14498a.fir.kt index 394ba1f89b1..8b5cd04dc74 100644 --- a/compiler/testData/diagnostics/tests/typealias/kt14498a.fir.kt +++ b/compiler/testData/diagnostics/tests/typealias/kt14498a.fir.kt @@ -7,5 +7,5 @@ typealias A4 = Out> interface Q1 : Out> interface Q2 : Out> -interface Q3 : OutS>> -interface Q4 : OutS>> +interface Q3 : OutS>> +interface Q4 : OutS>> diff --git a/compiler/testData/diagnostics/tests/variance/Class.kt b/compiler/testData/diagnostics/tests/variance/Class.kt index d650ce5586a..0cfea0484fe 100644 --- a/compiler/testData/diagnostics/tests/variance/Class.kt +++ b/compiler/testData/diagnostics/tests/variance/Class.kt @@ -3,22 +3,22 @@ interface In interface Out interface Inv -interface TypeBounds1I> +interface TypeBounds1I> interface TypeBounds2 interface TypeBounds3 interface TypeBounds4> -interface TypeBounds5")!>O>> +interface TypeBounds5O>> -interface WhereTypeBounds1 where X : I +interface WhereTypeBounds1 where X : I interface WhereTypeBounds2 where X : O interface WhereTypeBounds3 where X : P interface WhereTypeBounds4 where X : In -interface WhereTypeBounds5 where X : In<")!>O> +interface WhereTypeBounds5 where X : In<O> -class SubClass1 : Out<")!>I> +class SubClass1 : Out<I> class SubClass2 : Out class SubClass3 : Out

class SubClass4 : In -class SubClass5 : In<")!>O> -class SubClass6 : Inv<")!>O> -class SubClass7 : Inv<")!>I> +class SubClass5 : In<O> +class SubClass6 : Inv<O> +class SubClass7 : Inv<I> diff --git a/compiler/testData/diagnostics/tests/variance/Function.kt b/compiler/testData/diagnostics/tests/variance/Function.kt index 3402dba6ac6..a9235a61312 100644 --- a/compiler/testData/diagnostics/tests/variance/Function.kt +++ b/compiler/testData/diagnostics/tests/variance/Function.kt @@ -5,31 +5,31 @@ interface Inv fun getT(): T = null!! interface Test { - fun parameters1(i: I, o: O, p: P) - fun parameters2(i: In<")!>I>) + fun parameters1(i: I, o: O, p: P) + fun parameters2(i: In<I>) fun parameters3(i: In) - fun explicitReturnType1() : I + fun explicitReturnType1() : I fun explicitReturnType2() : O fun explicitReturnType3() : P fun explicitReturnType4() : In - fun explicitReturnType5() : In<")!>O> + fun explicitReturnType5() : In<O> - fun imlicitReturnType1() = getT() + fun imlicitReturnType1() = getT() fun imlicitReturnType2() = getT() fun imlicitReturnType3() = getT

() fun imlicitReturnType4() = getT>() - ")!>fun imlicitReturnType5() = getT>() + fun imlicitReturnType5() = getT>() fun I.receiver1() - fun O.receiver2() + fun O.receiver2() fun P.receiver3() - fun In<")!>I>.receiver4() + fun In<I>.receiver4() fun In.receiver5() fun typeParameter1() - fun O> typeParameter2() + fun O> typeParameter2() fun typeParameter3() - fun ")!>I>> typeParameter4() + fun I>> typeParameter4() fun > typeParameter5() } diff --git a/compiler/testData/diagnostics/tests/variance/FunctionTypes.kt b/compiler/testData/diagnostics/tests/variance/FunctionTypes.kt index 4cf931882c4..c4a74bd8dd8 100644 --- a/compiler/testData/diagnostics/tests/variance/FunctionTypes.kt +++ b/compiler/testData/diagnostics/tests/variance/FunctionTypes.kt @@ -7,7 +7,7 @@ interface Test { fun ok2(i: (P) -> P) : (P) -> P fun ok3(i: (In) -> In) = getT<(In) -> In>() - fun neOk1(i: (I) -> O): (O) -> I - fun neOk2(i: (In<O>) -> In<I>) - fun neOk3() = getT<(In) -> In>() -} \ No newline at end of file + fun neOk1(i: (I) -> O): (O) -> I + fun neOk2(i: (In<O>) -> In<I>) + fun neOk3() = getT<(In) -> In>() +} diff --git a/compiler/testData/diagnostics/tests/variance/InPosition.fir.kt b/compiler/testData/diagnostics/tests/variance/InPosition.fir.kt index 642c724a5ee..7b1a191097c 100644 --- a/compiler/testData/diagnostics/tests/variance/InPosition.fir.kt +++ b/compiler/testData/diagnostics/tests/variance/InPosition.fir.kt @@ -27,22 +27,22 @@ interface Test { fun Ok22(i: Inv) fun Ok23(i: Inv) - fun neOk1(i: O) - fun neOk2(i: In<")!>I>) - fun neOk3(i: In>")!>O>>) - fun neOk4(i: Inv<")!>I>) - fun neOk5(i: Inv<")!>O>) - fun neOk6(i: In>")!>O>>) - fun neOk7(i: Pair, O>")!>I>, , O>")!>O>) - fun neOk8(i: Inv")!>O>) + fun neOk1(i: O) + fun neOk2(i: In<I>) + fun neOk3(i: InO>>) + fun neOk4(i: Inv<I>) + fun neOk5(i: Inv<O>) + fun neOk6(i: InO>>) + fun neOk7(i: PairI>, O>) + fun neOk8(i: InvO>) fun neOk9(i: In<out P>) - fun neOk10(i: Out<")!>O>) + fun neOk10(i: Out<O>) - fun neOk11(i: Inv")!>I>) - fun neOk12(i: Inv")!>O>) + fun neOk11(i: InvI>) + fun neOk12(i: InvO>) fun neOk30(i: Pair) - fun neOk31(i: Pair<")!>O, Inv>) + fun neOk31(i: Pair<O, Inv>) fun neOk32(i: Inv) fun neOk33(i: Inv<>) fun neOk34(i: Inv<C>) diff --git a/compiler/testData/diagnostics/tests/variance/InPosition.kt b/compiler/testData/diagnostics/tests/variance/InPosition.kt index d10054e83b8..2b54a3aeeab 100644 --- a/compiler/testData/diagnostics/tests/variance/InPosition.kt +++ b/compiler/testData/diagnostics/tests/variance/InPosition.kt @@ -27,22 +27,22 @@ interface Test { fun Ok22(i: Inv) fun Ok23(i: Inv) - fun neOk1(i: O) - fun neOk2(i: In<")!>I>) - fun neOk3(i: In>")!>O>>) - fun neOk4(i: Inv<")!>I>) - fun neOk5(i: Inv<")!>O>) - fun neOk6(i: In>")!>O>>) - fun neOk7(i: Pair, O>")!>I>, , O>")!>O>) - fun neOk8(i: Inv")!>O>) + fun neOk1(i: O) + fun neOk2(i: In<I>) + fun neOk3(i: InO>>) + fun neOk4(i: Inv<I>) + fun neOk5(i: Inv<O>) + fun neOk6(i: InO>>) + fun neOk7(i: PairI>, O>) + fun neOk8(i: InvO>) fun neOk9(i: In<out P>) - fun neOk10(i: Out<")!>O>) + fun neOk10(i: Out<O>) - fun neOk11(i: Inv")!>I>) - fun neOk12(i: Inv")!>O>) + fun neOk11(i: InvI>) + fun neOk12(i: InvO>) fun neOk30(i: Pair, >) - fun neOk31(i: Pair<")!>O, Inv>) + fun neOk31(i: Pair<O, Inv>) fun neOk32(i: Inv) fun neOk33(i: Inv<>) fun neOk34(i: Inv<C>) diff --git a/compiler/testData/diagnostics/tests/variance/InvariantPosition.fir.kt b/compiler/testData/diagnostics/tests/variance/InvariantPosition.fir.kt index 96f88544680..f2dcb1839f3 100644 --- a/compiler/testData/diagnostics/tests/variance/InvariantPosition.fir.kt +++ b/compiler/testData/diagnostics/tests/variance/InvariantPosition.fir.kt @@ -14,32 +14,32 @@ interface Test { var ok6: Inv var ok7: Inv - var neOk1: O - var neOk2: In<")!>I> - var neOk3: In>")!>O>> - var neOk4: Inv<")!>I> - var neOk5: Inv<")!>O> - var neOk6: In>")!>O>> - var neOk7: Pair, O>")!>I>, , O>")!>O> - var neOk8: Inv")!>O> - var neOk9: Inv")!>I> + var neOk1: O + var neOk2: In<I> + var neOk3: InO>> + var neOk4: Inv<I> + var neOk5: Inv<O> + var neOk6: InO>> + var neOk7: PairI>, O> + var neOk8: InvO> + var neOk9: InvI> var neOk10: In<out I> - var neOk11: I - var neOk12: In<")!>O> - var neOk13: In>")!>I>> - var neOk14: Out<")!>I> - var neOk15: Out>")!>I>> - var neOk16: Out>")!>O>> - var neOk17: Pair, I>")!>O>, , I>")!>I> + var neOk11: I + var neOk12: In<O> + var neOk13: InI>> + var neOk14: Out<I> + var neOk15: OutI>> + var neOk16: OutO>> + var neOk17: PairO>, I> - var neOk20: Inv")!>O> - var neOk21: Inv")!>I> - var neOk22: Inv")!>O> - var neOk23: Inv")!>I> + var neOk20: InvO> + var neOk21: InvI> + var neOk22: InvO> + var neOk23: InvI> var neOk30: Pair - var neOk31: Pair<")!>I, Inv> + var neOk31: Pair<I, Inv> var neOk32: Inv var neOk33: Inv<> var neOk34: Inv<C> diff --git a/compiler/testData/diagnostics/tests/variance/InvariantPosition.kt b/compiler/testData/diagnostics/tests/variance/InvariantPosition.kt index e6ce71c676c..9c0a6e3347e 100644 --- a/compiler/testData/diagnostics/tests/variance/InvariantPosition.kt +++ b/compiler/testData/diagnostics/tests/variance/InvariantPosition.kt @@ -14,32 +14,32 @@ interface Test { var ok6: Inv var ok7: Inv - var neOk1: O - var neOk2: In<")!>I> - var neOk3: In>")!>O>> - var neOk4: Inv<")!>I> - var neOk5: Inv<")!>O> - var neOk6: In>")!>O>> - var neOk7: Pair, O>")!>I>, , O>")!>O> - var neOk8: Inv")!>O> - var neOk9: Inv")!>I> + var neOk1: O + var neOk2: In<I> + var neOk3: InO>> + var neOk4: Inv<I> + var neOk5: Inv<O> + var neOk6: InO>> + var neOk7: PairI>, O> + var neOk8: InvO> + var neOk9: InvI> var neOk10: In<out I> - var neOk11: I - var neOk12: In<")!>O> - var neOk13: In>")!>I>> - var neOk14: Out<")!>I> - var neOk15: Out>")!>I>> - var neOk16: Out>")!>O>> - var neOk17: Pair, I>")!>O>, , I>")!>I> + var neOk11: I + var neOk12: In<O> + var neOk13: InI>> + var neOk14: Out<I> + var neOk15: OutI>> + var neOk16: OutO>> + var neOk17: PairO>, I> - var neOk20: Inv")!>O> - var neOk21: Inv")!>I> - var neOk22: Inv")!>O> - var neOk23: Inv")!>I> + var neOk20: InvO> + var neOk21: InvI> + var neOk22: InvO> + var neOk23: InvI> var neOk30: Pair, > - var neOk31: Pair<")!>I, Inv> + var neOk31: Pair<I, Inv> var neOk32: Inv var neOk33: Inv<> var neOk34: Inv<C> diff --git a/compiler/testData/diagnostics/tests/variance/NullableTypes.kt b/compiler/testData/diagnostics/tests/variance/NullableTypes.kt index fdec08c5468..43de4100d56 100644 --- a/compiler/testData/diagnostics/tests/variance/NullableTypes.kt +++ b/compiler/testData/diagnostics/tests/variance/NullableTypes.kt @@ -10,8 +10,8 @@ interface Test { fun ok2(i: In?) : Out? fun ok3(i: Inv) = getT>() - fun neOk1(i: O?) : I? - fun neOk(i: Out<?")!>O?>?) : In<?")!>O?>? - fun neOk3(i: Inv")!>I?>) - ?")!>fun neOk4() = getT?>() + fun neOk1(i: O?) : I? + fun neOk(i: Out<O?>?) : In<O?>? + fun neOk3(i: InvI?>) + fun neOk4() = getT?>() } diff --git a/compiler/testData/diagnostics/tests/variance/OutPosition.fir.kt b/compiler/testData/diagnostics/tests/variance/OutPosition.fir.kt index fabb5fc5a6d..86e12d33d2d 100644 --- a/compiler/testData/diagnostics/tests/variance/OutPosition.fir.kt +++ b/compiler/testData/diagnostics/tests/variance/OutPosition.fir.kt @@ -21,20 +21,20 @@ interface Test { fun ok12(): Inv fun ok13(): Inv - fun neOk1(): I - fun neOk2(): In<")!>O> - fun neOk3(): In>")!>I>> - fun neOk4(): Inv<")!>I> - fun neOk5(): Inv<")!>O> - fun neOk6(): Pair, I>")!>O>, , I>")!>I> - fun neOk7(): Inv")!>O> + fun neOk1(): I + fun neOk2(): In<O> + fun neOk3(): InI>> + fun neOk4(): Inv<I> + fun neOk5(): Inv<O> + fun neOk6(): PairO>, I> + fun neOk7(): InvO> fun neOk8(): Out<")!>in I> - fun neOk10(): Inv")!>O> - fun neOk11(): Inv")!>I> + fun neOk10(): InvO> + fun neOk11(): InvI> fun neOk30(): Pair - fun neOk31(): Pair<")!>I, Inv> + fun neOk31(): Pair<I, Inv> fun neOk32(): Inv fun neOk33(): Inv<> fun neOk34(): Inv<C> diff --git a/compiler/testData/diagnostics/tests/variance/OutPosition.kt b/compiler/testData/diagnostics/tests/variance/OutPosition.kt index f8037e3e3d8..e97e33932d5 100644 --- a/compiler/testData/diagnostics/tests/variance/OutPosition.kt +++ b/compiler/testData/diagnostics/tests/variance/OutPosition.kt @@ -21,20 +21,20 @@ interface Test { fun ok12(): Inv fun ok13(): Inv - fun neOk1(): I - fun neOk2(): In<")!>O> - fun neOk3(): In>")!>I>> - fun neOk4(): Inv<")!>I> - fun neOk5(): Inv<")!>O> - fun neOk6(): Pair, I>")!>O>, , I>")!>I> - fun neOk7(): Inv")!>O> + fun neOk1(): I + fun neOk2(): In<O> + fun neOk3(): InI>> + fun neOk4(): Inv<I> + fun neOk5(): Inv<O> + fun neOk6(): PairO>, I> + fun neOk7(): InvO> fun neOk8(): Out<in I> - fun neOk10(): Inv")!>O> - fun neOk11(): Inv")!>I> + fun neOk10(): InvO> + fun neOk11(): InvI> fun neOk30(): Pair, > - fun neOk31(): Pair<")!>I, Inv> + fun neOk31(): Pair<I, Inv> fun neOk32(): Inv fun neOk33(): Inv<> fun neOk34(): Inv<C> diff --git a/compiler/testData/diagnostics/tests/variance/PrimaryConstructor.kt b/compiler/testData/diagnostics/tests/variance/PrimaryConstructor.kt index d3373ff65a6..eb998fd42d7 100644 --- a/compiler/testData/diagnostics/tests/variance/PrimaryConstructor.kt +++ b/compiler/testData/diagnostics/tests/variance/PrimaryConstructor.kt @@ -6,17 +6,17 @@ interface Inv fun getT(): T = null!! class Test( - val type1: I, + val type1: I, val type2: O, val type3: P, val type4: In, - val type5: In<")!>O>, + val type5: In<O>, - var type6: I, - var type7: O, + var type6: I, + var type7: O, var type8: P, - var type9: In<")!>I>, - var type0: In<")!>O>, + var type9: In<I>, + var type0: In<O>, type11: I, type12: O, diff --git a/compiler/testData/diagnostics/tests/variance/ValProperty.kt b/compiler/testData/diagnostics/tests/variance/ValProperty.kt index 5540fdaa268..9c32a37066b 100644 --- a/compiler/testData/diagnostics/tests/variance/ValProperty.kt +++ b/compiler/testData/diagnostics/tests/variance/ValProperty.kt @@ -13,39 +13,39 @@ class Delegate { fun getT(): T = null!! abstract class Test { - abstract val type1: I + abstract val type1: I abstract val type2: O abstract val type3: P abstract val type4: In - abstract val type5: In<")!>O> + abstract val type5: In<O> - val implicitType1 = getT() + val implicitType1 = getT() val implicitType2 = getT() val implicitType3 = getT

() val implicitType4 = getT>() - ")!>val implicitType5 = getT>() + val implicitType5 = getT>() - val delegateType1 by Delegate() + val delegateType1 by Delegate() val delegateType2 by Delegate() val delegateType3 by Delegate

() val delegateType4 by Delegate>() - ")!>val delegateType5 by Delegate>() + val delegateType5 by Delegate>() abstract val I.receiver1: Int - abstract val O.receiver2: Int + abstract val O.receiver2: Int abstract val P.receiver3: Int - abstract val In<")!>I>.receiver4: Int + abstract val In<I>.receiver4: Int abstract val In.receiver5: Int val X.typeParameter1: Int get() = 0 - val O> X.typeParameter2: Int get() = 0 + val O> X.typeParameter2: Int get() = 0 val X.typeParameter3: Int get() = 0 - val ")!>I>> X.typeParameter4: Int get() = 0 + val I>> X.typeParameter4: Int get() = 0 val > X.typeParameter5: Int get() = 0 val X.typeParameter6: Int where X : I get() = 0 - val X.typeParameter7: Int where X : O get() = 0 + val X.typeParameter7: Int where X : O get() = 0 val X.typeParameter8: Int where X : P get() = 0 - val X.typeParameter9: Int where X : In<")!>I> get() = 0 + val X.typeParameter9: Int where X : In<I> get() = 0 val X.typeParameter0: Int where X : In get() = 0 } diff --git a/compiler/testData/diagnostics/tests/variance/VarProperty.kt b/compiler/testData/diagnostics/tests/variance/VarProperty.kt index ba0ace2d0df..98750b9dfc7 100644 --- a/compiler/testData/diagnostics/tests/variance/VarProperty.kt +++ b/compiler/testData/diagnostics/tests/variance/VarProperty.kt @@ -13,39 +13,39 @@ class Delegate { fun getT(): T = null!! abstract class Test { - abstract var type1: I - abstract var type2: O + abstract var type1: I + abstract var type2: O abstract var type3: P - abstract var type4: In<")!>I> - abstract var type5: In<")!>O> + abstract var type4: In<I> + abstract var type5: In<O> - var implicitType1 = getT() - var implicitType2 = getT() + var implicitType1 = getT() + var implicitType2 = getT() var implicitType3 = getT

() - ")!>var implicitType4 = getT>() - ")!>var implicitType5 = getT>() + var implicitType4 = getT>() + var implicitType5 = getT>() - var delegateType1 by Delegate() - var delegateType2 by Delegate() + var delegateType1 by Delegate() + var delegateType2 by Delegate() var delegateType3 by Delegate

() - ")!>var delegateType4 by Delegate>() - ")!>var delegateType5 by Delegate>() + var delegateType4 by Delegate>() + var delegateType5 by Delegate>() abstract var I.receiver1: Int - abstract var O.receiver2: Int + abstract var O.receiver2: Int abstract var P.receiver3: Int - abstract var In<")!>I>.receiver4: Int + abstract var In<I>.receiver4: Int abstract var In.receiver5: Int var X.typeParameter1: Int get() = 0; set(i) {} - var O> X.typeParameter2: Int get() = 0; set(i) {} + var O> X.typeParameter2: Int get() = 0; set(i) {} var X.typeParameter3: Int get() = 0; set(i) {} - var ")!>I>> X.typeParameter4: Int get() = 0; set(i) {} + var I>> X.typeParameter4: Int get() = 0; set(i) {} var > X.typeParameter5: Int get() = 0; set(i) {} var X.typeParameter6: Int where X : I get() = 0; set(i) {} - var X.typeParameter7: Int where X : O get() = 0; set(i) {} + var X.typeParameter7: Int where X : O get() = 0; set(i) {} var X.typeParameter8: Int where X : P get() = 0; set(i) {} - var X.typeParameter9: Int where X : In<")!>I> get() = 0; set(i) {} + var X.typeParameter9: Int where X : In<I> get() = 0; set(i) {} var X.typeParameter0: Int where X : In get() = 0; set(i) {} } diff --git a/compiler/testData/diagnostics/tests/variance/Visibility.kt b/compiler/testData/diagnostics/tests/variance/Visibility.kt index 15792ecb19d..b2a8530a724 100644 --- a/compiler/testData/diagnostics/tests/variance/Visibility.kt +++ b/compiler/testData/diagnostics/tests/variance/Visibility.kt @@ -1,21 +1,21 @@ // FIR_IDENTICAL interface Test { - val internal_val: I - public val public_val: I - protected val protected_val: I + val internal_val: I + public val public_val: I + protected val protected_val: I private val private_val: I - var interlan_private_set: O + var interlan_private_set: O private set - public var public_private_set: O + public var public_private_set: O private set - protected var protected_private_set: O + protected var protected_private_set: O private set private var private_private_set: O private set - fun internal_fun(i: O) : I - public fun public_fun(i: O) : I - protected fun protected_fun(i: O) : I + fun internal_fun(i: O) : I + public fun public_fun(i: O) : I + protected fun protected_fun(i: O) : I private fun private_fun(i: O) : I -} \ No newline at end of file +}