From 8ee5f3de8f441b8c0724874df99b36a97608ee2d Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Tue, 6 Sep 2016 13:01:16 +0300 Subject: [PATCH] Minor. Use ArrayList instead of LinkedHashSet Looks like there's no duplicates anyway --- .../descriptors/DeserializedMemberScope.kt | 10 +++++----- .../src/org/jetbrains/kotlin/utils/collections.kt | 9 ++++++++- 2 files changed, 13 insertions(+), 6 deletions(-) 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 3383a0ac762..2596c3e3c40 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,7 +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.toReadOnlyList +import org.jetbrains.kotlin.utils.compactIfPossible import java.util.* abstract class DeserializedMemberScope protected constructor( @@ -84,10 +84,10 @@ abstract class DeserializedMemberScope protected constructor( ): Collection { val protos = protosByName[name].orEmpty() - val descriptors = protos.mapTo(linkedSetOf(), factory) + val descriptors = protos.mapTo(arrayListOf(), factory) computeNonDeclared(descriptors) - return descriptors.toReadOnlyList() + return descriptors.compactIfPossible() } protected open fun computeNonDeclaredFunctions(name: Name, functions: MutableCollection) { @@ -126,7 +126,7 @@ abstract class DeserializedMemberScope protected constructor( ): Collection { //NOTE: descriptors should be in the same order they were serialized in // see MemberComparator - val result = LinkedHashSet(0) + val result = ArrayList(0) if (kindFilter.acceptsKinds(DescriptorKindFilter.SINGLETON_CLASSIFIERS_MASK)) { addEnumEntryDescriptors(result, nameFilter) @@ -140,7 +140,7 @@ abstract class DeserializedMemberScope protected constructor( addClassifierDescriptors(result, nameFilter) } - return result.toReadOnlyList() + return result.compactIfPossible() } private fun addFunctionsAndProperties( diff --git a/core/util.runtime/src/org/jetbrains/kotlin/utils/collections.kt b/core/util.runtime/src/org/jetbrains/kotlin/utils/collections.kt index 8a143164451..3e8e769c23d 100644 --- a/core/util.runtime/src/org/jetbrains/kotlin/utils/collections.kt +++ b/core/util.runtime/src/org/jetbrains/kotlin/utils/collections.kt @@ -84,6 +84,13 @@ fun Collection.toReadOnlyList(): List = else -> ArrayList(this) } +fun ArrayList.compactIfPossible(): List = + when (size) { + 0 -> emptyList() + 1 -> listOf(first()) + else -> apply(ArrayList::trimToSize) + } + fun T?.singletonOrEmptyList(): List = if (this != null) listOf(this) else emptyList() @@ -92,4 +99,4 @@ fun List.indexOfFirst(startFrom: Int, predicate: (T) -> Boolean): Int { if (predicate(this[index])) return index } return -1 -} \ No newline at end of file +}