mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[groovy] script configuration: ensure runner configured in checkConfiguration()
This commit is contained in:
@@ -17,9 +17,10 @@ package org.jetbrains.plugins.gradle.config;
|
||||
|
||||
import com.intellij.compiler.options.CompileStepBeforeRun;
|
||||
import com.intellij.compiler.options.CompileStepBeforeRunNoErrorCheck;
|
||||
import com.intellij.execution.*;
|
||||
import com.intellij.execution.CantRunException;
|
||||
import com.intellij.execution.Location;
|
||||
import com.intellij.execution.RunManagerEx;
|
||||
import com.intellij.execution.configurations.JavaParameters;
|
||||
import com.intellij.execution.configurations.RunProfile;
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.externalSystem.psi.search.ExternalModuleBuildGlobalSearchScope;
|
||||
import com.intellij.openapi.externalSystem.util.ExternalSystemConstants;
|
||||
@@ -172,12 +173,10 @@ public class GradleScriptType extends GroovyRunnableScriptType {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean ensureRunnerConfigured(@Nullable Module module, RunProfile profile, Executor executor, final Project project) throws ExecutionException {
|
||||
if (project != null && profile instanceof GroovyScriptRunConfiguration) {
|
||||
GroovyScriptRunConfiguration configuration = (GroovyScriptRunConfiguration)profile;
|
||||
String parameters = configuration.getProgramParameters();
|
||||
if (parameters != null) {
|
||||
// TODO den implement
|
||||
public void ensureRunnerConfigured(@NotNull GroovyScriptRunConfiguration configuration) {
|
||||
String parameters = configuration.getProgramParameters();
|
||||
if (parameters != null) {
|
||||
// TODO den implement
|
||||
// GradleTasksList list = GradleUtil.getToolWindowElement(GradleTasksList.class, project, ExternalSystemDataKeys.RECENT_TASKS_LIST);
|
||||
// if (list != null) {
|
||||
// ExternalSystemTaskDescriptor descriptor = new ExternalSystemTaskDescriptor(parameters, null);
|
||||
@@ -185,7 +184,6 @@ public class GradleScriptType extends GroovyRunnableScriptType {
|
||||
// list.setFirst(descriptor);
|
||||
// GradleLocalSettings.getInstance(project).setRecentTasks(list.getModel().getTasks());
|
||||
// }
|
||||
}
|
||||
}
|
||||
final GradleInstallationManager libraryManager = ServiceManager.getService(GradleInstallationManager.class);
|
||||
// TODO den implement
|
||||
@@ -203,7 +201,6 @@ public class GradleScriptType extends GroovyRunnableScriptType {
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+2
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package org.jetbrains.plugins.groovy.lang.psi.util;
|
||||
|
||||
import com.intellij.openapi.project.DumbService;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.util.PsiMethodUtil;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
@@ -27,6 +28,7 @@ public class GroovyRunnerPsiUtil {
|
||||
@Nullable
|
||||
public static PsiClass getRunningClass(@Nullable PsiElement element) {
|
||||
if (element == null) return null;
|
||||
if (DumbService.isDumb(element.getProject())) return null;
|
||||
|
||||
final PsiFile file = element.getContainingFile();
|
||||
if (!(file instanceof GroovyFile)) return null;
|
||||
|
||||
@@ -16,19 +16,16 @@
|
||||
package org.jetbrains.plugins.groovy.gant;
|
||||
|
||||
import com.intellij.execution.CantRunException;
|
||||
import com.intellij.execution.Executor;
|
||||
import com.intellij.execution.configurations.JavaParameters;
|
||||
import com.intellij.execution.configurations.RunProfile;
|
||||
import com.intellij.execution.configurations.RuntimeConfigurationException;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.options.ShowSettingsUtil;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.libraries.LibraryUtil;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import icons.JetgroovyIcons;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.groovy.config.GroovyConfigUtils;
|
||||
@@ -55,20 +52,13 @@ public class GantRunner extends GroovyScriptRunner {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean ensureRunnerConfigured(@Nullable Module module, RunProfile profile, Executor executor, final Project project) {
|
||||
if (GantUtils.getSDKInstallPath(module, project).isEmpty()) {
|
||||
int result = Messages
|
||||
.showOkCancelDialog("Gant is not configured. Do you want to configure it?", "Configure Gant SDK",
|
||||
JetgroovyIcons.Groovy.Gant_16x16);
|
||||
if (result == Messages.OK) {
|
||||
ShowSettingsUtil.getInstance().editConfigurable(project, new GantConfigurable(project));
|
||||
}
|
||||
if (GantUtils.getSDKInstallPath(module, project).isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
public void ensureRunnerConfigured(@NotNull GroovyScriptRunConfiguration configuration) throws RuntimeConfigurationException {
|
||||
Project project = configuration.getProject();
|
||||
if (GantUtils.getSDKInstallPath(configuration.getModule(), project).isEmpty()) {
|
||||
RuntimeConfigurationException e = new RuntimeConfigurationException("Gant is not configured");
|
||||
e.setQuickFix(() -> ShowSettingsUtil.getInstance().editConfigurable(project, new GantConfigurable(project)));
|
||||
throw e;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private static String getGantConfPath(final String gantHome) {
|
||||
|
||||
+7
-11
@@ -17,14 +17,10 @@
|
||||
package org.jetbrains.plugins.groovy.runner;
|
||||
|
||||
import com.intellij.execution.CantRunException;
|
||||
import com.intellij.execution.ExecutionException;
|
||||
import com.intellij.execution.Executor;
|
||||
import com.intellij.execution.configurations.JavaParameters;
|
||||
import com.intellij.execution.configurations.RunProfile;
|
||||
import com.intellij.execution.runners.ExecutionUtil;
|
||||
import com.intellij.execution.configurations.RuntimeConfigurationException;
|
||||
import com.intellij.execution.util.ScriptFileUtil;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.ui.configuration.ClasspathEditor;
|
||||
import com.intellij.openapi.roots.ui.configuration.ModulesConfigurator;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
@@ -52,17 +48,17 @@ public class DefaultGroovyScriptRunner extends GroovyScriptRunner {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean ensureRunnerConfigured(@Nullable Module module, RunProfile profile, Executor executor, final Project project) throws ExecutionException {
|
||||
public void ensureRunnerConfigured(@NotNull GroovyScriptRunConfiguration configuration) throws RuntimeConfigurationException {
|
||||
Module module = configuration.getModule();
|
||||
if (module == null) {
|
||||
throw new ExecutionException("Module is not specified");
|
||||
throw new RuntimeConfigurationException("Module is not specified");
|
||||
}
|
||||
|
||||
if (LibrariesUtil.getGroovyHomePath(module) == null) {
|
||||
ExecutionUtil.handleExecutionError(project, executor.getToolWindowId(), profile, new ExecutionException("Groovy is not configured"));
|
||||
ModulesConfigurator.showDialog(module.getProject(), module.getName(), ClasspathEditor.NAME);
|
||||
return false;
|
||||
RuntimeConfigurationException e = new RuntimeConfigurationException("Groovy is not configured for module '" + module.getName() + "'");
|
||||
e.setQuickFix(() -> ModulesConfigurator.showDialog(module.getProject(), module.getName(), ClasspathEditor.NAME));
|
||||
throw e;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+34
-44
@@ -15,7 +15,10 @@
|
||||
*/
|
||||
package org.jetbrains.plugins.groovy.runner;
|
||||
|
||||
import com.intellij.execution.*;
|
||||
import com.intellij.execution.CommonJavaRunConfigurationParameters;
|
||||
import com.intellij.execution.ExecutionException;
|
||||
import com.intellij.execution.Executor;
|
||||
import com.intellij.execution.ExternalizablePath;
|
||||
import com.intellij.execution.configurations.*;
|
||||
import com.intellij.execution.process.OSProcessHandler;
|
||||
import com.intellij.execution.process.ProcessAdapter;
|
||||
@@ -24,7 +27,6 @@ import com.intellij.execution.runners.ExecutionEnvironment;
|
||||
import com.intellij.execution.util.ProgramParametersUtil;
|
||||
import com.intellij.execution.util.ScriptFileUtil;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleManager;
|
||||
import com.intellij.openapi.options.SettingsEditor;
|
||||
@@ -71,7 +73,6 @@ import java.util.Map;
|
||||
public class GroovyScriptRunConfiguration extends ModuleBasedConfiguration<RunConfigurationModule>
|
||||
implements CommonJavaRunConfigurationParameters, RefactoringListenerProvider {
|
||||
|
||||
private static final Logger LOG = Logger.getInstance(GroovyScriptRunConfiguration.class);
|
||||
private String vmParams;
|
||||
private String workDir;
|
||||
private boolean isDebugEnabled;
|
||||
@@ -94,7 +95,7 @@ public class GroovyScriptRunConfiguration extends ModuleBasedConfiguration<RunCo
|
||||
@Override
|
||||
public Collection<Module> getValidModules() {
|
||||
Module[] modules = ModuleManager.getInstance(getProject()).getModules();
|
||||
final GroovyScriptRunner scriptRunner = findConfiguration();
|
||||
final GroovyScriptRunner scriptRunner = getScriptRunner();
|
||||
if (scriptRunner == null) {
|
||||
return Arrays.asList(modules);
|
||||
}
|
||||
@@ -110,21 +111,20 @@ public class GroovyScriptRunConfiguration extends ModuleBasedConfiguration<RunCo
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private GroovyScriptRunner findConfiguration() {
|
||||
final VirtualFile scriptFile = getScriptFile();
|
||||
if (scriptFile == null) {
|
||||
return null;
|
||||
}
|
||||
private GroovyScriptRunner getScriptRunner() {
|
||||
final VirtualFile scriptFile = ScriptFileUtil.findScriptFileByPath(getScriptPath());
|
||||
if (scriptFile == null) return null;
|
||||
|
||||
final PsiFile psiFile = PsiManager.getInstance(getProject()).findFile(scriptFile);
|
||||
if (!(psiFile instanceof GroovyFile)) {
|
||||
return null;
|
||||
if (!(psiFile instanceof GroovyFile)) return null;
|
||||
|
||||
final GroovyFile groovyFile = (GroovyFile)psiFile;
|
||||
if (groovyFile.isScript()) {
|
||||
return GroovyScriptUtil.getScriptType(groovyFile).getRunner();
|
||||
}
|
||||
if (!((GroovyFile)psiFile).isScript()) {
|
||||
else {
|
||||
return new DefaultGroovyScriptRunner();
|
||||
}
|
||||
|
||||
return GroovyScriptUtil.getScriptType((GroovyFile)psiFile).getRunner();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -159,22 +159,11 @@ public class GroovyScriptRunConfiguration extends ModuleBasedConfiguration<RunCo
|
||||
|
||||
@Override
|
||||
public RunProfileState getState(@NotNull Executor executor, @NotNull ExecutionEnvironment environment) throws ExecutionException {
|
||||
final VirtualFile script = getScriptFile();
|
||||
if (script == null) {
|
||||
throw new CantRunException("Cannot find script " + scriptPath);
|
||||
}
|
||||
final VirtualFile scriptFile = ScriptFileUtil.findScriptFileByPath(getScriptPath());
|
||||
assert scriptFile != null;
|
||||
|
||||
final GroovyScriptRunner scriptRunner = findConfiguration();
|
||||
if (scriptRunner == null) {
|
||||
throw new CantRunException("Unknown script type " + scriptPath);
|
||||
}
|
||||
|
||||
final Module module = getModule();
|
||||
if (!scriptRunner.ensureRunnerConfigured(module, this, executor, getProject())) {
|
||||
return null;
|
||||
}
|
||||
|
||||
final boolean tests = ProjectRootManager.getInstance(getProject()).getFileIndex().isInTestSourceContent(script);
|
||||
final GroovyScriptRunner scriptRunner = getScriptRunner();
|
||||
assert scriptRunner != null;
|
||||
|
||||
return new JavaCommandLineState(environment) {
|
||||
@NotNull
|
||||
@@ -198,9 +187,11 @@ public class GroovyScriptRunConfiguration extends ModuleBasedConfiguration<RunCo
|
||||
|
||||
@Override
|
||||
protected JavaParameters createJavaParameters() throws ExecutionException {
|
||||
final Module module = getModule();
|
||||
final boolean tests = ProjectRootManager.getInstance(getProject()).getFileIndex().isInTestSourceContent(scriptFile);
|
||||
JavaParameters params = createJavaParametersWithSdk(module);
|
||||
ProgramParametersUtil.configureConfiguration(params, GroovyScriptRunConfiguration.this);
|
||||
scriptRunner.configureCommandLine(params, module, tests, script, GroovyScriptRunConfiguration.this);
|
||||
scriptRunner.configureCommandLine(params, module, tests, scriptFile, GroovyScriptRunConfiguration.this);
|
||||
|
||||
return params;
|
||||
}
|
||||
@@ -273,19 +264,6 @@ public class GroovyScriptRunConfiguration extends ModuleBasedConfiguration<RunCo
|
||||
return params;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private VirtualFile getScriptFile() {
|
||||
return ScriptFileUtil.findScriptFileByPath(scriptPath);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private PsiClass getScriptClass() {
|
||||
final VirtualFile scriptFile = getScriptFile();
|
||||
if (scriptFile == null) return null;
|
||||
final PsiFile file = PsiManager.getInstance(getProject()).findFile(scriptFile);
|
||||
return GroovyRunnerPsiUtil.getRunningClass(file);
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public SettingsEditor<? extends RunConfiguration> getConfigurationEditor() {
|
||||
@@ -295,7 +273,19 @@ public class GroovyScriptRunConfiguration extends ModuleBasedConfiguration<RunCo
|
||||
@Override
|
||||
public void checkConfiguration() throws RuntimeConfigurationException {
|
||||
super.checkConfiguration();
|
||||
final PsiClass toRun = getScriptClass();
|
||||
|
||||
final String scriptPath = getScriptPath();
|
||||
|
||||
final VirtualFile script = ScriptFileUtil.findScriptFileByPath(scriptPath);
|
||||
if (script == null) throw new RuntimeConfigurationException("Cannot find script " + scriptPath);
|
||||
|
||||
final GroovyScriptRunner scriptRunner = getScriptRunner();
|
||||
if (scriptRunner == null) throw new RuntimeConfigurationException("Unknown script type " + scriptPath);
|
||||
|
||||
scriptRunner.ensureRunnerConfigured(this);
|
||||
|
||||
final PsiFile file = PsiManager.getInstance(getProject()).findFile(script);
|
||||
final PsiClass toRun = GroovyRunnerPsiUtil.getRunningClass(file);
|
||||
if (toRun == null) {
|
||||
throw new RuntimeConfigurationWarning(GroovyBundle.message("class.does.not.exist"));
|
||||
}
|
||||
|
||||
@@ -16,12 +16,9 @@
|
||||
package org.jetbrains.plugins.groovy.runner;
|
||||
|
||||
import com.intellij.execution.CantRunException;
|
||||
import com.intellij.execution.ExecutionException;
|
||||
import com.intellij.execution.Executor;
|
||||
import com.intellij.execution.configurations.JavaParameters;
|
||||
import com.intellij.execution.configurations.RunProfile;
|
||||
import com.intellij.execution.configurations.RuntimeConfigurationException;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.projectRoots.JavaSdkType;
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.openapi.roots.OrderEnumerator;
|
||||
@@ -47,7 +44,7 @@ public abstract class GroovyScriptRunner {
|
||||
|
||||
public abstract boolean isValidModule(@NotNull Module module);
|
||||
|
||||
public abstract boolean ensureRunnerConfigured(@Nullable Module module, RunProfile profile, Executor executor, final Project project) throws ExecutionException;
|
||||
public abstract void ensureRunnerConfigured(@NotNull GroovyScriptRunConfiguration configuration) throws RuntimeConfigurationException;
|
||||
|
||||
public abstract void configureCommandLine(JavaParameters params, @Nullable Module module, boolean tests, VirtualFile script,
|
||||
GroovyScriptRunConfiguration configuration) throws CantRunException;
|
||||
|
||||
Reference in New Issue
Block a user