Minor: extract class
This commit is contained in:
+1
-63
@@ -6,16 +6,12 @@
|
|||||||
package org.jetbrains.kotlin.idea.core.script.configuration
|
package org.jetbrains.kotlin.idea.core.script.configuration
|
||||||
|
|
||||||
import com.intellij.ProjectTopics
|
import com.intellij.ProjectTopics
|
||||||
import com.intellij.openapi.extensions.ExtensionPointName
|
|
||||||
import com.intellij.openapi.extensions.Extensions
|
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.projectRoots.Sdk
|
import com.intellij.openapi.projectRoots.Sdk
|
||||||
import com.intellij.openapi.roots.ModuleRootEvent
|
import com.intellij.openapi.roots.ModuleRootEvent
|
||||||
import com.intellij.openapi.roots.ModuleRootListener
|
import com.intellij.openapi.roots.ModuleRootListener
|
||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
import com.intellij.psi.PsiElementFinder
|
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import org.jetbrains.kotlin.idea.core.script.KotlinScriptDependenciesClassFinder
|
|
||||||
import org.jetbrains.kotlin.idea.core.script.ScriptConfigurationManager
|
import org.jetbrains.kotlin.idea.core.script.ScriptConfigurationManager
|
||||||
import org.jetbrains.kotlin.idea.core.script.ScriptDependenciesModificationTracker
|
import org.jetbrains.kotlin.idea.core.script.ScriptDependenciesModificationTracker
|
||||||
import org.jetbrains.kotlin.idea.core.script.configuration.listener.ScriptChangesNotifier
|
import org.jetbrains.kotlin.idea.core.script.configuration.listener.ScriptChangesNotifier
|
||||||
@@ -23,67 +19,10 @@ import org.jetbrains.kotlin.idea.core.script.configuration.listener.ScriptConfig
|
|||||||
import org.jetbrains.kotlin.idea.core.script.configuration.loader.ScriptConfigurationLoader
|
import org.jetbrains.kotlin.idea.core.script.configuration.loader.ScriptConfigurationLoader
|
||||||
import org.jetbrains.kotlin.idea.core.script.configuration.utils.ScriptClassRootsCache
|
import org.jetbrains.kotlin.idea.core.script.configuration.utils.ScriptClassRootsCache
|
||||||
import org.jetbrains.kotlin.idea.core.script.configuration.utils.getKtFile
|
import org.jetbrains.kotlin.idea.core.script.configuration.utils.getKtFile
|
||||||
import org.jetbrains.kotlin.idea.core.script.debug
|
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.scripting.definitions.isNonScript
|
import org.jetbrains.kotlin.scripting.definitions.isNonScript
|
||||||
import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationWrapper
|
import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationWrapper
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
||||||
import java.util.concurrent.locks.ReentrantLock
|
|
||||||
import kotlin.concurrent.withLock
|
|
||||||
|
|
||||||
abstract class ScriptingSupport {
|
|
||||||
abstract fun isRelated(file: VirtualFile): Boolean
|
|
||||||
|
|
||||||
abstract fun clearCaches()
|
|
||||||
abstract fun hasCachedConfiguration(file: KtFile): Boolean
|
|
||||||
abstract fun getOrLoadConfiguration(virtualFile: VirtualFile, preloadedKtFile: KtFile? = null): ScriptCompilationConfigurationWrapper?
|
|
||||||
|
|
||||||
abstract val updater: ScriptConfigurationUpdater
|
|
||||||
|
|
||||||
private val classpathRootsLock = ReentrantLock()
|
|
||||||
|
|
||||||
@Volatile
|
|
||||||
private var _classpathRoots: ScriptClassRootsCache? = null
|
|
||||||
val classpathRoots: ScriptClassRootsCache
|
|
||||||
get() {
|
|
||||||
val value1 = _classpathRoots
|
|
||||||
if (value1 != null) return value1
|
|
||||||
|
|
||||||
classpathRootsLock.withLock {
|
|
||||||
val value2 = _classpathRoots
|
|
||||||
if (value2 != null) return value2
|
|
||||||
|
|
||||||
val value3 = recreateRootsCache()
|
|
||||||
value3.saveClassRootsToStorage()
|
|
||||||
_classpathRoots = value3
|
|
||||||
return value3
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected abstract fun recreateRootsCache(): ScriptClassRootsCache
|
|
||||||
|
|
||||||
fun clearClassRootsCaches(project: Project) {
|
|
||||||
debug { "class roots caches cleared" }
|
|
||||||
|
|
||||||
classpathRootsLock.withLock {
|
|
||||||
_classpathRoots = null
|
|
||||||
}
|
|
||||||
|
|
||||||
val kotlinScriptDependenciesClassFinder =
|
|
||||||
Extensions.getArea(project).getExtensionPoint(PsiElementFinder.EP_NAME).extensions
|
|
||||||
.filterIsInstance<KotlinScriptDependenciesClassFinder>()
|
|
||||||
.single()
|
|
||||||
|
|
||||||
kotlinScriptDependenciesClassFinder.clearCache()
|
|
||||||
|
|
||||||
ScriptDependenciesModificationTracker.getInstance(project).incModificationCount()
|
|
||||||
}
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
val SCRIPTING_SUPPORT: ExtensionPointName<ScriptingSupport> =
|
|
||||||
ExtensionPointName.create("org.jetbrains.kotlin.scripting.idea.scriptingSupport")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class CompositeManager(val project: Project) : ScriptConfigurationManager {
|
class CompositeManager(val project: Project) : ScriptConfigurationManager {
|
||||||
@Suppress("unused")
|
@Suppress("unused")
|
||||||
@@ -207,5 +146,4 @@ class CompositeManager(val project: Project) : ScriptConfigurationManager {
|
|||||||
!it.isNonScript()
|
!it.isNonScript()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
+76
@@ -0,0 +1,76 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2020 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
|
||||||
|
|
||||||
|
import com.intellij.openapi.extensions.ExtensionPointName
|
||||||
|
import com.intellij.openapi.extensions.Extensions
|
||||||
|
import com.intellij.openapi.project.Project
|
||||||
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
|
import com.intellij.psi.PsiElementFinder
|
||||||
|
import org.jetbrains.kotlin.idea.core.script.KotlinScriptDependenciesClassFinder
|
||||||
|
import org.jetbrains.kotlin.idea.core.script.ScriptDependenciesModificationTracker
|
||||||
|
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.debug
|
||||||
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
|
import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationWrapper
|
||||||
|
import java.util.concurrent.locks.ReentrantLock
|
||||||
|
import kotlin.concurrent.withLock
|
||||||
|
|
||||||
|
abstract class ScriptingSupport {
|
||||||
|
abstract fun isRelated(file: VirtualFile): Boolean
|
||||||
|
|
||||||
|
abstract fun clearCaches()
|
||||||
|
abstract fun hasCachedConfiguration(file: KtFile): Boolean
|
||||||
|
abstract fun getOrLoadConfiguration(virtualFile: VirtualFile, preloadedKtFile: KtFile? = null): ScriptCompilationConfigurationWrapper?
|
||||||
|
|
||||||
|
abstract val updater: ScriptConfigurationUpdater
|
||||||
|
|
||||||
|
private val classpathRootsLock = ReentrantLock()
|
||||||
|
|
||||||
|
@Volatile
|
||||||
|
private var _classpathRoots: ScriptClassRootsCache? = null
|
||||||
|
val classpathRoots: ScriptClassRootsCache
|
||||||
|
get() {
|
||||||
|
val value1 = _classpathRoots
|
||||||
|
if (value1 != null) return value1
|
||||||
|
|
||||||
|
classpathRootsLock.withLock {
|
||||||
|
val value2 = _classpathRoots
|
||||||
|
if (value2 != null) return value2
|
||||||
|
|
||||||
|
val value3 = recreateRootsCache()
|
||||||
|
value3.saveClassRootsToStorage()
|
||||||
|
_classpathRoots = value3
|
||||||
|
return value3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract fun recreateRootsCache(): ScriptClassRootsCache
|
||||||
|
|
||||||
|
fun clearClassRootsCaches(project: Project) {
|
||||||
|
debug { "class roots caches cleared" }
|
||||||
|
|
||||||
|
classpathRootsLock.withLock {
|
||||||
|
_classpathRoots = null
|
||||||
|
}
|
||||||
|
|
||||||
|
val kotlinScriptDependenciesClassFinder =
|
||||||
|
Extensions.getArea(project)
|
||||||
|
.getExtensionPoint(PsiElementFinder.EP_NAME).extensions
|
||||||
|
.filterIsInstance<KotlinScriptDependenciesClassFinder>()
|
||||||
|
.single()
|
||||||
|
|
||||||
|
kotlinScriptDependenciesClassFinder.clearCache()
|
||||||
|
|
||||||
|
ScriptDependenciesModificationTracker.getInstance(project).incModificationCount()
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
val SCRIPTING_SUPPORT: ExtensionPointName<ScriptingSupport> =
|
||||||
|
ExtensionPointName.create("org.jetbrains.kotlin.scripting.idea.scriptingSupport")
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user