Leave KotlinCliJavaFileManager::findClass only passing JavaClassFinder.Request
This commit is contained in:
@@ -22,6 +22,7 @@ import com.intellij.openapi.vfs.VirtualFile
|
|||||||
import com.intellij.psi.PsiJavaModule
|
import com.intellij.psi.PsiJavaModule
|
||||||
import com.intellij.psi.PsiManager
|
import com.intellij.psi.PsiManager
|
||||||
import com.intellij.psi.impl.light.LightJavaModule
|
import com.intellij.psi.impl.light.LightJavaModule
|
||||||
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import org.jetbrains.kotlin.cli.common.config.ContentRoot
|
import org.jetbrains.kotlin.cli.common.config.ContentRoot
|
||||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation
|
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation
|
||||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
|
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
|
||||||
@@ -58,6 +59,8 @@ class ClasspathRootsResolver(
|
|||||||
) {
|
) {
|
||||||
val javaModuleGraph = JavaModuleGraph(javaModuleFinder)
|
val javaModuleGraph = JavaModuleGraph(javaModuleFinder)
|
||||||
|
|
||||||
|
private val searchScope = GlobalSearchScope.allScope(psiManager.project)
|
||||||
|
|
||||||
data class RootsAndModules(val roots: List<JavaRoot>, val modules: List<JavaModule>)
|
data class RootsAndModules(val roots: List<JavaRoot>, val modules: List<JavaModule>)
|
||||||
|
|
||||||
private data class RootWithPrefix(val root: VirtualFile, val packagePrefix: String?)
|
private data class RootWithPrefix(val root: VirtualFile, val packagePrefix: String?)
|
||||||
@@ -162,7 +165,7 @@ class ClasspathRootsResolver(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (moduleInfoFile != null) {
|
if (moduleInfoFile != null) {
|
||||||
val moduleInfo = JavaModuleInfo.read(moduleInfoFile, javaFileManager) ?: return null
|
val moduleInfo = JavaModuleInfo.read(moduleInfoFile, javaFileManager, searchScope) ?: return null
|
||||||
return JavaModule.Explicit(moduleInfo, listOf(JavaModule.Root(root, isBinary = true)), moduleInfoFile)
|
return JavaModule.Explicit(moduleInfo, listOf(JavaModule.Root(root, isBinary = true)), moduleInfoFile)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-3
@@ -84,8 +84,6 @@ class KotlinCliJavaFileManagerImpl(private val myPsiManager: PsiManager) : CoreJ
|
|||||||
|
|
||||||
fun findClass(classId: ClassId, searchScope: GlobalSearchScope) = findClass(JavaClassFinder.Request(classId), searchScope)
|
fun findClass(classId: ClassId, searchScope: GlobalSearchScope) = findClass(JavaClassFinder.Request(classId), searchScope)
|
||||||
|
|
||||||
override fun findClass(classId: ClassId): JavaClass? = findClass(JavaClassFinder.Request(classId), allScope)
|
|
||||||
|
|
||||||
override fun findClass(request: JavaClassFinder.Request, searchScope: GlobalSearchScope): JavaClass? {
|
override fun findClass(request: JavaClassFinder.Request, searchScope: GlobalSearchScope): JavaClass? {
|
||||||
val (classId, classFileContentFromRequest, outerClassFromRequest) = request
|
val (classId, classFileContentFromRequest, outerClassFromRequest) = request
|
||||||
val virtualFile = findVirtualFileForTopLevelClass(classId, searchScope) ?: return null
|
val virtualFile = findVirtualFileForTopLevelClass(classId, searchScope) ?: return null
|
||||||
@@ -112,7 +110,7 @@ class KotlinCliJavaFileManagerImpl(private val myPsiManager: PsiManager) : CoreJ
|
|||||||
val classContent = classFileContentFromRequest ?: virtualFile.contentsToByteArray()
|
val classContent = classFileContentFromRequest ?: virtualFile.contentsToByteArray()
|
||||||
if (virtualFile.nameWithoutExtension.contains("$") && isNotTopLevelClass(classContent)) return@getOrPut null
|
if (virtualFile.nameWithoutExtension.contains("$") && isNotTopLevelClass(classContent)) return@getOrPut null
|
||||||
|
|
||||||
val resolver = ClassifierResolutionContext { findClass(it) }
|
val resolver = ClassifierResolutionContext { findClass(it, allScope) }
|
||||||
|
|
||||||
BinaryJavaClass(
|
BinaryJavaClass(
|
||||||
virtualFile, classId.asSingleFqName(), resolver, signatureParsingComponent,
|
virtualFile, classId.asSingleFqName(), resolver, signatureParsingComponent,
|
||||||
|
|||||||
@@ -198,7 +198,8 @@ class KotlinCoreEnvironment private constructor(
|
|||||||
jdkHome?.path?.let { path ->
|
jdkHome?.path?.let { path ->
|
||||||
jrtFileSystem?.findFileByPath(path + URLUtil.JAR_SEPARATOR)
|
jrtFileSystem?.findFileByPath(path + URLUtil.JAR_SEPARATOR)
|
||||||
},
|
},
|
||||||
javaFileManager
|
javaFileManager,
|
||||||
|
project
|
||||||
)
|
)
|
||||||
|
|
||||||
val outputDirectory =
|
val outputDirectory =
|
||||||
|
|||||||
@@ -16,17 +16,25 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.cli.jvm.modules
|
package org.jetbrains.kotlin.cli.jvm.modules
|
||||||
|
|
||||||
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
import com.intellij.psi.PsiJavaModule
|
import com.intellij.psi.PsiJavaModule
|
||||||
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import org.jetbrains.kotlin.resolve.jvm.KotlinCliJavaFileManager
|
import org.jetbrains.kotlin.resolve.jvm.KotlinCliJavaFileManager
|
||||||
import org.jetbrains.kotlin.resolve.jvm.modules.JavaModule
|
import org.jetbrains.kotlin.resolve.jvm.modules.JavaModule
|
||||||
import org.jetbrains.kotlin.resolve.jvm.modules.JavaModuleFinder
|
import org.jetbrains.kotlin.resolve.jvm.modules.JavaModuleFinder
|
||||||
import org.jetbrains.kotlin.resolve.jvm.modules.JavaModuleInfo
|
import org.jetbrains.kotlin.resolve.jvm.modules.JavaModuleInfo
|
||||||
|
|
||||||
class CliJavaModuleFinder(jrtFileSystemRoot: VirtualFile?, val javaFileManager: KotlinCliJavaFileManager) : JavaModuleFinder {
|
class CliJavaModuleFinder(
|
||||||
|
jrtFileSystemRoot: VirtualFile?,
|
||||||
|
private val javaFileManager: KotlinCliJavaFileManager,
|
||||||
|
project: Project
|
||||||
|
) : JavaModuleFinder {
|
||||||
private val modulesRoot = jrtFileSystemRoot?.findChild("modules")
|
private val modulesRoot = jrtFileSystemRoot?.findChild("modules")
|
||||||
private val userModules = linkedMapOf<String, JavaModule>()
|
private val userModules = linkedMapOf<String, JavaModule>()
|
||||||
|
|
||||||
|
private val allScope = GlobalSearchScope.allScope(project)
|
||||||
|
|
||||||
fun addUserModule(module: JavaModule) {
|
fun addUserModule(module: JavaModule) {
|
||||||
userModules.putIfAbsent(module.name, module)
|
userModules.putIfAbsent(module.name, module)
|
||||||
}
|
}
|
||||||
@@ -42,7 +50,7 @@ class CliJavaModuleFinder(jrtFileSystemRoot: VirtualFile?, val javaFileManager:
|
|||||||
|
|
||||||
private fun findSystemModule(moduleRoot: VirtualFile): JavaModule.Explicit? {
|
private fun findSystemModule(moduleRoot: VirtualFile): JavaModule.Explicit? {
|
||||||
val file = moduleRoot.findChild(PsiJavaModule.MODULE_INFO_CLS_FILE) ?: return null
|
val file = moduleRoot.findChild(PsiJavaModule.MODULE_INFO_CLS_FILE) ?: return null
|
||||||
val moduleInfo = JavaModuleInfo.read(file, javaFileManager) ?: return null
|
val moduleInfo = JavaModuleInfo.read(file, javaFileManager, allScope) ?: return null
|
||||||
return JavaModule.Explicit(moduleInfo, listOf(JavaModule.Root(moduleRoot, isBinary = true)), file)
|
return JavaModule.Explicit(moduleInfo, listOf(JavaModule.Root(moduleRoot, isBinary = true)), file)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-2
@@ -19,6 +19,8 @@ package org.jetbrains.kotlin.resolve.jvm.modules
|
|||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
import com.intellij.psi.PsiJavaModule
|
import com.intellij.psi.PsiJavaModule
|
||||||
import com.intellij.psi.PsiModifier
|
import com.intellij.psi.PsiModifier
|
||||||
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
|
import org.jetbrains.kotlin.load.java.JavaClassFinder
|
||||||
import org.jetbrains.kotlin.load.java.structure.JavaAnnotation
|
import org.jetbrains.kotlin.load.java.structure.JavaAnnotation
|
||||||
import org.jetbrains.kotlin.load.java.structure.impl.JavaAnnotationImpl
|
import org.jetbrains.kotlin.load.java.structure.impl.JavaAnnotationImpl
|
||||||
import org.jetbrains.kotlin.load.java.structure.impl.classFiles.BinaryClassSignatureParser
|
import org.jetbrains.kotlin.load.java.structure.impl.classFiles.BinaryClassSignatureParser
|
||||||
@@ -60,7 +62,7 @@ class JavaModuleInfo(
|
|||||||
psiJavaModule.annotations.convert(::JavaAnnotationImpl)
|
psiJavaModule.annotations.convert(::JavaAnnotationImpl)
|
||||||
)
|
)
|
||||||
|
|
||||||
fun read(file: VirtualFile, javaFileManager: KotlinCliJavaFileManager): JavaModuleInfo? {
|
fun read(file: VirtualFile, javaFileManager: KotlinCliJavaFileManager, searchScope: GlobalSearchScope): JavaModuleInfo? {
|
||||||
val contents = try {
|
val contents = try {
|
||||||
file.contentsToByteArray()
|
file.contentsToByteArray()
|
||||||
} catch (e: IOException) {
|
} catch (e: IOException) {
|
||||||
@@ -93,7 +95,7 @@ class JavaModuleInfo(
|
|||||||
|
|
||||||
val (annotation, visitor) = BinaryJavaAnnotation.createAnnotationAndVisitor(
|
val (annotation, visitor) = BinaryJavaAnnotation.createAnnotationAndVisitor(
|
||||||
descriptor,
|
descriptor,
|
||||||
ClassifierResolutionContext(javaFileManager::findClass),
|
ClassifierResolutionContext { javaFileManager.findClass(JavaClassFinder.Request(it), searchScope) },
|
||||||
BinaryClassSignatureParser(),
|
BinaryClassSignatureParser(),
|
||||||
isFreshlySupportedTypeUseAnnotation = true
|
isFreshlySupportedTypeUseAnnotation = true
|
||||||
)
|
)
|
||||||
|
|||||||
-2
@@ -20,11 +20,9 @@ import com.intellij.psi.impl.file.impl.JavaFileManager
|
|||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import org.jetbrains.kotlin.load.java.JavaClassFinder
|
import org.jetbrains.kotlin.load.java.JavaClassFinder
|
||||||
import org.jetbrains.kotlin.load.java.structure.JavaClass
|
import org.jetbrains.kotlin.load.java.structure.JavaClass
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
|
||||||
interface KotlinCliJavaFileManager : JavaFileManager {
|
interface KotlinCliJavaFileManager : JavaFileManager {
|
||||||
fun findClass(classId: ClassId): JavaClass?
|
|
||||||
fun findClass(request: JavaClassFinder.Request, searchScope: GlobalSearchScope): JavaClass?
|
fun findClass(request: JavaClassFinder.Request, searchScope: GlobalSearchScope): JavaClass?
|
||||||
fun knownClassNamesInPackage(packageFqName: FqName): Set<String>?
|
fun knownClassNamesInPackage(packageFqName: FqName): Set<String>?
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user