diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliLightClassGenerationSupport.java b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliLightClassGenerationSupport.java index 2fbd1f2df14..a1d00afb42d 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliLightClassGenerationSupport.java +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/CliLightClassGenerationSupport.java @@ -219,7 +219,8 @@ public class CliLightClassGenerationSupport extends LightClassGenerationSupport public static class NoScopeRecordCliBindingTrace extends CliBindingTrace { @Override public void record(WritableSlice slice, K key, V value) { - if (slice == BindingContext.RESOLUTION_SCOPE || slice == BindingContext.TYPE_RESOLUTION_SCOPE) { + if (slice == BindingContext.RESOLUTION_SCOPE || slice == BindingContext.TYPE_RESOLUTION_SCOPE + || slice == BindingContext.LEXICAL_SCOPE) { // In the compiler there's no need to keep scopes return; } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/BindingContext.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/BindingContext.java index 7ecba0bdd2b..21e5d36a22a 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/BindingContext.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/BindingContext.java @@ -35,6 +35,7 @@ import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo; import org.jetbrains.kotlin.resolve.constants.CompileTimeConstant; import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics; import org.jetbrains.kotlin.resolve.scopes.JetScope; +import org.jetbrains.kotlin.resolve.scopes.LexicalScope; import org.jetbrains.kotlin.resolve.scopes.receivers.Qualifier; import org.jetbrains.kotlin.types.DeferredType; import org.jetbrains.kotlin.types.JetType; @@ -140,7 +141,8 @@ public interface BindingContext { * A scope where type of expression has been resolved */ WritableSlice TYPE_RESOLUTION_SCOPE = Slices.createSimpleSlice(); - WritableSlice RESOLUTION_SCOPE = Slices.createSimpleSlice(); + @Deprecated WritableSlice RESOLUTION_SCOPE = Slices.createSimpleSlice(); + WritableSlice LEXICAL_SCOPE = Slices.createSimpleSlice(); WritableSlice SCRIPT_SCOPE = Slices.createSimpleSlice(); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/BindingContextUtils.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/BindingContextUtils.kt index 33d2178daf2..94c30a6d107 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/BindingContextUtils.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/BindingContextUtils.kt @@ -29,7 +29,8 @@ import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.calls.context.ResolutionContext import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo -import org.jetbrains.kotlin.resolve.scopes.WritableScope +import org.jetbrains.kotlin.resolve.scopes.LexicalWritableScope +import org.jetbrains.kotlin.resolve.scopes.utils.asJetScope import org.jetbrains.kotlin.types.expressions.typeInfoFactory.noTypeInfo public fun JetReturnExpression.getTargetFunctionDescriptor(context: BindingContext): FunctionDescriptor? { @@ -56,8 +57,9 @@ public fun JetExpression.isUsedAsStatement(context: BindingContext): Boolean = ! public fun > ResolutionContext.recordScopeAndDataFlowInfo(expression: JetExpression?) { if (expression == null) return - val scopeToRecord = if (scope is WritableScope) scope.takeSnapshot() else scope - trace.record(BindingContext.RESOLUTION_SCOPE, expression, scopeToRecord) + val scopeToRecord = if (scope is LexicalWritableScope) scope.takeSnapshot() else scope + trace.record(BindingContext.RESOLUTION_SCOPE, expression, scopeToRecord.asJetScope()) + trace.record(BindingContext.LEXICAL_SCOPE, expression, scopeToRecord) val typeInfo = trace.get(BindingContext.EXPRESSION_TYPE_INFO, expression) if (typeInfo != null) {