From 12d7187394e9198d40a792bf2f7f2e6d54934692 Mon Sep 17 00:00:00 2001 From: Michael Nedzelsky Date: Wed, 10 Jun 2015 00:34:49 +0300 Subject: [PATCH] Minor: extract common logic from KotlinClassFileIndex, KotlinJavaScriptMetaFileIndex --- .../kotlin/idea/vfilefinder/fileIndexes.kt | 108 ++++++++---------- 1 file changed, 47 insertions(+), 61 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/vfilefinder/fileIndexes.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/vfilefinder/fileIndexes.kt index 93d2de6558b..3792ab8a564 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/vfilefinder/fileIndexes.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/vfilefinder/fileIndexes.kt @@ -29,86 +29,72 @@ import java.io.DataInput import java.io.DataOutput import java.util.Collections -private val KEY_DESCRIPTOR = object : KeyDescriptor { - override fun save(output: DataOutput, value: FqName) = output.writeUTF(value.asString()) +abstract class KotlinFileIndexBase(private val classOfIndex: Class) : ScalarIndexExtension() { + public val KEY: ID = ID.create(classOfIndex.getCanonicalName()) - override fun read(input: DataInput) = FqName(input.readUTF()) + private val KEY_DESCRIPTOR = object : KeyDescriptor { + override fun save(output: DataOutput, value: FqName) = output.writeUTF(value.asString()) - override fun getHashCode(value: FqName) = value.asString().hashCode() + override fun read(input: DataInput) = FqName(input.readUTF()) - override fun isEqual(val1: FqName?, val2: FqName?) = val1 == val2 -} + override fun getHashCode(value: FqName) = value.asString().hashCode() -private fun indexer(log: Logger, f: (VirtualFile) -> FqName?) = - DataIndexer { - try { - val fqName = f(it.getFile()) - if (fqName != null) { - Collections.singletonMap(fqName, null) - } - else { - emptyMap() - } - } - catch (e: Throwable) { - log.warn("Error while indexing file " + it.getFileName(), e) - emptyMap() - } + override fun isEqual(val1: FqName?, val2: FqName?) = val1 == val2 } -public class KotlinClassFileIndex : ScalarIndexExtension() { + private val LOG = Logger.getInstance(classOfIndex) + override fun getName() = KEY - override fun getIndexer() = INDEXER - - override fun getKeyDescriptor() = KEY_DESCRIPTOR - - override fun getInputFilter() = INPUT_FILTER - override fun dependsOnFileContent() = true - override fun getVersion() = VERSION + override fun getKeyDescriptor() = KEY_DESCRIPTOR - companion object { - public val KEY: ID = ID.create(javaClass().getCanonicalName()) - - private val LOG = Logger.getInstance(javaClass()) - - private val VERSION = 2 - - private val INPUT_FILTER = FileBasedIndex.InputFilter { file -> file.getFileType() == JavaClassFileType.INSTANCE } - - private val INDEXER = indexer(LOG) { file -> - val kotlinClass = KotlinBinaryClassCache.getKotlinBinaryClass(file) - if (kotlinClass != null && kotlinClass.getClassHeader().isCompatibleAbiVersion) kotlinClass.getClassId().asSingleFqName() else null - } - } + protected fun indexer(f: (VirtualFile) -> FqName?): DataIndexer = + DataIndexer { + try { + val fqName = f(it.getFile()) + if (fqName != null) { + Collections.singletonMap(fqName, null) + } + else { + emptyMap() + } + } + catch (e: Throwable) { + LOG.warn("Error while indexing file " + it.getFileName(), e) + emptyMap() + } + } } -public class KotlinJavaScriptMetaFileIndex : ScalarIndexExtension() { - override fun getName() = KEY +public object KotlinClassFileIndex : KotlinFileIndexBase(javaClass()) { override fun getIndexer() = INDEXER - override fun getKeyDescriptor() = KEY_DESCRIPTOR - - override fun getInputFilter() = INPUT_FILTER - - override fun dependsOnFileContent() = true + override fun getInputFilter() = FileBasedIndex.InputFilter { file -> file.getFileType() == JavaClassFileType.INSTANCE } override fun getVersion() = VERSION - companion object { - public val KEY: ID = ID.create(javaClass().getCanonicalName()) + private val VERSION = 2 - private val LOG = Logger.getInstance(javaClass()) - - private val VERSION = 1 - - private val INPUT_FILTER = FileBasedIndex.InputFilter { file -> file.getFileType() == KotlinJavaScriptMetaFileType } - - private val INDEXER = indexer(LOG) { file -> - if (file.getFileType() == KotlinJavaScriptMetaFileType) JsMetaFileUtils.getClassFqName(file) else null - } + private val INDEXER = indexer() { file -> + val kotlinClass = KotlinBinaryClassCache.getKotlinBinaryClass(file) + if (kotlinClass != null && kotlinClass.getClassHeader().isCompatibleAbiVersion) kotlinClass.getClassId().asSingleFqName() else null + } +} + +public object KotlinJavaScriptMetaFileIndex : KotlinFileIndexBase(javaClass()) { + + override fun getIndexer() = INDEXER + + override fun getInputFilter() = FileBasedIndex.InputFilter { file -> file.getFileType() == KotlinJavaScriptMetaFileType } + + override fun getVersion() = VERSION + + private val VERSION = 1 + + private val INDEXER = indexer() { file -> + if (file.getFileType() == KotlinJavaScriptMetaFileType) JsMetaFileUtils.getClassFqName(file) else null } }