diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/incremental/IncrementalPackageFragmentProvider.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/incremental/IncrementalPackageFragmentProvider.kt index 7b914d0c9f4..8c2819af776 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/incremental/IncrementalPackageFragmentProvider.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/incremental/IncrementalPackageFragmentProvider.kt @@ -130,7 +130,7 @@ public class IncrementalPackageFragmentProvider( MemberScope.Empty } else { - ChainedMemberScope("Member scope for incremental compilation: union of package parts data", *scopes.toTypedArray()) + ChainedMemberScope("Member scope for incremental compilation: union of package parts data", scopes) } } } @@ -155,7 +155,7 @@ public class IncrementalPackageFragmentProvider( val scopes = partsData.map { IncrementalPackageScope(JvmProtoBufUtil.readPackageDataFrom(it.data, it.strings)) } ChainedMemberScope( "Member scope for incremental compilation: union of multifile class parts data for $multifileClassFqName", - *scopes.toTypedArray()) + scopes) } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/ClassResolutionScopesSupport.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/ClassResolutionScopesSupport.kt index 2c24d5a5c7c..c342ccfb3df 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/ClassResolutionScopesSupport.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/ClassResolutionScopesSupport.kt @@ -141,7 +141,7 @@ class ClassResolutionScopesSupport( return LexicalChainedScope(parentForNewScope, ownerDescriptor, false, implicitReceiver, LexicalScopeKind.CLASS_INHERITANCE, - memberScopes = *staticScopes.toTypedArray(), isStaticScope = true) + memberScopes = staticScopes, isStaticScope = true) } private fun StorageManager.createLazyValue(onRecursion: ((Boolean) -> T), compute: () -> T) = diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/LexicalChainedScope.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/LexicalChainedScope.kt index 01a0019f09e..2df3fc6683e 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/LexicalChainedScope.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/LexicalChainedScope.kt @@ -31,21 +31,20 @@ public class LexicalChainedScope @JvmOverloads constructor( override val isOwnerDescriptorAccessibleByLabel: Boolean, override val implicitReceiver: ReceiverParameterDescriptor?, override val kind: LexicalScopeKind, - vararg memberScopes: MemberScope, + private val memberScopes: List, @Deprecated("This value is temporary hack for resolve -- don't use it!") val isStaticScope: Boolean = false ): LexicalScope { override val parent = parent.takeSnapshot() - private val scopeChain = memberScopes.clone() override fun getContributedDescriptors(kindFilter: DescriptorKindFilter, nameFilter: (Name) -> Boolean) - = getFromAllScopes(scopeChain) { it.getContributedDescriptors() } + = getFromAllScopes(memberScopes) { it.getContributedDescriptors() } - override fun getContributedClassifier(name: Name, location: LookupLocation) = getFirstMatch(scopeChain) { it.getContributedClassifier(name, location) } + override fun getContributedClassifier(name: Name, location: LookupLocation) = getFirstMatch(memberScopes) { it.getContributedClassifier(name, location) } - override fun getContributedVariables(name: Name, location: LookupLocation) = getFromAllScopes(scopeChain) { it.getContributedVariables(name, location) } + override fun getContributedVariables(name: Name, location: LookupLocation) = getFromAllScopes(memberScopes) { it.getContributedVariables(name, location) } - override fun getContributedFunctions(name: Name, location: LookupLocation) = getFromAllScopes(scopeChain) { it.getContributedFunctions(name, location) } + override fun getContributedFunctions(name: Name, location: LookupLocation) = getFromAllScopes(memberScopes) { it.getContributedFunctions(name, location) } override fun toString(): String = kind.toString() @@ -54,7 +53,7 @@ public class LexicalChainedScope @JvmOverloads constructor( " with implicitReceiver: ", implicitReceiver?.value ?: "NONE", " {") p.pushIndent() - for (scope in scopeChain) { + for (scope in memberScopes) { scope.printScopeStructure(p) } @@ -65,4 +64,4 @@ public class LexicalChainedScope @JvmOverloads constructor( p.println("}") } -} \ No newline at end of file +} diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/receivers/Qualifier.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/receivers/Qualifier.kt index b79031c6e6b..6c9aa90772c 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/receivers/Qualifier.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/receivers/Qualifier.kt @@ -25,8 +25,8 @@ import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.descriptorUtil.classValueType import org.jetbrains.kotlin.resolve.scopes.ChainedMemberScope import org.jetbrains.kotlin.resolve.scopes.FilteringScope -import org.jetbrains.kotlin.resolve.scopes.ScopeUtils import org.jetbrains.kotlin.resolve.scopes.MemberScope +import org.jetbrains.kotlin.resolve.scopes.ScopeUtils import org.jetbrains.kotlin.utils.addIfNotNull import java.util.* @@ -112,7 +112,7 @@ class ClassQualifier( scopes.add(classifier.unsubstitutedInnerClassesScope) } - return ChainedMemberScope("Member scope for $name as class or object", *scopes.toTypedArray()) + return ChainedMemberScope("Member scope for $name as class or object", scopes) } override fun getNestedClassesAndPackageMembersScope(): MemberScope { @@ -128,7 +128,7 @@ class ClassQualifier( scopes.add(ScopeUtils.getStaticNestedClassesScope(classifier)) } - return ChainedMemberScope("Static scope for $name as class or object", *scopes.toTypedArray()) + return ChainedMemberScope("Static scope for $name as class or object", scopes) } override fun toString() = "Class{$classifier}" diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/runtime/AbstractJvmRuntimeDescriptorLoaderTest.kt b/compiler/tests/org/jetbrains/kotlin/jvm/runtime/AbstractJvmRuntimeDescriptorLoaderTest.kt index a0f4fc8422e..fdc25f22fea 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/runtime/AbstractJvmRuntimeDescriptorLoaderTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/jvm/runtime/AbstractJvmRuntimeDescriptorLoaderTest.kt @@ -194,7 +194,10 @@ public abstract class AbstractJvmRuntimeDescriptorLoaderTest : TestCaseWithTmpdi private val scope: MemberScope init { - scope = ChainedMemberScope("synthetic package view for test", ScopeWithClassifiers(classes), *packageScopes.toTypedArray()) + val list = ArrayList(packageScopes.size + 1) + list.add(ScopeWithClassifiers(classes)) + list.addAll(packageScopes) + scope = ChainedMemberScope("synthetic package view for test", list) } override val fqName: FqName diff --git a/compiler/tests/org/jetbrains/kotlin/types/TypeSubstitutorTest.java b/compiler/tests/org/jetbrains/kotlin/types/TypeSubstitutorTest.java index fd4cbe92edc..14415190ee6 100644 --- a/compiler/tests/org/jetbrains/kotlin/types/TypeSubstitutorTest.java +++ b/compiler/tests/org/jetbrains/kotlin/types/TypeSubstitutorTest.java @@ -54,6 +54,7 @@ import org.jetbrains.kotlin.tests.di.InjectionKt; import java.io.File; import java.io.IOException; +import java.util.Arrays; import java.util.Collections; import java.util.Map; @@ -104,10 +105,10 @@ public class TypeSubstitutorTest extends KotlinTestWithEnvironment { } }); return new LexicalChainedScope(typeParameters, module, false, null, LexicalScopeKind.SYNTHETIC, - new MemberScope[] { - contextClass.getDefaultType().getMemberScope(), - module.getBuiltIns().getBuiltInsPackageScope() - }); + Arrays.asList( + contextClass.getDefaultType().getMemberScope(), + module.getBuiltIns().getBuiltInsPackageScope() + )); } private void doTest(@Nullable String expectedTypeStr, String initialTypeStr, Pair... substitutionStrs) { diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializedDescriptorResolver.java b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializedDescriptorResolver.java index 59b4533f655..c47aa3da316 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializedDescriptorResolver.java +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/DeserializedDescriptorResolver.java @@ -108,7 +108,7 @@ public final class DeserializedDescriptorResolver { if (list.isEmpty()) { return MemberScope.Empty.INSTANCE; } - return new ChainedMemberScope("Member scope for union of package parts data", list.toArray(new MemberScope[list.size()])); + return new ChainedMemberScope("Member scope for union of package parts data", list); } @Nullable diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/LazyPackageViewDescriptorImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/LazyPackageViewDescriptorImpl.kt index 9a815e3a69e..9dfbccc043d 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/LazyPackageViewDescriptorImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/LazyPackageViewDescriptorImpl.kt @@ -23,8 +23,8 @@ import org.jetbrains.kotlin.descriptors.PackageViewDescriptor import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.resolve.scopes.ChainedMemberScope -import org.jetbrains.kotlin.resolve.scopes.MemberScope import org.jetbrains.kotlin.resolve.scopes.LazyScopeAdapter +import org.jetbrains.kotlin.resolve.scopes.MemberScope import org.jetbrains.kotlin.storage.StorageManager import org.jetbrains.kotlin.storage.getValue import org.jetbrains.kotlin.types.TypeSubstitutor @@ -46,7 +46,7 @@ public class LazyPackageViewDescriptorImpl( else { // Packages from SubpackagesScope are got via getContributedDescriptors(DescriptorKindFilter.PACKAGES, MemberScope.ALL_NAME_FILTER) val scopes = fragments.map { it.getMemberScope() } + SubpackagesScope(module, fqName) - ChainedMemberScope("package view scope for $fqName in ${module.getName()}", *scopes.toTypedArray()) + ChainedMemberScope("package view scope for $fqName in ${module.name}", scopes) } }) diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/ChainedMemberScope.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/ChainedMemberScope.kt index af1cabe228b..b305b1d4bca 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/ChainedMemberScope.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/ChainedMemberScope.kt @@ -27,21 +27,19 @@ import org.jetbrains.kotlin.utils.Printer public class ChainedMemberScope( internal val debugName: String, - vararg scopes: MemberScope + private val scopes: List ) : MemberScope { - private val scopeChain = scopes.clone() - override fun getContributedClassifier(name: Name, location: LookupLocation): ClassifierDescriptor? - = getFirstMatch(scopeChain) { it.getContributedClassifier(name, location) } + = getFirstMatch(scopes) { it.getContributedClassifier(name, location) } override fun getContributedVariables(name: Name, location: LookupLocation): Collection - = getFromAllScopes(scopeChain) { it.getContributedVariables(name, location) } + = getFromAllScopes(scopes) { it.getContributedVariables(name, location) } override fun getContributedFunctions(name: Name, location: LookupLocation): Collection - = getFromAllScopes(scopeChain) { it.getContributedFunctions(name, location) } + = getFromAllScopes(scopes) { it.getContributedFunctions(name, location) } override fun getContributedDescriptors(kindFilter: DescriptorKindFilter, nameFilter: (Name) -> Boolean) - = getFromAllScopes(scopeChain) { it.getContributedDescriptors(kindFilter, nameFilter) } + = getFromAllScopes(scopes) { it.getContributedDescriptors(kindFilter, nameFilter) } override fun toString() = debugName @@ -49,7 +47,7 @@ public class ChainedMemberScope( p.println(javaClass.getSimpleName(), ": ", debugName, " {") p.pushIndent() - for (scope in scopeChain) { + for (scope in scopes) { scope.printScopeStructure(p) } diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/TypeIntersectionScope.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/TypeIntersectionScope.kt index a42a0afa904..223755cb963 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/TypeIntersectionScope.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/TypeIntersectionScope.kt @@ -46,7 +46,7 @@ class TypeIntersectionScope private constructor(override val workerScope: Chaine companion object { @JvmStatic fun create(message: String, types: List): MemberScope { - val chainedScope = ChainedMemberScope(message, *types.map { it.memberScope }.toTypedArray()) + val chainedScope = ChainedMemberScope(message, types.map { it.memberScope }) if (types.size <= 1) return chainedScope return TypeIntersectionScope(chainedScope) diff --git a/core/descriptors/src/org/jetbrains/kotlin/util/scopeUtils.kt b/core/descriptors/src/org/jetbrains/kotlin/util/scopeUtils.kt index 8dabefd4282..d9ffb12ec10 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/util/scopeUtils.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/util/scopeUtils.kt @@ -53,7 +53,7 @@ public fun concatInOrder(c1: Collection?, c2: Collection?): Collection return result ?: emptySet() } -public inline fun getFromAllScopes(scopes: Array, callback: (Scope) -> Collection): Collection { +public inline fun getFromAllScopes(scopes: List, callback: (Scope) -> Collection): Collection { if (scopes.isEmpty()) return emptySet() var result: Collection? = null for (scope in scopes) { @@ -62,11 +62,11 @@ public inline fun getFromAllScopes(scopes: Array, callback return result ?: emptySet() } -public inline fun getFirstMatch(scopes: Array, callback: (Scope) -> T?): T? { +public inline fun getFirstMatch(scopes: List, callback: (Scope) -> T?): T? { // NOTE: This is performance-sensitive; please don't replace with map().firstOrNull() for (scope in scopes) { val result = callback(scope) if (result != null) return result } return null -} \ No newline at end of file +} diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/kdoc/KDocReference.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/kdoc/KDocReference.kt index c683907d821..a755d1b2524 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/kdoc/KDocReference.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/kdoc/KDocReference.kt @@ -148,7 +148,7 @@ private fun getClassInnerScope(outerScope: LexicalScope, descriptor: ClassDescri return LexicalChainedScope(headerScope, descriptor, false, null, LexicalScopeKind.SYNTHETIC, - *scopeChain.toTypedArray()) + scopeChain) } public fun getResolutionScope(resolutionFacade: ResolutionFacade, descriptor: DeclarationDescriptor): LexicalScope {