LoadedScriptConfiguration and CachedConfigurationSnapshot are merged to ScriptConfigurationSnapshot
This commit is contained in:
committed by
Natalia Selezneva
parent
a89ce4c590
commit
0422abdb7b
+2
-3
@@ -29,9 +29,8 @@ import com.intellij.util.io.URLUtil
|
||||
import org.jetbrains.annotations.TestOnly
|
||||
import org.jetbrains.kotlin.idea.caches.project.getAllProjectSdks
|
||||
import org.jetbrains.kotlin.idea.core.script.configuration.AbstractScriptConfigurationManager
|
||||
import org.jetbrains.kotlin.idea.core.script.configuration.cache.CachedConfigurationSnapshot
|
||||
import org.jetbrains.kotlin.idea.core.script.configuration.cache.ScriptConfigurationSnapshot
|
||||
import org.jetbrains.kotlin.idea.core.script.configuration.listener.ScriptConfigurationUpdater
|
||||
import org.jetbrains.kotlin.idea.core.script.configuration.loader.LoadedScriptConfiguration
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.scripting.definitions.ScriptDependenciesProvider
|
||||
import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationResult
|
||||
@@ -103,7 +102,7 @@ interface ScriptConfigurationManager {
|
||||
* Start indexing for new class/source roots.
|
||||
* Re-highlight opened scripts with changed configuration.
|
||||
*/
|
||||
fun saveCompilationConfigurationAfterImport(files: List<Pair<VirtualFile, LoadedScriptConfiguration>>)
|
||||
fun saveCompilationConfigurationAfterImport(files: List<Pair<VirtualFile, ScriptConfigurationSnapshot>>)
|
||||
|
||||
///////////////
|
||||
// classpath roots info:
|
||||
|
||||
+4
-3
@@ -20,8 +20,9 @@ import kotlinx.coroutines.launch
|
||||
import org.jetbrains.annotations.TestOnly
|
||||
import org.jetbrains.kotlin.idea.core.script.*
|
||||
import org.jetbrains.kotlin.idea.core.script.ScriptConfigurationManager.Companion.toVfsRoots
|
||||
import org.jetbrains.kotlin.idea.core.script.configuration.cache.CachedConfigurationSnapshot
|
||||
import org.jetbrains.kotlin.idea.core.script.configuration.cache.CachedConfigurationInputs
|
||||
import org.jetbrains.kotlin.idea.core.script.configuration.cache.ScriptConfigurationCache
|
||||
import org.jetbrains.kotlin.idea.core.script.configuration.cache.ScriptConfigurationSnapshot
|
||||
import org.jetbrains.kotlin.idea.core.script.configuration.listener.ScriptConfigurationUpdater
|
||||
import org.jetbrains.kotlin.idea.core.script.configuration.utils.ScriptClassRootsCache
|
||||
import org.jetbrains.kotlin.idea.core.script.configuration.utils.ScriptClassRootsIndexer
|
||||
@@ -86,7 +87,7 @@ internal abstract class AbstractScriptConfigurationManager(
|
||||
override fun getScriptClasspath(file: KtFile): List<VirtualFile> =
|
||||
toVfsRoots(getConfiguration(file)?.dependenciesClassPath.orEmpty())
|
||||
|
||||
fun getCachedConfiguration(file: VirtualFile?): CachedConfigurationSnapshot? {
|
||||
fun getCachedConfiguration(file: VirtualFile?): ScriptConfigurationSnapshot? {
|
||||
if (file == null) return null
|
||||
return cache[file]
|
||||
}
|
||||
@@ -173,7 +174,7 @@ internal abstract class AbstractScriptConfigurationManager(
|
||||
|
||||
protected open fun saveChangedConfiguration(
|
||||
file: VirtualFile,
|
||||
newConfigurationSnapshot: CachedConfigurationSnapshot?
|
||||
newConfigurationSnapshot: ScriptConfigurationSnapshot?
|
||||
) {
|
||||
rootsIndexer.checkInTransaction()
|
||||
val newConfiguration = newConfigurationSnapshot?.configuration
|
||||
|
||||
+13
-4
@@ -9,6 +9,7 @@ import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationWrapper
|
||||
import kotlin.script.experimental.api.ScriptDiagnostic
|
||||
|
||||
interface CachedConfigurationInputs {
|
||||
fun isUpToDate(project: Project, file: VirtualFile, ktFile: KtFile? = null): Boolean
|
||||
@@ -23,14 +24,22 @@ interface CachedConfigurationInputs {
|
||||
}
|
||||
}
|
||||
|
||||
data class CachedConfigurationSnapshot(
|
||||
data class ScriptConfigurationSnapshot(
|
||||
val inputs: CachedConfigurationInputs,
|
||||
val configuration: ScriptCompilationConfigurationWrapper
|
||||
val reports: List<ScriptDiagnostic>,
|
||||
val configuration: ScriptCompilationConfigurationWrapper?
|
||||
)
|
||||
|
||||
/**
|
||||
* Cached configurations for file's specific snapshot state.
|
||||
*
|
||||
* Writer should put related inputs snapshot for loaded configuration.
|
||||
* Reader may do up-to-date check for existed entry.
|
||||
*/
|
||||
interface ScriptConfigurationCache {
|
||||
operator fun get(file: VirtualFile): CachedConfigurationSnapshot?
|
||||
operator fun set(file: VirtualFile, configurationSnapshot: CachedConfigurationSnapshot)
|
||||
operator fun get(file: VirtualFile): ScriptConfigurationSnapshot?
|
||||
operator fun set(file: VirtualFile, configurationSnapshot: ScriptConfigurationSnapshot)
|
||||
|
||||
fun markOutOfDate(file: VirtualFile)
|
||||
|
||||
fun all(): Collection<Pair<VirtualFile, ScriptCompilationConfigurationWrapper>>
|
||||
|
||||
+6
-3
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.idea.core.script.configuration.cache
|
||||
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import org.jetbrains.kotlin.idea.core.script.configuration.loader.LoadedScriptConfiguration
|
||||
import org.jetbrains.kotlin.idea.core.script.configuration.loader.ScriptConfigurationLoader
|
||||
import org.jetbrains.kotlin.idea.core.script.configuration.loader.ScriptConfigurationLoadingContext
|
||||
import org.jetbrains.kotlin.idea.core.script.configuration.utils.getKtFile
|
||||
@@ -38,8 +37,12 @@ internal class ScriptConfigurationFileAttributeCache(
|
||||
if (!isFirstLoad) return false
|
||||
|
||||
val fromFs = load(virtualFile) ?: return false
|
||||
// todo(KT-34444): save inputs to fs
|
||||
val result = LoadedScriptConfiguration(CachedConfigurationInputs.OutOfDate, listOf(), fromFs)
|
||||
val result =
|
||||
ScriptConfigurationSnapshot(
|
||||
CachedConfigurationInputs.OutOfDate, // todo(KT-34444): save inputs to fs
|
||||
listOf(), // todo(KT-34444): save reports to fs
|
||||
fromFs
|
||||
)
|
||||
context.saveNewConfiguration(virtualFile, result)
|
||||
return true
|
||||
}
|
||||
|
||||
+12
-12
@@ -8,43 +8,43 @@ package org.jetbrains.kotlin.idea.core.script.configuration.cache
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.util.containers.SLRUMap
|
||||
import org.jetbrains.kotlin.idea.core.script.configuration.AbstractScriptConfigurationManager
|
||||
import org.jetbrains.kotlin.idea.core.script.debug
|
||||
import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationWrapper
|
||||
import java.io.DataInput
|
||||
import java.io.DataOutput
|
||||
|
||||
abstract class ScriptConfigurationMemoryCache(
|
||||
class ScriptConfigurationMemoryCache(
|
||||
val project: Project
|
||||
) : ScriptConfigurationCache {
|
||||
companion object {
|
||||
const val MAX_SCRIPTS_CACHED = 50
|
||||
}
|
||||
|
||||
private val memoryCache = SLRUMap<VirtualFile, CachedConfigurationSnapshot>(MAX_SCRIPTS_CACHED, MAX_SCRIPTS_CACHED)
|
||||
private val memoryCache = SLRUMap<VirtualFile, ScriptConfigurationSnapshot>(MAX_SCRIPTS_CACHED, MAX_SCRIPTS_CACHED)
|
||||
|
||||
@Synchronized
|
||||
override operator fun get(file: VirtualFile): CachedConfigurationSnapshot? {
|
||||
override operator fun get(file: VirtualFile): ScriptConfigurationSnapshot? {
|
||||
return memoryCache.get(file)
|
||||
}
|
||||
|
||||
|
||||
@Synchronized
|
||||
override operator fun set(file: VirtualFile, configurationSnapshot: CachedConfigurationSnapshot) {
|
||||
override operator fun set(file: VirtualFile, configurationSnapshot: ScriptConfigurationSnapshot) {
|
||||
memoryCache.put(
|
||||
file,
|
||||
configurationSnapshot
|
||||
)
|
||||
}
|
||||
|
||||
@Synchronized
|
||||
override fun markOutOfDate(file: VirtualFile) {
|
||||
override fun markUpToDate(file: VirtualFile, inputs: CachedConfigurationInputs) {
|
||||
val old = memoryCache[file]
|
||||
if (old != null) {
|
||||
memoryCache.put(file, old.copy(inputs = CachedConfigurationInputs.OutOfDate))
|
||||
memoryCache.put(file, old.copy(inputs = inputs))
|
||||
}
|
||||
}
|
||||
|
||||
@Synchronized
|
||||
override fun all() = memoryCache.entrySet().map { it.key to it.value.configuration }
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
override fun all() =
|
||||
memoryCache.entrySet().map {
|
||||
if (it.value.configuration == null) null
|
||||
else it.key to it.value.configuration
|
||||
} as Collection<Pair<VirtualFile, ScriptCompilationConfigurationWrapper>>
|
||||
}
|
||||
+2
-1
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.idea.core.script.configuration.loader
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import org.jetbrains.kotlin.idea.core.script.configuration.cache.CachedConfigurationInputs
|
||||
import org.jetbrains.kotlin.idea.core.script.configuration.cache.ScriptConfigurationSnapshot
|
||||
import org.jetbrains.kotlin.idea.core.script.configuration.utils.getKtFile
|
||||
import org.jetbrains.kotlin.idea.core.script.debug
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
@@ -42,7 +43,7 @@ open class DefaultScriptConfigurationLoader(val project: Project) : ScriptConfig
|
||||
KtFileScriptSource(file), scriptDefinition, file.project
|
||||
)
|
||||
|
||||
val result = LoadedScriptConfiguration(
|
||||
val result = ScriptConfigurationSnapshot(
|
||||
inputs,
|
||||
scriptingApiResult.reports,
|
||||
scriptingApiResult.valueOrNull()
|
||||
|
||||
-16
@@ -1,16 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.idea.core.script.configuration.loader
|
||||
|
||||
import org.jetbrains.kotlin.idea.core.script.configuration.cache.CachedConfigurationInputs
|
||||
import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationWrapper
|
||||
import kotlin.script.experimental.api.ScriptDiagnostic
|
||||
|
||||
data class LoadedScriptConfiguration(
|
||||
val inputs: CachedConfigurationInputs,
|
||||
val reports: List<ScriptDiagnostic>,
|
||||
val configuration: ScriptCompilationConfigurationWrapper?
|
||||
)
|
||||
+4
-4
@@ -6,11 +6,11 @@
|
||||
package org.jetbrains.kotlin.idea.core.script.configuration.loader
|
||||
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import org.jetbrains.kotlin.idea.core.script.configuration.cache.CachedConfigurationSnapshot
|
||||
import org.jetbrains.kotlin.idea.core.script.configuration.cache.ScriptConfigurationFileAttributeCache
|
||||
import org.jetbrains.kotlin.idea.core.script.configuration.cache.ScriptConfigurationSnapshot
|
||||
|
||||
interface ScriptConfigurationLoadingContext {
|
||||
fun getCachedConfiguration(file: VirtualFile): CachedConfigurationSnapshot?
|
||||
fun getCachedConfiguration(file: VirtualFile): ScriptConfigurationSnapshot?
|
||||
|
||||
/**
|
||||
* Show notification about new configuration with suggestion to apply it.
|
||||
@@ -23,7 +23,7 @@ interface ScriptConfigurationLoadingContext {
|
||||
*/
|
||||
fun suggestNewConfiguration(
|
||||
file: VirtualFile,
|
||||
newResult: LoadedScriptConfiguration
|
||||
newResult: ScriptConfigurationSnapshot
|
||||
)
|
||||
|
||||
/**
|
||||
@@ -33,6 +33,6 @@ interface ScriptConfigurationLoadingContext {
|
||||
*/
|
||||
fun saveNewConfiguration(
|
||||
file: VirtualFile,
|
||||
newResult: LoadedScriptConfiguration
|
||||
newResult: ScriptConfigurationSnapshot
|
||||
)
|
||||
}
|
||||
+9
-2
@@ -7,9 +7,9 @@ package org.jetbrains.kotlin.idea.core.script.configuration.loader
|
||||
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import org.jetbrains.kotlin.idea.core.script.configuration.cache.ScriptConfigurationSnapshot
|
||||
import org.jetbrains.kotlin.idea.highlighter.OutsidersPsiFileSupportUtils
|
||||
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
|
||||
import kotlin.script.experimental.api.asSuccess
|
||||
|
||||
internal class ScriptOutsiderFileConfigurationLoader(val project: Project) :
|
||||
ScriptConfigurationLoader {
|
||||
@@ -28,7 +28,14 @@ internal class ScriptOutsiderFileConfigurationLoader(val project: Project) :
|
||||
|
||||
val original = context.getCachedConfiguration(fileOrigin)
|
||||
if (original != null) {
|
||||
context.saveNewConfiguration(virtualFile, LoadedScriptConfiguration(original.inputs, listOf(), original.configuration))
|
||||
context.saveNewConfiguration(
|
||||
virtualFile,
|
||||
ScriptConfigurationSnapshot(
|
||||
original.inputs,
|
||||
listOf(),
|
||||
original.configuration
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// todo(KT-34615): initiate loading configuration for original file and subscribe to it's result?
|
||||
|
||||
+3
-3
@@ -24,8 +24,8 @@ import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.pom.Navigatable
|
||||
import org.jetbrains.kotlin.idea.core.script.ScriptConfigurationManager
|
||||
import org.jetbrains.kotlin.idea.core.script.configuration.cache.CachedConfigurationInputs
|
||||
import org.jetbrains.kotlin.idea.core.script.configuration.cache.ScriptConfigurationSnapshot
|
||||
import org.jetbrains.kotlin.idea.core.script.configuration.getGradleScriptInputsStamp
|
||||
import org.jetbrains.kotlin.idea.core.script.configuration.loader.LoadedScriptConfiguration
|
||||
import org.jetbrains.kotlin.scripting.definitions.findScriptDefinition
|
||||
import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationWrapper
|
||||
import org.jetbrains.kotlin.scripting.resolve.VirtualFileScriptSource
|
||||
@@ -58,7 +58,7 @@ class KotlinGradleBuildScriptsDataService : AbstractProjectDataService<GradleSou
|
||||
)
|
||||
val javaHome = File(gradleExeSettings.javaHome ?: return)
|
||||
|
||||
val files = mutableListOf<Pair<VirtualFile, LoadedScriptConfiguration>>()
|
||||
val files = mutableListOf<Pair<VirtualFile, ScriptConfigurationSnapshot>>()
|
||||
|
||||
projectDataNode.gradleKotlinBuildScripts?.forEach { buildScript ->
|
||||
val scriptFile = File(buildScript.file)
|
||||
@@ -70,7 +70,7 @@ class KotlinGradleBuildScriptsDataService : AbstractProjectDataService<GradleSou
|
||||
files.add(
|
||||
Pair(
|
||||
virtualFile,
|
||||
LoadedScriptConfiguration(
|
||||
ScriptConfigurationSnapshot(
|
||||
inputs ?: CachedConfigurationInputs.OutOfDate,
|
||||
listOf(),
|
||||
ScriptCompilationConfigurationWrapper.FromLegacy(
|
||||
|
||||
Reference in New Issue
Block a user