Made incremental cache per-module.

Reused IDEA framework which manages per-module storage.
This commit is contained in:
Evgeny Gerashchenko
2014-08-12 20:30:51 +04:00
parent ff2e2d0203
commit 5fade9a5a6
16 changed files with 241 additions and 190 deletions
@@ -25,6 +25,7 @@ import com.intellij.psi.search.GlobalSearchScope;
import kotlin.Function1;
import kotlin.KotlinPackage;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.analyzer.AnalyzeExhaust;
import org.jetbrains.jet.analyzer.AnalyzerFacade;
import org.jetbrains.jet.context.ContextPackage;
@@ -43,6 +44,7 @@ import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters;
import org.jetbrains.jet.lang.resolve.java.mapping.JavaToKotlinClassMap;
import org.jetbrains.jet.lang.resolve.kotlin.incremental.IncrementalCache;
import org.jetbrains.jet.lang.resolve.kotlin.incremental.IncrementalPackageFragmentProvider;
import org.jetbrains.jet.lang.resolve.kotlin.incremental.IncrementalCacheProvider;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
import org.jetbrains.jet.lang.resolve.lazy.declarations.DeclarationProviderFactory;
import org.jetbrains.jet.lang.resolve.lazy.declarations.DeclarationProviderFactoryService;
@@ -149,7 +151,7 @@ public enum AnalyzerFacadeForJVM implements AnalyzerFacade {
Predicate<PsiFile> filesToAnalyzeCompletely,
ModuleDescriptorImpl module,
List<String> moduleIds,
IncrementalCache incrementalCache
@Nullable IncrementalCacheProvider incrementalCacheProvider
) {
GlobalContext globalContext = ContextPackage.GlobalContext();
TopDownAnalysisParameters topDownAnalysisParameters = TopDownAnalysisParameters.create(
@@ -164,8 +166,10 @@ public enum AnalyzerFacadeForJVM implements AnalyzerFacade {
try {
List<PackageFragmentProvider> additionalProviders = new ArrayList<PackageFragmentProvider>();
if (incrementalCache != null && moduleIds != null) {
if (moduleIds != null && incrementalCacheProvider != null) {
for (String moduleId : moduleIds) {
IncrementalCache incrementalCache = incrementalCacheProvider.getIncrementalCache(moduleId);
additionalProviders.add(
new IncrementalPackageFragmentProvider(
files, module, globalContext.getStorageManager(), injector.getDeserializationGlobalContextForJava(),
@@ -16,21 +16,6 @@
package org.jetbrains.jet.lang.resolve.kotlin.incremental
import java.io.File
import java.util.ServiceLoader
public trait IncrementalCacheProvider {
// IncrementalCache should be always closed after using
public fun getIncrementalCache(baseDir: File): IncrementalCache
public class object {
public fun getInstance(): IncrementalCacheProvider? {
val serviceLoader = ServiceLoader.load(javaClass<IncrementalCacheProvider>(), javaClass<IncrementalCacheProvider>().getClassLoader())
val implementations = serviceLoader.toList()
if (implementations.size > 1) {
throw IllegalStateException("More than one IncrementalCacheProvider: " + implementations)
}
return implementations.firstOrNull()
}
}
public fun getIncrementalCache(moduleId: String): IncrementalCache
}