AA: use existing utils to define library scope
No visible differences from end clients, and we can avoid uses/shares of Jar file system across modules
This commit is contained in:
committed by
Ilya Kirillov
parent
94433a1600
commit
af32a65c78
+1
-8
@@ -9,7 +9,6 @@ import com.intellij.mock.MockApplication
|
|||||||
import com.intellij.mock.MockProject
|
import com.intellij.mock.MockProject
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.vfs.StandardFileSystems
|
import com.intellij.openapi.vfs.StandardFileSystems
|
||||||
import com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem
|
|
||||||
import com.intellij.psi.PsiElementFinder
|
import com.intellij.psi.PsiElementFinder
|
||||||
import com.intellij.psi.PsiManager
|
import com.intellij.psi.PsiManager
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
@@ -86,18 +85,14 @@ public fun configureApplicationEnvironment(app: MockApplication) {
|
|||||||
* * given [ktFiles] as Kotlin sources
|
* * given [ktFiles] as Kotlin sources
|
||||||
* * other Java sources in [compilerConfig] (set via [addJavaSourceRoots])
|
* * other Java sources in [compilerConfig] (set via [addJavaSourceRoots])
|
||||||
* * JVM class paths in [compilerConfig] (set via [addJvmClasspathRoots]) as library.
|
* * JVM class paths in [compilerConfig] (set via [addJvmClasspathRoots]) as library.
|
||||||
*
|
|
||||||
* To make sure the same instance of [CoreJarFileSystem] is used (and thus file lookup in jars is cached),
|
|
||||||
* pass [jarFileSystem] from [KotlinCoreEnvironment] if available.
|
|
||||||
*/
|
*/
|
||||||
public fun configureProjectEnvironment(
|
public fun configureProjectEnvironment(
|
||||||
project: MockProject,
|
project: MockProject,
|
||||||
compilerConfig: CompilerConfiguration,
|
compilerConfig: CompilerConfiguration,
|
||||||
packagePartProvider: (GlobalSearchScope) -> PackagePartProvider,
|
packagePartProvider: (GlobalSearchScope) -> PackagePartProvider,
|
||||||
jarFileSystem: CoreJarFileSystem = CoreJarFileSystem(),
|
|
||||||
) {
|
) {
|
||||||
val ktFiles = getKtFilesFromPaths(project, getSourceFilePaths(compilerConfig))
|
val ktFiles = getKtFilesFromPaths(project, getSourceFilePaths(compilerConfig))
|
||||||
configureProjectEnvironment(project, compilerConfig, ktFiles, packagePartProvider, jarFileSystem)
|
configureProjectEnvironment(project, compilerConfig, ktFiles, packagePartProvider)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getSourceFilePaths(
|
private fun getSourceFilePaths(
|
||||||
@@ -139,7 +134,6 @@ internal fun configureProjectEnvironment(
|
|||||||
compilerConfig: CompilerConfiguration,
|
compilerConfig: CompilerConfiguration,
|
||||||
ktFiles: List<KtFile>,
|
ktFiles: List<KtFile>,
|
||||||
packagePartProvider: (GlobalSearchScope) -> PackagePartProvider,
|
packagePartProvider: (GlobalSearchScope) -> PackagePartProvider,
|
||||||
jarFileSystem: CoreJarFileSystem = CoreJarFileSystem(),
|
|
||||||
) {
|
) {
|
||||||
reRegisterJavaElementFinder(project)
|
reRegisterJavaElementFinder(project)
|
||||||
|
|
||||||
@@ -181,7 +175,6 @@ internal fun configureProjectEnvironment(
|
|||||||
compilerConfig,
|
compilerConfig,
|
||||||
project,
|
project,
|
||||||
ktFiles,
|
ktFiles,
|
||||||
jarFileSystem
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
project.picoContainer.registerComponentInstance(
|
project.picoContainer.registerComponentInstance(
|
||||||
|
|||||||
+6
-14
@@ -6,10 +6,8 @@
|
|||||||
package org.jetbrains.kotlin.analysis.project.structure.impl
|
package org.jetbrains.kotlin.analysis.project.structure.impl
|
||||||
|
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.vfs.VirtualFile
|
|
||||||
import com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem
|
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import org.jetbrains.kotlin.analysis.api.impl.base.util.LibraryUtils
|
import com.intellij.psi.search.ProjectScope
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.KtLibraryModule
|
import org.jetbrains.kotlin.analysis.project.structure.KtLibraryModule
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.KtLibrarySourceModule
|
import org.jetbrains.kotlin.analysis.project.structure.KtLibrarySourceModule
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||||
@@ -52,7 +50,6 @@ internal class KtSourceModuleByCompilerConfiguration(
|
|||||||
compilerConfig: CompilerConfiguration,
|
compilerConfig: CompilerConfiguration,
|
||||||
project: Project,
|
project: Project,
|
||||||
ktFiles: List<KtFile>,
|
ktFiles: List<KtFile>,
|
||||||
jarFileSystem: CoreJarFileSystem,
|
|
||||||
) : BaseKtModuleByCompilerConfiguration(compilerConfig, project), KtSourceModule {
|
) : BaseKtModuleByCompilerConfiguration(compilerConfig, project), KtSourceModule {
|
||||||
override val directRegularDependencies: List<KtLibraryModule> by lazy {
|
override val directRegularDependencies: List<KtLibraryModule> by lazy {
|
||||||
val libraryRoots = compilerConfig.jvmModularRoots + compilerConfig.jvmClasspathRoots
|
val libraryRoots = compilerConfig.jvmModularRoots + compilerConfig.jvmClasspathRoots
|
||||||
@@ -62,16 +59,14 @@ internal class KtSourceModuleByCompilerConfiguration(
|
|||||||
directories.forEach {
|
directories.forEach {
|
||||||
// E.g., project/app/build/intermediates/javac/debug/classes
|
// E.g., project/app/build/intermediates/javac/debug/classes
|
||||||
val root = it.toPath()
|
val root = it.toPath()
|
||||||
val virtualFilesProvider = { LibraryUtils.getAllVirtualFilesFromDirectory(root) }
|
add(KtLibraryModuleByCompilerConfiguration(compilerConfig, project, root))
|
||||||
add(KtLibraryModuleByCompilerConfiguration(compilerConfig, project, virtualFilesProvider, root))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
libraryRootsByType[false]?.let { jars ->
|
libraryRootsByType[false]?.let { jars ->
|
||||||
jars.forEach {
|
jars.forEach {
|
||||||
// E.g., project/libs/libA/a.jar
|
// E.g., project/libs/libA/a.jar
|
||||||
val root = it.toPath()
|
val root = it.toPath()
|
||||||
val virtualFilesProvider = { LibraryUtils.getAllVirtualFilesFromJar(root, jarFileSystem) }
|
add(KtLibraryModuleByCompilerConfiguration(compilerConfig, project, root))
|
||||||
add(KtLibraryModuleByCompilerConfiguration(compilerConfig, project, virtualFilesProvider, root))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -85,8 +80,7 @@ internal class KtSourceModuleByCompilerConfiguration(
|
|||||||
internal class KtLibraryModuleByCompilerConfiguration(
|
internal class KtLibraryModuleByCompilerConfiguration(
|
||||||
compilerConfig: CompilerConfiguration,
|
compilerConfig: CompilerConfiguration,
|
||||||
project: Project,
|
project: Project,
|
||||||
virtualFilesProvider: () -> Collection<VirtualFile>,
|
root: Path,
|
||||||
private val root: Path,
|
|
||||||
) : BaseKtModuleByCompilerConfiguration(compilerConfig, project), KtLibraryModule {
|
) : BaseKtModuleByCompilerConfiguration(compilerConfig, project), KtLibraryModule {
|
||||||
override val directRegularDependencies: List<KtModule> get() = emptyList()
|
override val directRegularDependencies: List<KtModule> get() = emptyList()
|
||||||
|
|
||||||
@@ -97,12 +91,10 @@ internal class KtLibraryModuleByCompilerConfiguration(
|
|||||||
get() = null
|
get() = null
|
||||||
|
|
||||||
override val contentScope: GlobalSearchScope by lazy {
|
override val contentScope: GlobalSearchScope by lazy {
|
||||||
GlobalSearchScope.filesScope(project, virtualFilesProvider())
|
ProjectScope.getLibrariesScope(project)
|
||||||
}
|
}
|
||||||
|
|
||||||
private val binaryRoots by lazy {
|
private val binaryRoots = listOf(root)
|
||||||
listOf(root)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getBinaryRoots(): Collection<Path> = binaryRoots
|
override fun getBinaryRoots(): Collection<Path> = binaryRoots
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-3
@@ -6,7 +6,6 @@
|
|||||||
package org.jetbrains.kotlin.analysis.project.structure.impl
|
package org.jetbrains.kotlin.analysis.project.structure.impl
|
||||||
|
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem
|
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.KtLibraryModule
|
import org.jetbrains.kotlin.analysis.project.structure.KtLibraryModule
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||||
@@ -18,9 +17,8 @@ internal class KtModuleProviderByCompilerConfiguration(
|
|||||||
compilerConfig: CompilerConfiguration,
|
compilerConfig: CompilerConfiguration,
|
||||||
project: Project,
|
project: Project,
|
||||||
ktFiles: List<KtFile>,
|
ktFiles: List<KtFile>,
|
||||||
jarFileSystem: CoreJarFileSystem,
|
|
||||||
) : ProjectStructureProvider() {
|
) : ProjectStructureProvider() {
|
||||||
private val sourceModule = KtSourceModuleByCompilerConfiguration(compilerConfig, project, ktFiles, jarFileSystem)
|
private val sourceModule = KtSourceModuleByCompilerConfiguration(compilerConfig, project, ktFiles)
|
||||||
|
|
||||||
private val libraryModules: Collection<KtLibraryModule> by lazy {
|
private val libraryModules: Collection<KtLibraryModule> by lazy {
|
||||||
sourceModule.directRegularDependencies
|
sourceModule.directRegularDependencies
|
||||||
|
|||||||
-6
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.test.services
|
|||||||
|
|
||||||
import com.intellij.openapi.Disposable
|
import com.intellij.openapi.Disposable
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem
|
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
|
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
|
||||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
|
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
|
||||||
@@ -15,7 +14,6 @@ import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSourceLocation
|
|||||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.JvmPackagePartProvider
|
import org.jetbrains.kotlin.cli.jvm.compiler.JvmPackagePartProvider
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreApplicationEnvironment
|
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||||
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
@@ -62,10 +60,6 @@ abstract class CompilerConfigurationProvider(val testServices: TestServices) : T
|
|||||||
val bootClasspath = mockJdk?.let { listOf(it) }
|
val bootClasspath = mockJdk?.let { listOf(it) }
|
||||||
environment.registerJavac(kotlinFiles = ktFiles, bootClasspath = bootClasspath)
|
environment.registerJavac(kotlinFiles = ktFiles, bootClasspath = bootClasspath)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getJarFileSystem(module: TestModule): CoreJarFileSystem {
|
|
||||||
return getKotlinCoreEnvironment(module).projectEnvironment.environment.jarFileSystem as CoreJarFileSystem
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val TestServices.compilerConfigurationProvider: CompilerConfigurationProvider by TestServices.testServiceAccessor()
|
val TestServices.compilerConfigurationProvider: CompilerConfigurationProvider by TestServices.testServiceAccessor()
|
||||||
|
|||||||
Reference in New Issue
Block a user