[FIR] Support of ACTUAL_TYPE_ALIAS_WITH_USE_SITE_VARIANCE diagnostic

This commit is contained in:
Ivan Kochurkin
2023-02-16 22:41:18 +01:00
committed by Space Team
parent cf1bd9837a
commit 3e33258f36
2 changed files with 14 additions and 4 deletions
@@ -13,13 +13,16 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
import org.jetbrains.kotlin.fir.declarations.FirTypeAlias
import org.jetbrains.kotlin.fir.declarations.utils.isActual
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
import org.jetbrains.kotlin.fir.types.ProjectionKind
import org.jetbrains.kotlin.fir.types.coneType
import org.jetbrains.kotlin.types.Variance
object FirActualTypeAliasChecker : FirTypeAliasChecker() {
override fun check(declaration: FirTypeAlias, context: CheckerContext, reporter: DiagnosticReporter) {
if (!declaration.isActual) return
val expandedTypeSymbol = declaration.expandedTypeRef.toClassLikeSymbol(context.session) ?: return
val expandedTypeRef = declaration.expandedTypeRef
val expandedTypeSymbol = expandedTypeRef.toClassLikeSymbol(context.session) ?: return
if (expandedTypeSymbol is FirTypeAliasSymbol) {
reporter.reportOn(declaration.source, FirErrors.ACTUAL_TYPE_ALIAS_NOT_TO_CLASS, context)
@@ -31,5 +34,12 @@ object FirActualTypeAliasChecker : FirTypeAliasChecker() {
break
}
}
for (typeArgument in expandedTypeRef.coneType.typeArguments) {
if (typeArgument.kind != ProjectionKind.INVARIANT) {
reporter.reportOn(declaration.source, FirErrors.ACTUAL_TYPE_ALIAS_WITH_USE_SITE_VARIANCE, context)
break
}
}
}
}
@@ -22,9 +22,9 @@ actual typealias C1 = String
actual typealias C4<D, E> = MutableMap<D, E>
actual typealias C5<F, G> = MutableMap<G, F>
actual typealias C6<H> = MutableList<H>
actual typealias C7<I> = MutableList<out I>
actual typealias C8<J> = MutableList<*>
actual typealias C9<K> = MutableList<in K>
<!ACTUAL_TYPE_ALIAS_WITH_USE_SITE_VARIANCE!>actual typealias C7<I> = MutableList<out I><!>
<!ACTUAL_TYPE_ALIAS_WITH_USE_SITE_VARIANCE!>actual typealias C8<J> = MutableList<*><!>
<!ACTUAL_TYPE_ALIAS_WITH_USE_SITE_VARIANCE!>actual typealias C9<K> = MutableList<in K><!>
typealias Tmp<K> = MutableList<K>
<!ACTUAL_TYPE_ALIAS_NOT_TO_CLASS!>actual typealias C10<L> = Tmp<L><!>