Allow to only resolve declaration headers in classes, without forcing everything to be resolved

This commit is contained in:
Andrey Breslav
2014-04-15 21:32:25 +04:00
parent b2ea2e1a15
commit 1d3cc306c4
2 changed files with 24 additions and 9 deletions
@@ -23,9 +23,9 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.psi.*; 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.LazyImportScope;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession; 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 org.jetbrains.jet.lang.resolve.name.FqName;
import javax.inject.Inject; import javax.inject.Inject;
@@ -213,7 +213,7 @@ public class LazyTopDownAnalyzer {
createPropertyDescriptors(c, resolveSession, topLevelFqNames, properties); createPropertyDescriptors(c, resolveSession, topLevelFqNames, properties);
forceResolveAllClasses(c); resolveAllHeadersInClasses(c);
declarationResolver.checkRedeclarationsInPackages(resolveSession, topLevelFqNames); declarationResolver.checkRedeclarationsInPackages(resolveSession, topLevelFqNames);
declarationResolver.checkRedeclarationsInInnerClassNames(c); 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()) { for (ClassDescriptorWithResolutionScopes classDescriptor : c.getAllClasses()) {
ForceResolveUtil.forceResolveAllContents(classDescriptor); ((LazyClassDescriptor) classDescriptor).resolveMemberHeaders();
} }
} }
@@ -405,17 +405,28 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
} }
private void doForceResolveAllContents() { private void doForceResolveAllContents() {
ForceResolveUtil.forceResolveAllContents(getAnnotations()); resolveMemberHeaders();
ClassDescriptor classObjectDescriptor = getClassObjectDescriptor(); ClassDescriptor classObjectDescriptor = getClassObjectDescriptor();
if (classObjectDescriptor != null) { if (classObjectDescriptor != null) {
ForceResolveUtil.forceResolveAllContents(classObjectDescriptor); ForceResolveUtil.forceResolveAllContents(classObjectDescriptor);
} }
ForceResolveUtil.forceResolveAllContents(getConstructors());
ForceResolveUtil.forceResolveAllContents(getDescriptorsForExtraClassObjects()); 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(); getClassObjectType();
ForceResolveUtil.forceResolveAllContents(getConstructors()); getConstructors();
getContainingDeclaration(); getContainingDeclaration();
getThisAsReceiverParameter(); getThisAsReceiverParameter();
getKind(); getKind();
@@ -424,10 +435,14 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
getOriginal(); getOriginal();
getScopeForClassHeaderResolution(); getScopeForClassHeaderResolution();
getScopeForMemberDeclarationResolution(); getScopeForMemberDeclarationResolution();
ForceResolveUtil.forceResolveAllContents(getScopeForMemberLookup()); getScopeForMemberLookup().getAllDescriptors();
getScopeForInitializerResolution(); getScopeForInitializerResolution();
getUnsubstitutedInnerClassesScope(); getUnsubstitutedInnerClassesScope();
ForceResolveUtil.forceResolveAllContents(getTypeConstructor()); getTypeConstructor().getSupertypes();
for (TypeParameterDescriptor typeParameterDescriptor : getTypeConstructor().getParameters()) {
typeParameterDescriptor.getUpperBounds();
typeParameterDescriptor.getLowerBounds();
}
getUnsubstitutedPrimaryConstructor(); getUnsubstitutedPrimaryConstructor();
getVisibility(); getVisibility();
} }