[FIR] Support of ACTUAL_TYPE_ALIAS_TO_CLASS_WITH_DECLARATION_SITE_VARIANCE diagnostic

This commit is contained in:
Ivan Kochurkin
2023-02-16 22:39:13 +01:00
committed by Space Team
parent 8bf9d6c92f
commit cf1bd9837a
2 changed files with 12 additions and 10 deletions
@@ -13,21 +13,23 @@ 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.types.Variance
object FirActualTypeAliasChecker : FirTypeAliasChecker() {
override fun check(declaration: FirTypeAlias, context: CheckerContext, reporter: DiagnosticReporter) {
if (!declaration.isActual) return
checkActualTypeAliasNotToClass(declaration, context, reporter)
}
val expandedTypeSymbol = declaration.expandedTypeRef.toClassLikeSymbol(context.session) ?: return
private fun checkActualTypeAliasNotToClass(
declaration: FirTypeAlias,
context: CheckerContext,
reporter: DiagnosticReporter
) {
if (declaration.expandedTypeRef.toClassLikeSymbol(context.session) is FirTypeAliasSymbol) {
if (expandedTypeSymbol is FirTypeAliasSymbol) {
reporter.reportOn(declaration.source, FirErrors.ACTUAL_TYPE_ALIAS_NOT_TO_CLASS, context)
}
for (typeParameterSymbol in expandedTypeSymbol.typeParameterSymbols) {
if (typeParameterSymbol.variance != Variance.INVARIANT) {
reporter.reportOn(declaration.source, FirErrors.ACTUAL_TYPE_ALIAS_TO_CLASS_WITH_DECLARATION_SITE_VARIANCE, context)
break
}
}
}
}
@@ -17,8 +17,8 @@ expect interface C10<L>
// FILE: jvm.kt
actual typealias C1 = String
actual typealias C2<A> = List<String>
actual typealias C3<B> = List<B>
<!ACTUAL_TYPE_ALIAS_TO_CLASS_WITH_DECLARATION_SITE_VARIANCE!>actual typealias C2<A> = List<String><!>
<!ACTUAL_TYPE_ALIAS_TO_CLASS_WITH_DECLARATION_SITE_VARIANCE!>actual typealias C3<B> = List<B><!>
actual typealias C4<D, E> = MutableMap<D, E>
actual typealias C5<F, G> = MutableMap<G, F>
actual typealias C6<H> = MutableList<H>