Always closing IncrementalCache after using. Fixed KannotatorJpsTest.

This commit is contained in:
Evgeny Gerashchenko
2014-07-21 20:45:15 +04:00
parent 714ad858ef
commit 7e6b05554e
5 changed files with 40 additions and 11 deletions
@@ -55,6 +55,7 @@ import org.jetbrains.jet.lang.resolve.BindingTraceContext;
import org.jetbrains.jet.lang.resolve.ScriptNameUtil;
import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM;
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
import org.jetbrains.jet.lang.resolve.kotlin.incremental.IncrementalCache;
import org.jetbrains.jet.lang.resolve.kotlin.incremental.IncrementalCacheProvider;
import org.jetbrains.jet.lang.resolve.kotlin.incremental.IncrementalPackage;
import org.jetbrains.jet.lang.resolve.name.FqName;
@@ -291,6 +292,24 @@ public class KotlinToJVMBytecodeCompiler {
CliLightClassGenerationSupport support = CliLightClassGenerationSupport.getInstanceForCli(environment.getProject());
BindingTrace sharedTrace = support.getTrace();
ModuleDescriptorImpl sharedModule = support.getModule();
IncrementalCacheProvider incrementalCacheProvider = IncrementalCacheProvider.object$.getInstance();
File incrementalCacheBaseDir = environment.getConfiguration().get(JVMConfigurationKeys.INCREMENTAL_CACHE_BASE_DIR);
final IncrementalCache incrementalCache;
if (incrementalCacheProvider != null && incrementalCacheBaseDir != null) {
incrementalCache = incrementalCacheProvider.getIncrementalCache(incrementalCacheBaseDir);
Disposer.register(environment.getApplication(), new Disposable() {
@Override
public void dispose() {
incrementalCache.close();
}
});
}
else {
incrementalCache = null;
}
return AnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(
environment.getProject(),
environment.getSourceFiles(),
@@ -298,7 +317,7 @@ public class KotlinToJVMBytecodeCompiler {
Predicates.<PsiFile>alwaysTrue(),
sharedModule,
environment.getConfiguration().get(JVMConfigurationKeys.MODULE_IDS),
environment.getConfiguration().get(JVMConfigurationKeys.INCREMENTAL_CACHE_BASE_DIR)
incrementalCache
);
}
}
@@ -328,11 +347,20 @@ public class KotlinToJVMBytecodeCompiler {
File incrementalCacheDir = configuration.get(JVMConfigurationKeys.INCREMENTAL_CACHE_BASE_DIR);
IncrementalCacheProvider incrementalCacheProvider = IncrementalCacheProvider.object$.getInstance();
Collection<FqName> packagesWithRemovedFiles =
incrementalCacheDir == null || moduleId == null || incrementalCacheProvider == null
? null
: IncrementalPackage.getPackagesWithRemovedFiles(
incrementalCacheProvider.getIncrementalCache(incrementalCacheDir), moduleId, environment.getSourceFiles());
Collection<FqName> packagesWithRemovedFiles;
if (incrementalCacheDir == null || moduleId == null || incrementalCacheProvider == null) {
packagesWithRemovedFiles = null;
}
else {
IncrementalCache incrementalCache = incrementalCacheProvider.getIncrementalCache(incrementalCacheDir);
try {
packagesWithRemovedFiles = IncrementalPackage.getPackagesWithRemovedFiles(
incrementalCache, moduleId, environment.getSourceFiles());
}
finally {
incrementalCache.close();
}
}
BindingTraceContext diagnosticHolder = new BindingTraceContext();
GenerationState generationState = new GenerationState(
environment.getProject(),
@@ -147,7 +147,7 @@ public enum AnalyzerFacadeForJVM implements AnalyzerFacade {
Predicate<PsiFile> filesToAnalyzeCompletely,
ModuleDescriptorImpl module,
List<String> moduleIds,
File incrementalCacheDir
IncrementalCache incrementalCache
) {
GlobalContext globalContext = ContextPackage.GlobalContext();
TopDownAnalysisParameters topDownAnalysisParameters = TopDownAnalysisParameters.create(
@@ -162,9 +162,7 @@ public enum AnalyzerFacadeForJVM implements AnalyzerFacade {
try {
module.addFragmentProvider(DependencyKind.BINARIES, injector.getJavaDescriptorResolver().getPackageFragmentProvider());
IncrementalCacheProvider incrementalCacheProvider = IncrementalCacheProvider.object$.getInstance();
if (incrementalCacheDir != null && moduleIds != null && incrementalCacheProvider != null) {
IncrementalCache incrementalCache = incrementalCacheProvider.getIncrementalCache(incrementalCacheDir);
if (incrementalCache != null && moduleIds != null) {
for (String moduleId : moduleIds) {
module.addFragmentProvider(
DependencyKind.SOURCES,
@@ -26,6 +26,8 @@ public trait IncrementalCache {
public fun getRemovedPackageParts(moduleId: String, compiledSourceFilesToFqName: Map<File, String>): Collection<String>
public fun getPackageData(moduleId: String, fqName: String): ByteArray?
public fun close()
}
public fun IncrementalCache.getPackagesWithRemovedFiles(moduleId: String, compiledSourceFiles: Collection<JetFile>): Collection<FqName> {
@@ -20,6 +20,7 @@ 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 {
@@ -110,7 +110,7 @@ public class IncrementalCacheImpl(val baseDir: File): IncrementalCache {
return protoMap[moduleId, JvmClassName.byFqNameWithoutInnerClasses(PackageClassUtils.getPackageClassFqName(FqName(fqName)))]
}
public fun close() {
public override fun close() {
protoMap.close()
constantsMap.close()
inlineFunctionsMap.close()