diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/types/LazyJavaTypeResolver.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/types/LazyJavaTypeResolver.kt index e9a196d11a0..03402fc4392 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/types/LazyJavaTypeResolver.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/types/LazyJavaTypeResolver.kt @@ -259,14 +259,6 @@ class LazyJavaTypeResolver( } } - override fun computeMemberScope(): JetScope { - val descriptor = getConstructor().getDeclarationDescriptor()!! - - if (descriptor is TypeParameterDescriptor) return descriptor.getDefaultType().getMemberScope() - - return (descriptor as ClassDescriptor).getMemberScope(substitution) - } - override fun computeCustomSubstitution() = if (isRaw()) RawSubstitution else null private object RawSubstitution : TypeSubstitution() { diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/AbstractLazyType.kt b/core/descriptors/src/org/jetbrains/kotlin/types/AbstractLazyType.kt index 960ab47a12d..1b405bff619 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/AbstractLazyType.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/types/AbstractLazyType.kt @@ -39,7 +39,14 @@ public abstract class AbstractLazyType(storageManager: StorageManager) : Abstrac private val memberScope = storageManager.createLazyValue { computeMemberScope() } override fun getMemberScope() = memberScope() - protected abstract fun computeMemberScope(): JetScope + protected open fun computeMemberScope(): JetScope { + val descriptor = constructor.getDeclarationDescriptor() + return when (descriptor) { + is TypeParameterDescriptor -> descriptor.getDefaultType().getMemberScope() + is ClassDescriptor -> descriptor.getMemberScope(substitution) + else -> throw IllegalStateException("Unsupported classifier: $descriptor") + } + } override fun isMarkedNullable() = false diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/DeserializedType.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/DeserializedType.kt index e0665d3c949..24fba0e3ee5 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/DeserializedType.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/DeserializedType.kt @@ -16,14 +16,12 @@ package org.jetbrains.kotlin.serialization.deserialization -import org.jetbrains.kotlin.descriptors.ClassDescriptor -import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor import org.jetbrains.kotlin.descriptors.annotations.Annotations -import org.jetbrains.kotlin.resolve.DescriptorUtils -import org.jetbrains.kotlin.resolve.scopes.JetScope import org.jetbrains.kotlin.serialization.ProtoBuf import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedAnnotations -import org.jetbrains.kotlin.types.* +import org.jetbrains.kotlin.types.AbstractLazyType +import org.jetbrains.kotlin.types.ErrorUtils +import org.jetbrains.kotlin.types.LazyType import org.jetbrains.kotlin.utils.toReadOnlyList class DeserializedType( @@ -40,29 +38,12 @@ class DeserializedType( typeDeserializer.typeArgument(getConstructor().getParameters().getOrNull(index), proto) }.toReadOnlyList() - override fun computeMemberScope() = - if (isError()) { - ErrorUtils.createErrorScope(getConstructor().toString()) - } - else { - getTypeMemberScope(getConstructor(), getArguments()) - } - private val annotations = DeserializedAnnotations(c.storageManager) { c.components.annotationAndConstantLoader.loadTypeAnnotations(typeProto, c.nameResolver) } override fun isMarkedNullable(): Boolean = typeProto.getNullable() - private fun getTypeMemberScope(constructor: TypeConstructor, typeArguments: List): JetScope { - val descriptor = constructor.getDeclarationDescriptor() - return when (descriptor) { - is TypeParameterDescriptor -> descriptor.getDefaultType().getMemberScope() - is ClassDescriptor -> descriptor.getMemberScope(typeArguments) - else -> throw IllegalStateException("Unsupported classifier: $descriptor") - } - } - override fun isError(): Boolean { val descriptor = getConstructor().getDeclarationDescriptor() return descriptor != null && ErrorUtils.isError(descriptor)