diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/AbstractLazyMemberScope.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/AbstractLazyMemberScope.java index 3fbbd2bd7bf..a97414dfd39 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/AbstractLazyMemberScope.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/AbstractLazyMemberScope.java @@ -39,6 +39,7 @@ import org.jetbrains.jet.storage.MemoizedFunctionToNotNull; import org.jetbrains.jet.storage.NotNullLazyValue; import org.jetbrains.jet.storage.StorageManager; import org.jetbrains.jet.utils.Printer; +import org.jetbrains.jet.utils.UtilsPackage; import java.util.*; @@ -106,7 +107,7 @@ public abstract class AbstractLazyMemberScope resolveClassDescriptor(@NotNull final Name name) { Collection classOrObjectDeclarations = declarationProvider.getClassOrObjectDeclarations(name); - return ContainerUtil.mapNotNull(classOrObjectDeclarations, new Function() { + return UtilsPackage.toReadOnlyList(ContainerUtil.mapNotNull(classOrObjectDeclarations, new Function() { @Override public ClassDescriptor fun(JetClassLikeInfo classLikeInfo) { // SCRIPT: Creating a script class @@ -115,7 +116,7 @@ public abstract class AbstractLazyMemberScope result); @@ -252,8 +253,8 @@ public abstract class AbstractLazyMemberScope computeExtraDescriptors() { - ArrayList result = new ArrayList(); + List result = new ArrayList(); for (JetType supertype : thisDescriptor.getTypeConstructor().getSupertypes()) { for (DeclarationDescriptor descriptor : supertype.getMemberScope().getAllDescriptors()) { if (descriptor instanceof FunctionDescriptor) { @@ -314,8 +315,7 @@ public class LazyClassMemberScope extends AbstractLazyMemberScope result) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyScriptClassMemberScope.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyScriptClassMemberScope.java index 456b297af8f..3e625bfc14b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyScriptClassMemberScope.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyScriptClassMemberScope.java @@ -30,6 +30,7 @@ import org.jetbrains.jet.lang.resolve.lazy.data.JetScriptInfo; import org.jetbrains.jet.lang.resolve.lazy.declarations.ClassMemberDeclarationProvider; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.storage.NotNullLazyValue; +import org.jetbrains.jet.utils.UtilsPackage; import java.util.Collection; import java.util.Set; @@ -61,13 +62,13 @@ public class LazyScriptClassMemberScope extends LazyClassMemberScope { @NotNull @Override protected Collection computeExtraDescriptors() { - return KotlinPackage.plus( + return UtilsPackage.toReadOnlyList(KotlinPackage.plus( super.computeExtraDescriptors(), KotlinPackage.plus( getProperties(Name.identifier(ScriptDescriptor.LAST_EXPRESSION_VALUE_FIELD_NAME)), getPropertiesForScriptParameters() ) - ); + )); } private Collection getPropertiesForScriptParameters() { diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaMemberScope.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaMemberScope.kt index 626c3a4b2e9..fc53aa80885 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaMemberScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaMemberScope.kt @@ -100,7 +100,7 @@ public abstract class LazyJavaMemberScope( } } - ArrayList(functions) + functions.toReadOnlyList() } data class MethodSignatureData( @@ -237,8 +237,7 @@ public abstract class LazyJavaMemberScope( computeNonDeclaredProperties(name, properties) - properties.trimToSize() - properties + properties.toReadOnlyList() } private fun resolveProperty(field: JavaField): PropertyDescriptor { @@ -303,7 +302,7 @@ public abstract class LazyJavaMemberScope( override fun getOwnDeclaredDescriptors() = getAllDescriptors() override fun getAllDescriptors() = _allDescriptors() - private fun computeAllDescriptors(): MutableCollection { + private fun computeAllDescriptors(): List { val result = LinkedHashSet() for (name in getAllClassNames()) { @@ -324,7 +323,7 @@ public abstract class LazyJavaMemberScope( addExtraDescriptors(result) - return ArrayList(result) + return result.toReadOnlyList() } protected open fun addExtraDescriptors(result: MutableSet) { diff --git a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedMemberScope.java b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedMemberScope.java index c1f4e76d381..31bed719ab6 100644 --- a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedMemberScope.java +++ b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedMemberScope.java @@ -31,6 +31,7 @@ import org.jetbrains.jet.storage.MemoizedFunctionToNotNull; import org.jetbrains.jet.storage.NotNullLazyValue; import org.jetbrains.jet.storage.StorageManager; import org.jetbrains.jet.utils.Printer; +import org.jetbrains.jet.utils.UtilsPackage; import java.util.*; @@ -135,7 +136,7 @@ public abstract class DeserializedMemberScope implements JetScope { private Collection computeFunctions(@NotNull Name name) { Collection descriptors = computeMembersByName(name, FUNCTION); computeNonDeclaredFunctions(name, descriptors); - return new ArrayList(descriptors); + return UtilsPackage.toReadOnlyList(descriptors); } protected void computeNonDeclaredFunctions(@NotNull Name name, @NotNull Collection functions) { @@ -152,7 +153,7 @@ public abstract class DeserializedMemberScope implements JetScope { Collection descriptors = computeMembersByName(name, PROPERTY); computeNonDeclaredProperties(name, descriptors); //noinspection unchecked - return new ArrayList((Collection) descriptors); + return UtilsPackage.toReadOnlyList(descriptors); } protected void computeNonDeclaredProperties(@NotNull Name name, @NotNull Collection descriptors) { @@ -211,7 +212,7 @@ public abstract class DeserializedMemberScope implements JetScope { addAllClassDescriptors(result); - return result; + return UtilsPackage.toReadOnlyList(result); } protected abstract void addNonDeclaredDescriptors(@NotNull Collection result); diff --git a/core/util.runtime/src/org/jetbrains/jet/utils/collections.kt b/core/util.runtime/src/org/jetbrains/jet/utils/collections.kt index 1278d44c9c2..5b97947b864 100644 --- a/core/util.runtime/src/org/jetbrains/jet/utils/collections.kt +++ b/core/util.runtime/src/org/jetbrains/jet/utils/collections.kt @@ -20,6 +20,7 @@ import java.util.LinkedHashMap import java.util.ArrayList import java.util.HashMap import java.util.HashSet +import java.util.Collections public fun Stream.valuesToMap(key: (V) -> K): Map { val map = LinkedHashMap() @@ -94,3 +95,9 @@ public fun newHashMapWithExpectedSize(expectedSize: Int): HashMap { public fun newHashSetWithExpectedSize(expectedSize: Int): HashSet { return HashSet(if (expectedSize < 3) 3 else expectedSize + expectedSize / 3 + 1) } + +public fun Collection.toReadOnlyList(): List = + if (isEmpty()) Collections.emptyList() else ArrayList(this) + +public fun Collection.toReadOnlySet(): Set = + if (isEmpty()) Collections.emptySet() else HashSet(this) \ No newline at end of file