Implement TypeSystemContext for FIR #KT-29968 Fixed

Use this context in FirClassUseSiteScope for type comparison
This commit is contained in:
Simon Ogorodnik
2019-03-06 09:42:02 +03:00
committed by Mikhail Glukhikh
parent 85cd4f3cdf
commit 3950dec4db
12 changed files with 324 additions and 35 deletions
@@ -6,10 +6,13 @@
package org.jetbrains.kotlin.fir.symbols
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.types.model.TypeConstructorMarker
import org.jetbrains.kotlin.types.model.TypeParameterMarker
interface ConeSymbol
interface ConeSymbol : TypeConstructorMarker
interface ConeClassifierSymbol : ConeSymbol {
interface ConeClassifierSymbol : ConeSymbol, TypeParameterMarker {
fun toLookupTag(): ConeClassifierLookupTag
}
@@ -17,7 +20,7 @@ interface ConeTypeParameterSymbol : ConeClassifierSymbol, ConeTypeParameterLooku
override fun toLookupTag(): ConeTypeParameterLookupTag = this
}
interface ConeClassLikeSymbol : ConeClassifierSymbol {
interface ConeClassLikeSymbol : ConeClassifierSymbol, TypeConstructorMarker {
val classId: ClassId
override fun toLookupTag(): ConeClassLikeLookupTag
@@ -6,8 +6,9 @@
package org.jetbrains.kotlin.fir.types
import org.jetbrains.kotlin.fir.symbols.*
import org.jetbrains.kotlin.types.model.*
sealed class ConeKotlinTypeProjection {
sealed class ConeKotlinTypeProjection : TypeArgumentMarker {
abstract val kind: ProjectionKind
companion object {
@@ -19,7 +20,7 @@ enum class ProjectionKind {
STAR, IN, OUT, INVARIANT
}
object StarProjection : ConeKotlinTypeProjection() {
object ConeStarProjection : ConeKotlinTypeProjection() {
override val kind: ProjectionKind
get() = ProjectionKind.STAR
}
@@ -52,7 +53,7 @@ enum class ConeNullability(val suffix: String) {
// We assume type IS an invariant type projection to prevent additional wrapper here
// (more exactly, invariant type projection contains type)
sealed class ConeKotlinType : ConeKotlinTypeProjection(), ConeTypedProjection {
sealed class ConeKotlinType : ConeKotlinTypeProjection(), ConeTypedProjection, KotlinTypeMarker, TypeArgumentListMarker {
override val kind: ProjectionKind
get() = ProjectionKind.INVARIANT
@@ -91,14 +92,16 @@ class ConeClassErrorType(val reason: String) : ConeClassLikeType() {
}
}
sealed class ConeLookupTagBasedType : ConeKotlinType() {
sealed class ConeLookupTagBasedType : ConeKotlinType(), SimpleTypeMarker {
abstract val lookupTag: ConeClassifierLookupTag
}
abstract class ConeClassLikeType : ConeLookupTagBasedType() {
sealed class ConeClassLikeType : ConeLookupTagBasedType() {
abstract override val lookupTag: ConeClassLikeLookupTag
}
abstract class ConeClassType : ConeClassLikeType()
abstract class ConeAbbreviatedType : ConeClassLikeType() {
abstract val abbreviationLookupTag: ConeClassLikeLookupTag
@@ -118,7 +121,7 @@ abstract class ConeFunctionType : ConeClassLikeType() {
abstract val returnType: ConeKotlinType
}
class ConeFlexibleType(val lowerBound: ConeKotlinType, val upperBound: ConeKotlinType) : ConeKotlinType() {
class ConeFlexibleType(val lowerBound: ConeLookupTagBasedType, val upperBound: ConeLookupTagBasedType) : ConeKotlinType(), FlexibleTypeMarker {
override val typeArguments: Array<out ConeKotlinTypeProjection>
get() = emptyArray()
@@ -11,15 +11,15 @@ import org.jetbrains.kotlin.fir.types.*
open class ConeClassTypeImpl(
override val lookupTag: ConeClassLikeLookupTag,
override val typeArguments: Array<ConeKotlinTypeProjection>,
override val typeArguments: Array<out ConeKotlinTypeProjection>,
isNullable: Boolean
) : ConeClassLikeType() {
) : ConeClassType() {
override val nullability: ConeNullability = ConeNullability.create(isNullable)
}
class ConeAbbreviatedTypeImpl(
override val abbreviationLookupTag: ConeClassLikeLookupTag,
override val typeArguments: Array<ConeKotlinTypeProjection>,
override val typeArguments: Array<out ConeKotlinTypeProjection>,
override val directExpansion: ConeClassLikeType,
isNullable: Boolean
) : ConeAbbreviatedType() {