Run Script Action should add script dependencies to classpath
This commit is contained in:
+35
-1
@@ -23,18 +23,27 @@ import com.intellij.execution.configurations.*
|
|||||||
import com.intellij.execution.runners.ExecutionEnvironment
|
import com.intellij.execution.runners.ExecutionEnvironment
|
||||||
import com.intellij.execution.util.JavaParametersUtil
|
import com.intellij.execution.util.JavaParametersUtil
|
||||||
import com.intellij.execution.util.ProgramParametersUtil
|
import com.intellij.execution.util.ProgramParametersUtil
|
||||||
|
import com.intellij.ide.projectView.impl.ProjectRootsUtil
|
||||||
|
import com.intellij.openapi.compiler.CompilerPaths
|
||||||
|
import com.intellij.openapi.compiler.ex.CompilerPathsEx
|
||||||
import com.intellij.openapi.components.PathMacroManager
|
import com.intellij.openapi.components.PathMacroManager
|
||||||
|
import com.intellij.openapi.module.Module
|
||||||
|
import com.intellij.openapi.module.ModuleUtilCore
|
||||||
import com.intellij.openapi.options.SettingsEditor
|
import com.intellij.openapi.options.SettingsEditor
|
||||||
import com.intellij.openapi.options.SettingsEditorGroup
|
import com.intellij.openapi.options.SettingsEditorGroup
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
|
import com.intellij.openapi.roots.OrderEnumerator
|
||||||
import com.intellij.openapi.util.DefaultJDOMExternalizer
|
import com.intellij.openapi.util.DefaultJDOMExternalizer
|
||||||
import com.intellij.openapi.vfs.LocalFileSystem
|
import com.intellij.openapi.vfs.LocalFileSystem
|
||||||
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.refactoring.listeners.RefactoringElementAdapter
|
import com.intellij.refactoring.listeners.RefactoringElementAdapter
|
||||||
import com.intellij.refactoring.listeners.RefactoringElementListener
|
import com.intellij.refactoring.listeners.RefactoringElementListener
|
||||||
import org.jdom.Element
|
import org.jdom.Element
|
||||||
import org.jetbrains.kotlin.idea.core.script.ScriptDependenciesManager
|
import org.jetbrains.kotlin.idea.core.script.ScriptDependenciesManager
|
||||||
|
import org.jetbrains.kotlin.idea.run.KotlinRunConfiguration
|
||||||
import org.jetbrains.kotlin.idea.run.script.standalone.KotlinStandaloneScriptRunConfigurationProducer.Companion.pathFromPsiElement
|
import org.jetbrains.kotlin.idea.run.script.standalone.KotlinStandaloneScriptRunConfigurationProducer.Companion.pathFromPsiElement
|
||||||
|
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil.isProjectSourceFile
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.utils.PathUtil
|
import org.jetbrains.kotlin.utils.PathUtil
|
||||||
import java.io.File
|
import java.io.File
|
||||||
@@ -44,7 +53,7 @@ class KotlinStandaloneScriptRunConfiguration(
|
|||||||
project: Project,
|
project: Project,
|
||||||
factory: ConfigurationFactory,
|
factory: ConfigurationFactory,
|
||||||
name: String?
|
name: String?
|
||||||
) : LocatableConfigurationBase(project, factory, name), CommonJavaRunConfigurationParameters, RefactoringListenerProvider {
|
) : KotlinRunConfiguration(name, JavaRunConfigurationModule(project, true), factory), CommonJavaRunConfigurationParameters, RefactoringListenerProvider {
|
||||||
@JvmField
|
@JvmField
|
||||||
var filePath: String? = null
|
var filePath: String? = null
|
||||||
@JvmField
|
@JvmField
|
||||||
@@ -124,6 +133,11 @@ class KotlinStandaloneScriptRunConfiguration(
|
|||||||
EnvironmentVariablesComponent.readExternal(element, getEnvs())
|
EnvironmentVariablesComponent.readExternal(element, getEnvs())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun getModules(): Array<Module> {
|
||||||
|
val scriptVFile = LocalFileSystem.getInstance().findFileByIoFile(File(filePath))
|
||||||
|
return scriptVFile?.module(project)?.let { arrayOf(it) } ?: emptyArray()
|
||||||
|
}
|
||||||
|
|
||||||
override fun checkConfiguration() {
|
override fun checkConfiguration() {
|
||||||
JavaParametersUtil.checkAlternativeJRE(this)
|
JavaParametersUtil.checkAlternativeJRE(this)
|
||||||
ProgramParametersUtil.checkWorkingDirectoryExist(this, project, null)
|
ProgramParametersUtil.checkWorkingDirectoryExist(this, project, null)
|
||||||
@@ -204,6 +218,19 @@ private class ScriptCommandLineState(
|
|||||||
params.programParametersList.prepend(PathUtil.kotlinPathsForIdeaPlugin.homePath.path)
|
params.programParametersList.prepend(PathUtil.kotlinPathsForIdeaPlugin.homePath.path)
|
||||||
params.programParametersList.prepend("-kotlin-home")
|
params.programParametersList.prepend("-kotlin-home")
|
||||||
|
|
||||||
|
val module = scriptVFile.module(environment.project)
|
||||||
|
if (module != null) {
|
||||||
|
val orderEnumerator = OrderEnumerator.orderEntries(module).recursively().let {
|
||||||
|
if (!ProjectRootsUtil.isInTestSource(scriptVFile, environment.project)) it.productionOnly() else it
|
||||||
|
}
|
||||||
|
|
||||||
|
val moduleDependencies = orderEnumerator.classes().pathsList.pathsString
|
||||||
|
if (moduleDependencies.isNotBlank()) {
|
||||||
|
params.programParametersList.prepend(moduleDependencies)
|
||||||
|
params.programParametersList.prepend("-cp")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return params
|
return params
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -215,3 +242,10 @@ private class ScriptCommandLineState(
|
|||||||
return params
|
return params
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun VirtualFile.module(project: Project): Module? {
|
||||||
|
if (isProjectSourceFile(project, this)) {
|
||||||
|
return ModuleUtilCore.findModuleForFile(this, project)
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user