From 4d909d901207745a59d92d7c73e3ea81923a9393 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 29 Oct 2015 18:26:29 +0300 Subject: [PATCH] Move LexicalScope to frontend --- .../kotlin/resolve/ScriptBodyResolver.java | 13 +++++------ .../lazy/descriptors/LazyScriptDescriptor.kt | 23 +++++++++---------- .../jetbrains/kotlin/resolve/scopes/Scopes.kt | 2 +- .../kotlin/descriptors/ScriptDescriptor.java | 4 ---- .../resolve/scopes/ExplicitImportsScope.kt | 0 5 files changed, 18 insertions(+), 24 deletions(-) rename {core/descriptors => compiler/frontend}/src/org/jetbrains/kotlin/resolve/scopes/Scopes.kt (99%) rename {core/descriptors => idea/ide-common}/src/org/jetbrains/kotlin/resolve/scopes/ExplicitImportsScope.kt (100%) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/ScriptBodyResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/ScriptBodyResolver.java index 1bb4145582c..5f0c5d079f1 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/ScriptBodyResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/ScriptBodyResolver.java @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.descriptors.ScriptDescriptor; import org.jetbrains.kotlin.psi.KtScript; import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo; import org.jetbrains.kotlin.resolve.lazy.ForceResolveUtil; +import org.jetbrains.kotlin.resolve.scopes.LexicalScope; import org.jetbrains.kotlin.types.ErrorUtils; import org.jetbrains.kotlin.types.KotlinType; import org.jetbrains.kotlin.types.expressions.CoercionStrategy; @@ -32,7 +33,6 @@ import java.util.Map; import static org.jetbrains.kotlin.types.TypeUtils.NO_EXPECTED_TYPE; - // SCRIPT: resolve symbols in scripts public class ScriptBodyResolver { @@ -54,18 +54,17 @@ public class ScriptBodyResolver { @NotNull public KotlinType resolveScriptReturnType( @NotNull KtScript script, - @NotNull ScriptDescriptor scriptDescriptor, + @NotNull LexicalScope scopeForBodyResolution, @NotNull BindingTrace trace ) { // Resolve all contents of the script ExpressionTypingContext context = ExpressionTypingContext.newContext( - trace, - scriptDescriptor.getScopeForBodyResolution(), - DataFlowInfo.EMPTY, - NO_EXPECTED_TYPE + trace, scopeForBodyResolution, DataFlowInfo.EMPTY, NO_EXPECTED_TYPE ); PreliminaryDeclarationVisitor.Companion.createForDeclaration(script, trace); - KotlinType returnType = expressionTypingServices.getBlockReturnedType(script.getBlockExpression(), CoercionStrategy.NO_COERCION, context).getType(); + KotlinType returnType = expressionTypingServices.getBlockReturnedType( + script.getBlockExpression(), CoercionStrategy.NO_COERCION, context + ).getType(); if (returnType == null) { returnType = ErrorUtils.createErrorType("getBlockReturnedType returned null"); } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyScriptDescriptor.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyScriptDescriptor.kt index 7f1fa6c5d57..a889b4e8709 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyScriptDescriptor.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyScriptDescriptor.kt @@ -32,7 +32,6 @@ import org.jetbrains.kotlin.resolve.ScriptBodyResolver import org.jetbrains.kotlin.resolve.lazy.ForceResolveUtil import org.jetbrains.kotlin.resolve.lazy.LazyEntity import org.jetbrains.kotlin.resolve.lazy.ResolveSession -import org.jetbrains.kotlin.resolve.scopes.LexicalScope import org.jetbrains.kotlin.resolve.scopes.LexicalScopeImpl import org.jetbrains.kotlin.resolve.scopes.receivers.ScriptReceiver import org.jetbrains.kotlin.resolve.source.toSourceElement @@ -86,22 +85,22 @@ public class LazyScriptDescriptor( ) }, DeferredType.create(resolveSession.storageManager, resolveSession.trace) { - scriptBodyResolver.resolveScriptReturnType(jetScript, this, resolveSession.trace) + val scope = LexicalScopeImpl( + resolveSession.fileScopeProvider.getFileResolutionScope(jetScript.getContainingJetFile()), + this, false, implicitReceiver, "Scope for body resolution for $this" + ) { + for (valueParameterDescriptor in result.valueParameters) { + addVariableDescriptor(valueParameterDescriptor) + } + } + + scriptBodyResolver.resolveScriptReturnType(jetScript, scope, resolveSession.trace) } ) result } - override fun getScriptCodeDescriptor() = scriptCodeDescriptor() - - override fun getScopeForBodyResolution(): LexicalScope { - return LexicalScopeImpl(resolveSession.fileScopeProvider.getFileResolutionScope(jetScript.getContainingJetFile()), - this, false, implicitReceiver, "Scope for body resolution for " + this) { - for (valueParameterDescriptor in getScriptCodeDescriptor().valueParameters) { - addVariableDescriptor(valueParameterDescriptor) - } - } - } + override fun getScriptCodeDescriptor(): ScriptCodeDescriptor = scriptCodeDescriptor() override fun forceResolveAllContents() { ForceResolveUtil.forceResolveAllContents(getClassDescriptor()) diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/Scopes.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/Scopes.kt similarity index 99% rename from core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/Scopes.kt rename to compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/Scopes.kt index 7fe0bdf8dc5..c0505aa4586 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/Scopes.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/scopes/Scopes.kt @@ -22,7 +22,7 @@ import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.utils.Printer -// see ScopeUtils.kt in the frontend module +// see utils/ScopeUtils.kt interface LexicalScope { val parent: LexicalScope? diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/ScriptDescriptor.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/ScriptDescriptor.java index 85a5d6f4260..7a9c37ebc79 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/ScriptDescriptor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/ScriptDescriptor.java @@ -19,7 +19,6 @@ package org.jetbrains.kotlin.descriptors; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.descriptors.impl.ScriptCodeDescriptor; import org.jetbrains.kotlin.name.Name; -import org.jetbrains.kotlin.resolve.scopes.LexicalScope; public interface ScriptDescriptor extends DeclarationDescriptorNonRoot { String LAST_EXPRESSION_VALUE_FIELD_NAME = "rv"; @@ -36,9 +35,6 @@ public interface ScriptDescriptor extends DeclarationDescriptorNonRoot { @NotNull ClassDescriptor getClassDescriptor(); - @NotNull - LexicalScope getScopeForBodyResolution(); - @NotNull PropertyDescriptor getScriptResultProperty(); } diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/ExplicitImportsScope.kt b/idea/ide-common/src/org/jetbrains/kotlin/resolve/scopes/ExplicitImportsScope.kt similarity index 100% rename from core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/ExplicitImportsScope.kt rename to idea/ide-common/src/org/jetbrains/kotlin/resolve/scopes/ExplicitImportsScope.kt