Give receiver for chained scope in constructor
This commit is contained in:
@@ -148,7 +148,8 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
|
|||||||
scope.addLabeledDeclaration(this);
|
scope.addLabeledDeclaration(this);
|
||||||
scope.changeLockLevel(WritableScope.LockLevel.READING);
|
scope.changeLockLevel(WritableScope.LockLevel.READING);
|
||||||
|
|
||||||
scopeForMemberDeclarationResolution = new ChainedScope(this, scope, getScopeForMemberLookup(), getScopeForClassHeaderResolution());
|
scopeForMemberDeclarationResolution = new ChainedScope(this, getScopeForMemberLookup().getImplicitReceiver(),
|
||||||
|
scope, getScopeForMemberLookup(), getScopeForClassHeaderResolution());
|
||||||
}
|
}
|
||||||
return scopeForMemberDeclarationResolution;
|
return scopeForMemberDeclarationResolution;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,11 +33,17 @@ import java.util.Set;
|
|||||||
*/
|
*/
|
||||||
public class ChainedScope implements JetScope {
|
public class ChainedScope implements JetScope {
|
||||||
private final DeclarationDescriptor containingDeclaration;
|
private final DeclarationDescriptor containingDeclaration;
|
||||||
|
private final ReceiverDescriptor implicitReceiver;
|
||||||
private final JetScope[] scopeChain;
|
private final JetScope[] scopeChain;
|
||||||
private Collection<DeclarationDescriptor> allDescriptors;
|
private Collection<DeclarationDescriptor> allDescriptors;
|
||||||
|
|
||||||
public ChainedScope(DeclarationDescriptor containingDeclaration, JetScope... scopes) {
|
public ChainedScope(DeclarationDescriptor containingDeclaration, JetScope... scopes) {
|
||||||
|
this(containingDeclaration, ReceiverDescriptor.NO_RECEIVER, scopes);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ChainedScope(DeclarationDescriptor containingDeclaration, ReceiverDescriptor implicitReceiver, JetScope... scopes) {
|
||||||
this.containingDeclaration = containingDeclaration;
|
this.containingDeclaration = containingDeclaration;
|
||||||
|
this.implicitReceiver = implicitReceiver;
|
||||||
scopeChain = scopes.clone();
|
scopeChain = scopes.clone();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -118,13 +124,7 @@ public class ChainedScope implements JetScope {
|
|||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public ReceiverDescriptor getImplicitReceiver() {
|
public ReceiverDescriptor getImplicitReceiver() {
|
||||||
for (JetScope scope : scopeChain) {
|
return implicitReceiver;
|
||||||
if (scope.getImplicitReceiver() != ReceiverDescriptor.NO_RECEIVER) {
|
|
||||||
return scope.getImplicitReceiver();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ReceiverDescriptor.NO_RECEIVER;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user