From d96f10c7bd3573047819ce36ebda057cd40aba68 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 11 Oct 2016 14:14:03 +0300 Subject: [PATCH] Refactor deserialization of nested type aliases Do it exactly in the same way as with properties/functions, in DeserializedMemberScope and nowhere else --- .../DeserializedClassDescriptor.kt | 22 +++---------------- .../descriptors/DeserializedMemberScope.kt | 11 +++++++++- .../DeserializedPackageMemberScope.kt | 5 ----- 3 files changed, 13 insertions(+), 25 deletions(-) diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt index 8fb4726abea..2f8da82fc10 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt @@ -65,7 +65,6 @@ class DeserializedClassDescriptor( private val containingDeclaration = outerContext.containingDeclaration private val primaryConstructor = c.storageManager.createNullableLazyValue { computePrimaryConstructor() } private val constructors = c.storageManager.createLazyValue { computeConstructors() } - private val nestedTypeAliases = c.storageManager.createLazyValue { NestedTypeAliases() } private val companionObjectDescriptor = c.storageManager.createNullableLazyValue { computeCompanionObjectDescriptor() } internal val thisAsProtoContainer: ProtoContainer.Class = ProtoContainer.Class( @@ -124,11 +123,6 @@ class DeserializedClassDescriptor( c.memberDeserializer.loadConstructor(it, false) } - private fun computeTypeAliases(): List = - classProto.typeAliasList.map { - c.memberDeserializer.loadTypeAlias(it) - } - override fun getConstructors() = constructors() private fun computeCompanionObjectDescriptor(): ClassDescriptor? { @@ -144,7 +138,7 @@ class DeserializedClassDescriptor( return nestedClasses != null && name in nestedClasses.nestedClassNames } - override fun toString() = "deserialized class ${getName().toString()}" // not using descriptor render to preserve laziness + override fun toString() = "deserialized class $name" // not using descriptor render to preserve laziness override fun getSource() = sourceElement @@ -184,7 +178,7 @@ class DeserializedClassDescriptor( override val annotations: Annotations get() = Annotations.EMPTY // TODO - override fun toString() = getName().toString() + override fun toString() = name.toString() override val supertypeLoopChecker: SupertypeLoopChecker // TODO: inject implementation @@ -267,12 +261,11 @@ class DeserializedClassDescriptor( recordLookup(name, location) return classDescriptor.enumEntries?.findEnumEntry(name) ?: classDescriptor.nestedClasses?.findNestedClass(name) ?: - classDescriptor.nestedTypeAliases().findTypeAlias(name) + getTypeAlias(name) } override fun addClassifierDescriptors(result: MutableCollection, nameFilter: (Name) -> Boolean) { result.addAll(classDescriptor.nestedClasses?.all().orEmpty()) - result.addAll(classDescriptor.nestedTypeAliases().all()) } override fun addEnumEntryDescriptors(result: MutableCollection, nameFilter: (Name) -> Boolean) { @@ -303,15 +296,6 @@ class DeserializedClassDescriptor( nestedClassNames.mapNotNull { name -> nestedClassByName(name) } } - private inner class NestedTypeAliases { - private val nestedTypeAliases = computeTypeAliases() - private val nestedTypeAliasesByName = nestedTypeAliases.associateBy { it.name } - - fun all() = nestedTypeAliases - - fun findTypeAlias(name: Name): TypeAliasDescriptor? = nestedTypeAliasesByName[name] - } - private inner class EnumEntryClassDescriptors { private val enumEntryProtos = classProto.enumEntryList.associateBy { c.nameResolver.getName(it.name) } diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedMemberScope.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedMemberScope.kt index aac9f11973d..a5ee76d26b6 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedMemberScope.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedMemberScope.kt @@ -30,6 +30,7 @@ import org.jetbrains.kotlin.serialization.ProtoBuf import org.jetbrains.kotlin.serialization.deserialization.DeserializationContext import org.jetbrains.kotlin.storage.getValue import org.jetbrains.kotlin.utils.Printer +import org.jetbrains.kotlin.utils.addIfNotNull import org.jetbrains.kotlin.utils.compactIfPossible import java.util.* @@ -68,7 +69,7 @@ abstract class DeserializedMemberScope protected constructor( propertyProtos.keys + getNonDeclaredVariableNames() } - protected val typeAliasNames: Set get() = typeAliasProtos.keys + private val typeAliasNames: Set get() = typeAliasProtos.keys override fun getFunctionNames() = functionNamesLazy override fun getVariableNames() = variableNamesLazy @@ -154,6 +155,14 @@ abstract class DeserializedMemberScope protected constructor( addClassifierDescriptors(result, nameFilter) } + if (kindFilter.acceptsKinds(DescriptorKindFilter.TYPE_ALIASES_MASK)) { + for (typeAliasName in typeAliasNames) { + if (nameFilter(typeAliasName)) { + result.addIfNotNull(getTypeAlias(typeAliasName)) + } + } + } + return result.compactIfPossible() } diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedPackageMemberScope.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedPackageMemberScope.kt index 8557f9c7856..44e21c2c74b 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedPackageMemberScope.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedPackageMemberScope.kt @@ -65,11 +65,6 @@ open class DeserializedPackageMemberScope( result.addIfNotNull(getClassDescriptor(className)) } } - for (typeAliasName in typeAliasNames) { - if (nameFilter(typeAliasName)) { - result.addIfNotNull(getTypeAlias(typeAliasName)) - } - } } override fun getNonDeclaredFunctionNames(): Set = emptySet()