From 0f5b23e254aae6e0c58a4346b2525c7c4ac5a5b5 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Wed, 22 Oct 2014 21:13:05 +0400 Subject: [PATCH] Converted ChainedScope to Kotlin --- .../resolve/scopes/receivers/Qualifier.kt | 2 +- .../jet/lang/resolve/scopes/ChainedScope.java | 135 ------------------ .../jet/lang/resolve/scopes/ChainedScope.kt | 102 +++++++++++++ .../jetbrains/jet/lang/types/TypeUtils.java | 2 +- 4 files changed, 104 insertions(+), 137 deletions(-) delete mode 100644 core/descriptors/src/org/jetbrains/jet/lang/resolve/scopes/ChainedScope.java create mode 100644 core/descriptors/src/org/jetbrains/jet/lang/resolve/scopes/ChainedScope.kt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/receivers/Qualifier.kt b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/receivers/Qualifier.kt index 409b37a2d3f..9bf3063aa4a 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/receivers/Qualifier.kt +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/receivers/Qualifier.kt @@ -67,7 +67,7 @@ class QualifierReceiver ( override val scope: JetScope get() { val scopes = listOf(classifier?.getClassObjectType()?.getMemberScope(), getNestedClassesAndPackageMembersScope()).filterNotNull().copyToArray() - return ChainedScope(descriptor, "Member scope for " + name + " as package or class or object", *scopes as Array) + return ChainedScope(descriptor, "Member scope for " + name + " as package or class or object", *scopes) } fun getClassObjectReceiver(): ReceiverValue = diff --git a/core/descriptors/src/org/jetbrains/jet/lang/resolve/scopes/ChainedScope.java b/core/descriptors/src/org/jetbrains/jet/lang/resolve/scopes/ChainedScope.java deleted file mode 100644 index e3578ba114b..00000000000 --- a/core/descriptors/src/org/jetbrains/jet/lang/resolve/scopes/ChainedScope.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright 2010-2013 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.jet.lang.resolve.scopes; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.jet.lang.descriptors.*; -import org.jetbrains.jet.lang.resolve.name.Name; -import org.jetbrains.jet.utils.Printer; - -import java.util.*; - -import static org.jetbrains.jet.lang.resolve.scopes.JetScopeSelectorUtil.*; - -public class ChainedScope implements JetScope { - private final DeclarationDescriptor containingDeclaration; - private final String debugName; - private final JetScope[] scopeChain; - private Collection allDescriptors; - private List implicitReceiverHierarchy; - - public ChainedScope(DeclarationDescriptor containingDeclaration, String debugName, JetScope... scopes) { - this.containingDeclaration = containingDeclaration; - scopeChain = scopes.clone(); - - this.debugName = debugName; - } - - @Override - public ClassifierDescriptor getClassifier(@NotNull Name name) { - return getFirstMatch(scopeChain, name, CLASSIFIER_DESCRIPTOR_SCOPE_SELECTOR); - } - - @Override - public PackageViewDescriptor getPackage(@NotNull Name name) { - return getFirstMatch(scopeChain, name, PACKAGE_SCOPE_SELECTOR); - } - - @NotNull - @Override - public Set getProperties(@NotNull Name name) { - return getFromAllScopes(scopeChain, name, NAMED_PROPERTIES_SCOPE_SELECTOR); - } - - @Override - public VariableDescriptor getLocalVariable(@NotNull Name name) { - return getFirstMatch(scopeChain, name, VARIABLE_DESCRIPTOR_SCOPE_SELECTOR); - } - - @NotNull - @Override - public Set getFunctions(@NotNull Name name) { - return getFromAllScopes(scopeChain, name, NAMED_FUNCTION_SCOPE_SELECTOR); - } - - @NotNull - @Override - public List getImplicitReceiversHierarchy() { - if (implicitReceiverHierarchy == null) { - ArrayList result = new ArrayList(); - for (JetScope jetScope : scopeChain) { - result.addAll(jetScope.getImplicitReceiversHierarchy()); - } - result.trimToSize(); - implicitReceiverHierarchy = result; - } - return implicitReceiverHierarchy; - } - - @NotNull - @Override - public DeclarationDescriptor getContainingDeclaration() { - return containingDeclaration; - } - - @NotNull - @Override - public Collection getDeclarationsByLabel(@NotNull Name labelName) { - ArrayList result = new ArrayList(); - for (JetScope jetScope : scopeChain) { - result.addAll(jetScope.getDeclarationsByLabel(labelName)); - } - result.trimToSize(); - return result; - } - - @NotNull - @Override - public Collection getAllDescriptors() { - if (allDescriptors == null) { - allDescriptors = new HashSet(); - for (JetScope scope : scopeChain) { - allDescriptors.addAll(scope.getAllDescriptors()); - } - } - return allDescriptors; - } - - @NotNull - @Override - public Collection getOwnDeclaredDescriptors() { - throw new UnsupportedOperationException(); - } - - @Override - public String toString() { - return debugName; - } - - @Override - public void printScopeStructure(@NotNull Printer p) { - p.println(getClass().getSimpleName(), ": ", debugName, " {"); - p.pushIndent(); - - for (JetScope scope : scopeChain) { - scope.printScopeStructure(p); - } - - p.popIndent(); - p.println("}"); - } -} diff --git a/core/descriptors/src/org/jetbrains/jet/lang/resolve/scopes/ChainedScope.kt b/core/descriptors/src/org/jetbrains/jet/lang/resolve/scopes/ChainedScope.kt new file mode 100644 index 00000000000..aedbdb7c2f0 --- /dev/null +++ b/core/descriptors/src/org/jetbrains/jet/lang/resolve/scopes/ChainedScope.kt @@ -0,0 +1,102 @@ +/* + * Copyright 2010-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.lang.resolve.scopes + +import org.jetbrains.jet.lang.descriptors.* +import org.jetbrains.jet.lang.resolve.name.Name +import org.jetbrains.jet.utils.Printer + +import java.util.* + +import org.jetbrains.jet.lang.resolve.scopes.JetScopeSelectorUtil.* +import kotlin.Collection +import kotlin.List +import kotlin.Set + +public class ChainedScope(private val containingDeclaration: DeclarationDescriptor?/* it's nullable as a hack for TypeUtils.intersect() */, + private val debugName: String, + vararg scopes: JetScope) : JetScope { + private val scopeChain = scopes.clone() + private var allDescriptors: MutableCollection? = null + private var implicitReceiverHierarchy: List? = null + + override fun getClassifier(name: Name): ClassifierDescriptor? + = getFirstMatch(scopeChain, name, CLASSIFIER_DESCRIPTOR_SCOPE_SELECTOR) + + override fun getPackage(name: Name): PackageViewDescriptor? + = getFirstMatch(scopeChain, name, PACKAGE_SCOPE_SELECTOR) + + override fun getProperties(name: Name): Set + = getFromAllScopes(scopeChain, name, NAMED_PROPERTIES_SCOPE_SELECTOR) + + override fun getLocalVariable(name: Name): VariableDescriptor? + = getFirstMatch(scopeChain, name, VARIABLE_DESCRIPTOR_SCOPE_SELECTOR) + + override fun getFunctions(name: Name): Set + = getFromAllScopes(scopeChain, name, NAMED_FUNCTION_SCOPE_SELECTOR) + + override fun getImplicitReceiversHierarchy(): List { + if (implicitReceiverHierarchy == null) { + val result = ArrayList() + for (jetScope in scopeChain) { + result.addAll(jetScope.getImplicitReceiversHierarchy()) + } + result.trimToSize() + implicitReceiverHierarchy = result + } + return implicitReceiverHierarchy!! + } + + override fun getContainingDeclaration(): DeclarationDescriptor = containingDeclaration!! + + override fun getDeclarationsByLabel(labelName: Name): Collection { + val result = ArrayList() + for (jetScope in scopeChain) { + result.addAll(jetScope.getDeclarationsByLabel(labelName)) + } + result.trimToSize() + return result + } + + override fun getAllDescriptors(): Collection { + if (allDescriptors == null) { + allDescriptors = HashSet() + for (scope in scopeChain) { + allDescriptors!!.addAll(scope.getAllDescriptors()) + } + } + return allDescriptors!! + } + + override fun getOwnDeclaredDescriptors(): Collection { + throw UnsupportedOperationException() + } + + override fun toString() = debugName + + override fun printScopeStructure(p: Printer) { + p.println(javaClass.getSimpleName(), ": ", debugName, " {") + p.pushIndent() + + for (scope in scopeChain) { + scope.printScopeStructure(p) + } + + p.popIndent() + p.println("}") + } +} diff --git a/core/descriptors/src/org/jetbrains/jet/lang/types/TypeUtils.java b/core/descriptors/src/org/jetbrains/jet/lang/types/TypeUtils.java index 96bfefcc23e..73d57b70f0d 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/types/TypeUtils.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/types/TypeUtils.java @@ -207,7 +207,7 @@ public class TypeUtils { } resultingTypes.add(type); } - + if (resultingTypes.size() == 1) { return makeNullableAsSpecified(resultingTypes.get(0), allNullable); }