Move script definition extraction functions to the plugin
plus finish refactoring of these functions
This commit is contained in:
@@ -16,15 +16,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.script
|
package org.jetbrains.kotlin.script
|
||||||
|
|
||||||
import com.intellij.ide.highlighter.JavaClassFileType
|
|
||||||
import com.intellij.openapi.components.ServiceManager
|
import com.intellij.openapi.components.ServiceManager
|
||||||
import com.intellij.openapi.fileTypes.FileTypeRegistry
|
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.vfs.VirtualFile
|
|
||||||
import com.intellij.psi.PsiFile
|
|
||||||
import com.intellij.psi.PsiManager
|
|
||||||
import org.jetbrains.kotlin.idea.KotlinFileType
|
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
|
||||||
|
|
||||||
interface ScriptDefinitionProvider {
|
interface ScriptDefinitionProvider {
|
||||||
fun findScriptDefinition(fileName: String): KotlinScriptDefinition?
|
fun findScriptDefinition(fileName: String): KotlinScriptDefinition?
|
||||||
@@ -39,41 +32,4 @@ interface ScriptDefinitionProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun PsiFile.scriptDefinition(): KotlinScriptDefinition? {
|
|
||||||
// Do not use psiFile.script, see comments in findScriptDefinition
|
|
||||||
if (this !is KtFile/* || this.script == null*/) return null
|
|
||||||
val file = virtualFile ?: originalFile.virtualFile ?: return null
|
|
||||||
if (file.isNonScript()) return null
|
|
||||||
|
|
||||||
return scriptDefinitionByFileName(project, file.name)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun findScriptDefinition(file: VirtualFile, project: Project): KotlinScriptDefinition? {
|
|
||||||
if (file.isNonScript()) return null
|
|
||||||
// Do not use psiFile.script here because this method can be called during indexes access
|
|
||||||
// and accessing stubs may cause deadlock
|
|
||||||
// TODO: measure performace effect and if necessary consider detecting indexing here or using separate logic for non-IDE operations to speed up filtering
|
|
||||||
if ((PsiManager.getInstance(project).findFile(file) as? KtFile)/*?.script*/ == null) return null
|
|
||||||
|
|
||||||
return scriptDefinitionByFileName(project, file.name)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun scriptDefinitionByFileName(project: Project, fileName: String): KotlinScriptDefinition {
|
|
||||||
val scriptDefinitionProvider = ScriptDefinitionProvider.getInstance(project) ?: return null
|
|
||||||
?: throw IllegalStateException("Unable to get script definition: ScriptDefinitionProvider is not configured.")
|
|
||||||
|
|
||||||
return scriptDefinitionProvider.findScriptDefinition(fileName) ?: scriptDefinitionProvider.getDefaultScriptDefinition()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun VirtualFile.isNonScript(): Boolean =
|
|
||||||
isDirectory ||
|
|
||||||
extension == KotlinFileType.EXTENSION ||
|
|
||||||
extension == JavaClassFileType.INSTANCE.defaultExtension ||
|
|
||||||
!this.isKotlinFileType()
|
|
||||||
|
|
||||||
private fun VirtualFile.isKotlinFileType(): Boolean {
|
|
||||||
val typeRegistry = FileTypeRegistry.getInstance()
|
|
||||||
return typeRegistry.getFileTypeByFile(this) == KotlinFileType.INSTANCE ||
|
|
||||||
typeRegistry.getFileTypeByFileName(name) == KotlinFileType.INSTANCE
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ import org.jetbrains.kotlin.idea.util.isInSourceContentWithoutInjected
|
|||||||
import org.jetbrains.kotlin.idea.util.isKotlinBinary
|
import org.jetbrains.kotlin.idea.util.isKotlinBinary
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
|
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
|
||||||
import org.jetbrains.kotlin.script.scriptDefinitionByFileName
|
import org.jetbrains.kotlin.scripting.compiler.plugin.definitions.scriptDefinitionByFileName
|
||||||
import org.jetbrains.kotlin.utils.addIfNotNull
|
import org.jetbrains.kotlin.utils.addIfNotNull
|
||||||
import org.jetbrains.kotlin.utils.sure
|
import org.jetbrains.kotlin.utils.sure
|
||||||
import org.jetbrains.kotlin.utils.yieldIfNotNull
|
import org.jetbrains.kotlin.utils.yieldIfNotNull
|
||||||
|
|||||||
+2
-4
@@ -32,9 +32,7 @@ import org.jetbrains.kotlin.psi.KtPsiFactoryKt;
|
|||||||
import org.jetbrains.kotlin.resolve.TargetPlatform;
|
import org.jetbrains.kotlin.resolve.TargetPlatform;
|
||||||
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform;
|
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform;
|
||||||
import org.jetbrains.kotlin.script.KotlinScriptDefinition;
|
import org.jetbrains.kotlin.script.KotlinScriptDefinition;
|
||||||
import org.jetbrains.kotlin.script.KotlinScriptDefinitionProviderKt;
|
import org.jetbrains.kotlin.scripting.compiler.plugin.definitions.DefinitionsKt;
|
||||||
|
|
||||||
import static org.jetbrains.kotlin.script.KotlinScriptDefinitionProviderKt.findScriptDefinition;
|
|
||||||
|
|
||||||
public class TargetPlatformDetector {
|
public class TargetPlatformDetector {
|
||||||
public static final TargetPlatformDetector INSTANCE = new TargetPlatformDetector();
|
public static final TargetPlatformDetector INSTANCE = new TargetPlatformDetector();
|
||||||
@@ -62,7 +60,7 @@ public class TargetPlatformDetector {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (file.isScript()) {
|
if (file.isScript()) {
|
||||||
KotlinScriptDefinition scriptDefinition = KotlinScriptDefinitionProviderKt.scriptDefinition(file);
|
KotlinScriptDefinition scriptDefinition = DefinitionsKt.scriptDefinition(file);
|
||||||
if (scriptDefinition != null) {
|
if (scriptDefinition != null) {
|
||||||
String platformNameFromScriptDefinition = scriptDefinition.getPlatform();
|
String platformNameFromScriptDefinition = scriptDefinition.getPlatform();
|
||||||
for (IdePlatform platform : IdePlatformKind.Companion.getAll_PLATFORMS()) {
|
for (IdePlatform platform : IdePlatformKind.Companion.getAll_PLATFORMS()) {
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ import org.jetbrains.kotlin.idea.util.compat.psiSearchHelperInstance
|
|||||||
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.script.findScriptDefinition
|
import org.jetbrains.kotlin.scripting.compiler.plugin.definitions.findScriptDefinition
|
||||||
import org.jetbrains.kotlin.types.expressions.OperatorConventions
|
import org.jetbrains.kotlin.types.expressions.OperatorConventions
|
||||||
|
|
||||||
infix fun SearchScope.and(otherScope: SearchScope): SearchScope = intersectWith(otherScope)
|
infix fun SearchScope.and(otherScope: SearchScope): SearchScope = intersectWith(otherScope)
|
||||||
@@ -135,7 +135,7 @@ private fun isCheapToSearchUsagesInScripts(scope: GlobalSearchScope, name: Strin
|
|||||||
val processor = object : Processor<VirtualFile> {
|
val processor = object : Processor<VirtualFile> {
|
||||||
override fun process(file: VirtualFile): Boolean {
|
override fun process(file: VirtualFile): Boolean {
|
||||||
ProgressManager.checkCanceled()
|
ProgressManager.checkCanceled()
|
||||||
if (findScriptDefinition(file, project) == null) return true
|
if (file.findScriptDefinition(project) == null) return true
|
||||||
return scriptsCount++ < 3
|
return scriptsCount++ < 3
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ import org.jetbrains.kotlin.idea.core.script.ScriptDependenciesManager
|
|||||||
import org.jetbrains.kotlin.idea.decompiler.builtIns.KotlinBuiltInFileType
|
import org.jetbrains.kotlin.idea.decompiler.builtIns.KotlinBuiltInFileType
|
||||||
import org.jetbrains.kotlin.idea.decompiler.js.KotlinJavaScriptMetaFileType
|
import org.jetbrains.kotlin.idea.decompiler.js.KotlinJavaScriptMetaFileType
|
||||||
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
||||||
import org.jetbrains.kotlin.script.findScriptDefinition
|
import org.jetbrains.kotlin.scripting.compiler.plugin.definitions.findScriptDefinition
|
||||||
import kotlin.script.experimental.location.ScriptExpectedLocation
|
import kotlin.script.experimental.location.ScriptExpectedLocation
|
||||||
|
|
||||||
abstract class KotlinBinaryExtension(val fileType: FileType) {
|
abstract class KotlinBinaryExtension(val fileType: FileType) {
|
||||||
@@ -69,7 +69,7 @@ object ProjectRootsUtil {
|
|||||||
includeScriptDependencies: Boolean, includeScriptsOutsideSourceRoots: Boolean,
|
includeScriptDependencies: Boolean, includeScriptsOutsideSourceRoots: Boolean,
|
||||||
fileIndex: ProjectFileIndex = ProjectFileIndex.SERVICE.getInstance(project)
|
fileIndex: ProjectFileIndex = ProjectFileIndex.SERVICE.getInstance(project)
|
||||||
): Boolean {
|
): Boolean {
|
||||||
val scriptDefinition = findScriptDefinition(file, project)
|
val scriptDefinition = file.findScriptDefinition(project)
|
||||||
if (scriptDefinition != null) {
|
if (scriptDefinition != null) {
|
||||||
val scriptScope = scriptDefinition.scriptExpectedLocations
|
val scriptScope = scriptDefinition.scriptExpectedLocations
|
||||||
val includeAll = scriptScope.contains(ScriptExpectedLocation.Everywhere)
|
val includeAll = scriptScope.contains(ScriptExpectedLocation.Everywhere)
|
||||||
@@ -115,7 +115,7 @@ object ProjectRootsUtil {
|
|||||||
if (ProjectRootManager.getInstance(project).fileIndex.isInContent(file) || ScratchUtil.isScratch(file)) {
|
if (ProjectRootManager.getInstance(project).fileIndex.isInContent(file) || ScratchUtil.isScratch(file)) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return findScriptDefinition(file, project)?.scriptExpectedLocations?.contains(ScriptExpectedLocation.Everywhere) == true
|
return file.findScriptDefinition(project)?.scriptExpectedLocations?.contains(ScriptExpectedLocation.Everywhere) == true
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!includeLibraryClasses && !includeLibrarySource) return false
|
if (!includeLibraryClasses && !includeLibrarySource) return false
|
||||||
|
|||||||
+2
-2
@@ -25,7 +25,7 @@ import com.intellij.util.io.URLUtil
|
|||||||
import org.jetbrains.annotations.TestOnly
|
import org.jetbrains.annotations.TestOnly
|
||||||
import org.jetbrains.kotlin.idea.core.script.dependencies.SyncScriptDependenciesLoader
|
import org.jetbrains.kotlin.idea.core.script.dependencies.SyncScriptDependenciesLoader
|
||||||
import org.jetbrains.kotlin.script.ScriptDependenciesProvider
|
import org.jetbrains.kotlin.script.ScriptDependenciesProvider
|
||||||
import org.jetbrains.kotlin.script.findScriptDefinition
|
import org.jetbrains.kotlin.scripting.compiler.plugin.definitions.findScriptDefinition
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import kotlin.script.experimental.dependencies.ScriptDependencies
|
import kotlin.script.experimental.dependencies.ScriptDependencies
|
||||||
|
|
||||||
@@ -76,7 +76,7 @@ class ScriptDependenciesManager internal constructor(
|
|||||||
|
|
||||||
@TestOnly
|
@TestOnly
|
||||||
fun updateScriptDependenciesSynchronously(virtualFile: VirtualFile, project: Project) {
|
fun updateScriptDependenciesSynchronously(virtualFile: VirtualFile, project: Project) {
|
||||||
val scriptDefinition = findScriptDefinition(virtualFile, project)!!
|
val scriptDefinition = virtualFile.findScriptDefinition(project)!!
|
||||||
SyncScriptDependenciesLoader(project).updateDependencies(virtualFile, scriptDefinition)
|
SyncScriptDependenciesLoader(project).updateDependencies(virtualFile, scriptDefinition)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -40,8 +40,8 @@ import org.jetbrains.kotlin.psi.KtFile
|
|||||||
import org.jetbrains.kotlin.psi.NotNullableUserDataProperty
|
import org.jetbrains.kotlin.psi.NotNullableUserDataProperty
|
||||||
import org.jetbrains.kotlin.script.KotlinScriptDefinition
|
import org.jetbrains.kotlin.script.KotlinScriptDefinition
|
||||||
import org.jetbrains.kotlin.script.LegacyResolverWrapper
|
import org.jetbrains.kotlin.script.LegacyResolverWrapper
|
||||||
import org.jetbrains.kotlin.script.findScriptDefinition
|
import org.jetbrains.kotlin.scripting.compiler.plugin.definitions.findScriptDefinition
|
||||||
import org.jetbrains.kotlin.script.scriptDefinition
|
import org.jetbrains.kotlin.scripting.compiler.plugin.definitions.scriptDefinition
|
||||||
import kotlin.script.experimental.dependencies.AsyncDependenciesResolver
|
import kotlin.script.experimental.dependencies.AsyncDependenciesResolver
|
||||||
import kotlin.script.experimental.dependencies.ScriptDependencies
|
import kotlin.script.experimental.dependencies.ScriptDependencies
|
||||||
|
|
||||||
@@ -63,7 +63,7 @@ class ScriptDependenciesUpdater(
|
|||||||
fun getCurrentDependencies(file: VirtualFile): ScriptDependencies {
|
fun getCurrentDependencies(file: VirtualFile): ScriptDependencies {
|
||||||
cache[file]?.let { return it }
|
cache[file]?.let { return it }
|
||||||
|
|
||||||
val scriptDef = findScriptDefinition(file, project) ?: return ScriptDependencies.Empty
|
val scriptDef = file.findScriptDefinition(project) ?: return ScriptDependencies.Empty
|
||||||
|
|
||||||
fileAttributeLoader.updateDependencies(file, scriptDef)
|
fileAttributeLoader.updateDependencies(file, scriptDef)
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.idea.core.script.settings.KotlinScriptingSettings
|
|||||||
import org.jetbrains.kotlin.script.KotlinScriptDefinition
|
import org.jetbrains.kotlin.script.KotlinScriptDefinition
|
||||||
import org.jetbrains.kotlin.script.LegacyResolverWrapper
|
import org.jetbrains.kotlin.script.LegacyResolverWrapper
|
||||||
import org.jetbrains.kotlin.script.asResolveFailure
|
import org.jetbrains.kotlin.script.asResolveFailure
|
||||||
import org.jetbrains.kotlin.script.findScriptDefinition
|
import org.jetbrains.kotlin.scripting.compiler.plugin.definitions.findScriptDefinition
|
||||||
import java.util.concurrent.ConcurrentLinkedQueue
|
import java.util.concurrent.ConcurrentLinkedQueue
|
||||||
import java.util.concurrent.locks.ReentrantReadWriteLock
|
import java.util.concurrent.locks.ReentrantReadWriteLock
|
||||||
import kotlin.concurrent.write
|
import kotlin.concurrent.write
|
||||||
@@ -43,7 +43,7 @@ class AsyncScriptDependenciesLoader internal constructor(project: Project) : Scr
|
|||||||
override fun shouldShowNotification(): Boolean = !KotlinScriptingSettings.getInstance(project).isAutoReloadEnabled
|
override fun shouldShowNotification(): Boolean = !KotlinScriptingSettings.getInstance(project).isAutoReloadEnabled
|
||||||
|
|
||||||
private fun runDependenciesUpdate(file: VirtualFile) {
|
private fun runDependenciesUpdate(file: VirtualFile) {
|
||||||
val scriptDef = runReadAction { findScriptDefinition(file, project) } ?: return
|
val scriptDef = runReadAction { file.findScriptDefinition(project) } ?: return
|
||||||
// runBlocking is using there to avoid loading dependencies asynchronously
|
// runBlocking is using there to avoid loading dependencies asynchronously
|
||||||
// because it leads to starting more than one gradle daemon in case of resolving dependencies in build.gradle.kts
|
// because it leads to starting more than one gradle daemon in case of resolving dependencies in build.gradle.kts
|
||||||
// It is more efficient to use one hot daemon consistently than multiple daemon in parallel
|
// It is more efficient to use one hot daemon consistently than multiple daemon in parallel
|
||||||
|
|||||||
+2
-2
@@ -23,7 +23,7 @@ import com.intellij.psi.search.GlobalSearchScope
|
|||||||
import org.jetbrains.kotlin.idea.core.script.ScriptDependenciesManager
|
import org.jetbrains.kotlin.idea.core.script.ScriptDependenciesManager
|
||||||
import org.jetbrains.kotlin.idea.core.script.StandardIdeScriptDefinition
|
import org.jetbrains.kotlin.idea.core.script.StandardIdeScriptDefinition
|
||||||
import org.jetbrains.kotlin.script.KotlinScriptDefinitionFromAnnotatedTemplate
|
import org.jetbrains.kotlin.script.KotlinScriptDefinitionFromAnnotatedTemplate
|
||||||
import org.jetbrains.kotlin.script.findScriptDefinition
|
import org.jetbrains.kotlin.scripting.compiler.plugin.definitions.findScriptDefinition
|
||||||
|
|
||||||
class KotlinScriptResolveScopeProvider : ResolveScopeProvider() {
|
class KotlinScriptResolveScopeProvider : ResolveScopeProvider() {
|
||||||
companion object {
|
companion object {
|
||||||
@@ -32,7 +32,7 @@ class KotlinScriptResolveScopeProvider : ResolveScopeProvider() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getResolveScope(file: VirtualFile, project: Project): GlobalSearchScope? {
|
override fun getResolveScope(file: VirtualFile, project: Project): GlobalSearchScope? {
|
||||||
val scriptDefinition = findScriptDefinition(file, project)
|
val scriptDefinition = file.findScriptDefinition(project)
|
||||||
// TODO: this should get this particular scripts dependencies
|
// TODO: this should get this particular scripts dependencies
|
||||||
return when {
|
return when {
|
||||||
scriptDefinition == null -> null
|
scriptDefinition == null -> null
|
||||||
|
|||||||
+55
@@ -0,0 +1,55 @@
|
|||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.scripting.compiler.plugin.definitions
|
||||||
|
|
||||||
|
import com.intellij.ide.highlighter.JavaClassFileType
|
||||||
|
import com.intellij.openapi.fileTypes.FileTypeRegistry
|
||||||
|
import com.intellij.openapi.project.Project
|
||||||
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
|
import com.intellij.psi.PsiFile
|
||||||
|
import com.intellij.psi.PsiManager
|
||||||
|
import org.jetbrains.kotlin.idea.KotlinFileType
|
||||||
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
|
import org.jetbrains.kotlin.script.KotlinScriptDefinition
|
||||||
|
import org.jetbrains.kotlin.script.ScriptDefinitionProvider
|
||||||
|
|
||||||
|
fun PsiFile.scriptDefinition(): KotlinScriptDefinition? {
|
||||||
|
// Do not use psiFile.script, see comments in findScriptDefinition
|
||||||
|
if (this !is KtFile/* || this.script == null*/) return null
|
||||||
|
val file = virtualFile ?: originalFile.virtualFile ?: return null
|
||||||
|
if (file.isNonScript()) return null
|
||||||
|
|
||||||
|
return scriptDefinitionByFileName(project, file.name)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun VirtualFile.findScriptDefinition(project: Project): KotlinScriptDefinition? {
|
||||||
|
if (isNonScript()) return null
|
||||||
|
// Do not use psiFile.script here because this method can be called during indexes access
|
||||||
|
// and accessing stubs may cause deadlock
|
||||||
|
// TODO: measure performance effect and if necessary consider detecting indexing here or using separate logic for non-IDE operations to speed up filtering
|
||||||
|
if ((PsiManager.getInstance(project).findFile(this) as? KtFile)/*?.script*/ == null) return null
|
||||||
|
|
||||||
|
return scriptDefinitionByFileName(project, name)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun scriptDefinitionByFileName(project: Project, fileName: String): KotlinScriptDefinition {
|
||||||
|
val scriptDefinitionProvider = ScriptDefinitionProvider.getInstance(project) ?: return null
|
||||||
|
?: throw IllegalStateException("Unable to get script definition: ScriptDefinitionProvider is not configured.")
|
||||||
|
|
||||||
|
return scriptDefinitionProvider.findScriptDefinition(fileName) ?: scriptDefinitionProvider.getDefaultScriptDefinition()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun VirtualFile.isNonScript(): Boolean =
|
||||||
|
isDirectory ||
|
||||||
|
extension == KotlinFileType.EXTENSION ||
|
||||||
|
extension == JavaClassFileType.INSTANCE.defaultExtension ||
|
||||||
|
!this.isKotlinFileType()
|
||||||
|
|
||||||
|
private fun VirtualFile.isKotlinFileType(): Boolean {
|
||||||
|
val typeRegistry = FileTypeRegistry.getInstance()
|
||||||
|
return typeRegistry.getFileTypeByFile(this) == KotlinFileType.INSTANCE ||
|
||||||
|
typeRegistry.getFileTypeByFileName(name) == KotlinFileType.INSTANCE
|
||||||
|
}
|
||||||
+4
-1
@@ -33,7 +33,10 @@ import org.jetbrains.kotlin.resolve.scopes.LexicalScope
|
|||||||
import org.jetbrains.kotlin.resolve.scopes.LexicalScopeImpl
|
import org.jetbrains.kotlin.resolve.scopes.LexicalScopeImpl
|
||||||
import org.jetbrains.kotlin.resolve.scopes.LexicalScopeKind
|
import org.jetbrains.kotlin.resolve.scopes.LexicalScopeKind
|
||||||
import org.jetbrains.kotlin.resolve.source.toSourceElement
|
import org.jetbrains.kotlin.resolve.source.toSourceElement
|
||||||
import org.jetbrains.kotlin.script.*
|
import org.jetbrains.kotlin.script.KotlinScriptDefinition
|
||||||
|
import org.jetbrains.kotlin.script.ScriptDependenciesProvider
|
||||||
|
import org.jetbrains.kotlin.script.ScriptPriorities
|
||||||
|
import org.jetbrains.kotlin.scripting.compiler.plugin.definitions.scriptDefinitionByFileName
|
||||||
import org.jetbrains.kotlin.types.TypeSubstitutor
|
import org.jetbrains.kotlin.types.TypeSubstitutor
|
||||||
import org.jetbrains.kotlin.types.typeUtil.isNothing
|
import org.jetbrains.kotlin.types.typeUtil.isNothing
|
||||||
import org.jetbrains.kotlin.types.typeUtil.isUnit
|
import org.jetbrains.kotlin.types.typeUtil.isUnit
|
||||||
|
|||||||
+6
-2
@@ -20,7 +20,11 @@ import com.intellij.openapi.components.ServiceManager
|
|||||||
import com.intellij.openapi.diagnostic.Logger
|
import com.intellij.openapi.diagnostic.Logger
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
import org.jetbrains.kotlin.script.*
|
import org.jetbrains.kotlin.script.ScriptContentLoader
|
||||||
|
import org.jetbrains.kotlin.script.ScriptDependenciesProvider
|
||||||
|
import org.jetbrains.kotlin.script.ScriptReportSink
|
||||||
|
import org.jetbrains.kotlin.script.adjustByDefinition
|
||||||
|
import org.jetbrains.kotlin.scripting.compiler.plugin.definitions.findScriptDefinition
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.concurrent.locks.ReentrantReadWriteLock
|
import java.util.concurrent.locks.ReentrantReadWriteLock
|
||||||
import kotlin.concurrent.read
|
import kotlin.concurrent.read
|
||||||
@@ -41,7 +45,7 @@ class CliScriptDependenciesProvider(private val project: Project) : ScriptDepend
|
|||||||
val cached = cache[path]
|
val cached = cache[path]
|
||||||
return if (cached != null) cached
|
return if (cached != null) cached
|
||||||
else {
|
else {
|
||||||
val scriptDef = findScriptDefinition(file, project)
|
val scriptDef = file.findScriptDefinition(project)
|
||||||
if (scriptDef != null) {
|
if (scriptDef != null) {
|
||||||
val result = scriptContentLoader.loadContentsAndResolveDependencies(scriptDef, file)
|
val result = scriptContentLoader.loadContentsAndResolveDependencies(scriptDef, file)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user