Merge VirtualFileKotlinClassFinder into VirtualFileFinder
VirtualFileKotlinClassFinder was the only direct subclass of VirtualFileFinder
This commit is contained in:
@@ -21,7 +21,7 @@ import com.intellij.psi.search.GlobalSearchScope
|
|||||||
import org.jetbrains.kotlin.builtins.BuiltInSerializerProtocol
|
import org.jetbrains.kotlin.builtins.BuiltInSerializerProtocol
|
||||||
import org.jetbrains.kotlin.cli.jvm.index.JavaRoot
|
import org.jetbrains.kotlin.cli.jvm.index.JavaRoot
|
||||||
import org.jetbrains.kotlin.cli.jvm.index.JvmDependenciesIndex
|
import org.jetbrains.kotlin.cli.jvm.index.JvmDependenciesIndex
|
||||||
import org.jetbrains.kotlin.load.kotlin.VirtualFileKotlinClassFinder
|
import org.jetbrains.kotlin.load.kotlin.VirtualFileFinder
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
@@ -32,7 +32,7 @@ import java.io.InputStream
|
|||||||
class CliVirtualFileFinder(
|
class CliVirtualFileFinder(
|
||||||
private val index: JvmDependenciesIndex,
|
private val index: JvmDependenciesIndex,
|
||||||
private val scope: GlobalSearchScope
|
private val scope: GlobalSearchScope
|
||||||
) : VirtualFileKotlinClassFinder() {
|
) : VirtualFileFinder() {
|
||||||
override fun findVirtualFileWithHeader(classId: ClassId): VirtualFile? =
|
override fun findVirtualFileWithHeader(classId: ClassId): VirtualFile? =
|
||||||
findBinaryClass(classId, classId.relativeClassName.asString().replace('.', '$') + ".class")
|
findBinaryClass(classId, classId.relativeClassName.asString().replace('.', '$') + ".class")
|
||||||
|
|
||||||
|
|||||||
@@ -19,10 +19,35 @@ package org.jetbrains.kotlin.load.kotlin
|
|||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
|
import org.jetbrains.kotlin.load.java.structure.JavaClass
|
||||||
|
import org.jetbrains.kotlin.load.java.structure.impl.JavaClassImpl
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
|
import org.jetbrains.kotlin.utils.sure
|
||||||
|
|
||||||
interface VirtualFileFinder : KotlinClassFinder {
|
abstract class VirtualFileFinder : KotlinClassFinder {
|
||||||
fun findVirtualFileWithHeader(classId: ClassId): VirtualFile?
|
abstract fun findVirtualFileWithHeader(classId: ClassId): VirtualFile?
|
||||||
|
|
||||||
|
override fun findKotlinClass(classId: ClassId): KotlinJvmBinaryClass? {
|
||||||
|
val file = findVirtualFileWithHeader(classId) ?: return null
|
||||||
|
return KotlinBinaryClassCache.getKotlinBinaryClass(file)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun findKotlinClass(javaClass: JavaClass): KotlinJvmBinaryClass? {
|
||||||
|
var file = (javaClass as JavaClassImpl).psi.containingFile?.virtualFile ?: return null
|
||||||
|
if (javaClass.outerClass != null) {
|
||||||
|
// For nested classes we get a file of the containing class, to get the actual class file for A.B.C,
|
||||||
|
// we take the file for A, take its parent directory, then in this directory we look for A$B$C.class
|
||||||
|
file = file.parent!!.findChild(classFileName(javaClass) + ".class").sure { "Virtual file not found for $javaClass" }
|
||||||
|
}
|
||||||
|
|
||||||
|
return KotlinBinaryClassCache.getKotlinBinaryClass(file)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun classFileName(jClass: JavaClass): String {
|
||||||
|
val simpleName = jClass.name.asString()
|
||||||
|
val outerClass = jClass.outerClass ?: return simpleName
|
||||||
|
return classFileName(outerClass) + "$" + simpleName
|
||||||
|
}
|
||||||
|
|
||||||
companion object SERVICE {
|
companion object SERVICE {
|
||||||
fun getInstance(project: Project): VirtualFileFinder =
|
fun getInstance(project: Project): VirtualFileFinder =
|
||||||
|
|||||||
-46
@@ -1,46 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.load.kotlin
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.load.java.structure.JavaClass
|
|
||||||
import org.jetbrains.kotlin.load.java.structure.impl.JavaClassImpl
|
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
|
||||||
import org.jetbrains.kotlin.utils.sure
|
|
||||||
|
|
||||||
abstract class VirtualFileKotlinClassFinder : VirtualFileFinder {
|
|
||||||
override fun findKotlinClass(classId: ClassId): KotlinJvmBinaryClass? {
|
|
||||||
val file = findVirtualFileWithHeader(classId) ?: return null
|
|
||||||
return KotlinBinaryClassCache.getKotlinBinaryClass(file)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun findKotlinClass(javaClass: JavaClass): KotlinJvmBinaryClass? {
|
|
||||||
var file = (javaClass as JavaClassImpl).psi.containingFile?.virtualFile ?: return null
|
|
||||||
if (javaClass.outerClass != null) {
|
|
||||||
// For nested classes we get a file of the containing class, to get the actual class file for A.B.C,
|
|
||||||
// we take the file for A, take its parent directory, then in this directory we look for A$B$C.class
|
|
||||||
file = file.parent!!.findChild(classFileName(javaClass) + ".class").sure { "Virtual file not found for $javaClass" }
|
|
||||||
}
|
|
||||||
|
|
||||||
return KotlinBinaryClassCache.getKotlinBinaryClass(file)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun classFileName(jClass: JavaClass): String {
|
|
||||||
val outerClass = jClass.outerClass ?: return jClass.name.asString()
|
|
||||||
|
|
||||||
return classFileName(outerClass) + "$" + jClass.name.asString()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+2
-2
@@ -21,12 +21,12 @@ import com.intellij.openapi.vfs.VirtualFile
|
|||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import com.intellij.util.indexing.FileBasedIndex
|
import com.intellij.util.indexing.FileBasedIndex
|
||||||
import com.intellij.util.indexing.ID
|
import com.intellij.util.indexing.ID
|
||||||
import org.jetbrains.kotlin.load.kotlin.VirtualFileKotlinClassFinder
|
import org.jetbrains.kotlin.load.kotlin.VirtualFileFinder
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import java.io.InputStream
|
import java.io.InputStream
|
||||||
|
|
||||||
class IDEVirtualFileFinder(private val scope: GlobalSearchScope) : VirtualFileKotlinClassFinder() {
|
class IDEVirtualFileFinder(private val scope: GlobalSearchScope) : VirtualFileFinder() {
|
||||||
override fun findMetadata(classId: ClassId): InputStream? {
|
override fun findMetadata(classId: ClassId): InputStream? {
|
||||||
return findVirtualFileWithHeader(classId, KotlinMetadataFileIndex.KEY)?.inputStream
|
return findVirtualFileWithHeader(classId, KotlinMetadataFileIndex.KEY)?.inputStream
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user