diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/LazyTopDownAnalyzer.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/LazyTopDownAnalyzer.java index e688df0ebfd..ee660ac8a11 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/LazyTopDownAnalyzer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/LazyTopDownAnalyzer.java @@ -23,9 +23,9 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.psi.*; -import org.jetbrains.jet.lang.resolve.lazy.ForceResolveUtil; import org.jetbrains.jet.lang.resolve.lazy.LazyImportScope; import org.jetbrains.jet.lang.resolve.lazy.ResolveSession; +import org.jetbrains.jet.lang.resolve.lazy.descriptors.LazyClassDescriptor; import org.jetbrains.jet.lang.resolve.name.FqName; import javax.inject.Inject; @@ -213,7 +213,7 @@ public class LazyTopDownAnalyzer { createPropertyDescriptors(c, resolveSession, topLevelFqNames, properties); - forceResolveAllClasses(c); + resolveAllHeadersInClasses(c); declarationResolver.checkRedeclarationsInPackages(resolveSession, topLevelFqNames); declarationResolver.checkRedeclarationsInInnerClassNames(c); @@ -240,9 +240,9 @@ public class LazyTopDownAnalyzer { } } - private static void forceResolveAllClasses(TopDownAnalysisContext c) { + private static void resolveAllHeadersInClasses(TopDownAnalysisContext c) { for (ClassDescriptorWithResolutionScopes classDescriptor : c.getAllClasses()) { - ForceResolveUtil.forceResolveAllContents(classDescriptor); + ((LazyClassDescriptor) classDescriptor).resolveMemberHeaders(); } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassDescriptor.java index df5bfbb573c..bdadb5e95d2 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassDescriptor.java @@ -405,17 +405,28 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes } private void doForceResolveAllContents() { - ForceResolveUtil.forceResolveAllContents(getAnnotations()); - + resolveMemberHeaders(); ClassDescriptor classObjectDescriptor = getClassObjectDescriptor(); if (classObjectDescriptor != null) { ForceResolveUtil.forceResolveAllContents(classObjectDescriptor); } + ForceResolveUtil.forceResolveAllContents(getConstructors()); ForceResolveUtil.forceResolveAllContents(getDescriptorsForExtraClassObjects()); + ForceResolveUtil.forceResolveAllContents(getScopeForMemberLookup()); + ForceResolveUtil.forceResolveAllContents(getTypeConstructor()); + } + + // Note: headers of member classes' members are not resolved + public void resolveMemberHeaders() { + ForceResolveUtil.forceResolveAllContents(getAnnotations()); + + getClassObjectDescriptor(); + + getDescriptorsForExtraClassObjects(); getClassObjectType(); - ForceResolveUtil.forceResolveAllContents(getConstructors()); + getConstructors(); getContainingDeclaration(); getThisAsReceiverParameter(); getKind(); @@ -424,10 +435,14 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes getOriginal(); getScopeForClassHeaderResolution(); getScopeForMemberDeclarationResolution(); - ForceResolveUtil.forceResolveAllContents(getScopeForMemberLookup()); + getScopeForMemberLookup().getAllDescriptors(); getScopeForInitializerResolution(); getUnsubstitutedInnerClassesScope(); - ForceResolveUtil.forceResolveAllContents(getTypeConstructor()); + getTypeConstructor().getSupertypes(); + for (TypeParameterDescriptor typeParameterDescriptor : getTypeConstructor().getParameters()) { + typeParameterDescriptor.getUpperBounds(); + typeParameterDescriptor.getLowerBounds(); + } getUnsubstitutedPrimaryConstructor(); getVisibility(); }