Always closing IncrementalCache after using. Fixed KannotatorJpsTest.
This commit is contained in:
+34
-6
@@ -55,6 +55,7 @@ import org.jetbrains.jet.lang.resolve.BindingTraceContext;
|
|||||||
import org.jetbrains.jet.lang.resolve.ScriptNameUtil;
|
import org.jetbrains.jet.lang.resolve.ScriptNameUtil;
|
||||||
import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM;
|
import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM;
|
||||||
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
|
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.IncrementalCacheProvider;
|
||||||
import org.jetbrains.jet.lang.resolve.kotlin.incremental.IncrementalPackage;
|
import org.jetbrains.jet.lang.resolve.kotlin.incremental.IncrementalPackage;
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
@@ -291,6 +292,24 @@ public class KotlinToJVMBytecodeCompiler {
|
|||||||
CliLightClassGenerationSupport support = CliLightClassGenerationSupport.getInstanceForCli(environment.getProject());
|
CliLightClassGenerationSupport support = CliLightClassGenerationSupport.getInstanceForCli(environment.getProject());
|
||||||
BindingTrace sharedTrace = support.getTrace();
|
BindingTrace sharedTrace = support.getTrace();
|
||||||
ModuleDescriptorImpl sharedModule = support.getModule();
|
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(
|
return AnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(
|
||||||
environment.getProject(),
|
environment.getProject(),
|
||||||
environment.getSourceFiles(),
|
environment.getSourceFiles(),
|
||||||
@@ -298,7 +317,7 @@ public class KotlinToJVMBytecodeCompiler {
|
|||||||
Predicates.<PsiFile>alwaysTrue(),
|
Predicates.<PsiFile>alwaysTrue(),
|
||||||
sharedModule,
|
sharedModule,
|
||||||
environment.getConfiguration().get(JVMConfigurationKeys.MODULE_IDS),
|
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);
|
File incrementalCacheDir = configuration.get(JVMConfigurationKeys.INCREMENTAL_CACHE_BASE_DIR);
|
||||||
IncrementalCacheProvider incrementalCacheProvider = IncrementalCacheProvider.object$.getInstance();
|
IncrementalCacheProvider incrementalCacheProvider = IncrementalCacheProvider.object$.getInstance();
|
||||||
|
|
||||||
Collection<FqName> packagesWithRemovedFiles =
|
Collection<FqName> packagesWithRemovedFiles;
|
||||||
incrementalCacheDir == null || moduleId == null || incrementalCacheProvider == null
|
if (incrementalCacheDir == null || moduleId == null || incrementalCacheProvider == null) {
|
||||||
? null
|
packagesWithRemovedFiles = null;
|
||||||
: IncrementalPackage.getPackagesWithRemovedFiles(
|
}
|
||||||
incrementalCacheProvider.getIncrementalCache(incrementalCacheDir), moduleId, environment.getSourceFiles());
|
else {
|
||||||
|
IncrementalCache incrementalCache = incrementalCacheProvider.getIncrementalCache(incrementalCacheDir);
|
||||||
|
try {
|
||||||
|
packagesWithRemovedFiles = IncrementalPackage.getPackagesWithRemovedFiles(
|
||||||
|
incrementalCache, moduleId, environment.getSourceFiles());
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
incrementalCache.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
BindingTraceContext diagnosticHolder = new BindingTraceContext();
|
BindingTraceContext diagnosticHolder = new BindingTraceContext();
|
||||||
GenerationState generationState = new GenerationState(
|
GenerationState generationState = new GenerationState(
|
||||||
environment.getProject(),
|
environment.getProject(),
|
||||||
|
|||||||
+2
-4
@@ -147,7 +147,7 @@ public enum AnalyzerFacadeForJVM implements AnalyzerFacade {
|
|||||||
Predicate<PsiFile> filesToAnalyzeCompletely,
|
Predicate<PsiFile> filesToAnalyzeCompletely,
|
||||||
ModuleDescriptorImpl module,
|
ModuleDescriptorImpl module,
|
||||||
List<String> moduleIds,
|
List<String> moduleIds,
|
||||||
File incrementalCacheDir
|
IncrementalCache incrementalCache
|
||||||
) {
|
) {
|
||||||
GlobalContext globalContext = ContextPackage.GlobalContext();
|
GlobalContext globalContext = ContextPackage.GlobalContext();
|
||||||
TopDownAnalysisParameters topDownAnalysisParameters = TopDownAnalysisParameters.create(
|
TopDownAnalysisParameters topDownAnalysisParameters = TopDownAnalysisParameters.create(
|
||||||
@@ -162,9 +162,7 @@ public enum AnalyzerFacadeForJVM implements AnalyzerFacade {
|
|||||||
try {
|
try {
|
||||||
module.addFragmentProvider(DependencyKind.BINARIES, injector.getJavaDescriptorResolver().getPackageFragmentProvider());
|
module.addFragmentProvider(DependencyKind.BINARIES, injector.getJavaDescriptorResolver().getPackageFragmentProvider());
|
||||||
|
|
||||||
IncrementalCacheProvider incrementalCacheProvider = IncrementalCacheProvider.object$.getInstance();
|
if (incrementalCache != null && moduleIds != null) {
|
||||||
if (incrementalCacheDir != null && moduleIds != null && incrementalCacheProvider != null) {
|
|
||||||
IncrementalCache incrementalCache = incrementalCacheProvider.getIncrementalCache(incrementalCacheDir);
|
|
||||||
for (String moduleId : moduleIds) {
|
for (String moduleId : moduleIds) {
|
||||||
module.addFragmentProvider(
|
module.addFragmentProvider(
|
||||||
DependencyKind.SOURCES,
|
DependencyKind.SOURCES,
|
||||||
|
|||||||
+2
@@ -26,6 +26,8 @@ public trait IncrementalCache {
|
|||||||
public fun getRemovedPackageParts(moduleId: String, compiledSourceFilesToFqName: Map<File, String>): Collection<String>
|
public fun getRemovedPackageParts(moduleId: String, compiledSourceFilesToFqName: Map<File, String>): Collection<String>
|
||||||
|
|
||||||
public fun getPackageData(moduleId: String, fqName: String): ByteArray?
|
public fun getPackageData(moduleId: String, fqName: String): ByteArray?
|
||||||
|
|
||||||
|
public fun close()
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun IncrementalCache.getPackagesWithRemovedFiles(moduleId: String, compiledSourceFiles: Collection<JetFile>): Collection<FqName> {
|
public fun IncrementalCache.getPackagesWithRemovedFiles(moduleId: String, compiledSourceFiles: Collection<JetFile>): Collection<FqName> {
|
||||||
|
|||||||
+1
@@ -20,6 +20,7 @@ import java.io.File
|
|||||||
import java.util.ServiceLoader
|
import java.util.ServiceLoader
|
||||||
|
|
||||||
public trait IncrementalCacheProvider {
|
public trait IncrementalCacheProvider {
|
||||||
|
// IncrementalCache should be always closed after using
|
||||||
public fun getIncrementalCache(baseDir: File): IncrementalCache
|
public fun getIncrementalCache(baseDir: File): IncrementalCache
|
||||||
|
|
||||||
public class object {
|
public class object {
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ public class IncrementalCacheImpl(val baseDir: File): IncrementalCache {
|
|||||||
return protoMap[moduleId, JvmClassName.byFqNameWithoutInnerClasses(PackageClassUtils.getPackageClassFqName(FqName(fqName)))]
|
return protoMap[moduleId, JvmClassName.byFqNameWithoutInnerClasses(PackageClassUtils.getPackageClassFqName(FqName(fqName)))]
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun close() {
|
public override fun close() {
|
||||||
protoMap.close()
|
protoMap.close()
|
||||||
constantsMap.close()
|
constantsMap.close()
|
||||||
inlineFunctionsMap.close()
|
inlineFunctionsMap.close()
|
||||||
|
|||||||
Reference in New Issue
Block a user