Make lazy analysis accessible to clients

This commit is contained in:
Andrey Breslav
2014-04-08 16:38:35 +04:00
parent 7d688e5bec
commit 4839f7a230
6 changed files with 73 additions and 45 deletions
@@ -20,9 +20,10 @@ import com.intellij.openapi.project.Project;
import org.jetbrains.jet.context.GlobalContext;
import org.jetbrains.jet.storage.StorageManager;
import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
import org.jetbrains.jet.lang.resolve.TopDownAnalyzer;
import org.jetbrains.jet.lang.resolve.LazyTopDownAnalyzer;
import org.jetbrains.jet.lang.resolve.MutablePackageFragmentProvider;
import org.jetbrains.jet.descriptors.serialization.descriptors.MemberFilter;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
@@ -59,7 +60,6 @@ import org.jetbrains.jet.lang.resolve.ImportsResolver;
import org.jetbrains.jet.lang.psi.JetImportsFactory;
import org.jetbrains.jet.lang.resolve.ScriptHeaderResolver;
import org.jetbrains.jet.lang.resolve.ScriptParameterResolver;
import org.jetbrains.jet.lang.resolve.LazyTopDownAnalyzer;
import org.jetbrains.jet.lang.resolve.OverloadResolver;
import org.jetbrains.jet.lang.resolve.OverrideResolver;
import org.jetbrains.jet.lang.resolve.TypeHierarchyResolver;
@@ -81,9 +81,10 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
private final GlobalContext globalContext;
private final StorageManager storageManager;
private final BindingTrace bindingTrace;
private final ModuleDescriptorImpl moduleDescriptor;
private final ModuleDescriptor moduleDescriptor;
private final PlatformToKotlinClassMap platformToKotlinClassMap;
private final TopDownAnalyzer topDownAnalyzer;
private final LazyTopDownAnalyzer lazyTopDownAnalyzer;
private final MutablePackageFragmentProvider mutablePackageFragmentProvider;
private final MemberFilter memberFilter;
private final JavaDescriptorResolver javaDescriptorResolver;
@@ -120,7 +121,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
private final JetImportsFactory jetImportsFactory;
private final ScriptHeaderResolver scriptHeaderResolver;
private final ScriptParameterResolver scriptParameterResolver;
private final LazyTopDownAnalyzer lazyTopDownAnalyzer;
private final OverloadResolver overloadResolver;
private final OverrideResolver overrideResolver;
private final TypeHierarchyResolver typeHierarchyResolver;
@@ -136,7 +136,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
@NotNull Project project,
@NotNull GlobalContext globalContext,
@NotNull BindingTrace bindingTrace,
@NotNull ModuleDescriptorImpl moduleDescriptor,
@NotNull ModuleDescriptor moduleDescriptor,
@NotNull MemberFilter memberFilter
) {
this.project = project;
@@ -146,6 +146,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
this.moduleDescriptor = moduleDescriptor;
this.platformToKotlinClassMap = moduleDescriptor.getPlatformToKotlinClassMap();
this.topDownAnalyzer = new TopDownAnalyzer();
this.lazyTopDownAnalyzer = new LazyTopDownAnalyzer();
this.mutablePackageFragmentProvider = new MutablePackageFragmentProvider(getModuleDescriptor());
this.memberFilter = memberFilter;
this.javaClassFinder = new JavaClassFinderImpl();
@@ -185,7 +186,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
this.jetImportsFactory = new JetImportsFactory();
this.scriptHeaderResolver = new ScriptHeaderResolver();
this.scriptParameterResolver = new ScriptParameterResolver();
this.lazyTopDownAnalyzer = new LazyTopDownAnalyzer();
this.overloadResolver = new OverloadResolver();
this.overrideResolver = new OverrideResolver();
this.typeHierarchyResolver = new TypeHierarchyResolver();
@@ -205,6 +205,13 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
this.topDownAnalyzer.setTrace(bindingTrace);
this.topDownAnalyzer.setTypeHierarchyResolver(typeHierarchyResolver);
this.lazyTopDownAnalyzer.setBodyResolver(bodyResolver);
this.lazyTopDownAnalyzer.setDeclarationResolver(declarationResolver);
this.lazyTopDownAnalyzer.setModuleDescriptor(moduleDescriptor);
this.lazyTopDownAnalyzer.setOverloadResolver(overloadResolver);
this.lazyTopDownAnalyzer.setOverrideResolver(overrideResolver);
this.lazyTopDownAnalyzer.setTrace(bindingTrace);
javaClassFinder.setProject(project);
traceBasedExternalSignatureResolver.setExternalAnnotationResolver(psiBasedExternalAnnotationResolver);
@@ -305,13 +312,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
scriptParameterResolver.setDependencyClassByQualifiedNameResolver(javaDescriptorResolver);
lazyTopDownAnalyzer.setBodyResolver(bodyResolver);
lazyTopDownAnalyzer.setDeclarationResolver(declarationResolver);
lazyTopDownAnalyzer.setModuleDescriptor(moduleDescriptor);
lazyTopDownAnalyzer.setOverloadResolver(overloadResolver);
lazyTopDownAnalyzer.setOverrideResolver(overrideResolver);
lazyTopDownAnalyzer.setTrace(bindingTrace);
overloadResolver.setTrace(bindingTrace);
overrideResolver.setTrace(bindingTrace);
@@ -353,7 +353,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
public void destroy() {
}
public ModuleDescriptorImpl getModuleDescriptor() {
public ModuleDescriptor getModuleDescriptor() {
return this.moduleDescriptor;
}
@@ -361,6 +361,10 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
return this.topDownAnalyzer;
}
public LazyTopDownAnalyzer getLazyTopDownAnalyzer() {
return this.lazyTopDownAnalyzer;
}
public JavaDescriptorResolver getJavaDescriptorResolver() {
return this.javaDescriptorResolver;
}
@@ -20,9 +20,10 @@ import com.intellij.openapi.project.Project;
import org.jetbrains.jet.context.GlobalContext;
import org.jetbrains.jet.storage.StorageManager;
import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
import org.jetbrains.jet.lang.resolve.TopDownAnalyzer;
import org.jetbrains.jet.lang.resolve.LazyTopDownAnalyzer;
import org.jetbrains.jet.lang.resolve.MutablePackageFragmentProvider;
import org.jetbrains.jet.lang.types.DependencyClassByQualifiedNameResolverDummyImpl;
import org.jetbrains.jet.lang.resolve.BodyResolver;
@@ -50,7 +51,6 @@ import org.jetbrains.jet.lang.resolve.ImportsResolver;
import org.jetbrains.jet.lang.psi.JetImportsFactory;
import org.jetbrains.jet.lang.resolve.ScriptHeaderResolver;
import org.jetbrains.jet.lang.resolve.ScriptParameterResolver;
import org.jetbrains.jet.lang.resolve.LazyTopDownAnalyzer;
import org.jetbrains.jet.lang.resolve.OverloadResolver;
import org.jetbrains.jet.lang.resolve.OverrideResolver;
import org.jetbrains.jet.lang.resolve.TypeHierarchyResolver;
@@ -65,9 +65,10 @@ public class InjectorForTopDownAnalyzerBasic {
private final GlobalContext globalContext;
private final StorageManager storageManager;
private final BindingTrace bindingTrace;
private final ModuleDescriptorImpl moduleDescriptor;
private final ModuleDescriptor moduleDescriptor;
private final PlatformToKotlinClassMap platformToKotlinClassMap;
private final TopDownAnalyzer topDownAnalyzer;
private final LazyTopDownAnalyzer lazyTopDownAnalyzer;
private final MutablePackageFragmentProvider mutablePackageFragmentProvider;
private final DependencyClassByQualifiedNameResolverDummyImpl dependencyClassByQualifiedNameResolverDummy;
private final BodyResolver bodyResolver;
@@ -95,7 +96,6 @@ public class InjectorForTopDownAnalyzerBasic {
private final JetImportsFactory jetImportsFactory;
private final ScriptHeaderResolver scriptHeaderResolver;
private final ScriptParameterResolver scriptParameterResolver;
private final LazyTopDownAnalyzer lazyTopDownAnalyzer;
private final OverloadResolver overloadResolver;
private final OverrideResolver overrideResolver;
private final TypeHierarchyResolver typeHierarchyResolver;
@@ -104,7 +104,7 @@ public class InjectorForTopDownAnalyzerBasic {
@NotNull Project project,
@NotNull GlobalContext globalContext,
@NotNull BindingTrace bindingTrace,
@NotNull ModuleDescriptorImpl moduleDescriptor
@NotNull ModuleDescriptor moduleDescriptor
) {
this.project = project;
this.globalContext = globalContext;
@@ -113,6 +113,7 @@ public class InjectorForTopDownAnalyzerBasic {
this.moduleDescriptor = moduleDescriptor;
this.platformToKotlinClassMap = moduleDescriptor.getPlatformToKotlinClassMap();
this.topDownAnalyzer = new TopDownAnalyzer();
this.lazyTopDownAnalyzer = new LazyTopDownAnalyzer();
this.mutablePackageFragmentProvider = new MutablePackageFragmentProvider(getModuleDescriptor());
this.dependencyClassByQualifiedNameResolverDummy = new DependencyClassByQualifiedNameResolverDummyImpl();
this.bodyResolver = new BodyResolver();
@@ -140,7 +141,6 @@ public class InjectorForTopDownAnalyzerBasic {
this.jetImportsFactory = new JetImportsFactory();
this.scriptHeaderResolver = new ScriptHeaderResolver();
this.scriptParameterResolver = new ScriptParameterResolver();
this.lazyTopDownAnalyzer = new LazyTopDownAnalyzer();
this.overloadResolver = new OverloadResolver();
this.overrideResolver = new OverrideResolver();
this.typeHierarchyResolver = new TypeHierarchyResolver();
@@ -156,6 +156,13 @@ public class InjectorForTopDownAnalyzerBasic {
this.topDownAnalyzer.setTrace(bindingTrace);
this.topDownAnalyzer.setTypeHierarchyResolver(typeHierarchyResolver);
this.lazyTopDownAnalyzer.setBodyResolver(bodyResolver);
this.lazyTopDownAnalyzer.setDeclarationResolver(declarationResolver);
this.lazyTopDownAnalyzer.setModuleDescriptor(moduleDescriptor);
this.lazyTopDownAnalyzer.setOverloadResolver(overloadResolver);
this.lazyTopDownAnalyzer.setOverrideResolver(overrideResolver);
this.lazyTopDownAnalyzer.setTrace(bindingTrace);
bodyResolver.setAnnotationResolver(annotationResolver);
bodyResolver.setCallResolver(callResolver);
bodyResolver.setControlFlowAnalyzer(controlFlowAnalyzer);
@@ -243,13 +250,6 @@ public class InjectorForTopDownAnalyzerBasic {
scriptParameterResolver.setDependencyClassByQualifiedNameResolver(dependencyClassByQualifiedNameResolverDummy);
lazyTopDownAnalyzer.setBodyResolver(bodyResolver);
lazyTopDownAnalyzer.setDeclarationResolver(declarationResolver);
lazyTopDownAnalyzer.setModuleDescriptor(moduleDescriptor);
lazyTopDownAnalyzer.setOverloadResolver(overloadResolver);
lazyTopDownAnalyzer.setOverrideResolver(overrideResolver);
lazyTopDownAnalyzer.setTrace(bindingTrace);
overloadResolver.setTrace(bindingTrace);
overrideResolver.setTrace(bindingTrace);
@@ -266,7 +266,7 @@ public class InjectorForTopDownAnalyzerBasic {
public void destroy() {
}
public ModuleDescriptorImpl getModuleDescriptor() {
public ModuleDescriptor getModuleDescriptor() {
return this.moduleDescriptor;
}
@@ -274,4 +274,8 @@ public class InjectorForTopDownAnalyzerBasic {
return this.topDownAnalyzer;
}
public LazyTopDownAnalyzer getLazyTopDownAnalyzer() {
return this.lazyTopDownAnalyzer;
}
}
@@ -79,7 +79,8 @@ public class LazyTopDownAnalyzer {
this.bodyResolver = bodyResolver;
}
public void analyzeDeclarations(
@NotNull
public TopDownAnalysisContext analyzeDeclarations(
final ResolveSession resolveSession,
@NotNull TopDownAnalysisParameters topDownAnalysisParameters,
@NotNull Collection<? extends PsiElement> declarations
@@ -252,6 +253,8 @@ public class LazyTopDownAnalyzer {
overloadResolver.process(c);
bodyResolver.resolveBodies(c);
return c;
}
}
@@ -45,6 +45,18 @@ public class TopDownAnalysisParameters implements GlobalContext {
declaredLocally, LAZY);
}
@NotNull
public static TopDownAnalysisParameters createForLazy(
@NotNull StorageManager storageManager,
@NotNull ExceptionTracker exceptionTracker,
@NotNull Predicate<PsiFile> analyzeCompletely,
boolean analyzingBootstrapLibrary,
boolean declaredLocally
) {
return new TopDownAnalysisParameters(storageManager, exceptionTracker, analyzeCompletely, analyzingBootstrapLibrary,
declaredLocally, true);
}
@NotNull
public static TopDownAnalysisParameters createForLocalDeclarations(
@NotNull StorageManager storageManager,
@@ -68,10 +68,11 @@ private fun DependencyInjectorGenerator.commonForTopDownAnalyzer() {
parameter(javaClass<Project>())
parameter(javaClass<GlobalContext>(), useAsContext = true)
parameter(javaClass<BindingTrace>())
publicParameter(javaClass<ModuleDescriptorImpl>(), useAsContext = true)
publicParameter(javaClass<ModuleDescriptor>(), useAsContext = true)
publicFields(
javaClass<TopDownAnalyzer>()
javaClass<TopDownAnalyzer>(),
javaClass<LazyTopDownAnalyzer>()
)
field(javaClass<MutablePackageFragmentProvider>())
@@ -20,9 +20,10 @@ import com.intellij.openapi.project.Project;
import org.jetbrains.jet.context.GlobalContext;
import org.jetbrains.jet.storage.StorageManager;
import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
import org.jetbrains.jet.lang.resolve.TopDownAnalyzer;
import org.jetbrains.jet.lang.resolve.LazyTopDownAnalyzer;
import org.jetbrains.jet.lang.resolve.MutablePackageFragmentProvider;
import org.jetbrains.jet.lang.types.DependencyClassByQualifiedNameResolverDummyImpl;
import org.jetbrains.jet.lang.resolve.BodyResolver;
@@ -50,7 +51,6 @@ import org.jetbrains.jet.lang.resolve.ImportsResolver;
import org.jetbrains.jet.lang.psi.JetImportsFactory;
import org.jetbrains.jet.lang.resolve.ScriptHeaderResolver;
import org.jetbrains.jet.lang.resolve.ScriptParameterResolver;
import org.jetbrains.jet.lang.resolve.LazyTopDownAnalyzer;
import org.jetbrains.jet.lang.resolve.OverloadResolver;
import org.jetbrains.jet.lang.resolve.OverrideResolver;
import org.jetbrains.jet.lang.resolve.TypeHierarchyResolver;
@@ -65,9 +65,10 @@ public class InjectorForTopDownAnalyzerForJs {
private final GlobalContext globalContext;
private final StorageManager storageManager;
private final BindingTrace bindingTrace;
private final ModuleDescriptorImpl moduleDescriptor;
private final ModuleDescriptor moduleDescriptor;
private final PlatformToKotlinClassMap platformToKotlinClassMap;
private final TopDownAnalyzer topDownAnalyzer;
private final LazyTopDownAnalyzer lazyTopDownAnalyzer;
private final MutablePackageFragmentProvider mutablePackageFragmentProvider;
private final DependencyClassByQualifiedNameResolverDummyImpl dependencyClassByQualifiedNameResolverDummy;
private final BodyResolver bodyResolver;
@@ -95,7 +96,6 @@ public class InjectorForTopDownAnalyzerForJs {
private final JetImportsFactory jetImportsFactory;
private final ScriptHeaderResolver scriptHeaderResolver;
private final ScriptParameterResolver scriptParameterResolver;
private final LazyTopDownAnalyzer lazyTopDownAnalyzer;
private final OverloadResolver overloadResolver;
private final OverrideResolver overrideResolver;
private final TypeHierarchyResolver typeHierarchyResolver;
@@ -104,7 +104,7 @@ public class InjectorForTopDownAnalyzerForJs {
@NotNull Project project,
@NotNull GlobalContext globalContext,
@NotNull BindingTrace bindingTrace,
@NotNull ModuleDescriptorImpl moduleDescriptor
@NotNull ModuleDescriptor moduleDescriptor
) {
this.project = project;
this.globalContext = globalContext;
@@ -113,6 +113,7 @@ public class InjectorForTopDownAnalyzerForJs {
this.moduleDescriptor = moduleDescriptor;
this.platformToKotlinClassMap = moduleDescriptor.getPlatformToKotlinClassMap();
this.topDownAnalyzer = new TopDownAnalyzer();
this.lazyTopDownAnalyzer = new LazyTopDownAnalyzer();
this.mutablePackageFragmentProvider = new MutablePackageFragmentProvider(getModuleDescriptor());
this.dependencyClassByQualifiedNameResolverDummy = new DependencyClassByQualifiedNameResolverDummyImpl();
this.bodyResolver = new BodyResolver();
@@ -140,7 +141,6 @@ public class InjectorForTopDownAnalyzerForJs {
this.jetImportsFactory = new JetImportsFactory();
this.scriptHeaderResolver = new ScriptHeaderResolver();
this.scriptParameterResolver = new ScriptParameterResolver();
this.lazyTopDownAnalyzer = new LazyTopDownAnalyzer();
this.overloadResolver = new OverloadResolver();
this.overrideResolver = new OverrideResolver();
this.typeHierarchyResolver = new TypeHierarchyResolver();
@@ -156,6 +156,13 @@ public class InjectorForTopDownAnalyzerForJs {
this.topDownAnalyzer.setTrace(bindingTrace);
this.topDownAnalyzer.setTypeHierarchyResolver(typeHierarchyResolver);
this.lazyTopDownAnalyzer.setBodyResolver(bodyResolver);
this.lazyTopDownAnalyzer.setDeclarationResolver(declarationResolver);
this.lazyTopDownAnalyzer.setModuleDescriptor(moduleDescriptor);
this.lazyTopDownAnalyzer.setOverloadResolver(overloadResolver);
this.lazyTopDownAnalyzer.setOverrideResolver(overrideResolver);
this.lazyTopDownAnalyzer.setTrace(bindingTrace);
bodyResolver.setAnnotationResolver(annotationResolver);
bodyResolver.setCallResolver(callResolver);
bodyResolver.setControlFlowAnalyzer(controlFlowAnalyzer);
@@ -243,13 +250,6 @@ public class InjectorForTopDownAnalyzerForJs {
scriptParameterResolver.setDependencyClassByQualifiedNameResolver(dependencyClassByQualifiedNameResolverDummy);
lazyTopDownAnalyzer.setBodyResolver(bodyResolver);
lazyTopDownAnalyzer.setDeclarationResolver(declarationResolver);
lazyTopDownAnalyzer.setModuleDescriptor(moduleDescriptor);
lazyTopDownAnalyzer.setOverloadResolver(overloadResolver);
lazyTopDownAnalyzer.setOverrideResolver(overrideResolver);
lazyTopDownAnalyzer.setTrace(bindingTrace);
overloadResolver.setTrace(bindingTrace);
overrideResolver.setTrace(bindingTrace);
@@ -266,7 +266,7 @@ public class InjectorForTopDownAnalyzerForJs {
public void destroy() {
}
public ModuleDescriptorImpl getModuleDescriptor() {
public ModuleDescriptor getModuleDescriptor() {
return this.moduleDescriptor;
}
@@ -274,4 +274,8 @@ public class InjectorForTopDownAnalyzerForJs {
return this.topDownAnalyzer;
}
public LazyTopDownAnalyzer getLazyTopDownAnalyzer() {
return this.lazyTopDownAnalyzer;
}
}