Remove old IC: remove unnecessary caches

Original commit: 62fdd91947
This commit is contained in:
Alexey Tsvetkov
2017-05-02 12:59:28 +03:00
parent 66fbde0df0
commit 4f8908c329
2 changed files with 0 additions and 89 deletions
@@ -309,7 +309,6 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) {
}
changesInfo.processChangesUsingLookups(filesToCompile.values().toSet(), dataManager, fsOperations, incrementalCaches.values)
incrementalCaches.values.forEach { it.cleanDirtyInlineFunctions() }
return OK
}
@@ -16,110 +16,22 @@
package org.jetbrains.kotlin.jps.incremental
import com.intellij.openapi.util.io.FileUtil
import gnu.trove.THashSet
import org.jetbrains.jps.builders.storage.BuildDataPaths
import org.jetbrains.jps.builders.storage.StorageProvider
import org.jetbrains.jps.incremental.ModuleBuildTarget
import org.jetbrains.jps.incremental.storage.BuildDataManager
import org.jetbrains.jps.incremental.storage.StorageOwner
import org.jetbrains.kotlin.config.IncrementalCompilation
import org.jetbrains.kotlin.incremental.IncrementalCacheImpl
import org.jetbrains.kotlin.incremental.dumpCollection
import org.jetbrains.kotlin.incremental.storage.BasicMap
import org.jetbrains.kotlin.incremental.storage.BasicStringMap
import org.jetbrains.kotlin.incremental.storage.StringCollectionExternalizer
import org.jetbrains.kotlin.jps.build.KotlinBuilder
import org.jetbrains.kotlin.jps.incremental.storages.PathCollectionExternalizer
import org.jetbrains.kotlin.jps.incremental.storages.PathFunctionPair
import org.jetbrains.kotlin.jps.incremental.storages.PathFunctionPairKeyDescriptor
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
import java.io.File
class JpsIncrementalCacheImpl(
target: ModuleBuildTarget,
paths: BuildDataPaths
) : IncrementalCacheImpl<ModuleBuildTarget>(paths.getTargetDataRoot(target), target.outputDir, target), StorageOwner {
private val dirtyInlineFunctionsMap = registerMap(DirtyInlineFunctionsMap(DIRTY_INLINE_FUNCTIONS.storageFile))
private val inlinedTo = registerMap(InlineFunctionsFilesMap(INLINED_TO.storageFile))
override fun registerInline(fromPath: String, jvmSignature: String, toPath: String) {
if (!IncrementalCompilation.isEnabled()) {
inlinedTo.add(fromPath, jvmSignature, toPath)
}
}
override fun debugLog(message: String) {
KotlinBuilder.LOG.debug(message)
}
fun getFilesToReinline(): Collection<File> {
val result = THashSet(FileUtil.PATH_HASHING_STRATEGY)
for ((className, functions) in dirtyInlineFunctionsMap.getEntries()) {
val classFilePath = getClassFilePath(className.internalName)
for (cache in thisWithDependentCaches) {
val targetFiles = functions.flatMap { (cache as JpsIncrementalCacheImpl).inlinedTo[classFilePath, it] }
result.addAll(targetFiles)
}
}
return result.map(::File)
}
fun cleanDirtyInlineFunctions() {
dirtyInlineFunctionsMap.clean()
}
override fun processChangedInlineFunctions(className: JvmClassName, changedFunctions: Collection<String>) {
if (changedFunctions.isNotEmpty()) {
dirtyInlineFunctionsMap.put(className, changedFunctions.toList())
}
}
private inner class DirtyInlineFunctionsMap(storageFile: File) : BasicStringMap<Collection<String>>(storageFile, StringCollectionExternalizer) {
fun getEntries(): Map<JvmClassName, Collection<String>> =
storage.keys.associateBy(JvmClassName::byInternalName) { storage[it]!! }
fun put(className: JvmClassName, changedFunctions: List<String>) {
storage[className.internalName] = changedFunctions
}
override fun dumpValue(value: Collection<String>) = value.dumpCollection()
}
/**
* Mapping: (sourceFile+inlineFunction)->(targetFiles)
*
* Where:
* * sourceFile - path to some kotlin source
* * inlineFunction - jvmSignature of some inline function in source file
* * target files - collection of files inlineFunction has been inlined to
*/
private inner class InlineFunctionsFilesMap(storageFile: File) : BasicMap<PathFunctionPair, Collection<String>>(storageFile, PathFunctionPairKeyDescriptor, PathCollectionExternalizer) {
fun add(sourcePath: String, jvmSignature: String, targetPath: String) {
val key = PathFunctionPair(sourcePath, jvmSignature)
storage.append(key, targetPath)
}
operator fun get(sourcePath: String, jvmSignature: String): Collection<String> {
val key = PathFunctionPair(sourcePath, jvmSignature)
return storage[key] ?: emptySet()
}
override fun dumpKey(key: PathFunctionPair): String =
"(${key.path}, ${key.function})"
override fun dumpValue(value: Collection<String>) =
value.dumpCollection()
}
companion object {
private val DIRTY_INLINE_FUNCTIONS = "dirty-inline-functions"
private val INLINED_TO = "inlined-to"
}
}
private class KotlinIncrementalStorageProvider(