Give receiver for chained scope in constructor

This commit is contained in:
Nikolay Krasko
2012-08-13 21:58:51 +04:00
parent 5440738ce4
commit a47257c9c5
2 changed files with 9 additions and 8 deletions
@@ -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;
}
@@ -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<DeclarationDescriptor> 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