Introduce UsageCollector

This commit is contained in:
Zalim Bashorov
2015-07-20 16:48:21 +03:00
parent 91b87f41bc
commit 679d5fe496
13 changed files with 74 additions and 13 deletions
@@ -32,6 +32,7 @@ import org.jetbrains.kotlin.load.java.structure.impl.JavaPropertyInitializerEval
import org.jetbrains.kotlin.load.kotlin.DeserializationComponentsForJava
import org.jetbrains.kotlin.load.kotlin.JvmVirtualFileFinderFactory
import org.jetbrains.kotlin.load.kotlin.KotlinJvmCheckerProvider
import org.jetbrains.kotlin.incremental.components.UsageCollector
import org.jetbrains.kotlin.resolve.BindingTrace
import org.jetbrains.kotlin.resolve.BodyResolveCache
import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzer
@@ -44,9 +45,9 @@ import org.jetbrains.kotlin.resolve.lazy.ResolveSession
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
import org.jetbrains.kotlin.synthetic.AdditionalScopesWithJavaSyntheticExtensions
public fun StorageComponentContainer.configureJavaTopDownAnalysis(moduleContentScope: GlobalSearchScope, project: Project) {
public fun StorageComponentContainer.configureJavaTopDownAnalysis(moduleContentScope: GlobalSearchScope, project: Project, usageCollector: UsageCollector) {
useInstance(moduleContentScope)
useInstance(usageCollector)
useImpl<ResolveSession>()
useImpl<LazyTopDownAnalyzer>()
@@ -74,7 +75,7 @@ public fun createContainerForLazyResolveWithJava(
moduleContentScope: GlobalSearchScope, moduleClassResolver: ModuleClassResolver
): Pair<ResolveSession, JavaDescriptorResolver> = createContainer("LazyResolveWithJava") {
configureModule(moduleContext, KotlinJvmCheckerProvider(moduleContext.module), bindingTrace)
configureJavaTopDownAnalysis(moduleContentScope, moduleContext.project)
configureJavaTopDownAnalysis(moduleContentScope, moduleContext.project, UsageCollector.DO_NOTHING)
useInstance(moduleClassResolver)
@@ -90,12 +91,14 @@ public fun createContainerForLazyResolveWithJava(
public fun createContainerForTopDownAnalyzerForJvm(
moduleContext: ModuleContext, bindingTrace: BindingTrace,
moduleContext: ModuleContext,
bindingTrace: BindingTrace,
declarationProviderFactory: DeclarationProviderFactory,
moduleContentScope: GlobalSearchScope
moduleContentScope: GlobalSearchScope,
usageCollector: UsageCollector
): ContainerForTopDownAnalyzerForJvm = createContainer("TopDownAnalyzerForJvm") {
configureModule(moduleContext, KotlinJvmCheckerProvider(moduleContext.module), bindingTrace)
configureJavaTopDownAnalysis(moduleContentScope, moduleContext.project)
configureJavaTopDownAnalysis(moduleContentScope, moduleContext.project, usageCollector)
useInstance(declarationProviderFactory)
useInstance(BodyResolveCache.ThrowException)
@@ -117,4 +120,4 @@ public class ContainerForTopDownAnalyzerForJvm(container: StorageComponentContai
val lazyTopDownAnalyzerForTopLevel: LazyTopDownAnalyzerForTopLevel by container
val javaDescriptorResolver: JavaDescriptorResolver by container
val deserializationComponentsForJava: DeserializationComponentsForJava by container
}
}
@@ -16,6 +16,9 @@
package org.jetbrains.kotlin.load.kotlin.incremental.components
import org.jetbrains.kotlin.incremental.components.UsageCollector
public interface IncrementalCompilationComponents {
public fun getIncrementalCache(moduleId: String): IncrementalCache
public fun getUsageCollector(): UsageCollector
}
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.descriptors.ModuleParameters;
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider;
import org.jetbrains.kotlin.frontend.java.di.ContainerForTopDownAnalyzerForJvm;
import org.jetbrains.kotlin.frontend.java.di.DiPackage;
import org.jetbrains.kotlin.incremental.components.UsageCollector;
import org.jetbrains.kotlin.load.kotlin.incremental.IncrementalPackageFragmentProvider;
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache;
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents;
@@ -123,11 +124,15 @@ public enum TopDownAnalyzerFacadeForJVM {
FileBasedDeclarationProviderFactory providerFactory =
new FileBasedDeclarationProviderFactory(moduleContext.getStorageManager(), allFiles);
UsageCollector usageCollector =
incrementalCompilationComponents != null ? incrementalCompilationComponents.getUsageCollector() : UsageCollector.DO_NOTHING;
ContainerForTopDownAnalyzerForJvm container = DiPackage.createContainerForTopDownAnalyzerForJvm(
moduleContext,
trace,
providerFactory,
GlobalSearchScope.allScope(project)
GlobalSearchScope.allScope(project),
usageCollector
);
List<PackageFragmentProvider> additionalProviders = new ArrayList<PackageFragmentProvider>();