Minor: move files

This commit is contained in:
Natalia Selezneva
2019-10-30 13:09:12 +03:00
parent 9f3c2d0292
commit 33475f30bc
11 changed files with 87 additions and 35 deletions
@@ -28,6 +28,7 @@ import com.intellij.psi.search.GlobalSearchScope
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.ScriptConfigurationManagerImpl
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.scripting.definitions.ScriptDependenciesProvider
import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationResult
@@ -3,7 +3,7 @@
* 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
package org.jetbrains.kotlin.idea.core.script.configuration
import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer
import com.intellij.openapi.application.ApplicationManager
@@ -19,8 +19,18 @@ import com.intellij.ui.EditorNotifications
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import org.jetbrains.annotations.TestOnly
import org.jetbrains.kotlin.idea.core.script.*
import org.jetbrains.kotlin.idea.core.script.LOG
import org.jetbrains.kotlin.idea.core.script.ScriptConfigurationManager.Companion.toVfsRoots
import org.jetbrains.kotlin.idea.core.script.dependencies.*
import org.jetbrains.kotlin.idea.core.script.configuration.cache.ScriptConfigurationFileAttributeCache
import org.jetbrains.kotlin.idea.core.script.configuration.cache.ScriptConfigurationMemoryCache
import org.jetbrains.kotlin.idea.core.script.configuration.listener.ScriptsListener
import org.jetbrains.kotlin.idea.core.script.configuration.loader.FromRefinedConfigurationLoader
import org.jetbrains.kotlin.idea.core.script.configuration.loader.OutsiderFileDependenciesLoader
import org.jetbrains.kotlin.idea.core.script.configuration.loader.ScriptDependenciesLoader
import org.jetbrains.kotlin.idea.core.script.configuration.utils.BackgroundLoader
import org.jetbrains.kotlin.idea.core.script.configuration.utils.ScriptClassRootsManager
import org.jetbrains.kotlin.idea.core.script.debug
import org.jetbrains.kotlin.idea.core.script.settings.KotlinScriptingSettings
import org.jetbrains.kotlin.idea.core.util.EDT
import org.jetbrains.kotlin.psi.KtFile
@@ -33,7 +43,8 @@ import org.jetbrains.kotlin.scripting.resolve.ScriptReportSink
import kotlin.script.experimental.api.ScriptDiagnostic
import kotlin.script.experimental.api.valueOrNull
class ScriptConfigurationManagerImpl internal constructor(private val project: Project) : ScriptConfigurationManager {
class ScriptConfigurationManagerImpl internal constructor(private val project: Project) :
ScriptConfigurationManager {
private val rootsManager = ScriptClassRootsManager(project)
private val memoryCache = ScriptConfigurationMemoryCache(project)
@@ -3,9 +3,10 @@
* 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.dependencies
package org.jetbrains.kotlin.idea.core.script.configuration.cache
import com.intellij.openapi.vfs.VirtualFile
import org.jetbrains.kotlin.idea.core.script.configuration.loader.ScriptDependenciesLoader
import org.jetbrains.kotlin.idea.core.script.debug
import org.jetbrains.kotlin.idea.core.util.*
import org.jetbrains.kotlin.psi.KtFile
@@ -20,7 +21,8 @@ import kotlin.script.experimental.api.ScriptCompilationConfiguration
import kotlin.script.experimental.api.asSuccess
import kotlin.script.experimental.dependencies.ScriptDependencies
class ScriptConfigurationFileAttributeCache : ScriptDependenciesLoader {
class ScriptConfigurationFileAttributeCache :
ScriptDependenciesLoader {
operator fun contains(file: VirtualFile): Boolean =
file.scriptDependencies != null || file.scriptCompilationConfiguration != null
@@ -3,7 +3,7 @@
* 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
package org.jetbrains.kotlin.idea.core.script.configuration.cache
import com.intellij.ProjectTopics
import com.intellij.openapi.extensions.Extensions
@@ -23,7 +23,11 @@ import com.intellij.psi.search.NonClasspathDirectoriesScope
import com.intellij.util.containers.ConcurrentFactoryMap
import com.intellij.util.containers.SLRUMap
import org.jetbrains.kotlin.idea.caches.project.getAllProjectSdks
import org.jetbrains.kotlin.idea.core.script.ScriptConfigurationMemoryCache.Companion.MAX_SCRIPTS_CACHED
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.cache.ScriptConfigurationMemoryCache.Companion.MAX_SCRIPTS_CACHED
import org.jetbrains.kotlin.idea.core.script.debug
import org.jetbrains.kotlin.idea.util.application.runReadAction
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationWrapper
@@ -51,8 +55,10 @@ class ScriptConfigurationMemoryCache internal constructor(private val project: P
private val cacheLock = ReentrantReadWriteLock()
private val scriptDependenciesCache = SLRUCacheWithLock<VirtualFile, ScriptCompilationConfigurationWrapper>()
private val scriptsModificationStampsCache = SLRUCacheWithLock<VirtualFile, Long>()
private val scriptDependenciesCache =
SLRUCacheWithLock<VirtualFile, ScriptCompilationConfigurationWrapper>()
private val scriptsModificationStampsCache =
SLRUCacheWithLock<VirtualFile, Long>()
fun getCachedConfiguration(file: VirtualFile): ScriptCompilationConfigurationWrapper? = scriptDependenciesCache.get(file)
@@ -78,7 +84,11 @@ class ScriptConfigurationMemoryCache internal constructor(private val project: P
@Suppress("FoldInitializerAndIfToElvis")
if (sdk == null) {
return@createWeakMap NonClasspathDirectoriesScope.compose(ScriptConfigurationManager.toVfsRoots(roots))
return@createWeakMap NonClasspathDirectoriesScope.compose(
ScriptConfigurationManager.toVfsRoots(
roots
)
)
}
return@createWeakMap NonClasspathDirectoriesScope.compose(
@@ -90,7 +100,9 @@ class ScriptConfigurationMemoryCache internal constructor(private val project: P
val scriptsSdksCache: MutableMap<VirtualFile, Sdk?> =
ConcurrentFactoryMap.createWeakMap { file ->
val compilationConfiguration = getConfiguration(file)
return@createWeakMap getScriptSdk(compilationConfiguration) ?: ScriptConfigurationManager.getScriptDefaultSdk(project)
return@createWeakMap getScriptSdk(compilationConfiguration) ?: ScriptConfigurationManager.getScriptDefaultSdk(
project
)
}
private fun getConfiguration(file: VirtualFile): ScriptCompilationConfigurationWrapper? {
@@ -99,7 +111,8 @@ class ScriptConfigurationMemoryCache internal constructor(private val project: P
if (configuration != null) return configuration
val ktFile = runReadAction { PsiManager.getInstance(project).findFile(file) as? KtFile } ?: return null
return ScriptConfigurationManager.getInstance(project).getConfiguration(ktFile)
return ScriptConfigurationManager.getInstance(project)
.getConfiguration(ktFile)
}
private fun getScriptSdk(compilationConfiguration: ScriptCompilationConfigurationWrapper?): Sdk? {
@@ -125,21 +138,27 @@ class ScriptConfigurationMemoryCache internal constructor(private val project: P
.distinct()
}
private val allNonIndexedSdks by ClearableLazyValue(cacheLock) {
private val allNonIndexedSdks by ClearableLazyValue(
cacheLock
) {
scriptDependenciesCache.getAll()
.mapNotNull { scriptsSdksCache[it.key] }
.filterNonModuleSdk()
.distinct()
}
val allDependenciesClassFiles by ClearableLazyValue(cacheLock) {
val allDependenciesClassFiles by ClearableLazyValue(
cacheLock
) {
val sdkFiles = allNonIndexedSdks
.flatMap { it.rootProvider.getFiles(OrderRootType.CLASSES).toList() }
val scriptDependenciesClasspath = scriptDependenciesCache.getAll()
.flatMap { it.value.dependenciesClassPath }.distinct()
sdkFiles + ScriptConfigurationManager.toVfsRoots(scriptDependenciesClasspath)
sdkFiles + ScriptConfigurationManager.toVfsRoots(
scriptDependenciesClasspath
)
}
val allDependenciesSources by ClearableLazyValue(cacheLock) {
@@ -148,14 +167,20 @@ class ScriptConfigurationMemoryCache internal constructor(private val project: P
val scriptDependenciesSources = scriptDependenciesCache.getAll()
.flatMap { it.value.dependenciesSources }.distinct()
sdkSources + ScriptConfigurationManager.toVfsRoots(scriptDependenciesSources)
sdkSources + ScriptConfigurationManager.toVfsRoots(
scriptDependenciesSources
)
}
val allDependenciesClassFilesScope by ClearableLazyValue(cacheLock) {
val allDependenciesClassFilesScope by ClearableLazyValue(
cacheLock
) {
NonClasspathDirectoriesScope.compose(allDependenciesClassFiles)
}
val allDependenciesSourcesScope by ClearableLazyValue(cacheLock) {
val allDependenciesSourcesScope by ClearableLazyValue(
cacheLock
) {
NonClasspathDirectoriesScope.compose(allDependenciesSources)
}
@@ -201,14 +226,18 @@ class ScriptConfigurationMemoryCache internal constructor(private val project: P
}
fun hasNotCachedRoots(compilationConfiguration: ScriptCompilationConfigurationWrapper): Boolean {
val scriptSdk = getScriptSdk(compilationConfiguration) ?: ScriptConfigurationManager.getScriptDefaultSdk(project)
val scriptSdk = getScriptSdk(compilationConfiguration) ?: ScriptConfigurationManager.getScriptDefaultSdk(
project
)
val wasSdkChanged = scriptSdk != null && !allSdks.contains(scriptSdk)
if (wasSdkChanged) {
debug { "sdk was changed: $compilationConfiguration" }
return true
}
val newClassRoots = ScriptConfigurationManager.toVfsRoots(compilationConfiguration.dependenciesClassPath)
val newClassRoots = ScriptConfigurationManager.toVfsRoots(
compilationConfiguration.dependenciesClassPath
)
for (newClassRoot in newClassRoots) {
if (!allDependenciesClassFiles.contains(newClassRoot)) {
debug { "class root was changed: $newClassRoot" }
@@ -216,7 +245,9 @@ class ScriptConfigurationMemoryCache internal constructor(private val project: P
}
}
val newSourceRoots = ScriptConfigurationManager.toVfsRoots(compilationConfiguration.dependenciesSources)
val newSourceRoots = ScriptConfigurationManager.toVfsRoots(
compilationConfiguration.dependenciesSources
)
for (newSourceRoot in newSourceRoots) {
if (!allDependenciesSources.contains(newSourceRoot)) {
debug { "source root was changed: $newSourceRoot" }
@@ -3,7 +3,7 @@
* 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
package org.jetbrains.kotlin.idea.core.script.configuration.listener
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.editor.EditorFactory
@@ -17,6 +17,8 @@ import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.psi.PsiManager
import com.intellij.util.Alarm
import org.jetbrains.kotlin.idea.core.script.configuration.ScriptConfigurationManagerImpl
import org.jetbrains.kotlin.idea.core.script.isScriptDependenciesUpdaterDisabled
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.scripting.definitions.isNonScript
@@ -3,7 +3,7 @@
* 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.dependencies
package org.jetbrains.kotlin.idea.core.script.configuration.loader
import org.jetbrains.kotlin.idea.core.script.debug
import org.jetbrains.kotlin.psi.KtFile
@@ -15,7 +15,8 @@ import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationResu
import org.jetbrains.kotlin.scripting.resolve.refineScriptCompilationConfiguration
import kotlin.script.experimental.dependencies.AsyncDependenciesResolver
class FromRefinedConfigurationLoader internal constructor() : ScriptDependenciesLoader {
class FromRefinedConfigurationLoader internal constructor() :
ScriptDependenciesLoader {
override fun isAsync(file: KtFile, scriptDefinition: ScriptDefinition): Boolean {
return scriptDefinition.asLegacyOrNull<KotlinScriptDefinition>()?.dependencyResolver?.let {
it is AsyncDependenciesResolver || it is LegacyResolverWrapper
@@ -1,19 +1,20 @@
/*
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
* 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.dependencies
package org.jetbrains.kotlin.idea.core.script.configuration.loader
import com.intellij.psi.PsiManager
import org.jetbrains.kotlin.idea.core.script.ScriptConfigurationManagerImpl
import org.jetbrains.kotlin.idea.core.script.configuration.ScriptConfigurationManagerImpl
import org.jetbrains.kotlin.idea.highlighter.OutsidersPsiFileSupportUtils
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationResult
import kotlin.script.experimental.api.asSuccess
class OutsiderFileDependenciesLoader(private val manager: ScriptConfigurationManagerImpl) : ScriptDependenciesLoader {
class OutsiderFileDependenciesLoader(private val manager: ScriptConfigurationManagerImpl) :
ScriptDependenciesLoader {
override val skipSaveToAttributes: Boolean
get() = true
@@ -3,7 +3,7 @@
* 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.dependencies
package org.jetbrains.kotlin.idea.core.script.configuration.loader
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
@@ -3,13 +3,12 @@
* 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.dependencies
package org.jetbrains.kotlin.idea.core.script.configuration.utils
import com.intellij.openapi.progress.EmptyProgressIndicator
import com.intellij.openapi.progress.ProgressIndicator
import com.intellij.openapi.progress.util.BackgroundTaskUtil
import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.idea.core.script.ScriptClassRootsManager
import org.jetbrains.kotlin.idea.core.script.debug
import org.jetbrains.kotlin.idea.core.script.settings.KotlinScriptingSettings
import org.jetbrains.kotlin.psi.KtFile
@@ -3,7 +3,7 @@
* 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
package org.jetbrains.kotlin.idea.core.script.configuration.utils
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.TransactionGuard
@@ -11,6 +11,9 @@ import com.intellij.openapi.project.Project
import com.intellij.openapi.roots.ex.ProjectRootManagerEx
import com.intellij.openapi.util.EmptyRunnable
import com.intellij.openapi.vfs.VirtualFile
import org.jetbrains.kotlin.idea.core.script.ScriptDependenciesModificationTracker
import org.jetbrains.kotlin.idea.core.script.configuration.cache.ScriptConfigurationMemoryCache
import org.jetbrains.kotlin.idea.core.script.debug
import org.jetbrains.kotlin.idea.util.application.runWriteAction
import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationWrapper
import java.util.concurrent.atomic.AtomicInteger
@@ -74,7 +77,8 @@ internal class ScriptClassRootsManager(val project: Project) {
debug { "roots change event" }
ProjectRootManagerEx.getInstanceEx(project)?.makeRootsChange(EmptyRunnable.getInstance(), false, true)
ScriptDependenciesModificationTracker.getInstance(project).incModificationCount()
ScriptDependenciesModificationTracker.getInstance(project)
.incModificationCount()
}
}
+1 -1
View File
@@ -308,7 +308,7 @@
serviceImplementation="org.jetbrains.kotlin.idea.core.script.IdeScriptDependenciesProvider"/>
<projectService serviceInterface="org.jetbrains.kotlin.idea.core.script.ScriptConfigurationManager"
serviceImplementation="org.jetbrains.kotlin.idea.core.script.ScriptConfigurationManagerImpl"/>
serviceImplementation="org.jetbrains.kotlin.idea.core.script.configuration.ScriptConfigurationManagerImpl"/>
<projectService serviceInterface="org.jetbrains.kotlin.scripting.resolve.ScriptReportSink"
serviceImplementation="org.jetbrains.kotlin.idea.core.script.IdeScriptReportSink"/>