Log when libraries cache is dropped because of ProcessCanceledException
Hope it can give insight on how often this happens
This commit is contained in:
+10
-2
@@ -67,11 +67,18 @@ public class KotlinCacheService(val project: Project) {
|
|||||||
dependencies: Collection<Any>,
|
dependencies: Collection<Any>,
|
||||||
moduleFilter: (IdeaModuleInfo) -> Boolean,
|
moduleFilter: (IdeaModuleInfo) -> Boolean,
|
||||||
reuseDataFromCache: KotlinResolveCache? = null,
|
reuseDataFromCache: KotlinResolveCache? = null,
|
||||||
syntheticFiles: Collection<JetFile> = listOf()
|
syntheticFiles: Collection<JetFile> = listOf(),
|
||||||
|
logProcessCanceled: Boolean = false
|
||||||
): () -> CachedValueProvider.Result<ModuleResolverProvider> = {
|
): () -> CachedValueProvider.Result<ModuleResolverProvider> = {
|
||||||
val analyzerFacade = AnalyzerFacadeProvider.getAnalyzerFacade(platform)
|
val analyzerFacade = AnalyzerFacadeProvider.getAnalyzerFacade(platform)
|
||||||
val delegateResolverProvider = reuseDataFromCache?.moduleResolverProvider ?: EmptyModuleResolverProvider
|
val delegateResolverProvider = reuseDataFromCache?.moduleResolverProvider ?: EmptyModuleResolverProvider
|
||||||
val moduleResolverProvider = createModuleResolverProvider(project, analyzerFacade, syntheticFiles, delegateResolverProvider, moduleFilter)
|
val globalContext = (delegateResolverProvider as? ModuleResolverProviderImpl)?.globalContext
|
||||||
|
?.withCompositeExceptionTrackerUnderSameLock()
|
||||||
|
?: GlobalContext(logProcessCanceled)
|
||||||
|
|
||||||
|
val moduleResolverProvider = createModuleResolverProvider(
|
||||||
|
project, globalContext, analyzerFacade, syntheticFiles, delegateResolverProvider, moduleFilter
|
||||||
|
)
|
||||||
val allDependencies = dependencies + listOf(moduleResolverProvider.exceptionTracker)
|
val allDependencies = dependencies + listOf(moduleResolverProvider.exceptionTracker)
|
||||||
CachedValueProvider.Result.create(moduleResolverProvider, allDependencies)
|
CachedValueProvider.Result.create(moduleResolverProvider, allDependencies)
|
||||||
}
|
}
|
||||||
@@ -81,6 +88,7 @@ public class KotlinCacheService(val project: Project) {
|
|||||||
private inner class GlobalCache(platform: TargetPlatform) {
|
private inner class GlobalCache(platform: TargetPlatform) {
|
||||||
val librariesCache = KotlinResolveCache(
|
val librariesCache = KotlinResolveCache(
|
||||||
project, globalResolveSessionProvider(platform,
|
project, globalResolveSessionProvider(platform,
|
||||||
|
logProcessCanceled = true,
|
||||||
moduleFilter = { it.isLibraryClasses() },
|
moduleFilter = { it.isLibraryClasses() },
|
||||||
dependencies = listOf(ProjectRootModificationTracker.getInstance(project)))
|
dependencies = listOf(ProjectRootModificationTracker.getInstance(project)))
|
||||||
)
|
)
|
||||||
|
|||||||
+1
-5
@@ -17,7 +17,6 @@
|
|||||||
package org.jetbrains.jet.plugin.caches.resolve
|
package org.jetbrains.jet.plugin.caches.resolve
|
||||||
|
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import org.jetbrains.jet.context.GlobalContext
|
|
||||||
import com.intellij.openapi.roots.ModuleRootManager
|
import com.intellij.openapi.roots.ModuleRootManager
|
||||||
import com.intellij.openapi.module.ModuleManager
|
import com.intellij.openapi.module.ModuleManager
|
||||||
import org.jetbrains.jet.utils.keysToMap
|
import org.jetbrains.jet.utils.keysToMap
|
||||||
@@ -38,6 +37,7 @@ import org.jetbrains.jet.context.GlobalContextImpl
|
|||||||
|
|
||||||
fun createModuleResolverProvider(
|
fun createModuleResolverProvider(
|
||||||
project: Project,
|
project: Project,
|
||||||
|
globalContext: GlobalContextImpl,
|
||||||
analyzerFacade: AnalyzerFacade<ResolverForModule, JvmPlatformParameters>,
|
analyzerFacade: AnalyzerFacade<ResolverForModule, JvmPlatformParameters>,
|
||||||
syntheticFiles: Collection<JetFile>,
|
syntheticFiles: Collection<JetFile>,
|
||||||
delegateProvider: ModuleResolverProvider,
|
delegateProvider: ModuleResolverProvider,
|
||||||
@@ -46,10 +46,6 @@ fun createModuleResolverProvider(
|
|||||||
|
|
||||||
val allModuleInfos = collectAllModuleInfosFromIdeaModel(project).toHashSet()
|
val allModuleInfos = collectAllModuleInfosFromIdeaModel(project).toHashSet()
|
||||||
|
|
||||||
val globalContext =
|
|
||||||
(delegateProvider as? ModuleResolverProviderImpl)?.globalContext?.withCompositeExceptionTrackerUnderSameLock()
|
|
||||||
?: GlobalContext()
|
|
||||||
|
|
||||||
val syntheticFilesByModule = syntheticFiles.groupBy { it.getModuleInfo() }
|
val syntheticFilesByModule = syntheticFiles.groupBy { it.getModuleInfo() }
|
||||||
val syntheticFilesModules = syntheticFilesByModule.keySet()
|
val syntheticFilesModules = syntheticFilesByModule.keySet()
|
||||||
allModuleInfos.addAll(syntheticFilesModules)
|
allModuleInfos.addAll(syntheticFilesModules)
|
||||||
|
|||||||
+23
-2
@@ -19,6 +19,8 @@ package org.jetbrains.jet.plugin.caches.resolve
|
|||||||
import org.jetbrains.jet.context.GlobalContextImpl
|
import org.jetbrains.jet.context.GlobalContextImpl
|
||||||
import org.jetbrains.jet.storage.LockBasedStorageManager
|
import org.jetbrains.jet.storage.LockBasedStorageManager
|
||||||
import org.jetbrains.jet.storage.ExceptionTracker
|
import org.jetbrains.jet.storage.ExceptionTracker
|
||||||
|
import com.intellij.openapi.progress.ProcessCanceledException
|
||||||
|
import com.intellij.openapi.diagnostic.Logger
|
||||||
|
|
||||||
fun GlobalContextImpl.withCompositeExceptionTrackerUnderSameLock(): GlobalContextImpl {
|
fun GlobalContextImpl.withCompositeExceptionTrackerUnderSameLock(): GlobalContextImpl {
|
||||||
val newExceptionTracker = CompositeExceptionTracker(this.exceptionTracker)
|
val newExceptionTracker = CompositeExceptionTracker(this.exceptionTracker)
|
||||||
@@ -26,8 +28,27 @@ fun GlobalContextImpl.withCompositeExceptionTrackerUnderSameLock(): GlobalContex
|
|||||||
return GlobalContextImpl(newStorageManager, newExceptionTracker)
|
return GlobalContextImpl(newStorageManager, newExceptionTracker)
|
||||||
}
|
}
|
||||||
|
|
||||||
private class CompositeExceptionTracker(val delegate: ExceptionTracker): ExceptionTracker() {
|
private class CompositeExceptionTracker(val delegate: ExceptionTracker) : ExceptionTracker() {
|
||||||
override fun getModificationCount(): Long {
|
override fun getModificationCount(): Long {
|
||||||
return super<ExceptionTracker>.getModificationCount() + delegate.getModificationCount()
|
return super.getModificationCount() + delegate.getModificationCount()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class ExceptionTrackerWithProcessCanceledReport() : ExceptionTracker() {
|
||||||
|
override fun handleException(throwable: Throwable): RuntimeException {
|
||||||
|
if (throwable is ProcessCanceledException) {
|
||||||
|
LOG.info("ProcessCancelException was thrown while analyzing libraries. Cache has to be rebuilt.")
|
||||||
|
}
|
||||||
|
throw super.handleException(throwable)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class object {
|
||||||
|
val LOG = Logger.getInstance(javaClass<ExceptionTrackerWithProcessCanceledReport>())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public fun GlobalContext(logProcessCanceled: Boolean): GlobalContextImpl {
|
||||||
|
val tracker = if (logProcessCanceled) ExceptionTrackerWithProcessCanceledReport() else ExceptionTracker()
|
||||||
|
return GlobalContextImpl(LockBasedStorageManager.createWithExceptionHandling(tracker), tracker)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user