mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
context run action for python
This commit is contained in:
@@ -20,8 +20,6 @@
|
||||
<lang.psiStructureViewFactory language="Python" implementationClass="com.jetbrains.python.structureView.PyStructureViewFactory"/>
|
||||
<lang.documentationProvider language="Python" implementationClass="com.jetbrains.python.PythonDocumentationProvider"/>
|
||||
<annotator language="Python" implementationClass="com.jetbrains.python.validation.PyAnnotatingVisitor"/>
|
||||
<configurationType implementation="com.jetbrains.python.run.PythonConfigurationType"/>
|
||||
<programRunner implementation="com.jetbrains.python.run.PythonRunner"/>
|
||||
<backspaceHandlerDelegate implementation="com.jetbrains.python.editor.PythonBackspaceHandler"/>
|
||||
<quoteHandler fileType="Python" className="com.jetbrains.python.editor.PythonQuoteHandler"/>
|
||||
<sdkType implementation="com.jetbrains.python.sdk.PythonSdkType"/>
|
||||
@@ -31,5 +29,10 @@
|
||||
<colorSettingsPage implementation="com.jetbrains.python.PythonColorsPage"/>
|
||||
<extendWordSelectionHandler implementation="com.jetbrains.python.editor.selectWord.PyWordSelectionHandler"/>
|
||||
<extendWordSelectionHandler implementation="com.jetbrains.python.editor.selectWord.PyStatementSelectionHandler"/>
|
||||
|
||||
<!-- Run/Debug -->
|
||||
<configurationType implementation="com.jetbrains.python.run.PythonConfigurationType"/>
|
||||
<programRunner implementation="com.jetbrains.python.run.PythonRunner"/>
|
||||
<configurationProducer implementation="com.jetbrains.python.run.PythonRunConfigurationProducer"/>
|
||||
</extensions>
|
||||
</idea-plugin>
|
||||
|
||||
@@ -3,8 +3,9 @@ package com.jetbrains.python.run;
|
||||
import com.intellij.execution.configurations.ConfigurationFactory;
|
||||
import com.intellij.execution.configurations.ConfigurationType;
|
||||
import com.intellij.execution.configurations.RunConfiguration;
|
||||
import com.intellij.openapi.util.IconLoader;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.IconLoader;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -14,6 +15,16 @@ import javax.swing.*;
|
||||
* @author yole
|
||||
*/
|
||||
public class PythonConfigurationType implements ConfigurationType {
|
||||
public static PythonConfigurationType getInstance() {
|
||||
for(ConfigurationType configType: Extensions.getExtensions(CONFIGURATION_TYPE_EP)) {
|
||||
if (configType instanceof PythonConfigurationType) {
|
||||
return (PythonConfigurationType) configType;
|
||||
}
|
||||
}
|
||||
assert false;
|
||||
return null;
|
||||
}
|
||||
|
||||
private Icon _icon = IconLoader.getIcon("/com/jetbrains/python/python.png");
|
||||
|
||||
private static class PythonConfigurationFactory extends ConfigurationFactory {
|
||||
@@ -47,10 +58,4 @@ public class PythonConfigurationType implements ConfigurationType {
|
||||
public String getId() {
|
||||
return "PythonConfigurationType";
|
||||
}
|
||||
|
||||
public void initComponent() {
|
||||
}
|
||||
|
||||
public void disposeComponent() {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,20 +13,18 @@ import com.intellij.openapi.options.SettingsEditor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.openapi.roots.ProjectRootManager;
|
||||
import com.intellij.openapi.util.DefaultJDOMExternalizer;
|
||||
import com.intellij.openapi.util.InvalidDataException;
|
||||
import com.intellij.openapi.util.JDOMExternalizable;
|
||||
import com.intellij.openapi.util.WriteExternalException;
|
||||
import com.intellij.openapi.util.*;
|
||||
import com.jetbrains.python.sdk.PythonSdkType;
|
||||
import org.jdom.Element;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author yole
|
||||
*/
|
||||
public class PythonRunConfiguration extends RunConfigurationBase {
|
||||
public class PythonRunConfiguration extends RunConfigurationBase implements LocatableConfiguration {
|
||||
public String SCRIPT_NAME;
|
||||
public String PARAMETERS;
|
||||
public String WORKING_DIRECTORY;
|
||||
@@ -102,4 +100,16 @@ public class PythonRunConfiguration extends RunConfigurationBase {
|
||||
public void setEnvs(final Map<String, String> envs) {
|
||||
myEnvs = envs;
|
||||
}
|
||||
|
||||
public boolean isGeneratedName() {
|
||||
return Comparing.equal(getName(), suggestedName());
|
||||
}
|
||||
|
||||
public String suggestedName() {
|
||||
String name = new File(SCRIPT_NAME).getName();
|
||||
if (name.endsWith(".py")) {
|
||||
return name.substring(0, name.length()-3);
|
||||
}
|
||||
return name;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.jetbrains.python.run;
|
||||
|
||||
import com.intellij.execution.Location;
|
||||
import com.intellij.execution.actions.ConfigurationContext;
|
||||
import com.intellij.execution.impl.RunnerAndConfigurationSettingsImpl;
|
||||
import com.intellij.execution.junit.RuntimeConfigurationProducer;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.jetbrains.python.PythonFileType;
|
||||
|
||||
/**
|
||||
* @author yole
|
||||
*/
|
||||
public class PythonRunConfigurationProducer extends RuntimeConfigurationProducer implements Cloneable {
|
||||
private PsiFile mySourceFile = null;
|
||||
|
||||
public PythonRunConfigurationProducer() {
|
||||
super(PythonConfigurationType.getInstance());
|
||||
}
|
||||
|
||||
public PsiElement getSourceElement() {
|
||||
return mySourceFile;
|
||||
}
|
||||
|
||||
protected RunnerAndConfigurationSettingsImpl createConfigurationByElement(final Location location, final ConfigurationContext context) {
|
||||
mySourceFile = location.getPsiElement().getContainingFile();
|
||||
if (mySourceFile == null || mySourceFile.getFileType() != PythonFileType.INSTANCE) {
|
||||
return null;
|
||||
}
|
||||
|
||||
final Project project = mySourceFile.getProject();
|
||||
RunnerAndConfigurationSettingsImpl settings = cloneTemplateConfiguration(project, context);
|
||||
PythonRunConfiguration configuration = (PythonRunConfiguration) settings.getConfiguration();
|
||||
configuration.SCRIPT_NAME = mySourceFile.getVirtualFile().getPath();
|
||||
configuration.setName(configuration.suggestedName());
|
||||
copyStepsBeforeRun(project, configuration);
|
||||
return settings;
|
||||
}
|
||||
|
||||
public int compareTo(final Object o) {
|
||||
return 0; //To change body of implemented methods use File | Settings | File Templates.
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user