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)
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> {
val result = LinkedHashSet<DeclarationDescriptor>(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<DeclarationDescriptor>)
protected abstract fun addEnumEntryDescriptors(result: MutableCollection<DeclarationDescriptor>, nameFilter: (Name) -> Boolean)
override fun getImplicitReceiversHierarchy(): List<ReceiverParameterDescriptor> {
val receiver = getImplicitReceiver()
return if (receiver != null) listOf(receiver) else listOf()
@@ -61,5 +61,9 @@ public open class DeserializedPackageMemberScope(
// Do nothing
}
override fun addEnumEntryDescriptors(result: MutableCollection<DeclarationDescriptor>, nameFilter: (Name) -> Boolean) {
// Do nothing
}
override fun getImplicitReceiver(): ReceiverParameterDescriptor? = null
}