From 8e1111d69084a3280fdb5de6c099eb8366ff10d7 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Tue, 11 Nov 2014 16:16:08 +0300 Subject: [PATCH] Deserialized scope descriptor order synced with serialization order That introduces implicit dependency of deserialization on MemberComparator --- .../DeserializedClassDescriptor.kt | 6 +++++- .../descriptors/DeserializedMemberScope.kt | 21 +++++++++++-------- .../DeserializedPackageMemberScope.kt | 4 ++++ 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedClassDescriptor.kt b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedClassDescriptor.kt index 2da98cd04e2..63110beca93 100644 --- a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedClassDescriptor.kt +++ b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedClassDescriptor.kt @@ -241,7 +241,11 @@ public class DeserializedClassDescriptor(outerContext: DeserializationContext, p classDescriptor.enumEntries.findEnumEntry(name) ?: classDescriptor.nestedClasses.findNestedClass(name) override fun addClassDescriptors(result: MutableCollection, nameFilter: (Name) -> Boolean) { - result.addAll(classDescriptor.nestedClasses.all() + classDescriptor.enumEntries.all()) + result.addAll(classDescriptor.nestedClasses.all()) + } + + override fun addEnumEntryDescriptors(result: MutableCollection, nameFilter: (Name) -> Boolean) { + result.addAll(classDescriptor.enumEntries.all()) } } diff --git a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedMemberScope.kt b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedMemberScope.kt index 2d289858e92..9f44771c51c 100644 --- a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedMemberScope.kt +++ b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedMemberScope.kt @@ -106,15 +106,16 @@ public abstract class DeserializedMemberScope protected( nameFilter: (Name) -> Boolean): Collection { val result = LinkedHashSet(0) - for (name in membersProtos().keySet()) { - if (nameFilter(name)) { - if (kindFilter.acceptsKinds(DescriptorKindFilter.FUNCTIONS_MASK)) { - result.addAll(getFunctions(name)) - } - if (kindFilter.acceptsKinds(DescriptorKindFilter.VARIABLES_MASK)) { - result.addAll(getProperties(name)) - } - } + if (kindFilter.acceptsKinds(DescriptorKindFilter.CLASSIFIERS_MASK)) { + addEnumEntryDescriptors(result, nameFilter) + } + + val names = membersProtos().keySet().filter(nameFilter) + if (kindFilter.acceptsKinds(DescriptorKindFilter.VARIABLES_MASK)) { + names.forEach { result.addAll(getProperties(it)) } + } + if (kindFilter.acceptsKinds(DescriptorKindFilter.FUNCTIONS_MASK)) { + names.forEach { result.addAll(getFunctions(it)) } } addNonDeclaredDescriptors(result) @@ -128,6 +129,8 @@ public abstract class DeserializedMemberScope protected( protected abstract fun addNonDeclaredDescriptors(result: MutableCollection) + protected abstract fun addEnumEntryDescriptors(result: MutableCollection, nameFilter: (Name) -> Boolean) + override fun getImplicitReceiversHierarchy(): List { val receiver = getImplicitReceiver() return if (receiver != null) listOf(receiver) else listOf() diff --git a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedPackageMemberScope.kt b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedPackageMemberScope.kt index d860f302e9e..db518faad06 100644 --- a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedPackageMemberScope.kt +++ b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedPackageMemberScope.kt @@ -61,5 +61,9 @@ public open class DeserializedPackageMemberScope( // Do nothing } + override fun addEnumEntryDescriptors(result: MutableCollection, nameFilter: (Name) -> Boolean) { + // Do nothing + } + override fun getImplicitReceiver(): ReceiverParameterDescriptor? = null }