Fix TypeAliasConstructorDescriptor's to create only once when required
Some IDE features relates onto that same descriptors will remain same between resolve calls Fix it to be true for TypeAliasConstructorDescriptor's #KT-16265 fixed
This commit is contained in:
+1
-1
@@ -182,7 +182,7 @@ class MemberDeserializer(private val c: DeserializationContext) {
|
||||
|
||||
val visibility = Deserialization.visibility(Flags.VISIBILITY.get(proto.flags))
|
||||
val typeAlias = DeserializedTypeAliasDescriptor(
|
||||
c.containingDeclaration, annotations, c.nameResolver.getName(proto.name),
|
||||
c.storageManager, c.containingDeclaration, annotations, c.nameResolver.getName(proto.name),
|
||||
visibility, proto, c.nameResolver, c.typeTable, c.sinceKotlinInfoTable, c.containerSource
|
||||
)
|
||||
|
||||
|
||||
+14
-1
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.serialization.ProtoBuf
|
||||
import org.jetbrains.kotlin.serialization.deserialization.IncompatibleVersionErrorData
|
||||
import org.jetbrains.kotlin.serialization.deserialization.NameResolver
|
||||
import org.jetbrains.kotlin.serialization.deserialization.TypeTable
|
||||
import org.jetbrains.kotlin.storage.StorageManager
|
||||
import org.jetbrains.kotlin.types.SimpleType
|
||||
import org.jetbrains.kotlin.types.TypeSubstitutor
|
||||
import org.jetbrains.kotlin.types.Variance
|
||||
@@ -173,6 +174,7 @@ class DeserializedClassConstructorDescriptor(
|
||||
}
|
||||
|
||||
class DeserializedTypeAliasDescriptor(
|
||||
override val storageManager: StorageManager,
|
||||
containingDeclaration: DeclarationDescriptor,
|
||||
annotations: Annotations,
|
||||
name: Name,
|
||||
@@ -184,6 +186,7 @@ class DeserializedTypeAliasDescriptor(
|
||||
override val containerSource: DeserializedContainerSource?
|
||||
) : AbstractTypeAliasDescriptor(containingDeclaration, annotations, name, SourceElement.NO_SOURCE, visibility),
|
||||
DeserializedMemberDescriptor {
|
||||
override lateinit var constructors: Collection<TypeAliasConstructorDescriptor> private set
|
||||
|
||||
override lateinit var underlyingType: SimpleType private set
|
||||
override lateinit var expandedType: SimpleType private set
|
||||
@@ -200,6 +203,7 @@ class DeserializedTypeAliasDescriptor(
|
||||
this.expandedType = expandedType
|
||||
typeConstructorParameters = computeConstructorTypeParameters()
|
||||
defaultTypeImpl = computeDefaultType()
|
||||
constructors = getTypeAliasConstructors()
|
||||
}
|
||||
|
||||
override val classDescriptor: ClassDescriptor?
|
||||
@@ -211,7 +215,16 @@ class DeserializedTypeAliasDescriptor(
|
||||
override fun substitute(substitutor: TypeSubstitutor): TypeAliasDescriptor {
|
||||
if (substitutor.isEmpty) return this
|
||||
val substituted = DeserializedTypeAliasDescriptor(
|
||||
containingDeclaration, annotations, name, visibility, proto, nameResolver, typeTable, sinceKotlinInfoTable, containerSource
|
||||
storageManager,
|
||||
containingDeclaration,
|
||||
annotations,
|
||||
name,
|
||||
visibility,
|
||||
proto,
|
||||
nameResolver,
|
||||
typeTable,
|
||||
sinceKotlinInfoTable,
|
||||
containerSource
|
||||
)
|
||||
substituted.initialize(declaredTypeParameters,
|
||||
substitutor.safeSubstitute(underlyingType, Variance.INVARIANT).asSimpleType(),
|
||||
|
||||
Reference in New Issue
Block a user