LAZY flag is moved to TopDownAnalysisParameters

This commit is contained in:
Andrey Breslav
2014-04-02 14:25:53 +04:00
parent bb87a6bb59
commit b02195e9ae
8 changed files with 39 additions and 18 deletions
@@ -121,7 +121,7 @@ public class BodyResolver {
resolvePropertyDeclarationBodies(c); resolvePropertyDeclarationBodies(c);
if (!TopDownAnalyzer.LAZY) { if (!c.getTopDownAnalysisParameters().isLazyTopDownAnalysis()) {
resolveClassAnnotations(c); resolveClassAnnotations(c);
} }
resolveAnonymousInitializers(c); resolveAnonymousInitializers(c);
@@ -590,7 +590,7 @@ public class BodyResolver {
JetScope declaringScope = c.getDeclaringScopes().apply(declaration); JetScope declaringScope = c.getDeclaringScopes().apply(declaration);
assert declaringScope != null; assert declaringScope != null;
if (!TopDownAnalyzer.LAZY || c.getTopDownAnalysisParameters().isDeclaredLocally()) { if (!c.getTopDownAnalysisParameters().isLazyTopDownAnalysis() || c.getTopDownAnalysisParameters().isDeclaredLocally()) {
resolveAnnotationArguments(declaringScope, declaration); resolveAnnotationArguments(declaringScope, declaration);
} }
resolveFunctionBody(c, trace, declaration, descriptor, declaringScope); resolveFunctionBody(c, trace, declaration, descriptor, declaringScope);
@@ -73,7 +73,7 @@ public class DeclarationsChecker {
if (classOrObject instanceof JetClass) { if (classOrObject instanceof JetClass) {
JetClass jetClass = (JetClass) classOrObject; JetClass jetClass = (JetClass) classOrObject;
checkClass(jetClass, classDescriptor); checkClass(bodiesResolveContext, jetClass, classDescriptor);
descriptorResolver.checkNamesInConstraints( descriptorResolver.checkNamesInConstraints(
jetClass, classDescriptor, classDescriptor.getScopeForClassHeaderResolution(), trace); jetClass, classDescriptor, classDescriptor.getScopeForClassHeaderResolution(), trace);
} }
@@ -255,9 +255,9 @@ public class DeclarationsChecker {
reportErrorIfHasIllegalModifier(declaration); reportErrorIfHasIllegalModifier(declaration);
} }
private void checkClass(JetClass aClass, ClassDescriptorWithResolutionScopes classDescriptor) { private void checkClass(BodiesResolveContext c, JetClass aClass, ClassDescriptorWithResolutionScopes classDescriptor) {
checkOpenMembers(classDescriptor); checkOpenMembers(classDescriptor);
if (TopDownAnalyzer.LAZY) { if (c.getTopDownAnalysisParameters().isLazyTopDownAnalysis()) {
checkTypeParameters(aClass); checkTypeParameters(aClass);
} }
if (aClass.isTrait()) { if (aClass.isTrait()) {
@@ -103,6 +103,7 @@ public class DescriptorResolver {
} }
public void resolveMutableClassDescriptor( public void resolveMutableClassDescriptor(
@NotNull TopDownAnalysisParameters topDownAnalysisParameters,
@NotNull JetClass classElement, @NotNull JetClass classElement,
@NotNull MutableClassDescriptor descriptor, @NotNull MutableClassDescriptor descriptor,
BindingTrace trace BindingTrace trace
@@ -111,7 +112,7 @@ public class DescriptorResolver {
List<TypeParameterDescriptor> typeParameters = Lists.newArrayList(); List<TypeParameterDescriptor> typeParameters = Lists.newArrayList();
int index = 0; int index = 0;
for (JetTypeParameter typeParameter : classElement.getTypeParameters()) { for (JetTypeParameter typeParameter : classElement.getTypeParameters()) {
if (!TopDownAnalyzer.LAZY) { if (!topDownAnalysisParameters.isLazyTopDownAnalysis()) {
// TODO: Support // TODO: Support
AnnotationResolver.reportUnsupportedAnnotationForTypeParameter(typeParameter, trace); AnnotationResolver.reportUnsupportedAnnotationForTypeParameter(typeParameter, trace);
} }
@@ -59,7 +59,7 @@ public class ScriptBodyResolver {
JetScript declaration = e.getKey(); JetScript declaration = e.getKey();
ScriptDescriptor descriptor = e.getValue(); ScriptDescriptor descriptor = e.getValue();
if (TopDownAnalyzer.LAZY && !c.getTopDownAnalysisParameters().isDeclaredLocally()) { if (c.getTopDownAnalysisParameters().isLazyTopDownAnalysis() && !c.getTopDownAnalysisParameters().isDeclaredLocally()) {
ForceResolveUtil.forceResolveAllContents(descriptor); ForceResolveUtil.forceResolveAllContents(descriptor);
continue; continue;
} }
@@ -27,6 +27,12 @@ import org.jetbrains.jet.storage.StorageManager;
* Various junk that cannot be placed into context (yet). * Various junk that cannot be placed into context (yet).
*/ */
public class TopDownAnalysisParameters implements GlobalContext { public class TopDownAnalysisParameters implements GlobalContext {
private static boolean LAZY;
static {
LAZY = "true".equals(System.getProperty("lazy.tda"));
}
@NotNull @NotNull
public static TopDownAnalysisParameters create( public static TopDownAnalysisParameters create(
@NotNull StorageManager storageManager, @NotNull StorageManager storageManager,
@@ -36,7 +42,7 @@ public class TopDownAnalysisParameters implements GlobalContext {
boolean declaredLocally boolean declaredLocally
) { ) {
return new TopDownAnalysisParameters(storageManager, exceptionTracker, analyzeCompletely, analyzingBootstrapLibrary, return new TopDownAnalysisParameters(storageManager, exceptionTracker, analyzeCompletely, analyzingBootstrapLibrary,
declaredLocally); declaredLocally, LAZY);
} }
@NotNull @NotNull
@@ -47,19 +53,22 @@ public class TopDownAnalysisParameters implements GlobalContext {
private final Predicate<PsiFile> analyzeCompletely; private final Predicate<PsiFile> analyzeCompletely;
private final boolean analyzingBootstrapLibrary; private final boolean analyzingBootstrapLibrary;
private final boolean declaredLocally; private final boolean declaredLocally;
private final boolean lazyTopDownAnalysis;
private TopDownAnalysisParameters( private TopDownAnalysisParameters(
@NotNull StorageManager storageManager, @NotNull StorageManager storageManager,
@NotNull ExceptionTracker exceptionTracker, @NotNull ExceptionTracker exceptionTracker,
@NotNull Predicate<PsiFile> analyzeCompletely, @NotNull Predicate<PsiFile> analyzeCompletely,
boolean analyzingBootstrapLibrary, boolean analyzingBootstrapLibrary,
boolean declaredLocally boolean declaredLocally,
boolean lazyTopDownAnalysis
) { ) {
this.storageManager = storageManager; this.storageManager = storageManager;
this.exceptionTracker = exceptionTracker; this.exceptionTracker = exceptionTracker;
this.analyzeCompletely = analyzeCompletely; this.analyzeCompletely = analyzeCompletely;
this.analyzingBootstrapLibrary = analyzingBootstrapLibrary; this.analyzingBootstrapLibrary = analyzingBootstrapLibrary;
this.declaredLocally = declaredLocally; this.declaredLocally = declaredLocally;
this.lazyTopDownAnalysis = lazyTopDownAnalysis;
} }
@Override @Override
@@ -86,4 +95,10 @@ public class TopDownAnalysisParameters implements GlobalContext {
public boolean isDeclaredLocally() { public boolean isDeclaredLocally() {
return declaredLocally; return declaredLocally;
} }
// Used temporarily while we are transitioning from eager to lazy analysis of headers in the IDE
@Deprecated
public boolean isLazyTopDownAnalysis() {
return lazyTopDownAnalysis;
}
} }
@@ -56,12 +56,6 @@ import static org.jetbrains.jet.lang.diagnostics.Errors.MANY_CLASS_OBJECTS;
public class TopDownAnalyzer { public class TopDownAnalyzer {
public static boolean LAZY;
static {
LAZY = "true".equals(System.getProperty("lazy.tda"));
}
@NotNull @NotNull
private BindingTrace trace; private BindingTrace trace;
@NotNull @NotNull
@@ -135,7 +129,7 @@ public class TopDownAnalyzer {
// c.enableDebugOutput(); // c.enableDebugOutput();
c.debug("Enter"); c.debug("Enter");
if (LAZY && !c.getTopDownAnalysisParameters().isDeclaredLocally()) { if (c.getTopDownAnalysisParameters().isLazyTopDownAnalysis() && !c.getTopDownAnalysisParameters().isDeclaredLocally()) {
final ResolveSession resolveSession = new InjectorForLazyResolve( final ResolveSession resolveSession = new InjectorForLazyResolve(
project, project,
new GlobalContextImpl((LockBasedStorageManager) c.getStorageManager(), c.getExceptionTracker()), // TODO new GlobalContextImpl((LockBasedStorageManager) c.getStorageManager(), c.getExceptionTracker()), // TODO
@@ -190,7 +190,9 @@ public class TypeHierarchyResolver {
JetClassOrObject classOrObject = entry.getKey(); JetClassOrObject classOrObject = entry.getKey();
MutableClassDescriptor descriptor = (MutableClassDescriptor) entry.getValue(); MutableClassDescriptor descriptor = (MutableClassDescriptor) entry.getValue();
if (classOrObject instanceof JetClass) { if (classOrObject instanceof JetClass) {
descriptorResolver.resolveMutableClassDescriptor((JetClass) classOrObject, descriptor, trace); descriptorResolver.resolveMutableClassDescriptor(
c.getTopDownAnalysisParameters(),
(JetClass) classOrObject, descriptor, trace);
} }
else if (classOrObject instanceof JetObjectDeclaration) { else if (classOrObject instanceof JetObjectDeclaration) {
descriptor.setModality(Modality.FINAL); descriptor.setModality(Modality.FINAL);
@@ -16,6 +16,8 @@
package org.jetbrains.jet.types; package org.jetbrains.jet.types;
import com.google.common.base.Predicates;
import com.intellij.psi.PsiFile;
import org.jetbrains.jet.ConfigurationKind; import org.jetbrains.jet.ConfigurationKind;
import org.jetbrains.jet.JetLiteFixture; import org.jetbrains.jet.JetLiteFixture;
import org.jetbrains.jet.JetTestUtils; import org.jetbrains.jet.JetTestUtils;
@@ -27,6 +29,7 @@ import org.jetbrains.jet.lang.descriptors.impl.MutableClassDescriptor;
import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext; 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.TopDownAnalysisParameters;
import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo; import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo;
import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM; import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM;
import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.name.Name;
@@ -35,6 +38,8 @@ import org.jetbrains.jet.lang.resolve.scopes.RedeclarationHandler;
import org.jetbrains.jet.lang.resolve.scopes.WritableScope; import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
import org.jetbrains.jet.lang.resolve.scopes.WritableScopeImpl; import org.jetbrains.jet.lang.resolve.scopes.WritableScopeImpl;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import org.jetbrains.jet.storage.ExceptionTracker;
import org.jetbrains.jet.storage.LockBasedStorageManager;
import java.util.List; import java.util.List;
@@ -92,7 +97,11 @@ public class JetDefaultModalityModifiersTest extends JetLiteFixture {
private ClassDescriptorWithResolutionScopes createClassDescriptor(ClassKind kind, JetClass aClass) { private ClassDescriptorWithResolutionScopes createClassDescriptor(ClassKind kind, JetClass aClass) {
MutableClassDescriptor classDescriptor = new MutableClassDescriptor(root, scope, kind, false, Name.identifier(aClass.getName())); MutableClassDescriptor classDescriptor = new MutableClassDescriptor(root, scope, kind, false, Name.identifier(aClass.getName()));
descriptorResolver.resolveMutableClassDescriptor(aClass, classDescriptor, JetTestUtils.DUMMY_TRACE); TopDownAnalysisParameters parameters = TopDownAnalysisParameters.create(
LockBasedStorageManager.NO_LOCKS, new ExceptionTracker(), Predicates.<PsiFile>alwaysTrue(), false, false
);
descriptorResolver.resolveMutableClassDescriptor(
parameters, aClass, classDescriptor, JetTestUtils.DUMMY_TRACE);
return classDescriptor; return classDescriptor;
} }