[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.FirTypeAlias
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.isActual
|
import org.jetbrains.kotlin.fir.declarations.utils.isActual
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.ProjectionKind
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.fir.types.coneType
|
|
||||||
import org.jetbrains.kotlin.types.Variance
|
import org.jetbrains.kotlin.types.Variance
|
||||||
|
|
||||||
object FirActualTypeAliasChecker : FirTypeAliasChecker() {
|
object FirActualTypeAliasChecker : FirTypeAliasChecker() {
|
||||||
@@ -41,5 +40,26 @@ object FirActualTypeAliasChecker : FirTypeAliasChecker() {
|
|||||||
break
|
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
|
// !DIAGNOSTICS: -ACTUAL_WITHOUT_EXPECT
|
||||||
// MODULE: m1-common
|
// MODULE: m1-common
|
||||||
// FILE: common.kt
|
// FILE: common.kt
|
||||||
@@ -16,11 +17,18 @@ expect interface C10<L>
|
|||||||
// MODULE: m2-jvm()()(m1-common)
|
// MODULE: m2-jvm()()(m1-common)
|
||||||
// FILE: jvm.kt
|
// FILE: jvm.kt
|
||||||
|
|
||||||
|
class A<T : A<T>>
|
||||||
|
class B<T>
|
||||||
|
|
||||||
actual typealias C1 = String
|
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 C2<A> = List<String><!>
|
||||||
<!ACTUAL_TYPE_ALIAS_TO_CLASS_WITH_DECLARATION_SITE_VARIANCE!>actual typealias C3<B> = List<B><!>
|
<!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 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 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 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 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 C8<J> = MutableList<*><!>
|
||||||
|
|||||||
Vendored
+17
@@ -64,12 +64,29 @@ public expect interface C9</*0*/ K> {
|
|||||||
// -- Module: <m2-jvm> --
|
// -- Module: <m2-jvm> --
|
||||||
package
|
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 C1 = kotlin.String
|
||||||
public actual typealias C10</*0*/ L> = Tmp<L>
|
public actual typealias C10</*0*/ L> = Tmp<L>
|
||||||
public actual typealias C2</*0*/ A> = kotlin.collections.List<kotlin.String>
|
public actual typealias C2</*0*/ A> = kotlin.collections.List<kotlin.String>
|
||||||
public actual typealias C3</*0*/ B> = kotlin.collections.List<B>
|
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 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 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 C6</*0*/ H> = kotlin.collections.MutableList<H>
|
||||||
public actual typealias C7</*0*/ I> = kotlin.collections.MutableList<out I>
|
public actual typealias C7</*0*/ I> = kotlin.collections.MutableList<out I>
|
||||||
public actual typealias C8</*0*/ J> = kotlin.collections.MutableList<*>
|
public actual typealias C8</*0*/ J> = kotlin.collections.MutableList<*>
|
||||||
|
|||||||
Reference in New Issue
Block a user