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.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();
}
}
@@ -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();
}