Move FastJarFileSystem to ProjectEnvironment and link to the root disposable
This commit is contained in:
committed by
TeamCityServer
parent
3afed7f972
commit
d6adac8dd0
@@ -93,7 +93,7 @@ class K2JsIrCompiler : CLICompiler<K2JSCompilerArguments>() {
|
|||||||
configuration.put(CommonConfigurationKeys.MODULE_NAME, "repl.kts")
|
configuration.put(CommonConfigurationKeys.MODULE_NAME, "repl.kts")
|
||||||
|
|
||||||
val environment = KotlinCoreEnvironment.getOrCreateApplicationEnvironmentForProduction(rootDisposable, configuration)
|
val environment = KotlinCoreEnvironment.getOrCreateApplicationEnvironmentForProduction(rootDisposable, configuration)
|
||||||
val projectEnv = KotlinCoreEnvironment.ProjectEnvironment(rootDisposable, environment)
|
val projectEnv = KotlinCoreEnvironment.ProjectEnvironment(rootDisposable, environment, configuration)
|
||||||
projectEnv.registerExtensionsFromPlugins(configuration)
|
projectEnv.registerExtensionsFromPlugins(configuration)
|
||||||
|
|
||||||
val scriptingEvaluators = ScriptEvaluationExtension.getInstances(projectEnv.project)
|
val scriptingEvaluators = ScriptEvaluationExtension.getInstances(projectEnv.project)
|
||||||
|
|||||||
@@ -89,7 +89,8 @@ class K2JVMCompiler : CLICompiler<K2JVMCompilerArguments>() {
|
|||||||
val projectEnvironment =
|
val projectEnvironment =
|
||||||
KotlinCoreEnvironment.ProjectEnvironment(
|
KotlinCoreEnvironment.ProjectEnvironment(
|
||||||
rootDisposable,
|
rootDisposable,
|
||||||
KotlinCoreEnvironment.getOrCreateApplicationEnvironmentForProduction(rootDisposable, configuration)
|
KotlinCoreEnvironment.getOrCreateApplicationEnvironmentForProduction(rootDisposable, configuration),
|
||||||
|
configuration
|
||||||
)
|
)
|
||||||
projectEnvironment.registerExtensionsFromPlugins(configuration)
|
projectEnvironment.registerExtensionsFromPlugins(configuration)
|
||||||
|
|
||||||
|
|||||||
@@ -115,10 +115,47 @@ class KotlinCoreEnvironment private constructor(
|
|||||||
|
|
||||||
class ProjectEnvironment(
|
class ProjectEnvironment(
|
||||||
disposable: Disposable,
|
disposable: Disposable,
|
||||||
applicationEnvironment: KotlinCoreApplicationEnvironment
|
applicationEnvironment: KotlinCoreApplicationEnvironment,
|
||||||
|
configuration: CompilerConfiguration
|
||||||
) :
|
) :
|
||||||
KotlinCoreProjectEnvironment(disposable, applicationEnvironment) {
|
KotlinCoreProjectEnvironment(disposable, applicationEnvironment) {
|
||||||
|
|
||||||
|
internal val jarFileSystem: VirtualFileSystem
|
||||||
|
|
||||||
|
init {
|
||||||
|
val messageCollector = configuration.get(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY)
|
||||||
|
|
||||||
|
if (configuration.getBoolean(JVMConfigurationKeys.USE_FAST_JAR_FILE_SYSTEM)) {
|
||||||
|
messageCollector?.report(
|
||||||
|
STRONG_WARNING,
|
||||||
|
"Using new faster version of JAR FS: it should make your build faster, but the new implementation is experimental"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
jarFileSystem = when {
|
||||||
|
configuration.getBoolean(JVMConfigurationKeys.USE_FAST_JAR_FILE_SYSTEM) || configuration.getBoolean(CommonConfigurationKeys.USE_FIR) -> {
|
||||||
|
val fastJarFs = FastJarFileSystem.createIfUnmappingPossible()
|
||||||
|
|
||||||
|
if (fastJarFs == null) {
|
||||||
|
messageCollector?.report(
|
||||||
|
STRONG_WARNING,
|
||||||
|
"Your JDK doesn't seem to support mapped buffer unmapping, so the slower (old) version of JAR FS will be used"
|
||||||
|
)
|
||||||
|
applicationEnvironment.jarFileSystem
|
||||||
|
} else {
|
||||||
|
|
||||||
|
Disposer.register(disposable) {
|
||||||
|
fastJarFs.clearHandlersCache()
|
||||||
|
}
|
||||||
|
|
||||||
|
fastJarFs
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
else -> applicationEnvironment.jarFileSystem
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private var extensionRegistered = false
|
private var extensionRegistered = false
|
||||||
|
|
||||||
override fun preregisterServices() {
|
override fun preregisterServices() {
|
||||||
@@ -159,7 +196,8 @@ class KotlinCoreEnvironment private constructor(
|
|||||||
|
|
||||||
val configuration: CompilerConfiguration = initialConfiguration.apply { setupJdkClasspathRoots(configFiles) }.copy()
|
val configuration: CompilerConfiguration = initialConfiguration.apply { setupJdkClasspathRoots(configFiles) }.copy()
|
||||||
|
|
||||||
private val jarFileSystem: VirtualFileSystem
|
private val jarFileSystem: VirtualFileSystem =
|
||||||
|
(projectEnvironment as? ProjectEnvironment)?.jarFileSystem ?: applicationEnvironment.jarFileSystem
|
||||||
|
|
||||||
init {
|
init {
|
||||||
PersistentFSConstants::class.java.getDeclaredField("ourMaxIntellisenseFileSize")
|
PersistentFSConstants::class.java.getDeclaredField("ourMaxIntellisenseFileSize")
|
||||||
@@ -177,24 +215,6 @@ class KotlinCoreEnvironment private constructor(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
jarFileSystem = when {
|
|
||||||
configuration.getBoolean(JVMConfigurationKeys.USE_FAST_JAR_FILE_SYSTEM) || configuration.getBoolean(CommonConfigurationKeys.USE_FIR) -> {
|
|
||||||
val fastJarFs = FastJarFileSystem.createIfUnmappingPossible()
|
|
||||||
|
|
||||||
if (fastJarFs == null) {
|
|
||||||
messageCollector?.report(
|
|
||||||
STRONG_WARNING,
|
|
||||||
"Your JDK doesn't seem to support mapped buffer unmapping, so the slower (old) version of JAR FS will be used"
|
|
||||||
)
|
|
||||||
applicationEnvironment.jarFileSystem
|
|
||||||
} else {
|
|
||||||
fastJarFs
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else -> applicationEnvironment.jarFileSystem
|
|
||||||
}
|
|
||||||
|
|
||||||
(projectEnvironment as? ProjectEnvironment)?.registerExtensionsFromPlugins(configuration)
|
(projectEnvironment as? ProjectEnvironment)?.registerExtensionsFromPlugins(configuration)
|
||||||
// otherwise consider that project environment is properly configured before passing to the environment
|
// otherwise consider that project environment is properly configured before passing to the environment
|
||||||
// TODO: consider some asserts to check important extension points
|
// TODO: consider some asserts to check important extension points
|
||||||
@@ -455,7 +475,7 @@ class KotlinCoreEnvironment private constructor(
|
|||||||
): KotlinCoreEnvironment {
|
): KotlinCoreEnvironment {
|
||||||
setupIdeaStandaloneExecution()
|
setupIdeaStandaloneExecution()
|
||||||
val appEnv = getOrCreateApplicationEnvironmentForProduction(parentDisposable, configuration)
|
val appEnv = getOrCreateApplicationEnvironmentForProduction(parentDisposable, configuration)
|
||||||
val projectEnv = ProjectEnvironment(parentDisposable, appEnv)
|
val projectEnv = ProjectEnvironment(parentDisposable, appEnv, configuration)
|
||||||
val environment = KotlinCoreEnvironment(projectEnv, configuration, configFiles)
|
val environment = KotlinCoreEnvironment(projectEnv, configuration, configFiles)
|
||||||
|
|
||||||
synchronized(APPLICATION_LOCK) {
|
synchronized(APPLICATION_LOCK) {
|
||||||
@@ -487,7 +507,7 @@ class KotlinCoreEnvironment private constructor(
|
|||||||
val configuration = initialConfiguration.copy()
|
val configuration = initialConfiguration.copy()
|
||||||
// Tests are supposed to create a single project and dispose it right after use
|
// Tests are supposed to create a single project and dispose it right after use
|
||||||
val appEnv = createApplicationEnvironment(parentDisposable, configuration, unitTestMode = true)
|
val appEnv = createApplicationEnvironment(parentDisposable, configuration, unitTestMode = true)
|
||||||
val projectEnv = ProjectEnvironment(parentDisposable, appEnv)
|
val projectEnv = ProjectEnvironment(parentDisposable, appEnv, configuration)
|
||||||
return KotlinCoreEnvironment(projectEnv, configuration, extensionConfigs)
|
return KotlinCoreEnvironment(projectEnv, configuration, extensionConfigs)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -502,7 +522,7 @@ class KotlinCoreEnvironment private constructor(
|
|||||||
@TestOnly
|
@TestOnly
|
||||||
fun createProjectEnvironmentForTests(parentDisposable: Disposable, configuration: CompilerConfiguration): ProjectEnvironment {
|
fun createProjectEnvironmentForTests(parentDisposable: Disposable, configuration: CompilerConfiguration): ProjectEnvironment {
|
||||||
val appEnv = createApplicationEnvironment(parentDisposable, configuration, unitTestMode = true)
|
val appEnv = createApplicationEnvironment(parentDisposable, configuration, unitTestMode = true)
|
||||||
return ProjectEnvironment(parentDisposable, appEnv)
|
return ProjectEnvironment(parentDisposable, appEnv, configuration)
|
||||||
}
|
}
|
||||||
|
|
||||||
// used in the daemon for jar cache cleanup
|
// used in the daemon for jar cache cleanup
|
||||||
@@ -557,7 +577,6 @@ class KotlinCoreEnvironment private constructor(
|
|||||||
ourApplicationEnvironment = null
|
ourApplicationEnvironment = null
|
||||||
Disposer.dispose(environment.parentDisposable)
|
Disposer.dispose(environment.parentDisposable)
|
||||||
ZipHandler.clearFileAccessorCache()
|
ZipHandler.clearFileAccessorCache()
|
||||||
(environment.jarFileSystem as? FastJarFileSystem)?.clearHandlersCache()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1204,7 +1204,6 @@ class CompileServiceImpl(
|
|||||||
override fun clearJarCache() {
|
override fun clearJarCache() {
|
||||||
ZipHandler.clearFileAccessorCache()
|
ZipHandler.clearFileAccessorCache()
|
||||||
(KotlinCoreEnvironment.applicationEnvironment?.jarFileSystem as? CoreJarFileSystem)?.clearHandlersCache()
|
(KotlinCoreEnvironment.applicationEnvironment?.jarFileSystem as? CoreJarFileSystem)?.clearHandlersCache()
|
||||||
(KotlinCoreEnvironment.applicationEnvironment?.jarFileSystem as? FastJarFileSystem)?.clearHandlersCache()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private inline fun <R> ifAlive(
|
private inline fun <R> ifAlive(
|
||||||
|
|||||||
@@ -66,7 +66,8 @@ abstract class KotlinJvmReplServiceBase(
|
|||||||
val projectEnvironment =
|
val projectEnvironment =
|
||||||
KotlinCoreEnvironment.ProjectEnvironment(
|
KotlinCoreEnvironment.ProjectEnvironment(
|
||||||
disposable,
|
disposable,
|
||||||
KotlinCoreEnvironment.getOrCreateApplicationEnvironmentForProduction(disposable, configuration)
|
KotlinCoreEnvironment.getOrCreateApplicationEnvironmentForProduction(disposable, configuration),
|
||||||
|
configuration,
|
||||||
)
|
)
|
||||||
ReplFactoryExtension.registerExtensionPoint(projectEnvironment.project)
|
ReplFactoryExtension.registerExtensionPoint(projectEnvironment.project)
|
||||||
projectEnvironment.registerExtensionsFromPlugins(configuration)
|
projectEnvironment.registerExtensionsFromPlugins(configuration)
|
||||||
@@ -223,4 +224,4 @@ fun CompilerConfiguration.configureScripting(compilerId: CompilerId) {
|
|||||||
error
|
error
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
-1
@@ -670,7 +670,6 @@ class CompileServiceServerSideImpl(
|
|||||||
override suspend fun clearJarCache() {
|
override suspend fun clearJarCache() {
|
||||||
ZipHandler.clearFileAccessorCache()
|
ZipHandler.clearFileAccessorCache()
|
||||||
(KotlinCoreEnvironment.applicationEnvironment?.jarFileSystem as? CoreJarFileSystem)?.clearHandlersCache()
|
(KotlinCoreEnvironment.applicationEnvironment?.jarFileSystem as? CoreJarFileSystem)?.clearHandlersCache()
|
||||||
(KotlinCoreEnvironment.applicationEnvironment?.jarFileSystem as? FastJarFileSystem)?.clearHandlersCache()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun <R> ifAlive(
|
private suspend fun <R> ifAlive(
|
||||||
|
|||||||
+3
-2
@@ -84,12 +84,13 @@ open class CompilerConfigurationProviderImpl(
|
|||||||
ApplicationEnvironmentDisposer.ROOT_DISPOSABLE,
|
ApplicationEnvironmentDisposer.ROOT_DISPOSABLE,
|
||||||
CompilerConfiguration()
|
CompilerConfiguration()
|
||||||
)
|
)
|
||||||
val projectEnv = KotlinCoreEnvironment.ProjectEnvironment(testRootDisposable, applicationEnvironment)
|
val initialConfiguration = createCompilerConfiguration(module)
|
||||||
|
val projectEnv = KotlinCoreEnvironment.ProjectEnvironment(testRootDisposable, applicationEnvironment, initialConfiguration)
|
||||||
val project = projectEnv.project
|
val project = projectEnv.project
|
||||||
configurators.forEach { it.registerCompilerExtensions(project) }
|
configurators.forEach { it.registerCompilerExtensions(project) }
|
||||||
return KotlinCoreEnvironment.createForTests(
|
return KotlinCoreEnvironment.createForTests(
|
||||||
projectEnv,
|
projectEnv,
|
||||||
createCompilerConfiguration(module),
|
initialConfiguration,
|
||||||
configFiles
|
configFiles
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user