Qualified "this" supported by lazy resolve:
- Appropriate scope methods implemented - Class declarations recorded in the binding trace
This commit is contained in:
+2
-1
@@ -187,7 +187,8 @@ public abstract class AbstractLazyMemberScope<D extends DeclarationDescriptor, D
|
|||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public Collection<DeclarationDescriptor> getDeclarationsByLabel(@NotNull LabelName labelName) {
|
public Collection<DeclarationDescriptor> getDeclarationsByLabel(@NotNull LabelName labelName) {
|
||||||
throw new UnsupportedOperationException(); // TODO
|
// A member scope has no labels
|
||||||
|
return Collections.emptySet();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import org.jetbrains.jet.lang.descriptors.*;
|
|||||||
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
||||||
import org.jetbrains.jet.lang.psi.*;
|
import org.jetbrains.jet.lang.psi.*;
|
||||||
import org.jetbrains.jet.lang.resolve.AnnotationResolver;
|
import org.jetbrains.jet.lang.resolve.AnnotationResolver;
|
||||||
|
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||||
import org.jetbrains.jet.lang.resolve.DescriptorResolver;
|
import org.jetbrains.jet.lang.resolve.DescriptorResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.lazy.data.FilteringClassLikeInfo;
|
import org.jetbrains.jet.lang.resolve.lazy.data.FilteringClassLikeInfo;
|
||||||
@@ -85,6 +86,8 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
|
|||||||
@NotNull JetClassLikeInfo classLikeInfo
|
@NotNull JetClassLikeInfo classLikeInfo
|
||||||
) {
|
) {
|
||||||
this.resolveSession = resolveSession;
|
this.resolveSession = resolveSession;
|
||||||
|
this.resolveSession.getTrace().record(BindingContext.CLASS, classLikeInfo.getCorrespondingClassOrObject(), this);
|
||||||
|
|
||||||
this.originalClassInfo = classLikeInfo;
|
this.originalClassInfo = classLikeInfo;
|
||||||
JetClassLikeInfo classLikeInfoForMembers =
|
JetClassLikeInfo classLikeInfoForMembers =
|
||||||
classLikeInfo.getClassKind() != ClassKind.ENUM_CLASS ? classLikeInfo : noEnumEntries(classLikeInfo);
|
classLikeInfo.getClassKind() != ClassKind.ENUM_CLASS ? classLikeInfo : noEnumEntries(classLikeInfo);
|
||||||
@@ -138,6 +141,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
|
|||||||
if (scopeForMemberDeclarationResolution == null) {
|
if (scopeForMemberDeclarationResolution == null) {
|
||||||
WritableScopeImpl scope = new WritableScopeImpl(
|
WritableScopeImpl scope = new WritableScopeImpl(
|
||||||
getScopeForMemberLookup(), this, RedeclarationHandler.DO_NOTHING, "Member Declaration Resolution");
|
getScopeForMemberLookup(), this, RedeclarationHandler.DO_NOTHING, "Member Declaration Resolution");
|
||||||
|
scope.addLabeledDeclaration(this);
|
||||||
scope.importScope(getScopeForClassHeaderResolution());
|
scope.importScope(getScopeForClassHeaderResolution());
|
||||||
|
|
||||||
scope.changeLockLevel(WritableScope.LockLevel.READING);
|
scope.changeLockLevel(WritableScope.LockLevel.READING);
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
namespace <root>
|
||||||
|
|
||||||
|
// <namespace name="closures">
|
||||||
|
namespace closures
|
||||||
|
|
||||||
|
internal final class closures.A : jet.Any {
|
||||||
|
public final /*constructor*/ fun <init>(/*0*/ a: jet.Int): closures.A
|
||||||
|
internal final val a: jet.Int
|
||||||
|
internal final class closures.A.B : jet.Any {
|
||||||
|
public final /*constructor*/ fun <init>(): closures.A.B
|
||||||
|
internal final fun jet.Char.xx(): jet.Any
|
||||||
|
internal final val jet.Int.xx: jet.Int
|
||||||
|
internal final val x: closures.A.B
|
||||||
|
internal final val y: closures.A
|
||||||
|
internal final val z: closures.A.B
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// </namespace name="closures">
|
||||||
|
internal final class A : jet.Any {
|
||||||
|
public final /*constructor*/ fun <init>(): A
|
||||||
|
internal final fun foo(): jet.Tuple0
|
||||||
|
internal final val x: jet.Tuple0
|
||||||
|
internal final val y: jet.Tuple0
|
||||||
|
internal final val z: jet.Tuple0
|
||||||
|
}
|
||||||
|
internal final class Dup : jet.Any {
|
||||||
|
public final /*constructor*/ fun <init>(): Dup
|
||||||
|
internal final fun Dup(): jet.Tuple0
|
||||||
|
}
|
||||||
|
internal final fun foo1(): jet.Tuple0
|
||||||
Reference in New Issue
Block a user