diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/KotlinScriptConfigurationManager.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/KotlinScriptConfigurationManager.kt index 96f0b3cfd47..17ba5df3dc6 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/KotlinScriptConfigurationManager.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/KotlinScriptConfigurationManager.kt @@ -122,9 +122,7 @@ class KotlinScriptConfigurationManager( private fun reloadScriptDefinitions() { makeScriptDefsFromTemplatesProviderExtensions(project, { ep, ex -> log.warn("[kts] Error loading definition from ${ep.id}", ex) }).let { - if (it.isNotEmpty()) { - scriptDefinitionProvider.setScriptDefinitions(it + StandardScriptDefinition) - } + scriptDefinitionProvider.setScriptDefinitions(it) } } diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/KotlinScriptResolveScopeProvider.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/KotlinScriptResolveScopeProvider.kt index d57ede6228a..5afa32ee16b 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/KotlinScriptResolveScopeProvider.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/dependencies/KotlinScriptResolveScopeProvider.kt @@ -32,7 +32,7 @@ class KotlinScriptResolveScopeProvider : ResolveScopeProvider() { return when { scriptDefinition == null -> null // This is a workaround for completion in scripts and REPL to provide module dependencies - scriptDefinition == StandardScriptDefinition || scriptDefinition.template == Any::class -> null + scriptDefinition.template == Any::class -> null scriptDefinition is KotlinScriptDefinitionFromAnnotatedTemplate -> // TODO: should include the file itself KotlinScriptConfigurationManager.getInstance(project).getAllScriptsClasspathScope() else -> null diff --git a/idea/src/META-INF/extensions/ide.xml b/idea/src/META-INF/extensions/ide.xml index 26952482109..c83f59a641a 100644 --- a/idea/src/META-INF/extensions/ide.xml +++ b/idea/src/META-INF/extensions/ide.xml @@ -22,5 +22,9 @@ + + diff --git a/idea/src/org/jetbrains/kotlin/idea/script/StandardKotlinScriptTemplateProvider.kt b/idea/src/org/jetbrains/kotlin/idea/script/StandardKotlinScriptTemplateProvider.kt new file mode 100644 index 00000000000..a130e6b56d0 --- /dev/null +++ b/idea/src/org/jetbrains/kotlin/idea/script/StandardKotlinScriptTemplateProvider.kt @@ -0,0 +1,74 @@ +/* + * Copyright 2010-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.idea.script + +import com.intellij.openapi.project.Project +import com.intellij.openapi.projectRoots.JavaSdk +import com.intellij.openapi.projectRoots.ProjectJdkTable +import com.intellij.openapi.projectRoots.ex.PathUtilEx +import org.jetbrains.kotlin.script.* +import org.jetbrains.kotlin.utils.PathUtil +import java.io.File +import java.util.concurrent.Future +import kotlin.script.templates.standard.ScriptTemplateWithArgs + +class StandardKotlinScriptTemplateProvider(val project: Project) : ScriptTemplatesProvider { + override val id: String = "StandardKotlinScriptTemplateProvider" + override val isValid: Boolean = true + + override val templateClassNames: Iterable get() = listOf(ScriptTemplateWithArgs::class.qualifiedName!!) + override val dependenciesClasspath: Iterable get() = emptyList() + + override val environment: Map? get() { + return mapOf( + "sdk" to getScriptSDK(project) + ) + } + + override val resolver: ScriptDependenciesResolver = BundledKotlinScriptDependenciesResolver() + + private fun getScriptSDK(project: Project): String? { + val jdk = PathUtilEx.getAnyJdk(project) ?: + ProjectJdkTable.getInstance().allJdks.firstOrNull { sdk -> sdk.sdkType is JavaSdk } + + return jdk?.homePath + } +} + +class BundledKotlinScriptDependenciesResolver : ScriptDependenciesResolver { + override fun resolve( + script: ScriptContents, + environment: Map?, + report: (ScriptDependenciesResolver.ReportSeverity, String, ScriptContents.Position?) -> Unit, + previousDependencies: KotlinScriptExternalDependencies?): Future { + val javaHome = environment?.get("sdk") as String? + val dependencies = KotlinBundledScriptDependencies(javaHome) + return PseudoFuture(dependencies) + } +} + +class KotlinBundledScriptDependencies(override val javaHome: String?) : KotlinScriptExternalDependencies { + override val classpath: Iterable get() { + return with(PathUtil.getKotlinPathsForIdeaPlugin()) { + listOf( + reflectPath, + runtimePath, + scriptRuntimePath + ) + } + } +} \ No newline at end of file