[FIR] Support of ACTUAL_TYPE_ALIAS_WITH_COMPLEX_SUBSTITUTION diagnostic
This commit is contained in:
committed by
Space Team
parent
3e33258f36
commit
9d0e02658f
+22
-2
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
Vendored
-30
@@ -1,30 +0,0 @@
|
||||
// !DIAGNOSTICS: -ACTUAL_WITHOUT_EXPECT
|
||||
// MODULE: m1-common
|
||||
// FILE: common.kt
|
||||
|
||||
expect class C1
|
||||
expect interface C2<A>
|
||||
expect interface C3<B>
|
||||
expect interface C4<D, E>
|
||||
expect interface C5<F, G>
|
||||
expect interface C6<H>
|
||||
expect interface C7<I>
|
||||
expect interface C8<J>
|
||||
expect interface C9<K>
|
||||
expect interface C10<L>
|
||||
|
||||
// MODULE: m2-jvm()()(m1-common)
|
||||
// FILE: jvm.kt
|
||||
|
||||
actual typealias C1 = String
|
||||
<!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>
|
||||
<!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><!>
|
||||
+8
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !DIAGNOSTICS: -ACTUAL_WITHOUT_EXPECT
|
||||
// MODULE: m1-common
|
||||
// FILE: common.kt
|
||||
@@ -16,11 +17,18 @@ expect interface C10<L>
|
||||
// MODULE: m2-jvm()()(m1-common)
|
||||
// FILE: jvm.kt
|
||||
|
||||
class A<T : A<T>>
|
||||
class B<T>
|
||||
|
||||
actual typealias C1 = String
|
||||
<!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_TYPE_ALIAS_WITH_COMPLEX_SUBSTITUTION!>actual typealias C5<F, G> = MutableMap<G, F><!>
|
||||
<!ACTUAL_TYPE_ALIAS_WITH_COMPLEX_SUBSTITUTION!>actual typealias C51 = MutableMap<String, String><!>
|
||||
<!ACTUAL_TYPE_ALIAS_WITH_COMPLEX_SUBSTITUTION!>actual typealias C52<F> = MutableMap<F, String><!>
|
||||
<!ACTUAL_TYPE_ALIAS_WITH_COMPLEX_SUBSTITUTION!>actual typealias C53<T> = A<A<T>><!>
|
||||
<!ACTUAL_TYPE_ALIAS_WITH_COMPLEX_SUBSTITUTION!>actual typealias C54<T> = B<List<String>><!>
|
||||
actual typealias C6<H> = MutableList<H>
|
||||
<!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<*><!>
|
||||
|
||||
Vendored
+17
@@ -64,12 +64,29 @@ public expect interface C9</*0*/ K> {
|
||||
// -- Module: <m2-jvm> --
|
||||
package
|
||||
|
||||
public final class A</*0*/ T : A<T>> {
|
||||
public constructor A</*0*/ T : A<T>>()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class B</*0*/ T> {
|
||||
public constructor B</*0*/ T>()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
public actual typealias C1 = kotlin.String
|
||||
public actual typealias C10</*0*/ L> = Tmp<L>
|
||||
public actual typealias C2</*0*/ A> = kotlin.collections.List<kotlin.String>
|
||||
public actual typealias C3</*0*/ B> = kotlin.collections.List<B>
|
||||
public actual typealias C4</*0*/ D, /*1*/ E> = kotlin.collections.MutableMap<D, E>
|
||||
public actual typealias C5</*0*/ F, /*1*/ G> = kotlin.collections.MutableMap<G, F>
|
||||
public actual typealias C51 = kotlin.collections.MutableMap<kotlin.String, kotlin.String>
|
||||
public actual typealias C52</*0*/ F> = kotlin.collections.MutableMap<F, kotlin.String>
|
||||
public actual typealias C53</*0*/ T> = A<A<T>>
|
||||
public actual typealias C54</*0*/ T> = B<kotlin.collections.List<kotlin.String>>
|
||||
public actual typealias C6</*0*/ H> = kotlin.collections.MutableList<H>
|
||||
public actual typealias C7</*0*/ I> = kotlin.collections.MutableList<out I>
|
||||
public actual typealias C8</*0*/ J> = kotlin.collections.MutableList<*>
|
||||
|
||||
Reference in New Issue
Block a user