Make it possible to instantiate StandaloneAnalysisAPISession with a custom clasloader

This commit is contained in:
Pavel Mikhailovskii
2023-06-13 13:34:11 +00:00
committed by Space Team
parent 98f7ac044c
commit 89c8392255
2 changed files with 23 additions and 3 deletions
@@ -14,6 +14,7 @@ import com.intellij.ide.highlighter.JavaFileType
import com.intellij.mock.MockApplication
import com.intellij.mock.MockProject
import com.intellij.openapi.Disposable
import com.intellij.openapi.extensions.PluginDescriptor
import com.intellij.openapi.roots.PackageIndex
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.openapi.vfs.VirtualFileManager
@@ -54,6 +55,7 @@ import org.jetbrains.kotlin.resolve.jvm.KotlinJavaPsiFacade
import org.jetbrains.kotlin.resolve.jvm.modules.JavaModuleResolver
import org.jetbrains.kotlin.utils.addIfNotNull
import org.jetbrains.kotlin.utils.addToStdlib.popLast
import org.picocontainer.PicoContainer
import java.nio.file.Path
object StandaloneProjectFactory {
@@ -61,6 +63,7 @@ object StandaloneProjectFactory {
projectDisposable: Disposable,
applicationDisposable: Disposable,
compilerConfiguration: CompilerConfiguration = CompilerConfiguration(),
classLoader: ClassLoader = MockProject::class.java.classLoader
): KotlinCoreProjectEnvironment {
val applicationEnvironment =
KotlinCoreEnvironment.getOrCreateApplicationEnvironmentForTests(applicationDisposable, compilerConfiguration)
@@ -68,9 +71,21 @@ object StandaloneProjectFactory {
registerApplicationServices(applicationEnvironment.application)
return KotlinCoreProjectEnvironment(projectDisposable, applicationEnvironment).apply {
registerProjectServices(project)
registerJavaPsiFacade(project)
return object : KotlinCoreProjectEnvironment(projectDisposable, applicationEnvironment) {
init {
registerProjectServices(project)
registerJavaPsiFacade(project)
}
override fun createProject(parent: PicoContainer, parentDisposable: Disposable): MockProject {
return object : MockProject(parent, parentDisposable) {
@Throws(ClassNotFoundException::class)
override fun <T> loadClass(className: String, pluginDescriptor: PluginDescriptor): Class<T> {
@Suppress("UNCHECKED_CAST")
return Class.forName(className, true, classLoader) as Class<T>
}
}
}
}
}