gradle.kts: cache definitions
This commit is contained in:
@@ -29,6 +29,7 @@ import com.intellij.util.containers.SLRUMap
|
||||
import org.jetbrains.kotlin.idea.KotlinFileType
|
||||
import org.jetbrains.kotlin.idea.caches.project.SdkInfo
|
||||
import org.jetbrains.kotlin.idea.caches.project.getScriptRelatedModuleInfo
|
||||
import org.jetbrains.kotlin.idea.core.script.configuration.CompositeScriptConfigurationManager
|
||||
import org.jetbrains.kotlin.idea.core.script.settings.KotlinScriptingSettings
|
||||
import org.jetbrains.kotlin.idea.util.application.executeOnPooledThread
|
||||
import org.jetbrains.kotlin.idea.util.application.getServiceSafe
|
||||
@@ -82,9 +83,15 @@ class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinit
|
||||
private val scriptDefinitionsCacheLock = ReentrantLock()
|
||||
private val scriptDefinitionsCache = SLRUMap<String, ScriptDefinition>(10, 10)
|
||||
|
||||
val configurations = (ScriptConfigurationManager.getInstance(project) as CompositeScriptConfigurationManager)
|
||||
|
||||
override fun findDefinition(script: SourceCode): ScriptDefinition? {
|
||||
val locationId = script.locationId ?: return null
|
||||
if (nonScriptId(locationId)) return null
|
||||
|
||||
val fastPath = configurations.tryGetScriptDefinitionFast(locationId)
|
||||
if (fastPath != null) return fastPath
|
||||
|
||||
if (!isReady()) return null
|
||||
|
||||
val cached = scriptDefinitionsCacheLock.withLock { scriptDefinitionsCache.get(locationId) }
|
||||
|
||||
+5
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.idea.core.script.configuration.utils.ScriptClassRoot
|
||||
import org.jetbrains.kotlin.idea.core.script.configuration.utils.ScriptClassRootsUpdater
|
||||
import org.jetbrains.kotlin.idea.core.script.configuration.utils.getKtFile
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
|
||||
import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationWrapper
|
||||
|
||||
class CompositeScriptConfigurationManager(val project: Project) : ScriptConfigurationManager {
|
||||
@@ -31,6 +32,10 @@ class CompositeScriptConfigurationManager(val project: Project) : ScriptConfigur
|
||||
|
||||
val default = DefaultScriptingSupport(this)
|
||||
|
||||
fun tryGetScriptDefinitionFast(locationId: String): ScriptDefinition? {
|
||||
return classpathRoots.getLightScriptInfo(locationId)?.definition
|
||||
}
|
||||
|
||||
private fun getOrLoadConfiguration(
|
||||
virtualFile: VirtualFile,
|
||||
preloadedKtFile: KtFile? = null
|
||||
|
||||
+3
-2
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.idea.core.script.LOG
|
||||
import org.jetbrains.kotlin.idea.core.script.ScriptConfigurationManager.Companion.classpathEntryToVfs
|
||||
import org.jetbrains.kotlin.idea.core.script.ScriptConfigurationManager.Companion.toVfsRoots
|
||||
import org.jetbrains.kotlin.idea.util.getProjectJdkTableSafe
|
||||
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
|
||||
import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationWrapper
|
||||
import java.io.File
|
||||
import java.lang.ref.Reference
|
||||
@@ -34,14 +35,14 @@ class ScriptClassRootsCache(
|
||||
private val nonModulesSdks: Collection<Sdk>,
|
||||
val customDefinitionsUsed: Boolean
|
||||
) {
|
||||
abstract class LightScriptInfo {
|
||||
abstract class LightScriptInfo(val definition: ScriptDefinition?) {
|
||||
@Volatile
|
||||
var heavyCache: Reference<HeavyScriptInfo>? = null
|
||||
|
||||
abstract fun buildConfiguration(): ScriptCompilationConfigurationWrapper?
|
||||
}
|
||||
|
||||
class DirectScriptInfo(val result: ScriptCompilationConfigurationWrapper) : LightScriptInfo() {
|
||||
class DirectScriptInfo(val result: ScriptCompilationConfigurationWrapper) : LightScriptInfo(null) {
|
||||
override fun buildConfiguration(): ScriptCompilationConfigurationWrapper = result
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user