Skip to content

Commit

Permalink
Make lazy analysis accessible to clients
Browse files Browse the repository at this point in the history
  • Loading branch information
abreslav committed Apr 18, 2014
1 parent 7d688e5 commit 4839f7a
Show file tree
Hide file tree
Showing 6 changed files with 73 additions and 45 deletions.
Expand Up @@ -20,9 +20,10 @@
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;
Expand Down Expand Up @@ -59,7 +60,6 @@
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;
Expand All @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -136,7 +136,7 @@ public InjectorForTopDownAnalyzerForJvm(
@NotNull Project project,
@NotNull GlobalContext globalContext,
@NotNull BindingTrace bindingTrace,
@NotNull ModuleDescriptorImpl moduleDescriptor,
@NotNull ModuleDescriptor moduleDescriptor,
@NotNull MemberFilter memberFilter
) {
this.project = project;
Expand All @@ -146,6 +146,7 @@ public InjectorForTopDownAnalyzerForJvm(
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();
Expand Down Expand Up @@ -185,7 +186,6 @@ public InjectorForTopDownAnalyzerForJvm(
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();
Expand All @@ -205,6 +205,13 @@ public InjectorForTopDownAnalyzerForJvm(
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);
Expand Down Expand Up @@ -305,13 +312,6 @@ public InjectorForTopDownAnalyzerForJvm(

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);
Expand Down Expand Up @@ -353,14 +353,18 @@ public InjectorForTopDownAnalyzerForJvm(
public void destroy() {
}

public ModuleDescriptorImpl getModuleDescriptor() {
public ModuleDescriptor getModuleDescriptor() {
return this.moduleDescriptor;
}

public TopDownAnalyzer getTopDownAnalyzer() {
return this.topDownAnalyzer;
}

public LazyTopDownAnalyzer getLazyTopDownAnalyzer() {
return this.lazyTopDownAnalyzer;
}

public JavaDescriptorResolver getJavaDescriptorResolver() {
return this.javaDescriptorResolver;
}
Expand Down
Expand Up @@ -20,9 +20,10 @@
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;
Expand Down Expand Up @@ -50,7 +51,6 @@
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;
Expand All @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -104,7 +104,7 @@ public InjectorForTopDownAnalyzerBasic(
@NotNull Project project,
@NotNull GlobalContext globalContext,
@NotNull BindingTrace bindingTrace,
@NotNull ModuleDescriptorImpl moduleDescriptor
@NotNull ModuleDescriptor moduleDescriptor
) {
this.project = project;
this.globalContext = globalContext;
Expand All @@ -113,6 +113,7 @@ public 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();
Expand Down Expand Up @@ -140,7 +141,6 @@ public 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();
Expand All @@ -156,6 +156,13 @@ public 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);
Expand Down Expand Up @@ -243,13 +250,6 @@ public 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);
Expand All @@ -266,12 +266,16 @@ public InjectorForTopDownAnalyzerBasic(
public void destroy() {
}

public ModuleDescriptorImpl getModuleDescriptor() {
public ModuleDescriptor getModuleDescriptor() {
return this.moduleDescriptor;
}

public TopDownAnalyzer getTopDownAnalyzer() {
return this.topDownAnalyzer;
}

public LazyTopDownAnalyzer getLazyTopDownAnalyzer() {
return this.lazyTopDownAnalyzer;
}

}
Expand Up @@ -79,7 +79,8 @@ public void setBodyResolver(@NotNull BodyResolver bodyResolver) {
this.bodyResolver = bodyResolver;
}

public void analyzeDeclarations(
@NotNull
public TopDownAnalysisContext analyzeDeclarations(
final ResolveSession resolveSession,
@NotNull TopDownAnalysisParameters topDownAnalysisParameters,
@NotNull Collection<? extends PsiElement> declarations
Expand Down Expand Up @@ -252,6 +253,8 @@ public void visitProperty(@NotNull JetProperty property) {
overloadResolver.process(c);

bodyResolver.resolveBodies(c);

return c;
}
}

Expand Down
Expand Up @@ -45,6 +45,18 @@ public static TopDownAnalysisParameters create(
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,
Expand Down
Expand Up @@ -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>())
Expand Down
Expand Up @@ -20,9 +20,10 @@
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;
Expand Down Expand Up @@ -50,7 +51,6 @@
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;
Expand All @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -104,7 +104,7 @@ public InjectorForTopDownAnalyzerForJs(
@NotNull Project project,
@NotNull GlobalContext globalContext,
@NotNull BindingTrace bindingTrace,
@NotNull ModuleDescriptorImpl moduleDescriptor
@NotNull ModuleDescriptor moduleDescriptor
) {
this.project = project;
this.globalContext = globalContext;
Expand All @@ -113,6 +113,7 @@ public 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();
Expand Down Expand Up @@ -140,7 +141,6 @@ public 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();
Expand All @@ -156,6 +156,13 @@ public 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);
Expand Down Expand Up @@ -243,13 +250,6 @@ public 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);
Expand All @@ -266,12 +266,16 @@ public InjectorForTopDownAnalyzerForJs(
public void destroy() {
}

public ModuleDescriptorImpl getModuleDescriptor() {
public ModuleDescriptor getModuleDescriptor() {
return this.moduleDescriptor;
}

public TopDownAnalyzer getTopDownAnalyzer() {
return this.topDownAnalyzer;
}

public LazyTopDownAnalyzer getLazyTopDownAnalyzer() {
return this.lazyTopDownAnalyzer;
}

}

0 comments on commit 4839f7a

Please sign in to comment.