From 1a359fbcf6a25b31a7dafcb96e55c2559da0ca1b Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Mon, 29 Sep 2014 15:20:36 +0400 Subject: [PATCH] LTDA: Refactoring - Move "analyzeFiles" to LazyTopDownAnalyzer --- .../jet/lang/resolve/LazyTopDownAnalyzer.java | 44 +++++++++++++++++ .../jet/lang/resolve/TopDownAnalyzer.java | 48 +++++-------------- 2 files changed, 55 insertions(+), 37 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/LazyTopDownAnalyzer.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/LazyTopDownAnalyzer.java index 9615ae6fae5..9eadbc09fd6 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/LazyTopDownAnalyzer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/LazyTopDownAnalyzer.java @@ -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 files, + @NotNull List 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, diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java index 2a31080d846..4ce60e19110 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java @@ -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 files, @NotNull List 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; }