Use ModuleInfo in VirtualFileFinder to add script dependencies in search scope
Otherwise it prevent to inline functions from those dependencies during scratch compilation
This commit is contained in:
@@ -149,7 +149,7 @@ internal fun getMethodNode(
|
||||
}
|
||||
|
||||
internal fun findVirtualFile(state: GenerationState, classId: ClassId): VirtualFile? {
|
||||
return VirtualFileFinder.getInstance(state.project).findVirtualFileWithHeader(classId)
|
||||
return VirtualFileFinder.getInstance(state.project, state.module).findVirtualFileWithHeader(classId)
|
||||
}
|
||||
|
||||
internal fun findVirtualFileImprecise(state: GenerationState, internalClassName: String): VirtualFile? {
|
||||
|
||||
@@ -16,12 +16,17 @@
|
||||
|
||||
package org.jetbrains.kotlin.cli.jvm.compiler
|
||||
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import org.jetbrains.kotlin.cli.jvm.index.JvmDependenciesIndex
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.load.kotlin.VirtualFileFinder
|
||||
import org.jetbrains.kotlin.load.kotlin.VirtualFileFinderFactory
|
||||
|
||||
// TODO: create different JvmDependenciesIndex instances for different sets of source roots to improve performance
|
||||
class CliVirtualFileFinderFactory(private val index: JvmDependenciesIndex) : VirtualFileFinderFactory {
|
||||
override fun create(scope: GlobalSearchScope): VirtualFileFinder = CliVirtualFileFinder(index, scope)
|
||||
|
||||
override fun create(project: Project, module: ModuleDescriptor): VirtualFileFinder =
|
||||
CliVirtualFileFinder(index, GlobalSearchScope.allScope(project))
|
||||
}
|
||||
|
||||
@@ -19,6 +19,8 @@ package org.jetbrains.kotlin.load.kotlin
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import org.jetbrains.annotations.TestOnly
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.load.java.structure.JavaClass
|
||||
import org.jetbrains.kotlin.load.java.structure.impl.VirtualFileBoundJavaClass
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
@@ -51,7 +53,11 @@ abstract class VirtualFileFinder : KotlinClassFinder {
|
||||
}
|
||||
|
||||
companion object SERVICE {
|
||||
fun getInstance(project: Project, module: ModuleDescriptor): VirtualFileFinder =
|
||||
VirtualFileFinderFactory.getInstance(project).create(project, module)
|
||||
|
||||
@TestOnly
|
||||
fun getInstance(project: Project): VirtualFileFinder =
|
||||
VirtualFileFinderFactory.getInstance(project).create(GlobalSearchScope.allScope(project))
|
||||
VirtualFileFinderFactory.getInstance(project).create(GlobalSearchScope.allScope(project))
|
||||
}
|
||||
}
|
||||
|
||||
+2
@@ -19,9 +19,11 @@ package org.jetbrains.kotlin.load.kotlin
|
||||
import com.intellij.openapi.components.ServiceManager
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
|
||||
interface VirtualFileFinderFactory : MetadataFinderFactory {
|
||||
override fun create(scope: GlobalSearchScope): VirtualFileFinder
|
||||
override fun create(project: Project, module: ModuleDescriptor): VirtualFileFinder
|
||||
|
||||
companion object SERVICE {
|
||||
fun getInstance(project: Project): VirtualFileFinderFactory =
|
||||
|
||||
@@ -16,9 +16,12 @@
|
||||
|
||||
package org.jetbrains.kotlin.load.kotlin
|
||||
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.serialization.deserialization.KotlinMetadataFinder
|
||||
|
||||
interface MetadataFinderFactory {
|
||||
fun create(scope: GlobalSearchScope): KotlinMetadataFinder
|
||||
fun create(project: Project, module: ModuleDescriptor): KotlinMetadataFinder
|
||||
}
|
||||
|
||||
+17
@@ -16,10 +16,27 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.vfilefinder
|
||||
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import org.jetbrains.kotlin.analyzer.ModuleInfo
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.idea.caches.project.IdeaModuleInfo
|
||||
import org.jetbrains.kotlin.idea.caches.project.ScriptModuleInfo
|
||||
import org.jetbrains.kotlin.load.kotlin.VirtualFileFinder
|
||||
import org.jetbrains.kotlin.load.kotlin.VirtualFileFinderFactory
|
||||
|
||||
class IDEVirtualFileFinderFactory : VirtualFileFinderFactory {
|
||||
override fun create(scope: GlobalSearchScope): VirtualFileFinder = IDEVirtualFileFinder(scope)
|
||||
|
||||
override fun create(project: Project, module: ModuleDescriptor): VirtualFileFinder {
|
||||
val ideaModuleInfo = (module.getCapability(ModuleInfo.Capability) as? IdeaModuleInfo)
|
||||
|
||||
val scope = when (ideaModuleInfo) {
|
||||
is ScriptModuleInfo -> GlobalSearchScope.union(
|
||||
ideaModuleInfo.dependencies().map { it.contentScope() }.toTypedArray()
|
||||
)
|
||||
else -> GlobalSearchScope.allScope(project)
|
||||
}
|
||||
return IDEVirtualFileFinder(scope)
|
||||
}
|
||||
}
|
||||
|
||||
+5
-1
@@ -36,8 +36,11 @@ import org.jetbrains.kotlin.idea.refactoring.getLineStartOffset
|
||||
import org.jetbrains.kotlin.idea.refactoring.toPsiFile
|
||||
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
|
||||
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
||||
import org.jetbrains.kotlin.idea.vfilefinder.IDEVirtualFileFinder
|
||||
import org.jetbrains.kotlin.idea.vfilefinder.IDEVirtualFileFinderFactory
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.load.kotlin.VirtualFileFinder
|
||||
import org.jetbrains.kotlin.load.kotlin.VirtualFileFinderFactory
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
@@ -135,7 +138,8 @@ private fun readClassFileImpl(project: Project,
|
||||
|
||||
val classId = ClassId(jvmName.packageFqName, Name.identifier(fqNameWithInners.asString()))
|
||||
|
||||
val fileFinder = VirtualFileFinder.getInstance(project)
|
||||
// TODO use debugger search scope
|
||||
val fileFinder = VirtualFileFinderFactory.getInstance(project).create(GlobalSearchScope.allScope(project))
|
||||
val classFile = fileFinder.findVirtualFileWithHeader(classId) ?: return null
|
||||
return classFile.contentsToByteArray(false)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user