From 19520bf29cc945826d41131db2ce60be7abe0d38 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 16 Nov 2016 11:42:28 +0300 Subject: [PATCH] Extract KotlinMetadataFinder interface out of KotlinClassFinder --- .../jvm/compiler/JvmCliVirtualFileFinder.kt | 19 ++++++------- .../kotlin/load/kotlin/KotlinClassFinder.kt | 7 ++--- .../deserialization/KotlinMetadataFinder.kt | 27 +++++++++++++++++++ 3 files changed, 37 insertions(+), 16 deletions(-) create mode 100644 core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/KotlinMetadataFinder.kt diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/JvmCliVirtualFileFinder.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/JvmCliVirtualFileFinder.kt index 7bc48b59e90..115cfe33a37 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/JvmCliVirtualFileFinder.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/JvmCliVirtualFileFinder.kt @@ -32,22 +32,19 @@ class JvmCliVirtualFileFinder( private val index: JvmDependenciesIndex, private val scope: GlobalSearchScope ) : VirtualFileKotlinClassFinder() { - override fun findVirtualFileWithHeader(classId: ClassId): VirtualFile? { - val classFileName = classId.relativeClassName.asString().replace('.', '$') + ".class" - return index.findClass(classId, acceptedRootTypes = JavaRoot.OnlyBinary) { dir, rootType -> - dir.findChild(classFileName)?.check(VirtualFile::isValid) - }?.check { it in scope } - } + override fun findVirtualFileWithHeader(classId: ClassId): VirtualFile? = + findBinaryClass(classId, classId.relativeClassName.asString().replace('.', '$') + ".class") override fun findBuiltInsData(packageFqName: FqName): InputStream? { - val fileName = BuiltInSerializerProtocol.getBuiltInsFileName(packageFqName) - // "" is just a made-up name // JvmDependenciesIndex requires the ClassId of the class which we're searching for, to cache the last request+result val classId = ClassId(packageFqName, Name.special("")) - return index.findClass(classId, acceptedRootTypes = JavaRoot.OnlyBinary) { dir, rootType -> - dir.findChild(fileName)?.check(VirtualFile::isValid) - }?.check { it in scope }?.inputStream + return findBinaryClass(classId, BuiltInSerializerProtocol.getBuiltInsFileName(packageFqName))?.inputStream } + + private fun findBinaryClass(classId: ClassId, fileName: String): VirtualFile? = + index.findClass(classId, acceptedRootTypes = JavaRoot.OnlyBinary) { dir, _ -> + dir.findChild(fileName)?.check(VirtualFile::isValid) + }?.check { it in scope } } diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/KotlinClassFinder.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/KotlinClassFinder.kt index 759006960bf..534aa3550ac 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/KotlinClassFinder.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/KotlinClassFinder.kt @@ -18,13 +18,10 @@ package org.jetbrains.kotlin.load.kotlin import org.jetbrains.kotlin.load.java.structure.JavaClass import org.jetbrains.kotlin.name.ClassId -import org.jetbrains.kotlin.name.FqName -import java.io.InputStream +import org.jetbrains.kotlin.serialization.deserialization.KotlinMetadataFinder -interface KotlinClassFinder { +interface KotlinClassFinder : KotlinMetadataFinder { fun findKotlinClass(classId: ClassId): KotlinJvmBinaryClass? fun findKotlinClass(javaClass: JavaClass): KotlinJvmBinaryClass? - - fun findBuiltInsData(packageFqName: FqName): InputStream? } diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/KotlinMetadataFinder.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/KotlinMetadataFinder.kt new file mode 100644 index 00000000000..d7114348729 --- /dev/null +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/KotlinMetadataFinder.kt @@ -0,0 +1,27 @@ +/* + * 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.serialization.deserialization + +import org.jetbrains.kotlin.name.FqName +import java.io.InputStream + +interface KotlinMetadataFinder { + /** + * @return an [InputStream] which should be used to load the .kotlin_builtins file for package with the given [packageFqName]. + */ + fun findBuiltInsData(packageFqName: FqName): InputStream? +}