Remove isMarkedNullable from FirResolvedTypeRef

This commit is contained in:
Simon Ogorodnik
2019-04-25 18:15:44 +03:00
committed by Mikhail Glukhikh
parent 458080ca8b
commit 9cef9e4056
20 changed files with 65 additions and 74 deletions
@@ -218,8 +218,7 @@ class JavaSymbolProvider(
this@JavaSymbolProvider.session, null, this@JavaSymbolProvider.session, null,
firSymbol.constructType( firSymbol.constructType(
classTypeParameters.map { ConeTypeParameterTypeImpl(it.symbol, false) }.toTypedArray(), false classTypeParameters.map { ConeTypeParameterTypeImpl(it.symbol, false) }.toTypedArray(), false
), )
false, emptyList()
) )
).apply { ).apply {
this.typeParameters += typeParameters this.typeParameters += typeParameters
@@ -90,7 +90,7 @@ internal fun JavaClassifierType.toFirResolvedTypeRef(
): FirResolvedTypeRef { ): FirResolvedTypeRef {
val coneType = this.toConeKotlinTypeWithNullability(session, javaTypeParameterStack, isNullable = false) val coneType = this.toConeKotlinTypeWithNullability(session, javaTypeParameterStack, isNullable = false)
return FirResolvedTypeRefImpl( return FirResolvedTypeRefImpl(
session, psi = null, type = coneType, isMarkedNullable = false, session, psi = null, type = coneType,
annotations = annotations.map { it.toFirAnnotationCall(session, javaTypeParameterStack) } annotations = annotations.map { it.toFirAnnotationCall(session, javaTypeParameterStack) }
) )
} }
@@ -173,7 +173,6 @@ internal fun JavaAnnotation.toFirAnnotationCall(
session, session,
psi = null, psi = null,
type = ConeClassTypeImpl(FirClassSymbol(classId!!).toLookupTag(), emptyArray(), isNullable = false), type = ConeClassTypeImpl(FirClassSymbol(classId!!).toLookupTag(), emptyArray(), isNullable = false),
isMarkedNullable = true,
annotations = emptyList() annotations = emptyList()
) )
).apply { ).apply {
@@ -312,7 +311,7 @@ private fun JavaType.toFirResolvedTypeRef(
if (this is JavaClassifierType) return toFirResolvedTypeRef(session, javaTypeParameterStack) if (this is JavaClassifierType) return toFirResolvedTypeRef(session, javaTypeParameterStack)
return FirResolvedTypeRefImpl( return FirResolvedTypeRefImpl(
session, psi = null, type = ConeClassErrorType("Unexpected JavaType: $this"), session, psi = null, type = ConeClassErrorType("Unexpected JavaType: $this"),
isMarkedNullable = false, annotations = emptyList() annotations = emptyList()
) )
} }
@@ -147,7 +147,7 @@ class KotlinDeserializedJvmSymbolsProvider(
return this?.let { return this?.let {
FirResolvedTypeRefImpl( FirResolvedTypeRefImpl(
session, null, it.constructType(emptyList(), isNullable = false), session, null, it.constructType(emptyList(), isNullable = false),
isMarkedNullable = false, annotations = emptyList() annotations = emptyList()
) )
} ?: FirErrorTypeRefImpl(session, null, "Symbol not found for $classId") } ?: FirErrorTypeRefImpl(session, null, "Symbol not found for $classId")
@@ -302,7 +302,6 @@ class KotlinDeserializedJvmSymbolsProvider(
session, session,
null, null,
ConeClassTypeImpl(ConeClassLikeLookupTagImpl(outerClassId), emptyArray(), false), ConeClassTypeImpl(ConeClassLikeLookupTagImpl(outerClassId), emptyArray(), false),
false,
emptyList() emptyList()
) )
} }
@@ -84,12 +84,12 @@ private fun JavaType?.enhancePossiblyFlexible(
FirResolvedTypeRefImpl( FirResolvedTypeRefImpl(
session, psi = null, session, psi = null,
type = coneFlexibleOrSimpleType(session, lowerResult, upperResult), type = coneFlexibleOrSimpleType(session, lowerResult, upperResult),
isMarkedNullable = false, annotations = annotations annotations = annotations
) )
} }
else -> { else -> {
val enhanced = type.toNotNullConeKotlinType(session, javaTypeParameterStack) val enhanced = type.toNotNullConeKotlinType(session, javaTypeParameterStack)
FirResolvedTypeRefImpl(session, psi = null, type = enhanced, isMarkedNullable = false, annotations = annotations) FirResolvedTypeRefImpl(session, psi = null, type = enhanced, annotations = annotations)
} }
} }
} }
@@ -70,7 +70,7 @@ fun FirTypeRef.resolvedTypeFromPrototype(
type: ConeKotlinType type: ConeKotlinType
): FirResolvedTypeRef { ): FirResolvedTypeRef {
return FirResolvedTypeRefImpl( return FirResolvedTypeRefImpl(
session, psi, type, false, annotations session, psi, type, annotations
) )
} }
@@ -94,8 +94,7 @@ abstract class AbstractAnnotationDeserializer(
session, null, null, session, null, null,
symbol?.let { symbol?.let {
FirResolvedTypeRefImpl( FirResolvedTypeRefImpl(
session, null, it.constructType(emptyList(), isNullable = false), session, null, it.constructType(emptyList(), isNullable = false)
isMarkedNullable = false, annotations = emptyList()
) )
} ?: FirErrorTypeRefImpl(session, null, "Symbol not found for $classId") } ?: FirErrorTypeRefImpl(session, null, "Symbol not found for $classId")
).apply { ).apply {
@@ -127,8 +126,7 @@ abstract class AbstractAnnotationDeserializer(
arguments += FirClassReferenceExpressionImpl( arguments += FirClassReferenceExpressionImpl(
this@AbstractAnnotationDeserializer.session, null, this@AbstractAnnotationDeserializer.session, null,
FirResolvedTypeRefImpl( FirResolvedTypeRefImpl(
this@AbstractAnnotationDeserializer.session, null, referencedType, this@AbstractAnnotationDeserializer.session, null, referencedType
isMarkedNullable = false, annotations = emptyList()
) )
) )
} }
@@ -64,7 +64,7 @@ fun deserializeClassToSymbol(
superTypesDeserialized.mapNotNullTo(superTypeRefs) { superTypesDeserialized.mapNotNullTo(superTypeRefs) {
if (it == null) return@mapNotNullTo null if (it == null) return@mapNotNullTo null
FirResolvedTypeRefImpl(session, null, it, false, emptyList()) FirResolvedTypeRefImpl(session, null, it)
} }
addDeclarations(classProto.functionList.map(classDeserializer::loadFunction)) addDeclarations(classProto.functionList.map(classDeserializer::loadFunction))
@@ -143,7 +143,6 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
c.session, c.session,
null, null,
local.typeDeserializer.type(proto.underlyingType(c.typeTable)), local.typeDeserializer.type(proto.underlyingType(c.typeTable)),
false,
emptyList() /* TODO */ emptyList() /* TODO */
) )
).apply { ).apply {
@@ -247,9 +246,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
klass.symbol.toLookupTag(), klass.symbol.toLookupTag(),
typeParameters.map { ConeTypeParameterTypeImpl(it.symbol, false) }.toTypedArray(), typeParameters.map { ConeTypeParameterTypeImpl(it.symbol, false) }.toTypedArray(),
false false
), )
isMarkedNullable = false,
annotations = emptyList()
) )
return if (isPrimary) { return if (isPrimary) {
@@ -310,7 +307,7 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
private fun ProtoBuf.Type.toTypeRef(context: FirDeserializationContext): FirTypeRef { private fun ProtoBuf.Type.toTypeRef(context: FirDeserializationContext): FirTypeRef {
val coneType = context.typeDeserializer.type(this) val coneType = context.typeDeserializer.type(this)
return FirResolvedTypeRefImpl( return FirResolvedTypeRefImpl(
c.session, null, coneType, coneType.nullability.isNullable, c.session, null, coneType,
c.annotationDeserializer.loadTypeAnnotations(this) c.annotationDeserializer.loadTypeAnnotations(this)
) )
} }
@@ -98,7 +98,7 @@ class FirTypeDeserializer(
val declaration = symbol.firUnsafe<FirTypeParameterImpl>() val declaration = symbol.firUnsafe<FirTypeParameterImpl>()
declaration.apply { declaration.apply {
proto.upperBoundList.mapTo(bounds) { proto.upperBoundList.mapTo(bounds) {
FirResolvedTypeRefImpl(session, null, type(it), false, emptyList()) FirResolvedTypeRefImpl(session, null, type(it), emptyList())
} }
} }
} }
@@ -140,7 +140,6 @@ open class FirBodyResolveTransformer(val session: FirSession, val implicitTypeOn
session, session,
null, null,
StandardClassIds.Boolean(symbolProvider).constructType(emptyArray(), isNullable = false), StandardClassIds.Boolean(symbolProvider).constructType(emptyArray(), isNullable = false),
false,
emptyList() emptyList()
) )
} }
@@ -205,7 +204,7 @@ open class FirBodyResolveTransformer(val session: FirSession, val implicitTypeOn
} else } else
FirResolvedTypeRefImpl( FirResolvedTypeRefImpl(
session, null, symbol.constructType(emptyArray(), isNullable = false), session, null, symbol.constructType(emptyArray(), isNullable = false),
isMarkedNullable = false, annotations = emptyList() annotations = emptyList()
) )
} else { } else {
error("WTF ! $symbol") error("WTF ! $symbol")
@@ -273,7 +272,7 @@ open class FirBodyResolveTransformer(val session: FirSession, val implicitTypeOn
val labelName = callee.labelName val labelName = callee.labelName
val types = if (labelName == null) labels.values() else labels[Name.identifier(labelName)] val types = if (labelName == null) labels.values() else labels[Name.identifier(labelName)]
val type = types.lastOrNull() ?: ConeKotlinErrorType("Unresolved this@$labelName") val type = types.lastOrNull() ?: ConeKotlinErrorType("Unresolved this@$labelName")
qualifiedAccessExpression.resultType = FirResolvedTypeRefImpl(session, null, type, false, emptyList()) qualifiedAccessExpression.resultType = FirResolvedTypeRefImpl(session, null, type, emptyList())
} }
is FirSuperReference -> { is FirSuperReference -> {
qualifiedAccessExpression.resultType = qualifiedAccessExpression.resultType =
@@ -435,7 +434,7 @@ open class FirBodyResolveTransformer(val session: FirSession, val implicitTypeOn
session, session,
null, null,
Name.identifier("it"), Name.identifier("it"),
FirResolvedTypeRefImpl(session, null, parameters.single(), false, emptyList()), FirResolvedTypeRefImpl(session, null, parameters.single(), emptyList()),
null, null,
false, false,
false, false,
@@ -565,7 +564,7 @@ open class FirBodyResolveTransformer(val session: FirSession, val implicitTypeOn
commonSuperType(types.map { it.coneTypeUnsafe() }) commonSuperType(types.map { it.coneTypeUnsafe() })
} }
} as ConeKotlinType } as ConeKotlinType
return FirResolvedTypeRefImpl(session, null, commonSuperType, false, emptyList()) return FirResolvedTypeRefImpl(session, null, commonSuperType, emptyList())
} }
override fun transformWhenExpression(whenExpression: FirWhenExpression, data: Any?): CompositeTransformResult<FirStatement> { override fun transformWhenExpression(whenExpression: FirWhenExpression, data: Any?): CompositeTransformResult<FirStatement> {
@@ -618,7 +617,7 @@ open class FirBodyResolveTransformer(val session: FirSession, val implicitTypeOn
val type = ConeClassTypeImpl(symbol.toLookupTag(), emptyArray(), isNullable = kind == IrConstKind.Null) val type = ConeClassTypeImpl(symbol.toLookupTag(), emptyArray(), isNullable = kind == IrConstKind.Null)
constExpression.resultType = FirResolvedTypeRefImpl(session, null, type, false, emptyList()) constExpression.resultType = FirResolvedTypeRefImpl(session, null, type, emptyList())
} else { } else {
constExpression.resultType = expectedType constExpression.resultType = expectedType
} }
@@ -737,7 +736,6 @@ open class FirBodyResolveTransformer(val session: FirSession, val implicitTypeOn
session, session,
null, null,
kClassSymbol.constructType(arrayOf(transformedGetClassCall.argument.resultType.coneTypeUnsafe()), false), kClassSymbol.constructType(arrayOf(transformedGetClassCall.argument.resultType.coneTypeUnsafe()), false),
false,
emptyList() emptyList()
) )
return transformedGetClassCall.compose() return transformedGetClassCall.compose()
@@ -56,7 +56,7 @@ class FirCallCompleterTransformer(
session, session,
argument?.psi, argument?.psi,
Variance.INVARIANT, Variance.INVARIANT,
FirResolvedTypeRefImpl(session, null, type, false, emptyList()) FirResolvedTypeRefImpl(session, null, type, emptyList())
) )
} }
} }
@@ -48,7 +48,6 @@ class FirSpecificTypeResolverTransformer(
session, session,
typeRef.psi, typeRef.psi,
resolvedType, resolvedType,
false,
typeRef.annotations typeRef.annotations
).compose() ).compose()
} }
@@ -59,6 +59,13 @@ open class FirTypeResolveTransformer : FirAbstractTreeTransformerWithSuperTypes(
} }
} }
override fun transformConstructor(constructor: FirConstructor, data: Nothing?): CompositeTransformResult<FirDeclaration> {
return withScopeCleanup {
constructor.addTypeParametersScope()
super.transformConstructor(constructor, data)
}
}
override fun transformTypeAlias(typeAlias: FirTypeAlias, data: Nothing?): CompositeTransformResult<FirDeclaration> { override fun transformTypeAlias(typeAlias: FirTypeAlias, data: Nothing?): CompositeTransformResult<FirDeclaration> {
return withScopeCleanup { return withScopeCleanup {
typeAlias.addTypeParametersScope() typeAlias.addTypeParametersScope()
@@ -120,8 +120,7 @@ fun FirTypeRef.withReplacedConeType(session: FirSession, newType: ConeKotlinType
return FirResolvedTypeRefImpl( return FirResolvedTypeRefImpl(
session, psi, newType, session, psi, newType,
isMarkedNullable, annotations = annotations
annotations
) )
} }
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.fir.types
import org.jetbrains.kotlin.fir.VisitedSupertype import org.jetbrains.kotlin.fir.VisitedSupertype
import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.fir.visitors.FirVisitor
interface FirResolvedTypeRef : FirTypeRefWithNullability { interface FirResolvedTypeRef : FirTypeRef {
val type: ConeKotlinType val type: ConeKotlinType
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
@@ -24,9 +24,6 @@ sealed class FirImplicitBuiltinTypeRef(
override val annotations: List<FirAnnotationCall> override val annotations: List<FirAnnotationCall>
get() = emptyList() get() = emptyList()
override val isMarkedNullable: Boolean
get() = false
override val type: ConeKotlinType = ConeClassTypeImpl(ConeClassLikeLookupTagImpl(id), emptyArray(), false) override val type: ConeKotlinType = ConeClassTypeImpl(ConeClassLikeLookupTagImpl(id), emptyArray(), false)
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
@@ -15,6 +15,5 @@ class FirResolvedTypeRefImpl(
override val session: FirSession, override val session: FirSession,
override val psi: PsiElement?, override val psi: PsiElement?,
override val type: ConeKotlinType, override val type: ConeKotlinType,
override val isMarkedNullable: Boolean, override val annotations: List<FirAnnotationCall> = emptyList()
override val annotations: List<FirAnnotationCall>
) : FirResolvedTypeRef ) : FirResolvedTypeRef
@@ -360,6 +360,18 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformTypeRef(implicitTypeRef, data) return transformTypeRef(implicitTypeRef, data)
} }
open fun transformResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: D): CompositeTransformResult<FirTypeRef> {
return transformTypeRef(resolvedTypeRef, data)
}
open fun transformErrorTypeRef(errorTypeRef: FirErrorTypeRef, data: D): CompositeTransformResult<FirTypeRef> {
return transformResolvedTypeRef(errorTypeRef, data)
}
open fun transformResolvedFunctionTypeRef(resolvedFunctionTypeRef: FirResolvedFunctionTypeRef, data: D): CompositeTransformResult<FirTypeRef> {
return transformResolvedTypeRef(resolvedFunctionTypeRef, data)
}
open fun transformTypeRefWithNullability(typeRefWithNullability: FirTypeRefWithNullability, data: D): CompositeTransformResult<FirTypeRef> { open fun transformTypeRefWithNullability(typeRefWithNullability: FirTypeRefWithNullability, data: D): CompositeTransformResult<FirTypeRef> {
return transformTypeRef(typeRefWithNullability, data) return transformTypeRef(typeRefWithNullability, data)
} }
@@ -372,18 +384,6 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformTypeRefWithNullability(functionTypeRef, data) return transformTypeRefWithNullability(functionTypeRef, data)
} }
open fun transformResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: D): CompositeTransformResult<FirTypeRef> {
return transformTypeRefWithNullability(resolvedTypeRef, data)
}
open fun transformErrorTypeRef(errorTypeRef: FirErrorTypeRef, data: D): CompositeTransformResult<FirTypeRef> {
return transformResolvedTypeRef(errorTypeRef, data)
}
open fun transformResolvedFunctionTypeRef(resolvedFunctionTypeRef: FirResolvedFunctionTypeRef, data: D): CompositeTransformResult<FirTypeRef> {
return transformResolvedTypeRef(resolvedFunctionTypeRef, data)
}
open fun transformUserTypeRef(userTypeRef: FirUserTypeRef, data: D): CompositeTransformResult<FirTypeRef> { open fun transformUserTypeRef(userTypeRef: FirUserTypeRef, data: D): CompositeTransformResult<FirTypeRef> {
return transformTypeRefWithNullability(userTypeRef, data) return transformTypeRefWithNullability(userTypeRef, data)
} }
@@ -360,6 +360,18 @@ abstract class FirVisitor<out R, in D> {
return visitTypeRef(implicitTypeRef, data) return visitTypeRef(implicitTypeRef, data)
} }
open fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: D): R {
return visitTypeRef(resolvedTypeRef, data)
}
open fun visitErrorTypeRef(errorTypeRef: FirErrorTypeRef, data: D): R {
return visitResolvedTypeRef(errorTypeRef, data)
}
open fun visitResolvedFunctionTypeRef(resolvedFunctionTypeRef: FirResolvedFunctionTypeRef, data: D): R {
return visitResolvedTypeRef(resolvedFunctionTypeRef, data)
}
open fun visitTypeRefWithNullability(typeRefWithNullability: FirTypeRefWithNullability, data: D): R { open fun visitTypeRefWithNullability(typeRefWithNullability: FirTypeRefWithNullability, data: D): R {
return visitTypeRef(typeRefWithNullability, data) return visitTypeRef(typeRefWithNullability, data)
} }
@@ -372,18 +384,6 @@ abstract class FirVisitor<out R, in D> {
return visitTypeRefWithNullability(functionTypeRef, data) return visitTypeRefWithNullability(functionTypeRef, data)
} }
open fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: D): R {
return visitTypeRefWithNullability(resolvedTypeRef, data)
}
open fun visitErrorTypeRef(errorTypeRef: FirErrorTypeRef, data: D): R {
return visitResolvedTypeRef(errorTypeRef, data)
}
open fun visitResolvedFunctionTypeRef(resolvedFunctionTypeRef: FirResolvedFunctionTypeRef, data: D): R {
return visitResolvedTypeRef(resolvedFunctionTypeRef, data)
}
open fun visitUserTypeRef(userTypeRef: FirUserTypeRef, data: D): R { open fun visitUserTypeRef(userTypeRef: FirUserTypeRef, data: D): R {
return visitTypeRefWithNullability(userTypeRef, data) return visitTypeRefWithNullability(userTypeRef, data)
} }
@@ -360,6 +360,18 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitTypeRef(implicitTypeRef, null) visitTypeRef(implicitTypeRef, null)
} }
open fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef) {
visitTypeRef(resolvedTypeRef, null)
}
open fun visitErrorTypeRef(errorTypeRef: FirErrorTypeRef) {
visitResolvedTypeRef(errorTypeRef, null)
}
open fun visitResolvedFunctionTypeRef(resolvedFunctionTypeRef: FirResolvedFunctionTypeRef) {
visitResolvedTypeRef(resolvedFunctionTypeRef, null)
}
open fun visitTypeRefWithNullability(typeRefWithNullability: FirTypeRefWithNullability) { open fun visitTypeRefWithNullability(typeRefWithNullability: FirTypeRefWithNullability) {
visitTypeRef(typeRefWithNullability, null) visitTypeRef(typeRefWithNullability, null)
} }
@@ -372,18 +384,6 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitTypeRefWithNullability(functionTypeRef, null) visitTypeRefWithNullability(functionTypeRef, null)
} }
open fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef) {
visitTypeRefWithNullability(resolvedTypeRef, null)
}
open fun visitErrorTypeRef(errorTypeRef: FirErrorTypeRef) {
visitResolvedTypeRef(errorTypeRef, null)
}
open fun visitResolvedFunctionTypeRef(resolvedFunctionTypeRef: FirResolvedFunctionTypeRef) {
visitResolvedTypeRef(resolvedFunctionTypeRef, null)
}
open fun visitUserTypeRef(userTypeRef: FirUserTypeRef) { open fun visitUserTypeRef(userTypeRef: FirUserTypeRef) {
visitTypeRefWithNullability(userTypeRef, null) visitTypeRefWithNullability(userTypeRef, null)
} }