LTDA: Refactoring - Move "analyzeFiles" to LazyTopDownAnalyzer

This commit is contained in:
Nikolay Krasko
2014-09-29 15:20:36 +04:00
parent 7b15f4125d
commit 1a359fbcf6
2 changed files with 55 additions and 37 deletions
@@ -18,20 +18,30 @@ package org.jetbrains.jet.lang.resolve;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
import com.intellij.psi.util.PsiTreeUtil;
import kotlin.KotlinPackage;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.context.GlobalContextImpl;
import org.jetbrains.jet.di.InjectorForLazyResolve;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.descriptors.impl.CompositePackageFragmentProvider;
import org.jetbrains.jet.lang.descriptors.impl.ModuleDescriptorImpl;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.calls.CallsPackage;
import org.jetbrains.jet.lang.resolve.lazy.KotlinCodeAnalyzer;
import org.jetbrains.jet.lang.resolve.lazy.LazyImportScope;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
import org.jetbrains.jet.lang.resolve.lazy.declarations.FileBasedDeclarationProviderFactory;
import org.jetbrains.jet.lang.resolve.lazy.descriptors.LazyClassDescriptor;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.storage.LockBasedStorageManager;
import javax.inject.Inject;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
@@ -101,6 +111,40 @@ public class LazyTopDownAnalyzer {
this.bodyResolver = bodyResolver;
}
@NotNull
public TopDownAnalysisContext analyzeFiles(
@NotNull Project project,
@NotNull TopDownAnalysisParameters topDownAnalysisParameters,
@NotNull Collection<JetFile> files,
@NotNull List<? extends PackageFragmentProvider> additionalProviders,
AdditionalCheckerProvider additionalCheckerProvider
) {
TopDownAnalysisContext c = new TopDownAnalysisContext(topDownAnalysisParameters);
ResolveSession resolveSession = new InjectorForLazyResolve(
project,
new GlobalContextImpl((LockBasedStorageManager) c.getStorageManager(), c.getExceptionTracker()), // TODO
(ModuleDescriptorImpl) moduleDescriptor, // TODO
new FileBasedDeclarationProviderFactory(c.getStorageManager(), files),
trace,
additionalCheckerProvider
).getResolveSession();
CompositePackageFragmentProvider provider =
new CompositePackageFragmentProvider(KotlinPackage.plus(Arrays.asList(resolveSession.getPackageFragmentProvider()), additionalProviders));
((ModuleDescriptorImpl) moduleDescriptor).initialize(provider);
setKotlinCodeAnalyzer(resolveSession);
analyzeDeclarations(
c.getTopDownAnalysisParameters(),
files
);
return c;
}
@NotNull
public TopDownAnalysisContext analyzeDeclarations(
@NotNull TopDownAnalysisParameters topDownAnalysisParameters,
@@ -25,20 +25,15 @@ import kotlin.KotlinPackage;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.context.GlobalContext;
import org.jetbrains.jet.context.GlobalContextImpl;
import org.jetbrains.jet.di.InjectorForLazyResolve;
import org.jetbrains.jet.di.InjectorForTopDownAnalyzerBasic;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.descriptors.impl.*;
import org.jetbrains.jet.lang.psi.JetClassOrObject;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
import org.jetbrains.jet.lang.resolve.lazy.declarations.FileBasedDeclarationProviderFactory;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingContext;
import org.jetbrains.jet.storage.LockBasedStorageManager;
import javax.inject.Inject;
import java.util.*;
@@ -256,41 +251,20 @@ public class TopDownAnalyzer {
@NotNull Collection<JetFile> files,
@NotNull List<PackageFragmentProvider> additionalProviders
) {
if (topDownAnalysisParameters.isLazy()) {
return lazyTopDownAnalyzer.analyzeFiles(
project, topDownAnalysisParameters, files, additionalProviders, additionalCheckerProvider);
}
TopDownAnalysisContext c = new TopDownAnalysisContext(topDownAnalysisParameters);
CompositePackageFragmentProvider provider =
new CompositePackageFragmentProvider(KotlinPackage.plus(Arrays.asList(packageFragmentProvider), additionalProviders));
if (c.getTopDownAnalysisParameters().isLazy()) {
ResolveSession resolveSession = new InjectorForLazyResolve(
project,
new GlobalContextImpl((LockBasedStorageManager) c.getStorageManager(), c.getExceptionTracker()), // TODO
(ModuleDescriptorImpl) moduleDescriptor, // TODO
new FileBasedDeclarationProviderFactory(c.getStorageManager(), files),
trace,
additionalCheckerProvider
).getResolveSession();
((ModuleDescriptorImpl) moduleDescriptor).initialize(provider);
CompositePackageFragmentProvider provider =
new CompositePackageFragmentProvider(KotlinPackage.plus(Arrays.asList(resolveSession.getPackageFragmentProvider()), additionalProviders));
((ModuleDescriptorImpl) moduleDescriptor).initialize(provider);
lazyTopDownAnalyzer.setKotlinCodeAnalyzer(resolveSession);
lazyTopDownAnalyzer.analyzeDeclarations(
c.getTopDownAnalysisParameters(),
files
);
return c;
}
else {
CompositePackageFragmentProvider provider =
new CompositePackageFragmentProvider(KotlinPackage.plus(Arrays.asList(packageFragmentProvider), additionalProviders));
((ModuleDescriptorImpl) moduleDescriptor).initialize(provider);
// dummy builder is used because "root" is module descriptor,
// packages added to module explicitly in
doProcess(c, JetModuleUtil.getSubpackagesOfRootScope(moduleDescriptor), new PackageLikeBuilderDummy(), files);
}
// dummy builder is used because "root" is module descriptor,
// packages added to module explicitly in
doProcess(c, JetModuleUtil.getSubpackagesOfRootScope(moduleDescriptor), new PackageLikeBuilderDummy(), files);
return c;
}