Merge branch 'master' of git.labs.intellij.net:idea/ultimate

Conflicts:
	python/src/com/jetbrains/django/run/DjangoServerRunConfiguration.java
	python/src/com/jetbrains/django/run/RunnerMediator.java
	python/src/com/jetbrains/python/run/AbstractPythonRunConfiguration.java
This commit is contained in:
Dmitry Cheryasov
2010-08-23 11:40:52 +03:00
26 changed files with 1471 additions and 1327 deletions
+1274 -1231
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -1,4 +1,4 @@
import sys
import os.path
for x in sys.path:
if x != os.path.dirname(sys.argv [0]): sys.stdout.write(x+chr(10))
if x != os.path.dirname(sys.argv [0]) and x != '.': sys.stdout.write(x+chr(10))
@@ -129,12 +129,17 @@ public class PyOverrideImplementUtil {
PyFunction function = builder.addFunctionAfter(statementList, anchor);
element = CodeInsightUtilBase.forcePsiPostprocessAndRestoreElement(function);
}
PyPsiUtils.removeRedundantPass(statementList);
final int start = element.getStatementList().getTextRange().getStartOffset();
editor.getCaretModel().moveToOffset(start);
editor.getScrollingModel().scrollToCaret(ScrollType.RELATIVE);
editor.getSelectionModel().setSelection(start, element.getTextRange().getEndOffset());
if (element != null) {
final PyStatementList targetStatementList = element.getStatementList();
final int start = targetStatementList != null
? targetStatementList.getTextRange().getStartOffset()
: element.getTextRange().getStartOffset();
editor.getCaretModel().moveToOffset(start);
editor.getScrollingModel().scrollToCaret(ScrollType.RELATIVE);
editor.getSelectionModel().setSelection(start, element.getTextRange().getEndOffset());
}
}
private static PyFunctionBuilder buildOverriddenFunction(PyClass pyClass, PyFunction baseFunction) {
@@ -3,17 +3,18 @@ package com.jetbrains.python.configuration;
import com.intellij.application.options.codeStyle.LanguageCodeStyleSettingsProvider;
import com.intellij.lang.Language;
import com.intellij.openapi.application.ApplicationBundle;
import com.intellij.psi.codeStyle.CodeStyleCustomizationsConsumer;
import com.intellij.psi.codeStyle.CodeStyleSettingsCustomizable;
import com.jetbrains.python.PythonLanguage;
import com.jetbrains.python.formatter.PyCodeStyleSettings;
import org.jetbrains.annotations.NotNull;
import static com.intellij.psi.codeStyle.CodeStyleCustomizationsConsumer.*;
import static com.intellij.psi.codeStyle.CodeStyleSettingsCustomizable.*;
/**
* @author yole
*/
public class PyLanguageCodeStyleSettingsProvider extends LanguageCodeStyleSettingsProvider {
@NotNull
@Override
public Language getLanguage() {
return PythonLanguage.getInstance();
@@ -21,48 +22,43 @@ public class PyLanguageCodeStyleSettingsProvider extends LanguageCodeStyleSettin
@Override
public String getCodeSample(@NotNull SettingsType settingsType) {
//noinspection EnumSwitchStatementWhichMissesCases
switch(settingsType) {
case SPACING_SETTINGS:
return SPACING_SETTINGS_PREVIEW;
case BLANK_LINE_SETTINGS:
return BLANK_LINES_SETTINGS_PREVIEW;
default:
return "";
}
}
public void customizeSpacingOptions(CodeStyleCustomizationsConsumer consumer) {
consumer.showStandardOptions("SPACE_BEFORE_METHOD_CALL_PARENTHESES",
"SPACE_AROUND_ASSIGNMENT_OPERATORS",
"SPACE_AROUND_LOGICAL_OPERATORS",
"SPACE_AROUND_EQUALITY_OPERATORS",
"SPACE_AROUND_RELATIONAL_OPERATORS",
"SPACE_AROUND_BITWISE_OPERATORS",
"SPACE_AROUND_ADDITIVE_OPERATORS",
"SPACE_AROUND_MULTIPLICATIVE_OPERATORS",
"SPACE_AROUND_SHIFT_OPERATORS",
"SPACE_WITHIN_METHOD_CALL_PARENTHESES",
"SPACE_WITHIN_BRACKETS",
"SPACE_AFTER_COMMA",
"SPACE_BEFORE_COMMA",
"SPACE_BEFORE_SEMICOLON");
consumer.showCustomOption(PyCodeStyleSettings.class, "SPACE_BEFORE_LBRACKET", "Left bracket", BEFORE_PARENTHESES);
consumer.showCustomOption(PyCodeStyleSettings.class, "SPACE_AROUND_EQ_IN_NAMED_PARAMETER", "Around = in named parameter", AROUND_OPERATORS);
consumer.showCustomOption(PyCodeStyleSettings.class, "SPACE_AROUND_EQ_IN_KEYWORD_ARGUMENT", "Around = in keyword argument", AROUND_OPERATORS);
consumer.showCustomOption(PyCodeStyleSettings.class, "SPACE_WITHIN_BRACES", "Within braces", OTHER);
consumer.showCustomOption(PyCodeStyleSettings.class, "SPACE_BEFORE_COLON", ApplicationBundle.message("checkbox.spaces.before.colon"), OTHER);
if (settingsType == SettingsType.SPACING_SETTINGS) return SPACING_SETTINGS_PREVIEW;
if (settingsType == SettingsType.BLANK_LINES_SETTINGS) return BLANK_LINES_SETTINGS_PREVIEW;
return "";
}
@Override
public void customizeBlankLinesOptions(CodeStyleCustomizationsConsumer consumer) {
consumer.showStandardOptions("BLANK_LINES_AROUND_CLASS",
"BLANK_LINES_AROUND_METHOD",
"BLANK_LINES_AFTER_IMPORTS",
"KEEP_BLANK_LINES_IN_DECLARATIONS",
"KEEP_BLANK_LINES_IN_CODE");
public void customizeSettings(@NotNull CodeStyleSettingsCustomizable consumer, @NotNull SettingsType settingsType) {
if (settingsType == SettingsType.SPACING_SETTINGS) {
consumer.showStandardOptions("SPACE_BEFORE_METHOD_CALL_PARENTHESES",
"SPACE_AROUND_ASSIGNMENT_OPERATORS",
"SPACE_AROUND_LOGICAL_OPERATORS",
"SPACE_AROUND_EQUALITY_OPERATORS",
"SPACE_AROUND_RELATIONAL_OPERATORS",
"SPACE_AROUND_BITWISE_OPERATORS",
"SPACE_AROUND_ADDITIVE_OPERATORS",
"SPACE_AROUND_MULTIPLICATIVE_OPERATORS",
"SPACE_AROUND_SHIFT_OPERATORS",
"SPACE_WITHIN_METHOD_CALL_PARENTHESES",
"SPACE_WITHIN_BRACKETS",
"SPACE_AFTER_COMMA",
"SPACE_BEFORE_COMMA",
"SPACE_BEFORE_SEMICOLON");
consumer.showCustomOption(PyCodeStyleSettings.class, "SPACE_BEFORE_LBRACKET", "Left bracket", SPACES_BEFORE_PARENTHESES);
consumer.showCustomOption(PyCodeStyleSettings.class, "SPACE_AROUND_EQ_IN_NAMED_PARAMETER", "Around = in named parameter",
SPACES_AROUND_OPERATORS);
consumer.showCustomOption(PyCodeStyleSettings.class, "SPACE_AROUND_EQ_IN_KEYWORD_ARGUMENT", "Around = in keyword argument",
SPACES_AROUND_OPERATORS);
consumer.showCustomOption(PyCodeStyleSettings.class, "SPACE_WITHIN_BRACES", "Within braces", SPACES_WITHIN);
consumer.showCustomOption(PyCodeStyleSettings.class, "SPACE_BEFORE_COLON", ApplicationBundle.message("checkbox.spaces.before.colon"), SPACES_OTHER);
}
else if (settingsType == SettingsType.BLANK_LINES_SETTINGS) {
consumer.showStandardOptions("BLANK_LINES_AROUND_CLASS",
"BLANK_LINES_AROUND_METHOD",
"BLANK_LINES_AFTER_IMPORTS",
"KEEP_BLANK_LINES_IN_DECLARATIONS",
"KEEP_BLANK_LINES_IN_CODE");
}
}
private static String SPACING_SETTINGS_PREVIEW = "def settings_preview(argument, key=value):\n" +
@@ -61,7 +61,8 @@ public class PyStatementEffectInspection extends PyInspection {
}
else if (expression instanceof PyBinaryExpression) {
PyBinaryExpression binary = (PyBinaryExpression)expression;
String method = binary.getOperator().getSpecialMethodName();
final PyElementType operator = binary.getOperator();
String method = operator == null ? null : operator.getSpecialMethodName();
if (method != null) {
// maybe the op is overridden and may produce side effects, like cout << "hello"
PyType type = binary.getLeftExpression().getType(TypeEvalContext.fast());
@@ -9,9 +9,13 @@ import org.jetbrains.annotations.Nullable;
public interface PyBinaryExpression extends PyExpression {
PyExpression getLeftExpression();
@Nullable PyExpression getRightExpression();
@Nullable
PyElementType getOperator();
@Nullable
PsiElement getPsiOperator();
boolean isOperator(String chars);
PyExpression getOppositeExpression(PyExpression expression)
@@ -25,6 +25,9 @@ public interface PyClass extends
@NotNull
PyStatementList getStatementList();
@Nullable
PyArgumentList getSuperClassExpressionList();
@NotNull
PyExpression[] getSuperClassExpressions();
@@ -31,7 +31,7 @@ public abstract class PyElementGenerator {
* @return a newly created literal
*/
public abstract PyStringLiteralExpression createStringLiteralFromString(@Nullable PsiFile destination, String unescaped);
public abstract PyStringLiteralExpression createStringLiteralFromString(String unescaped);
public abstract PyStringLiteralExpression createStringLiteralFromString(@NotNull String unescaped);
public abstract PyListLiteralExpression createListLiteral();
@@ -74,7 +74,13 @@ public class PyArgumentListImpl extends PyElementImpl implements PyArgumentList
}
}
else {
addArgumentLastWithoutComma(arg);
final PyExpression[] args = getArguments();
if (args.length > 0) {
addArgumentAfter(arg, args [args.length-1]);
}
else {
addArgumentLastWithoutComma(arg);
}
}
}
@@ -38,6 +38,7 @@ public class PyBinaryExpressionImpl extends PyElementImpl implements PyBinaryExp
return PsiTreeUtil.getNextSiblingOfType(getLeftExpression(), PyExpression.class);
}
@Nullable
public PyElementType getOperator() {
final PsiElement psiOperator = getPsiOperator();
return psiOperator != null ? (PyElementType)psiOperator.getNode().getElementType() : null;
@@ -106,9 +106,18 @@ public class PyClassImpl extends PyPresentableElementImpl<PyClassStub> implement
return childToPsiNotNull(PyElementTypes.STATEMENT_LIST);
}
@Override
public PyArgumentList getSuperClassExpressionList() {
final PyArgumentList argList = PsiTreeUtil.getChildOfType(this, PyArgumentList.class);
if (argList != null && argList.getFirstChild() != null) {
return argList;
}
return null;
}
@NotNull
public PyExpression[] getSuperClassExpressions() {
final PyArgumentList argList = PsiTreeUtil.getChildOfType(this, PyArgumentList.class);
final PyArgumentList argList = getSuperClassExpressionList();
if (argList != null) {
return argList.getArguments();
}
@@ -127,7 +127,7 @@ public class PyStringLiteralExpressionImpl extends PyElementImpl implements PySt
final String text = child.getText();
TextRange textRange = getNodeTextRange(text);
int offset = child.getTextRange().getStartOffset() - elStart + textRange.getStartOffset();
String undecoded = text.substring(textRange.getStartOffset(), textRange.getEndOffset());
String undecoded = textRange.substring(text);
if (!iterateCharacterRanges(consumer, undecoded, offset, isRaw(text), isUnicode(text))) {
break;
}
@@ -242,7 +242,10 @@ public class PyTargetExpressionImpl extends PyPresentableElementImpl<PyTargetExp
while(true) {
PyElement parentContainer = PsiTreeUtil.getParentOfType(container, PyFunction.class, PyClass.class);
if (parentContainer instanceof PyClass) {
return super.getUseScope();
if (getQualifier() != null) {
return super.getUseScope();
}
break;
}
if (parentContainer == null) {
break;
@@ -5,7 +5,9 @@ import com.intellij.codeInsight.lookup.LookupElementBuilder;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.Key;
import com.intellij.psi.PsiElement;
import com.intellij.util.ArrayUtil;
import com.intellij.util.ProcessingContext;
import com.intellij.util.SmartList;
import com.intellij.util.containers.ContainerUtil;
@@ -126,7 +128,18 @@ public class PyClassType implements PyType {
return null;
}
private static Key<Set<PyClassType>> CTX_VISITED = Key.create("PyClassType.Visited");
public Object[] getCompletionVariants(String prefix, PyExpression expressionHook, ProcessingContext context) {
Set<PyClassType> visited = context.get(CTX_VISITED);
if (visited == null) {
visited = new HashSet<PyClassType>();
context.put(CTX_VISITED, visited);
}
if (visited.contains(this)) {
return ArrayUtil.EMPTY_OBJECT_ARRAY;
}
visited.add(this);
Set<String> namesAlready = context.get(CTX_NAMES);
if (namesAlready == null) {
namesAlready = new HashSet<String>();
@@ -24,28 +24,37 @@ public class PyClassRefactoringUtil {
public static void moveSuperclasses(PyClass clazz, Set<String> superClasses, PyClass superClass) {
if (superClasses.size() == 0) return;
final Project project = clazz.getProject();
final List<PsiElement> toAdd = removeAndGetSuperClasses(clazz, superClasses);
final List<PyExpression> toAdd = removeAndGetSuperClasses(clazz, superClasses);
addSuperclasses(project, superClass, toAdd, superClasses);
}
public static void addSuperclasses(Project project, PyClass superClass, Collection<PsiElement> toAdd, Collection<String> superClasses) {
if (superClasses.size() == 0) return;
PsiElement[] elements = superClass.getSuperClassExpressions();
if (elements.length > 0) {
PsiElement parent = elements[elements.length - 1].getParent();
for (PsiElement element : toAdd) {
PyUtil.addListNode(parent, element, parent.getLastChild().getNode(), false, true);
public static void addSuperclasses(Project project, PyClass superClass,
@Nullable Collection<PyExpression> superClassesAsPsi,
Collection<String> superClassesAsStrings) {
if (superClassesAsStrings.size() == 0) return;
PyArgumentList argList = superClass.getSuperClassExpressionList();
if (argList != null) {
if (superClassesAsPsi != null) {
for (PyExpression element : superClassesAsPsi) {
argList.addArgument(element);
}
}
else {
for (String s : superClassesAsStrings) {
final PyExpression expr = PyElementGenerator.getInstance(project).createExpressionFromText(s);
argList.addArgument(expr);
}
}
} else {
addSuperclasses(project, superClass, superClasses);
addSuperclasses(project, superClass, superClassesAsStrings);
}
}
public static List<PsiElement> removeAndGetSuperClasses(PyClass clazz, Set<String> superClasses) {
public static List<PyExpression> removeAndGetSuperClasses(PyClass clazz, Set<String> superClasses) {
if (superClasses.size() == 0) return Collections.emptyList();
final List<PsiElement> toAdd = new ArrayList<PsiElement>();
final PsiElement[] elements = clazz.getSuperClassExpressions();
for (PsiElement element : elements) {
final List<PyExpression> toAdd = new ArrayList<PyExpression>();
final PyExpression[] elements = clazz.getSuperClassExpressions();
for (PyExpression element : elements) {
if (superClasses.contains(element.getText())) {
toAdd.add(element);
PyUtil.removeListNode(element);
@@ -67,6 +67,11 @@ public class PyExtractSuperclassDialog extends UpDirectedMembersMovingDialog {
super.doOKAction();
}
@Override
public JComponent getPreferredFocusedComponent() {
return myExtractedSuperNameField;
}
protected JPanel createNorthPanel() {
Box box = createBox();
box.add(Box.createVerticalStrut(10));
@@ -17,8 +17,8 @@ import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.refactoring.RefactoringBundle;
import com.intellij.util.PathUtil;
import com.jetbrains.python.PyNames;
import com.jetbrains.python.PythonFileType;
import com.jetbrains.python.PythonLanguage;
import com.jetbrains.python.psi.*;
import com.jetbrains.python.psi.impl.PyPsiUtils;
import com.jetbrains.python.refactoring.classes.PyClassRefactoringUtil;
@@ -48,6 +48,14 @@ public class PyExtractSuperclassHelper {
else if (element instanceof PyClass) superClasses.add(element.getName());
else LOG.error("unmatched member class " + element.getClass());
}
// 'object' superclass is always pulled up, even if not selected explicitly
for (PyExpression expr : clazz.getSuperClassExpressions()) {
if (PyNames.OBJECT.equals(expr.getText()) && !superClasses.contains(PyNames.OBJECT)) {
superClasses.add(PyNames.OBJECT);
}
}
final Project project = clazz.getProject();
final Ref<PyClass> newClassRef = new Ref<PyClass>();
CommandProcessor.getInstance().executeCommand(project, new Runnable() {
@@ -59,7 +67,7 @@ public class PyExtractSuperclassHelper {
final PyClass newClass = PyElementGenerator.getInstance(project).createFromText(PyClass.class, text);
newClassRef.set(newClass);
PyClassRefactoringUtil.moveSuperclasses(clazz, superClasses, newClass);
PyClassRefactoringUtil.addSuperclasses(project, clazz, Collections.singleton(superBaseName));
PyClassRefactoringUtil.addSuperclasses(project, clazz, null, Collections.singleton(superBaseName));
PyPsiUtils.removeElements(elements);
PyClassRefactoringUtil.insertPassIfNeeded(clazz);
placeNewClass(project, newClass, clazz, targetFile);
@@ -13,6 +13,7 @@ import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
import com.jetbrains.python.psi.PyClass;
import com.jetbrains.python.psi.PyElement;
import com.jetbrains.python.psi.PyExpression;
import com.jetbrains.python.psi.PyFunction;
import com.jetbrains.python.psi.impl.PyPsiUtils;
import com.jetbrains.python.psi.search.PyClassInheritorsSearch;
@@ -75,7 +76,7 @@ public class PyPushDownProcessor extends BaseRefactoringProcessor {
final PyElement[] elements = methods.toArray(new PyElement[methods.size()]);
final List<PsiElement> superClassesElements = PyClassRefactoringUtil.removeAndGetSuperClasses(myClass, superClasses);
final List<PyExpression> superClassesElements = PyClassRefactoringUtil.removeAndGetSuperClasses(myClass, superClasses);
for (UsageInfo usage : usages) {
final PyClass targetClass = (PyClass)usage.getElement();
@@ -108,28 +108,36 @@ public abstract class AbstractPythonRunConfiguration extends ModuleBasedConfigur
public void readExternal(Element element) throws InvalidDataException {
super.readExternal(element);
myInterpreterOptions = JDOMExternalizerUtil.readField(element, "INTERPRETER_OPTIONS");
final String parentEnvs = JDOMExternalizerUtil.readField(element, "PARENT_ENVS");
if (parentEnvs != null) {
myPassParentEnvs = Boolean.parseBoolean(parentEnvs);
}
readEnvs(element);
mySdkHome = JDOMExternalizerUtil.readField(element, "SDK_HOME");
myWorkingDirectory = JDOMExternalizerUtil.readField(element, "WORKING_DIRECTORY");
myUseModuleSdk = Boolean.parseBoolean(JDOMExternalizerUtil.readField(element, "IS_MODULE_SDK"));
getConfigurationModule().readExternal(element);
}
protected void readEnvs(Element element) {
final String parentEnvs = JDOMExternalizerUtil.readField(element, "PARENT_ENVS");
if (parentEnvs != null) {
myPassParentEnvs = Boolean.parseBoolean(parentEnvs);
}
EnvironmentVariablesComponent.readExternal(element, getEnvs());
}
public void writeExternal(Element element) throws WriteExternalException {
super.writeExternal(element);
JDOMExternalizerUtil.writeField(element, "INTERPRETER_OPTIONS", myInterpreterOptions);
JDOMExternalizerUtil.writeField(element, "PARENT_ENVS", Boolean.toString(myPassParentEnvs));
writeEnvs(element);
JDOMExternalizerUtil.writeField(element, "SDK_HOME", mySdkHome);
JDOMExternalizerUtil.writeField(element, "WORKING_DIRECTORY", myWorkingDirectory);
JDOMExternalizerUtil.writeField(element, "IS_MODULE_SDK", Boolean.toString(myUseModuleSdk));
EnvironmentVariablesComponent.writeExternal(element, getEnvs());
getConfigurationModule().writeExternal(element);
}
protected void writeEnvs(Element element) {
JDOMExternalizerUtil.writeField(element, "PARENT_ENVS", Boolean.toString(myPassParentEnvs));
EnvironmentVariablesComponent.writeExternal(element, getEnvs());
}
public Map<String, String> getEnvs() {
return myEnvs;
}
@@ -88,7 +88,7 @@ import java.util.Map;
}
public void setWorkingDirectory(String workingDirectory) {
myWorkingDirectoryTextField.setText(FileUtil.toSystemDependentName(workingDirectory));
myWorkingDirectoryTextField.setText(workingDirectory == null ? "" : FileUtil.toSystemDependentName(workingDirectory));
}
@Nullable
@@ -3,8 +3,10 @@ package com.jetbrains.python.sdk;
import com.intellij.execution.configurations.GeneralCommandLine;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
/**
* @author yole
@@ -15,6 +17,27 @@ public class IronPythonSdkFlavor extends PythonSdkFlavor {
public static IronPythonSdkFlavor INSTANCE = new IronPythonSdkFlavor();
@Override
public List<String> suggestHomePaths() {
List<String> result = new ArrayList<String>();
String root = System.getenv("ProgramFiles(x86)");
if (root == null) {
root = System.getenv("ProgramFiles");
}
if (root != null) {
final File[] dirs = new File(root).listFiles();
for (File dir : dirs) {
if (dir.getName().startsWith("IronPython")) {
File ipy = new File(dir, "ipy.exe");
if (ipy.exists()) {
result.add(ipy.getPath());
}
}
}
}
return result;
}
@Override
public boolean isValidSdkHome(String path) {
final String name = new File(path).getName();
@@ -568,20 +568,13 @@ public class PythonSdkType extends SdkType {
int cutpos = line.indexOf(' ');
if (cutpos < 0) throw new InvalidSdkException("Bad output");
String modname = line.substring(0, cutpos);
String mod_fname = modname.replace(".", File.separator); // "a.b.c" -> "a/b/c", no ext
String fname = line.substring(cutpos + 1);
//String ext = fname.substring(fname.lastIndexOf('.')); // no way ext is absent
// check if it's fresh
File f_orig = new File(fname);
File f_skel = new File(stubsRoot + File.separator + mod_fname + ".py");
if (f_orig.lastModified() >= f_skel.lastModified()) {
// stale skeleton, rebuild
if (indicator != null) {
indicator.setText2(modname);
}
LOG.info("Skeleton for " + modname);
generateSkeleton(binaryPath, stubsRoot, modname, Collections.<String>emptyList());
// stale skeleton, rebuild
if (indicator != null) {
indicator.setText2(modname);
}
LOG.info("Skeleton for " + modname);
generateSkeleton(binaryPath, stubsRoot, modname, Collections.<String>emptyList());
}
}
catch (InvalidSdkException e) {
@@ -27,7 +27,7 @@ import java.util.List;
public class PythonSdkUpdater implements ProjectComponent {
private static final Logger LOG = Logger.getInstance("#com.jetbrains.python.sdk.PythonSdkUpdater");
public static int SKELETONS_VERSION = 4;
public static int SKELETONS_VERSION = 8;
public PythonSdkUpdater(final Project project, StartupManager startupManager) {
if (ApplicationManager.getApplication().isUnitTestMode()) {
@@ -0,0 +1,9 @@
class Suppa(object):
def foo(self):
print "bar"
class Foo(Suppa):
def bar(self):
print "foo"
@@ -0,0 +1,6 @@
class Foo(object):
def bar(self):
print "foo"
def foo(self):
print "bar"
@@ -1,7 +1,6 @@
package com.jetbrains.python.refactoring.classes;
import com.intellij.openapi.command.WriteCommandAction;
import com.jetbrains.python.PythonTestUtil;
import com.jetbrains.python.psi.PyClass;
import com.jetbrains.python.psi.PyElement;
import com.jetbrains.python.refactoring.classes.extractSuperclass.PyExtractSuperclassHelper;
@@ -17,9 +16,13 @@ public class PyExtractSuperclassTest extends PyClassRefactoringTest {
doHelperTest("Foo", "Suppa", null, ".foo");
}
public void testWithSuper() throws Exception {
doHelperTest("Foo", "Suppa", null, ".foo");
}
private void doHelperTest(final String className, final String superclassName, final String expectedError, final String... membersName) throws Exception {
try {
String baseName = getTestName(true);
String baseName = "/refactoring/extractsuperclass/" + getTestName(true);
myFixture.configureByFile(baseName + ".before.py");
final PyClass clazz = findClass(className);
final List<PyMemberInfo> members = new ArrayList<PyMemberInfo>();
@@ -42,9 +45,4 @@ public class PyExtractSuperclassTest extends PyClassRefactoringTest {
assertEquals(expectedError, e.getMessage());
}
}
@Override
protected String getTestDataPath() {
return PythonTestUtil.getTestDataPath() + "/refactoring/extractsuperclass/";
}
}