Remove eager resolve for getting light class context

This commit is contained in:
Nikolay Krasko
2014-02-11 17:52:48 +04:00
parent 06af996bd0
commit aca146726a
@@ -32,10 +32,7 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.asJava.KotlinLightClassForExplicitDeclaration; import org.jetbrains.jet.asJava.KotlinLightClassForExplicitDeclaration;
import org.jetbrains.jet.asJava.LightClassConstructionContext; import org.jetbrains.jet.asJava.LightClassConstructionContext;
import org.jetbrains.jet.asJava.LightClassGenerationSupport; import org.jetbrains.jet.asJava.LightClassGenerationSupport;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
import org.jetbrains.jet.lang.descriptors.PackageViewDescriptor;
import org.jetbrains.jet.lang.descriptors.VariableDescriptor;
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.java.PackageClassUtils; import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
@@ -50,7 +47,6 @@ import org.jetbrains.jet.plugin.project.ResolveSessionForBodies;
import org.jetbrains.jet.plugin.stubindex.JetAllPackagesIndex; import org.jetbrains.jet.plugin.stubindex.JetAllPackagesIndex;
import org.jetbrains.jet.plugin.stubindex.JetClassByPackageIndex; import org.jetbrains.jet.plugin.stubindex.JetClassByPackageIndex;
import org.jetbrains.jet.plugin.stubindex.JetFullClassNameIndex; import org.jetbrains.jet.plugin.stubindex.JetFullClassNameIndex;
import org.jetbrains.jet.utils.Profiler;
import java.util.*; import java.util.*;
@@ -60,8 +56,6 @@ public class IDELightClassGenerationSupport extends LightClassGenerationSupport
private static final Logger LOG = Logger.getInstance(IDELightClassGenerationSupport.class); private static final Logger LOG = Logger.getInstance(IDELightClassGenerationSupport.class);
private static boolean USE_LAZY = true;
public static IDELightClassGenerationSupport getInstanceForIDE(@NotNull Project project) { public static IDELightClassGenerationSupport getInstanceForIDE(@NotNull Project project) {
return (IDELightClassGenerationSupport) ServiceManager.getService(project, LightClassGenerationSupport.class); return (IDELightClassGenerationSupport) ServiceManager.getService(project, LightClassGenerationSupport.class);
} }
@@ -96,59 +90,25 @@ public class IDELightClassGenerationSupport extends LightClassGenerationSupport
List<JetFile> sortedFiles = new ArrayList<JetFile>(files); List<JetFile> sortedFiles = new ArrayList<JetFile>(files);
Collections.sort(sortedFiles, jetFileComparator); Collections.sort(sortedFiles, jetFileComparator);
Profiler p = Profiler.create((USE_LAZY ? "lazy" : "eager") + " analyze", LOG).start(); ResolveSessionForBodies session = AnalyzerFacadeWithCache.getLazyResolveSessionForFile(sortedFiles.get(0));
try { forceResolvePackageDeclarations(files, session);
if (USE_LAZY) { return new LightClassConstructionContext(session.getBindingContext(), null);
ResolveSessionForBodies session = AnalyzerFacadeWithCache.getLazyResolveSessionForFile(sortedFiles.get(0));
forceResolvePackageDeclarations(files, session);
return new LightClassConstructionContext(session.getBindingContext(), null);
}
else {
KotlinCacheManager cacheManager = KotlinCacheManager.getInstance(project);
KotlinDeclarationsCache declarationsCache = cacheManager.getPossiblyIncompleteDeclarationsForLightClassGeneration();
return new LightClassConstructionContext(declarationsCache.getBindingContext(), null);
}
}
finally {
p.end();
}
} }
@NotNull @NotNull
@Override @Override
public LightClassConstructionContext getContextForClassOrObject(@NotNull JetClassOrObject classOrObject) { public LightClassConstructionContext getContextForClassOrObject(@NotNull JetClassOrObject classOrObject) {
Profiler p = Profiler.create((USE_LAZY ? "lazy" : "eager") + " analyze", LOG).start(); ResolveSessionForBodies session = AnalyzerFacadeWithCache.getLazyResolveSessionForFile((JetFile) classOrObject.getContainingFile());
try { if (JetPsiUtil.isLocal(classOrObject)) {
if (USE_LAZY) { BindingContext bindingContext = session.resolveToElement(classOrObject);
ResolveSessionForBodies session = AnalyzerFacadeWithCache.getLazyResolveSessionForFile((JetFile) classOrObject.getContainingFile()); forceResolveAllContents(bindingContext.get(BindingContext.CLASS, classOrObject));
if (JetPsiUtil.isLocal(classOrObject)) { return new LightClassConstructionContext(bindingContext, null);
BindingContext bindingContext = session.resolveToElement(classOrObject);
forceResolveAllContents(bindingContext.get(BindingContext.CLASS, classOrObject));
return new LightClassConstructionContext(bindingContext, null);
}
forceResolveAllContents(session.getClassDescriptor(classOrObject));
return new LightClassConstructionContext(session.getBindingContext(), null);
}
else {
BindingContext bindingContext;
if (JetPsiUtil.isLocal(classOrObject)) {
bindingContext = AnalyzerFacadeWithCache.getContextForElement(classOrObject);
}
else {
bindingContext = KotlinCacheManager.getInstance(project)
.getPossiblyIncompleteDeclarationsForLightClassGeneration().getBindingContext();
}
return new LightClassConstructionContext(bindingContext, null);
}
}
finally {
p.end();
} }
forceResolveAllContents(session.getClassDescriptor(classOrObject));
return new LightClassConstructionContext(session.getBindingContext(), null);
} }
private static void forceResolvePackageDeclarations(@NotNull Collection<JetFile> files, @NotNull KotlinCodeAnalyzer session) { private static void forceResolvePackageDeclarations(@NotNull Collection<JetFile> files, @NotNull KotlinCodeAnalyzer session) {