diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirTypeDeserializer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirTypeDeserializer.kt index b983ccd3c9d..4c51a9c35f9 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirTypeDeserializer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirTypeDeserializer.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.impl.ConeAbbreviatedTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeClassTypeImpl +import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.deserialization.* import org.jetbrains.kotlin.serialization.deserialization.ProtoEnumFlags @@ -38,13 +39,13 @@ class FirTypeDeserializer( fun type(proto: ProtoBuf.Type): ConeKotlinType { if (proto.hasFlexibleTypeCapabilitiesId()) { val id = nameResolver.getString(proto.flexibleTypeCapabilitiesId) - val lowerBound = classLikeType(proto) - val upperBound = classLikeType(proto.flexibleUpperBound(typeTable)!!) + val lowerBound = simpleType(proto) + val upperBound = simpleType(proto.flexibleUpperBound(typeTable)!!) return ConeFlexibleType(lowerBound!!, upperBound!!) //c.components.flexibleTypeDeserializer.create(proto, id, lowerBound, upperBound) } - return classLikeType(proto) ?: ConeKotlinErrorType("?!id:0") + return simpleType(proto) ?: ConeKotlinErrorType("?!id:0") } @@ -53,16 +54,16 @@ class FirTypeDeserializer( private val typeParameterDescriptors = if (typeParameterProtos.isEmpty()) { - mapOf() + mapOf() } else { - val result = LinkedHashMap() + val result = LinkedHashMap() for ((index, proto) in typeParameterProtos.withIndex()) { result[proto.id] = LibraryTypeParameterSymbol(nameResolver.getName(proto.name)) } result } - val ownTypeParameters: List + val ownTypeParameters: List get() = typeParameterDescriptors.values.toList() @@ -74,12 +75,11 @@ class FirTypeDeserializer( it.symbol } - fun classLikeType(proto: ProtoBuf.Type): ConeClassLikeType? { + fun simpleType(proto: ProtoBuf.Type): ConeLookupTagBasedType? { - val constructor = typeSymbol(proto) as? ConeClassLikeLookupTag ?: return null -// if (ErrorUtils.isError(constructor.declarationDescriptor)) { -// return ErrorUtils.createErrorTypeWithCustomConstructor(constructor.toString(), constructor) -// } + val constructor = typeSymbol(proto) ?: return null + if (constructor is ConeTypeParameterLookupTag) return ConeTypeParameterTypeImpl(constructor, isNullable = false) + if (constructor !is ConeClassLikeLookupTag) return null fun ProtoBuf.Type.collectAllArguments(): List = argumentList + outerType(typeTable)?.collectAllArguments().orEmpty() diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirLibrarySymbolProviderImpl.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirLibrarySymbolProviderImpl.kt index 63a5728eaa1..07e7692e6e1 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirLibrarySymbolProviderImpl.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/impl/FirLibrarySymbolProviderImpl.kt @@ -113,7 +113,7 @@ class FirLibrarySymbolProviderImpl(val session: FirSession) : FirSymbolProvider val superTypesDeserialized = classProto.supertypes(typeTable).map { supertypeProto -> - typeDeserializer.classLikeType(supertypeProto) + typeDeserializer.simpleType(supertypeProto) }// TODO: + c.components.additionalClassPartsProvider.getSupertypes(this@DeserializedClassDescriptor) superTypesDeserialized.mapNotNullTo(superTypeRefs) {