From a47257c9c50f57e0d95cfcffd95d9f860234b0e0 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Mon, 13 Aug 2012 21:58:51 +0400 Subject: [PATCH] Give receiver for chained scope in constructor --- .../jet/lang/resolve/lazy/LazyClassDescriptor.java | 3 ++- .../jet/lang/resolve/scopes/ChainedScope.java | 14 +++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassDescriptor.java index 54f566ac2d2..17b0f7e4865 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassDescriptor.java @@ -148,7 +148,8 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes scope.addLabeledDeclaration(this); scope.changeLockLevel(WritableScope.LockLevel.READING); - scopeForMemberDeclarationResolution = new ChainedScope(this, scope, getScopeForMemberLookup(), getScopeForClassHeaderResolution()); + scopeForMemberDeclarationResolution = new ChainedScope(this, getScopeForMemberLookup().getImplicitReceiver(), + scope, getScopeForMemberLookup(), getScopeForClassHeaderResolution()); } return scopeForMemberDeclarationResolution; } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/ChainedScope.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/ChainedScope.java index 0accb3f1418..df9a9973f70 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/ChainedScope.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/ChainedScope.java @@ -33,11 +33,17 @@ import java.util.Set; */ public class ChainedScope implements JetScope { private final DeclarationDescriptor containingDeclaration; + private final ReceiverDescriptor implicitReceiver; private final JetScope[] scopeChain; private Collection allDescriptors; public ChainedScope(DeclarationDescriptor containingDeclaration, JetScope... scopes) { + this(containingDeclaration, ReceiverDescriptor.NO_RECEIVER, scopes); + } + + public ChainedScope(DeclarationDescriptor containingDeclaration, ReceiverDescriptor implicitReceiver, JetScope... scopes) { this.containingDeclaration = containingDeclaration; + this.implicitReceiver = implicitReceiver; scopeChain = scopes.clone(); } @@ -118,13 +124,7 @@ public class ChainedScope implements JetScope { @NotNull @Override public ReceiverDescriptor getImplicitReceiver() { - for (JetScope scope : scopeChain) { - if (scope.getImplicitReceiver() != ReceiverDescriptor.NO_RECEIVER) { - return scope.getImplicitReceiver(); - } - } - - return ReceiverDescriptor.NO_RECEIVER; + return implicitReceiver; } @Override