Deserialized scope descriptor order synced with serialization order

That introduces implicit dependency of deserialization on MemberComparator
This commit is contained in:
Pavel V. Talanov
2014-11-11 16:16:08 +03:00
parent 028e9105af
commit 8e1111d690
3 changed files with 21 additions and 10 deletions
@@ -241,7 +241,11 @@ public class DeserializedClassDescriptor(outerContext: DeserializationContext, p
classDescriptor.enumEntries.findEnumEntry(name) ?: classDescriptor.nestedClasses.findNestedClass(name) classDescriptor.enumEntries.findEnumEntry(name) ?: classDescriptor.nestedClasses.findNestedClass(name)
override fun addClassDescriptors(result: MutableCollection<DeclarationDescriptor>, nameFilter: (Name) -> Boolean) { override fun addClassDescriptors(result: MutableCollection<DeclarationDescriptor>, nameFilter: (Name) -> Boolean) {
result.addAll(classDescriptor.nestedClasses.all() + classDescriptor.enumEntries.all()) result.addAll(classDescriptor.nestedClasses.all())
}
override fun addEnumEntryDescriptors(result: MutableCollection<DeclarationDescriptor>, nameFilter: (Name) -> Boolean) {
result.addAll(classDescriptor.enumEntries.all())
} }
} }
@@ -106,15 +106,16 @@ public abstract class DeserializedMemberScope protected(
nameFilter: (Name) -> Boolean): Collection<DeclarationDescriptor> { nameFilter: (Name) -> Boolean): Collection<DeclarationDescriptor> {
val result = LinkedHashSet<DeclarationDescriptor>(0) val result = LinkedHashSet<DeclarationDescriptor>(0)
for (name in membersProtos().keySet()) { if (kindFilter.acceptsKinds(DescriptorKindFilter.CLASSIFIERS_MASK)) {
if (nameFilter(name)) { addEnumEntryDescriptors(result, nameFilter)
if (kindFilter.acceptsKinds(DescriptorKindFilter.FUNCTIONS_MASK)) { }
result.addAll(getFunctions(name))
} val names = membersProtos().keySet().filter(nameFilter)
if (kindFilter.acceptsKinds(DescriptorKindFilter.VARIABLES_MASK)) { if (kindFilter.acceptsKinds(DescriptorKindFilter.VARIABLES_MASK)) {
result.addAll(getProperties(name)) names.forEach { result.addAll(getProperties(it)) }
} }
} if (kindFilter.acceptsKinds(DescriptorKindFilter.FUNCTIONS_MASK)) {
names.forEach { result.addAll(getFunctions(it)) }
} }
addNonDeclaredDescriptors(result) addNonDeclaredDescriptors(result)
@@ -128,6 +129,8 @@ public abstract class DeserializedMemberScope protected(
protected abstract fun addNonDeclaredDescriptors(result: MutableCollection<DeclarationDescriptor>) protected abstract fun addNonDeclaredDescriptors(result: MutableCollection<DeclarationDescriptor>)
protected abstract fun addEnumEntryDescriptors(result: MutableCollection<DeclarationDescriptor>, nameFilter: (Name) -> Boolean)
override fun getImplicitReceiversHierarchy(): List<ReceiverParameterDescriptor> { override fun getImplicitReceiversHierarchy(): List<ReceiverParameterDescriptor> {
val receiver = getImplicitReceiver() val receiver = getImplicitReceiver()
return if (receiver != null) listOf(receiver) else listOf() return if (receiver != null) listOf(receiver) else listOf()
@@ -61,5 +61,9 @@ public open class DeserializedPackageMemberScope(
// Do nothing // Do nothing
} }
override fun addEnumEntryDescriptors(result: MutableCollection<DeclarationDescriptor>, nameFilter: (Name) -> Boolean) {
// Do nothing
}
override fun getImplicitReceiver(): ReceiverParameterDescriptor? = null override fun getImplicitReceiver(): ReceiverParameterDescriptor? = null
} }