From c55ea2c4a08ed3de7ab5262ca1547d0ff7954658 Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Thu, 21 Jan 2016 14:59:45 +0300 Subject: [PATCH] Move back classes which used only in JPS Original commit: cc1c5b7e10f19dac679bed5b471ae5ad090f981f --- .../incremental/JpsIncrementalCacheImpl.kt | 10 ++++- .../jps/incremental/storages/externalizers.kt | 45 +++++++++++++++++++ .../kotlin/jps/incremental/storages/values.kt | 42 +++++++++++++++++ 3 files changed, 95 insertions(+), 2 deletions(-) create mode 100644 jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/storages/externalizers.kt create mode 100644 jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/storages/values.kt diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/JpsIncrementalCacheImpl.kt b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/JpsIncrementalCacheImpl.kt index 6653b066084..4616450bfb1 100644 --- a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/JpsIncrementalCacheImpl.kt +++ b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/JpsIncrementalCacheImpl.kt @@ -25,9 +25,15 @@ 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.* -import org.jetbrains.kotlin.incremental.storage.* +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.incremental.storage.StringToLongMapExternalizer import org.jetbrains.kotlin.inline.inlineFunctionsJvmNames 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 org.jetbrains.org.objectweb.asm.* import java.io.File @@ -179,7 +185,7 @@ class JpsIncrementalCacheImpl( * * 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>(storageFile, PathFunctionPairKeyDescriptor, PathStringCollectionExternalizer) { + private inner class InlineFunctionsFilesMap(storageFile: File) : BasicMap>(storageFile, PathFunctionPairKeyDescriptor, PathCollectionExternalizer) { fun add(sourcePath: String, jvmSignature: String, targetPath: String) { val key = PathFunctionPair(sourcePath, jvmSignature) storage.append(key, targetPath) diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/storages/externalizers.kt b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/storages/externalizers.kt new file mode 100644 index 00000000000..5625caca6fa --- /dev/null +++ b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/storages/externalizers.kt @@ -0,0 +1,45 @@ +/* + * Copyright 2010-2016 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.storages + +import com.intellij.openapi.util.io.FileUtil +import com.intellij.util.io.IOUtil +import com.intellij.util.io.KeyDescriptor +import gnu.trove.THashSet +import org.jetbrains.jps.incremental.storage.PathStringDescriptor +import org.jetbrains.kotlin.incremental.storage.CollectionExternalizer +import java.io.DataInput +import java.io.DataOutput + +object PathFunctionPairKeyDescriptor : KeyDescriptor { + override fun read(input: DataInput): PathFunctionPair { + val path = IOUtil.readUTF(input) + val function = IOUtil.readUTF(input) + return PathFunctionPair(path, function) + } + + override fun save(output: DataOutput, value: PathFunctionPair) { + IOUtil.writeUTF(output, value.path) + IOUtil.writeUTF(output, value.function) + } + + override fun getHashCode(value: PathFunctionPair): Int = value.hashCode() + + override fun isEqual(val1: PathFunctionPair, val2: PathFunctionPair): Boolean = val1 == val2 +} + +object PathCollectionExternalizer : CollectionExternalizer(PathStringDescriptor(), { THashSet(FileUtil.PATH_HASHING_STRATEGY) }) diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/storages/values.kt b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/storages/values.kt new file mode 100644 index 00000000000..40c633f4660 --- /dev/null +++ b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/storages/values.kt @@ -0,0 +1,42 @@ +/* + * Copyright 2010-2016 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.storages + +import com.intellij.openapi.util.io.FileUtil + +class PathFunctionPair( + val path: String, + val function: String +): Comparable { + override fun compareTo(other: PathFunctionPair): Int { + val pathComp = FileUtil.comparePaths(path, other.path) + + if (pathComp != 0) return pathComp + + return function.compareTo(other.function) + } + + override fun equals(other: Any?): Boolean = + when (other) { + is PathFunctionPair -> + FileUtil.pathsEqual(path, other.path) && function == other.function + else -> + false + } + + override fun hashCode(): Int = 31 * FileUtil.pathHashCode(path) + function.hashCode() +}