diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/FunctionDescriptorImpl.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/FunctionDescriptorImpl.java index ea5fa338e33..cd64001ee9c 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/FunctionDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/FunctionDescriptorImpl.java @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.types.DescriptorSubstitutor; import org.jetbrains.kotlin.types.JetType; import org.jetbrains.kotlin.types.TypeSubstitutor; import org.jetbrains.kotlin.types.Variance; +import org.jetbrains.kotlin.utils.UtilsPackage; import java.util.*; @@ -64,7 +65,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo @Nullable Modality modality, @NotNull Visibility visibility ) { - this.typeParameters = new ArrayList(typeParameters); + this.typeParameters = UtilsPackage.toReadOnlyList(typeParameters); this.unsubstitutedValueParameters = unsubstitutedValueParameters; this.unsubstitutedReturnType = unsubstitutedReturnType; this.modality = modality; diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt index 5fcb2d16034..4b387166b94 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt @@ -28,6 +28,7 @@ import org.jetbrains.kotlin.serialization.ProtoBuf.Callable.CallableKind.FUN import org.jetbrains.kotlin.serialization.ProtoBuf.Callable.CallableKind.VAL import org.jetbrains.kotlin.serialization.ProtoBuf.Callable.CallableKind.VAR import org.jetbrains.kotlin.serialization.deserialization.descriptors.* +import org.jetbrains.kotlin.utils.toReadOnlyList public class MemberDeserializer(private val c: DeserializationContext) { public fun loadCallable(proto: Callable): CallableMemberDescriptor { @@ -187,7 +188,7 @@ public class MemberDeserializer(private val c: DeserializationContext) { if (proto.hasVarargElementType()) c.typeDeserializer.type(proto.getVarargElementType()) else null, SourceElement.NO_SOURCE ) - } + }.toReadOnlyList() } private fun getParameterAnnotations( 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 4e97127de1d..829b8d66c86 100644 --- a/core/util.runtime/src/org/jetbrains/kotlin/utils/collections.kt +++ b/core/util.runtime/src/org/jetbrains/kotlin/utils/collections.kt @@ -16,12 +16,10 @@ package org.jetbrains.kotlin.utils -import java.util.LinkedHashMap import java.util.ArrayList import java.util.HashMap import java.util.HashSet -import java.util.Collections -import java.util.LinkedHashSet +import java.util.LinkedHashMap public fun Sequence.valuesToMap(key: (V) -> K): Map { val map = LinkedHashMap() @@ -102,6 +100,11 @@ public fun newHashSetWithExpectedSize(expectedSize: Int): HashSet { } public fun Collection.toReadOnlyList(): List = - if (isEmpty()) Collections.emptyList() else ArrayList(this) + when (size()) { + 0 -> emptyList() + 1 -> listOf(first()) + else -> ArrayList(this) + } -public fun T?.singletonOrEmptyList(): List = if (this != null) Collections.singletonList(this) else Collections.emptyList() +public fun T?.singletonOrEmptyList(): List = + if (this != null) listOf(this) else emptyList()