Extract KotlinMetadataFinder interface out of KotlinClassFinder

This commit is contained in:
Alexander Udalov
2016-11-16 11:42:28 +03:00
parent 5f4313223e
commit 19520bf29c
3 changed files with 37 additions and 16 deletions
@@ -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)
// "<builtins-metadata>" 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("<builtins-metadata>"))
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 }
}
@@ -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?
}
@@ -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?
}