From a7cf6bbf9a7da26cf9ecc017c37f48855b19f094 Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Tue, 28 Jul 2015 15:32:49 +0300 Subject: [PATCH] Extract BasicMap from IncrementalCacheImpl Original commit: bde78c2df29788235c6619838ceee1cafda68f42 --- .../jps/incremental/IncrementalCacheImpl.kt | 77 ++-------------- .../jps/incremental/storage/BasicMap.kt | 91 +++++++++++++++++++ 2 files changed, 100 insertions(+), 68 deletions(-) create mode 100644 jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/storage/BasicMap.kt diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt index a397ff69908..baca0cc86b0 100644 --- a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt +++ b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt @@ -17,7 +17,10 @@ package org.jetbrains.kotlin.jps.incremental import com.intellij.openapi.util.io.FileUtil -import com.intellij.util.io.* +import com.intellij.util.io.BooleanDataDescriptor +import com.intellij.util.io.DataExternalizer +import com.intellij.util.io.IOUtil +import com.intellij.util.io.KeyDescriptor import gnu.trove.THashMap import gnu.trove.THashSet import org.jetbrains.annotations.TestOnly @@ -33,6 +36,7 @@ import org.jetbrains.kotlin.jps.build.KotlinBuilder import org.jetbrains.kotlin.jps.incremental.IncrementalCacheImpl.RecompilationDecision.DO_NOTHING import org.jetbrains.kotlin.jps.incremental.IncrementalCacheImpl.RecompilationDecision.RECOMPILE_OTHER_IN_CHUNK_AND_DEPENDANTS import org.jetbrains.kotlin.jps.incremental.IncrementalCacheImpl.RecompilationDecision.RECOMPILE_OTHER_KOTLIN_IN_CHUNK +import org.jetbrains.kotlin.jps.incremental.storage.BasicMap import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.load.java.JvmAnnotationNames import org.jetbrains.kotlin.load.kotlin.ModuleMapping @@ -48,9 +52,11 @@ import org.jetbrains.kotlin.serialization.ProtoBuf import org.jetbrains.kotlin.serialization.deserialization.visibility import org.jetbrains.kotlin.serialization.jvm.BitEncoding import org.jetbrains.kotlin.serialization.jvm.JvmProtoBufUtil -import org.jetbrains.kotlin.utils.Printer import org.jetbrains.org.objectweb.asm.* -import java.io.* +import java.io.DataInput +import java.io.DataInputStream +import java.io.DataOutput +import java.io.File import java.security.MessageDigest import java.util.* @@ -309,71 +315,6 @@ public class IncrementalCacheImpl(targetDataRoot: File) : StorageOwner, Incremen maps.forEach { it.close () } } - private inner abstract class BasicMap( - private val storageFile: File, - private val valueExternalizer: DataExternalizer - ) { - protected open val keyDescriptor: KeyDescriptor - get() = EnumeratorStringDescriptor() - - protected var storage: PersistentHashMap = createMap() - - public fun contains(key: String): Boolean = storage.containsMapping(key) - - public open fun clean() { - try { - storage.close() - } - catch (ignored: IOException) { - } - - PersistentHashMap.deleteFilesStartingWith(storage.getBaseFile()!!) - try { - storage = createMap() - } - catch (ignored: IOException) { - } - } - - public open fun flush(memoryCachesOnly: Boolean) { - if (memoryCachesOnly) { - if (storage.isDirty()) { - storage.dropMemoryCaches() - } - } - else { - storage.force() - } - } - - public fun close() { - storage.close() - } - - TestOnly - public fun dump(): String { - return with(StringBuilder()) { - with(Printer(this)) { - println(this@BasicMap.javaClass.getSimpleName()) - pushIndent() - - for (key in storage.getAllKeysWithExistingMapping().sort()) { - println("$key -> ${dumpValue(storage[key])}") - } - - popIndent() - } - - this - }.toString() - } - - protected abstract fun dumpValue(value: V): String - - private fun createMap(): PersistentHashMap = - PersistentHashMap(storageFile, keyDescriptor, valueExternalizer) - } - private inner class ProtoMap(storageFile: File) : BasicMap(storageFile, ByteArrayExternalizer) { public fun put(className: JvmClassName, data: ByteArray, isPackage: Boolean, checkChangesIsOpenPart: Boolean = true): Boolean { diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/storage/BasicMap.kt b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/storage/BasicMap.kt new file mode 100644 index 00000000000..995a47303e9 --- /dev/null +++ b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/storage/BasicMap.kt @@ -0,0 +1,91 @@ +/* + * Copyright 2010-2015 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.jps.incremental.storage + +import com.intellij.util.io.DataExternalizer +import com.intellij.util.io.EnumeratorStringDescriptor +import com.intellij.util.io.KeyDescriptor +import com.intellij.util.io.PersistentHashMap +import org.jetbrains.annotations.TestOnly +import org.jetbrains.kotlin.utils.Printer +import java.io.File +import java.io.IOException + +public abstract class BasicMap( + private val storageFile: File, + private val valueExternalizer: DataExternalizer +) { + protected open val keyDescriptor: KeyDescriptor + get() = EnumeratorStringDescriptor() + + protected var storage: PersistentHashMap = createMap() + + public fun contains(key: String): Boolean = storage.containsMapping(key) + + public open fun clean() { + try { + storage.close() + } + catch (ignored: IOException) { + } + + PersistentHashMap.deleteFilesStartingWith(storage.getBaseFile()!!) + try { + storage = createMap() + } + catch (ignored: IOException) { + } + } + + public open fun flush(memoryCachesOnly: Boolean) { + if (memoryCachesOnly) { + if (storage.isDirty()) { + storage.dropMemoryCaches() + } + } + else { + storage.force() + } + } + + public fun close() { + storage.close() + } + + TestOnly + public fun dump(): String { + return with(StringBuilder()) { + with(Printer(this)) { + println(this@BasicMap.javaClass.getSimpleName()) + pushIndent() + + for (key in storage.getAllKeysWithExistingMapping().sort()) { + println("$key -> ${dumpValue(storage[key])}") + } + + popIndent() + } + + this + }.toString() + } + + protected abstract fun dumpValue(value: V): String + + private fun createMap(): PersistentHashMap = + PersistentHashMap(storageFile, keyDescriptor, valueExternalizer) +} \ No newline at end of file