From 3008010d733ba7b086ea6dc225b3dbc567090024 Mon Sep 17 00:00:00 2001 From: Natalia Selezneva Date: Thu, 16 Apr 2020 17:08:56 +0300 Subject: [PATCH] Minor: extract class --- .../AbstractScriptConfigurationManager.kt | 64 +--------------- .../script/configuration/ScriptingSupport.kt | 76 +++++++++++++++++++ 2 files changed, 77 insertions(+), 63 deletions(-) create mode 100644 idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/ScriptingSupport.kt diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/AbstractScriptConfigurationManager.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/AbstractScriptConfigurationManager.kt index 503d8ade1b4..725ee4e1e2c 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/AbstractScriptConfigurationManager.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/AbstractScriptConfigurationManager.kt @@ -6,16 +6,12 @@ package org.jetbrains.kotlin.idea.core.script.configuration 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.projectRoots.Sdk import com.intellij.openapi.roots.ModuleRootEvent import com.intellij.openapi.roots.ModuleRootListener import com.intellij.openapi.vfs.VirtualFile -import com.intellij.psi.PsiElementFinder 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.ScriptDependenciesModificationTracker 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.utils.ScriptClassRootsCache 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.scripting.definitions.isNonScript import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationWrapper 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() - .single() - - kotlinScriptDependenciesClassFinder.clearCache() - - ScriptDependenciesModificationTracker.getInstance(project).incModificationCount() - } - - companion object { - val SCRIPTING_SUPPORT: ExtensionPointName = - ExtensionPointName.create("org.jetbrains.kotlin.scripting.idea.scriptingSupport") - } -} class CompositeManager(val project: Project) : ScriptConfigurationManager { @Suppress("unused") @@ -207,5 +146,4 @@ class CompositeManager(val project: Project) : ScriptConfigurationManager { !it.isNonScript() } } -} - +} \ No newline at end of file diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/ScriptingSupport.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/ScriptingSupport.kt new file mode 100644 index 00000000000..d5637632c3c --- /dev/null +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/ScriptingSupport.kt @@ -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() + .single() + + kotlinScriptDependenciesClassFinder.clearCache() + + ScriptDependenciesModificationTracker.getInstance(project).incModificationCount() + } + + companion object { + val SCRIPTING_SUPPORT: ExtensionPointName = + ExtensionPointName.create("org.jetbrains.kotlin.scripting.idea.scriptingSupport") + } +} \ No newline at end of file