Move script definition extraction functions to the plugin

plus finish refactoring of these functions
This commit is contained in:
Ilya Chernikov
2019-02-14 10:10:36 +01:00
parent 815fcd062d
commit adb4d264ec
12 changed files with 82 additions and 66 deletions
@@ -27,7 +27,7 @@ import org.jetbrains.kotlin.idea.util.isInSourceContentWithoutInjected
import org.jetbrains.kotlin.idea.util.isKotlinBinary
import org.jetbrains.kotlin.psi.*
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.sure
import org.jetbrains.kotlin.utils.yieldIfNotNull
@@ -32,9 +32,7 @@ import org.jetbrains.kotlin.psi.KtPsiFactoryKt;
import org.jetbrains.kotlin.resolve.TargetPlatform;
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform;
import org.jetbrains.kotlin.script.KotlinScriptDefinition;
import org.jetbrains.kotlin.script.KotlinScriptDefinitionProviderKt;
import static org.jetbrains.kotlin.script.KotlinScriptDefinitionProviderKt.findScriptDefinition;
import org.jetbrains.kotlin.scripting.compiler.plugin.definitions.DefinitionsKt;
public class TargetPlatformDetector {
public static final TargetPlatformDetector INSTANCE = new TargetPlatformDetector();
@@ -62,7 +60,7 @@ public class TargetPlatformDetector {
}
if (file.isScript()) {
KotlinScriptDefinition scriptDefinition = KotlinScriptDefinitionProviderKt.scriptDefinition(file);
KotlinScriptDefinition scriptDefinition = DefinitionsKt.scriptDefinition(file);
if (scriptDefinition != null) {
String platformNameFromScriptDefinition = scriptDefinition.getPlatform();
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.name.Name
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
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> {
override fun process(file: VirtualFile): Boolean {
ProgressManager.checkCanceled()
if (findScriptDefinition(file, project) == null) return true
if (file.findScriptDefinition(project) == null) return true
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.js.KotlinJavaScriptMetaFileType
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
abstract class KotlinBinaryExtension(val fileType: FileType) {
@@ -69,7 +69,7 @@ object ProjectRootsUtil {
includeScriptDependencies: Boolean, includeScriptsOutsideSourceRoots: Boolean,
fileIndex: ProjectFileIndex = ProjectFileIndex.SERVICE.getInstance(project)
): Boolean {
val scriptDefinition = findScriptDefinition(file, project)
val scriptDefinition = file.findScriptDefinition(project)
if (scriptDefinition != null) {
val scriptScope = scriptDefinition.scriptExpectedLocations
val includeAll = scriptScope.contains(ScriptExpectedLocation.Everywhere)
@@ -115,7 +115,7 @@ object ProjectRootsUtil {
if (ProjectRootManager.getInstance(project).fileIndex.isInContent(file) || ScratchUtil.isScratch(file)) {
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
@@ -25,7 +25,7 @@ import com.intellij.util.io.URLUtil
import org.jetbrains.annotations.TestOnly
import org.jetbrains.kotlin.idea.core.script.dependencies.SyncScriptDependenciesLoader
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 kotlin.script.experimental.dependencies.ScriptDependencies
@@ -76,7 +76,7 @@ class ScriptDependenciesManager internal constructor(
@TestOnly
fun updateScriptDependenciesSynchronously(virtualFile: VirtualFile, project: Project) {
val scriptDefinition = findScriptDefinition(virtualFile, project)!!
val scriptDefinition = virtualFile.findScriptDefinition(project)!!
SyncScriptDependenciesLoader(project).updateDependencies(virtualFile, scriptDefinition)
}
}
@@ -40,8 +40,8 @@ import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.NotNullableUserDataProperty
import org.jetbrains.kotlin.script.KotlinScriptDefinition
import org.jetbrains.kotlin.script.LegacyResolverWrapper
import org.jetbrains.kotlin.script.findScriptDefinition
import org.jetbrains.kotlin.script.scriptDefinition
import org.jetbrains.kotlin.scripting.compiler.plugin.definitions.findScriptDefinition
import org.jetbrains.kotlin.scripting.compiler.plugin.definitions.scriptDefinition
import kotlin.script.experimental.dependencies.AsyncDependenciesResolver
import kotlin.script.experimental.dependencies.ScriptDependencies
@@ -63,7 +63,7 @@ class ScriptDependenciesUpdater(
fun getCurrentDependencies(file: VirtualFile): ScriptDependencies {
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)
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.idea.core.script.settings.KotlinScriptingSettings
import org.jetbrains.kotlin.script.KotlinScriptDefinition
import org.jetbrains.kotlin.script.LegacyResolverWrapper
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.locks.ReentrantReadWriteLock
import kotlin.concurrent.write
@@ -43,7 +43,7 @@ class AsyncScriptDependenciesLoader internal constructor(project: Project) : Scr
override fun shouldShowNotification(): Boolean = !KotlinScriptingSettings.getInstance(project).isAutoReloadEnabled
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
// 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
@@ -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.StandardIdeScriptDefinition
import org.jetbrains.kotlin.script.KotlinScriptDefinitionFromAnnotatedTemplate
import org.jetbrains.kotlin.script.findScriptDefinition
import org.jetbrains.kotlin.scripting.compiler.plugin.definitions.findScriptDefinition
class KotlinScriptResolveScopeProvider : ResolveScopeProvider() {
companion object {
@@ -32,7 +32,7 @@ class KotlinScriptResolveScopeProvider : ResolveScopeProvider() {
}
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
return when {
scriptDefinition == null -> null