[FIR] Support of ACTUAL_TYPE_ALIAS_TO_CLASS_WITH_DECLARATION_SITE_VARIANCE diagnostic
This commit is contained in:
committed by
Space Team
parent
8bf9d6c92f
commit
cf1bd9837a
+10
-8
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Vendored
+2
-2
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user