PyRunConfigurationFactory in OpenAPI

This commit is contained in:
Dmitry Jemerov
2012-08-08 15:30:05 +02:00
parent 5835399ef8
commit 00ff230ed3
8 changed files with 85 additions and 6 deletions
+1
View File
@@ -9,6 +9,7 @@
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="python-psi-api" exported="" />
<orderEntry type="module" module-name="platform-impl" />
<orderEntry type="module" module-name="lang-api" />
</component>
</module>
@@ -0,0 +1,34 @@
/*
* Copyright 2000-2012 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 com.jetbrains.python.run;
import com.intellij.execution.RunnerAndConfigurationSettings;
import com.intellij.execution.configurations.ConfigurationFactory;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.module.Module;
/**
* @author yole
*/
public abstract class PyRunConfigurationFactory {
public static PyRunConfigurationFactory getInstance() {
return ServiceManager.getService(PyRunConfigurationFactory.class);
}
public abstract PythonRunConfigurationParams createPythonScriptRunConfiguration(Module module, String scriptName);
public abstract RunnerAndConfigurationSettings createRunConfiguration(Module module, ConfigurationFactory factory);
}
@@ -1,8 +1,5 @@
package com.jetbrains.python.run;
import com.jetbrains.python.debugger.remote.PyPathMappingSettings;
import org.jetbrains.annotations.Nullable;
/**
* @author Leonid Shalupov
*/
@@ -87,6 +87,8 @@
implementationClass="com.jetbrains.python.codeInsight.PyDeclarationRangeHandler"/>
<!-- Run/Debug -->
<applicationService serviceInterface="com.jetbrains.python.run.PyRunConfigurationFactory"
serviceImplementation="com.jetbrains.python.run.PyRunConfigurationFactoryImpl"/>
<applicationService serviceInterface="com.jetbrains.python.run.PythonRunConfigurationExtensionsManager"
serviceImplementation="com.jetbrains.python.run.PythonRunConfigurationExtensionsManager"/>
<configurationType implementation="com.jetbrains.python.run.PythonConfigurationType"/>
@@ -0,0 +1,40 @@
package com.jetbrains.python.run;
import com.intellij.execution.RunManagerEx;
import com.intellij.execution.RunnerAndConfigurationSettings;
import com.intellij.execution.configurations.ConfigurationFactory;
import com.intellij.execution.configurations.ModuleBasedConfiguration;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull;
/**
* @author yole
*/
public class PyRunConfigurationFactoryImpl extends PyRunConfigurationFactory {
@Override
public PythonRunConfigurationParams createPythonScriptRunConfiguration(Module module, String scriptName) {
RunnerAndConfigurationSettings settings = createRunConfiguration(module, PythonConfigurationType.getInstance().getFactory());
PythonRunConfigurationParams configuration = (PythonRunConfigurationParams)settings.getConfiguration();
configuration.setScriptName(scriptName);
return configuration;
}
@Override
public RunnerAndConfigurationSettings createRunConfiguration(Module module, ConfigurationFactory factory) {
final Project project = module.getProject();
final RunManagerEx runManagerEx = RunManagerEx.getInstanceEx(project);
final RunnerAndConfigurationSettings settings = createConfigurationSettings(factory, module);
runManagerEx.addConfiguration(settings, false);
runManagerEx.setSelectedConfiguration(settings);
return settings;
}
private static RunnerAndConfigurationSettings createConfigurationSettings(ConfigurationFactory factory, @NotNull final Module module) {
final RunnerAndConfigurationSettings settings =
RunManagerEx.getInstanceEx(module.getProject()).createConfiguration(module.getName(), factory);
ModuleBasedConfiguration configuration = (ModuleBasedConfiguration) settings.getConfiguration();
configuration.setModule(module);
return settings;
}
}
@@ -16,6 +16,9 @@ import javax.swing.*;
* @author yole
*/
public class PythonConfigurationType implements ConfigurationType {
private final PythonConfigurationFactory myFactory = new PythonConfigurationFactory(this);
public static PythonConfigurationType getInstance() {
for(ConfigurationType configType: Extensions.getExtensions(CONFIGURATION_TYPE_EP)) {
if (configType instanceof PythonConfigurationType) {
@@ -51,7 +54,11 @@ public class PythonConfigurationType implements ConfigurationType {
}
public ConfigurationFactory[] getConfigurationFactories() {
return new ConfigurationFactory[]{new PythonConfigurationFactory(this)};
return new ConfigurationFactory[]{myFactory};
}
public PythonConfigurationFactory getFactory() {
return myFactory;
}
@NotNull
@@ -18,9 +18,7 @@ import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.refactoring.listeners.RefactoringElementAdapter;
import com.intellij.refactoring.listeners.RefactoringElementListener;
import com.intellij.util.xmlb.XmlSerializer;
import com.jetbrains.python.PyBundle;
import com.jetbrains.python.debugger.remote.PyPathMappingSettings;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;