Minor: extract class

This commit is contained in:
Natalia Selezneva
2020-04-16 17:08:56 +03:00
parent 59bdf67aa2
commit 3008010d73
2 changed files with 77 additions and 63 deletions
@@ -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()
} }
} }
} }
@@ -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")
}
}