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.openapi.project.Project
|
||||
import com.intellij.openapi.vfs.StandardFileSystems
|
||||
import com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem
|
||||
import com.intellij.psi.PsiElementFinder
|
||||
import com.intellij.psi.PsiManager
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
@@ -86,18 +85,14 @@ public fun configureApplicationEnvironment(app: MockApplication) {
|
||||
* * given [ktFiles] as Kotlin sources
|
||||
* * other Java sources in [compilerConfig] (set via [addJavaSourceRoots])
|
||||
* * 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(
|
||||
project: MockProject,
|
||||
compilerConfig: CompilerConfiguration,
|
||||
packagePartProvider: (GlobalSearchScope) -> PackagePartProvider,
|
||||
jarFileSystem: CoreJarFileSystem = CoreJarFileSystem(),
|
||||
) {
|
||||
val ktFiles = getKtFilesFromPaths(project, getSourceFilePaths(compilerConfig))
|
||||
configureProjectEnvironment(project, compilerConfig, ktFiles, packagePartProvider, jarFileSystem)
|
||||
configureProjectEnvironment(project, compilerConfig, ktFiles, packagePartProvider)
|
||||
}
|
||||
|
||||
private fun getSourceFilePaths(
|
||||
@@ -139,7 +134,6 @@ internal fun configureProjectEnvironment(
|
||||
compilerConfig: CompilerConfiguration,
|
||||
ktFiles: List<KtFile>,
|
||||
packagePartProvider: (GlobalSearchScope) -> PackagePartProvider,
|
||||
jarFileSystem: CoreJarFileSystem = CoreJarFileSystem(),
|
||||
) {
|
||||
reRegisterJavaElementFinder(project)
|
||||
|
||||
@@ -181,7 +175,6 @@ internal fun configureProjectEnvironment(
|
||||
compilerConfig,
|
||||
project,
|
||||
ktFiles,
|
||||
jarFileSystem
|
||||
)
|
||||
)
|
||||
project.picoContainer.registerComponentInstance(
|
||||
|
||||
+6
-14
@@ -6,10 +6,8 @@
|
||||
package org.jetbrains.kotlin.analysis.project.structure.impl
|
||||
|
||||
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 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.KtLibrarySourceModule
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||
@@ -52,7 +50,6 @@ internal class KtSourceModuleByCompilerConfiguration(
|
||||
compilerConfig: CompilerConfiguration,
|
||||
project: Project,
|
||||
ktFiles: List<KtFile>,
|
||||
jarFileSystem: CoreJarFileSystem,
|
||||
) : BaseKtModuleByCompilerConfiguration(compilerConfig, project), KtSourceModule {
|
||||
override val directRegularDependencies: List<KtLibraryModule> by lazy {
|
||||
val libraryRoots = compilerConfig.jvmModularRoots + compilerConfig.jvmClasspathRoots
|
||||
@@ -62,16 +59,14 @@ internal class KtSourceModuleByCompilerConfiguration(
|
||||
directories.forEach {
|
||||
// E.g., project/app/build/intermediates/javac/debug/classes
|
||||
val root = it.toPath()
|
||||
val virtualFilesProvider = { LibraryUtils.getAllVirtualFilesFromDirectory(root) }
|
||||
add(KtLibraryModuleByCompilerConfiguration(compilerConfig, project, virtualFilesProvider, root))
|
||||
add(KtLibraryModuleByCompilerConfiguration(compilerConfig, project, root))
|
||||
}
|
||||
}
|
||||
libraryRootsByType[false]?.let { jars ->
|
||||
jars.forEach {
|
||||
// E.g., project/libs/libA/a.jar
|
||||
val root = it.toPath()
|
||||
val virtualFilesProvider = { LibraryUtils.getAllVirtualFilesFromJar(root, jarFileSystem) }
|
||||
add(KtLibraryModuleByCompilerConfiguration(compilerConfig, project, virtualFilesProvider, root))
|
||||
add(KtLibraryModuleByCompilerConfiguration(compilerConfig, project, root))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -85,8 +80,7 @@ internal class KtSourceModuleByCompilerConfiguration(
|
||||
internal class KtLibraryModuleByCompilerConfiguration(
|
||||
compilerConfig: CompilerConfiguration,
|
||||
project: Project,
|
||||
virtualFilesProvider: () -> Collection<VirtualFile>,
|
||||
private val root: Path,
|
||||
root: Path,
|
||||
) : BaseKtModuleByCompilerConfiguration(compilerConfig, project), KtLibraryModule {
|
||||
override val directRegularDependencies: List<KtModule> get() = emptyList()
|
||||
|
||||
@@ -97,12 +91,10 @@ internal class KtLibraryModuleByCompilerConfiguration(
|
||||
get() = null
|
||||
|
||||
override val contentScope: GlobalSearchScope by lazy {
|
||||
GlobalSearchScope.filesScope(project, virtualFilesProvider())
|
||||
ProjectScope.getLibrariesScope(project)
|
||||
}
|
||||
|
||||
private val binaryRoots by lazy {
|
||||
listOf(root)
|
||||
}
|
||||
private val binaryRoots = listOf(root)
|
||||
|
||||
override fun getBinaryRoots(): Collection<Path> = binaryRoots
|
||||
}
|
||||
|
||||
+1
-3
@@ -6,7 +6,6 @@
|
||||
package org.jetbrains.kotlin.analysis.project.structure.impl
|
||||
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtLibraryModule
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||
@@ -18,9 +17,8 @@ internal class KtModuleProviderByCompilerConfiguration(
|
||||
compilerConfig: CompilerConfiguration,
|
||||
project: Project,
|
||||
ktFiles: List<KtFile>,
|
||||
jarFileSystem: CoreJarFileSystem,
|
||||
) : ProjectStructureProvider() {
|
||||
private val sourceModule = KtSourceModuleByCompilerConfiguration(compilerConfig, project, ktFiles, jarFileSystem)
|
||||
private val sourceModule = KtSourceModuleByCompilerConfiguration(compilerConfig, project, ktFiles)
|
||||
|
||||
private val libraryModules: Collection<KtLibraryModule> by lazy {
|
||||
sourceModule.directRegularDependencies
|
||||
|
||||
-6
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.test.services
|
||||
|
||||
import com.intellij.openapi.Disposable
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
|
||||
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.jvm.compiler.EnvironmentConfigFiles
|
||||
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.config.CommonConfigurationKeys
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
@@ -62,10 +60,6 @@ abstract class CompilerConfigurationProvider(val testServices: TestServices) : T
|
||||
val bootClasspath = mockJdk?.let { listOf(it) }
|
||||
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()
|
||||
|
||||
Reference in New Issue
Block a user