[FIR] Support of ACTUAL_TYPE_ALIAS_WITH_COMPLEX_SUBSTITUTION diagnostic

This commit is contained in:
Ivan Kochurkin
2023-02-16 22:42:38 +01:00
committed by Space Team
parent 3e33258f36
commit 9d0e02658f
4 changed files with 47 additions and 32 deletions
@@ -13,8 +13,7 @@ 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.fir.types.*
import org.jetbrains.kotlin.types.Variance
object FirActualTypeAliasChecker : FirTypeAliasChecker() {
@@ -41,5 +40,26 @@ object FirActualTypeAliasChecker : FirTypeAliasChecker() {
break
}
}
var reportActualTypeAliasWithComplexSubstitution = false
if (declaration.typeParameters.size != expandedTypeRef.coneType.typeArguments.size) {
reportActualTypeAliasWithComplexSubstitution = true
} else {
for (i in 0 until declaration.typeParameters.size) {
val typeArgument = expandedTypeRef.coneType.typeArguments[i]
if (typeArgument is ConeTypeParameterType) {
if (declaration.typeParameters[i].symbol != typeArgument.lookupTag.typeParameterSymbol) {
reportActualTypeAliasWithComplexSubstitution = true
break
}
} else if (typeArgument is ConeKotlinType && typeArgument.typeArguments.isNotEmpty()) {
reportActualTypeAliasWithComplexSubstitution = true
break
}
}
}
if (reportActualTypeAliasWithComplexSubstitution) {
reporter.reportOn(declaration.source, FirErrors.ACTUAL_TYPE_ALIAS_WITH_COMPLEX_SUBSTITUTION, context)
}
}
}