Refactor the mechanism how script configurations are updated
Introduce file attributes cache, which is only applicable when no dependencies are cached in memory cache Refactor ScriptDependenciesCache to memory cache that is able to get configuration from cache and checks if it is up to date Move all public methods to ScriptDependenciesManager Introduce ScriptClassRootsManager that checks if root change event should be called after script configuration update
This commit is contained in:
+1
-2
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.scripting.definitions.ScriptDependenciesProvider
|
||||
import java.io.File
|
||||
import kotlin.script.experimental.api.valueOrNull
|
||||
|
||||
data class ScriptsCompilationDependencies(
|
||||
val classpath: List<File>,
|
||||
@@ -42,7 +41,7 @@ fun collectScriptsCompilationDependencies(
|
||||
while (true) {
|
||||
val newRemainingSources = ArrayList<KtFile>()
|
||||
for (source in remainingSources) {
|
||||
val refinedConfiguration = importsProvider.getScriptConfigurationResult(source)?.valueOrNull()
|
||||
val refinedConfiguration = importsProvider.getScriptConfiguration(source)
|
||||
if (refinedConfiguration != null) {
|
||||
collectedClassPath.addAll(refinedConfiguration.dependenciesClassPath)
|
||||
|
||||
|
||||
+1
-1
@@ -154,7 +154,7 @@ class KJvmReplCompilerImpl(val hostConfiguration: ScriptingHostConfiguration) :
|
||||
sourceFiles.first(),
|
||||
sourceDependencies
|
||||
) { ktFile ->
|
||||
dependenciesProvider?.getScriptConfigurationResult(ktFile)?.valueOrNull()?.configuration
|
||||
dependenciesProvider?.getScriptConfiguration(ktFile)?.configuration
|
||||
?: context.baseScriptCompilationConfiguration
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -98,7 +98,7 @@ private fun compileImpl(
|
||||
|
||||
val dependenciesProvider = ScriptDependenciesProvider.getInstance(context.environment.project)
|
||||
val getScriptConfiguration = { ktFile: KtFile ->
|
||||
(dependenciesProvider?.getScriptConfigurationResult(ktFile)?.valueOrNull()?.configuration ?: context.baseScriptCompilationConfiguration)
|
||||
(dependenciesProvider?.getScriptConfiguration(ktFile)?.configuration ?: context.baseScriptCompilationConfiguration)
|
||||
.with {
|
||||
// Adjust definitions so all compiler dependencies are saved in the resulting compilation configuration, so evaluation
|
||||
// performed with the expected classpath
|
||||
|
||||
+1
-2
@@ -33,7 +33,6 @@ import org.jetbrains.kotlin.scripting.definitions.ScriptDependenciesProvider
|
||||
import kotlin.script.experimental.api.ScriptCompilationConfiguration
|
||||
import kotlin.script.experimental.api.compilerOptions
|
||||
import kotlin.script.experimental.api.dependencies
|
||||
import kotlin.script.experimental.api.valueOrNull
|
||||
import kotlin.script.experimental.host.ScriptingHostConfiguration
|
||||
import kotlin.script.experimental.jvm.JvmDependency
|
||||
import kotlin.script.experimental.jvm.jdkHome
|
||||
@@ -244,7 +243,7 @@ private fun CompilerConfiguration.updateWithRefinedConfigurations(
|
||||
) {
|
||||
val dependenciesProvider = ScriptDependenciesProvider.getInstance(context.environment.project)
|
||||
val updatedCompilerOptions = sourceFiles.flatMap {
|
||||
dependenciesProvider?.getScriptConfigurationResult(it)?.valueOrNull()?.configuration?.get(
|
||||
dependenciesProvider?.getScriptConfiguration(it)?.configuration?.get(
|
||||
ScriptCompilationConfiguration.compilerOptions
|
||||
) ?: emptyList()
|
||||
}
|
||||
|
||||
+1
-2
@@ -23,7 +23,6 @@ import org.jetbrains.kotlin.scripting.definitions.ScriptDependenciesProvider
|
||||
import java.io.File
|
||||
import java.util.concurrent.locks.ReentrantReadWriteLock
|
||||
import kotlin.concurrent.write
|
||||
import kotlin.script.experimental.api.valueOrNull
|
||||
|
||||
// WARNING: not thread safe, assuming external synchronization
|
||||
|
||||
@@ -71,7 +70,7 @@ open class GenericReplCompiler(
|
||||
}
|
||||
|
||||
val newDependencies =
|
||||
ScriptDependenciesProvider.getInstance(checker.environment.project)?.getScriptConfigurationResult(psiFile)?.valueOrNull()
|
||||
ScriptDependenciesProvider.getInstance(checker.environment.project)?.getScriptConfiguration(psiFile)
|
||||
?.legacyDependencies
|
||||
var classpathAddendum: List<File>? = null
|
||||
if (compilerState.lastDependencies != newDependencies) {
|
||||
|
||||
Reference in New Issue
Block a user