From 77bafe85df490f2dacdc4bab7dd0343bdf0a5cb9 Mon Sep 17 00:00:00 2001 From: Dennis Ushakov Date: Mon, 25 Jan 2010 18:28:42 +0300 Subject: [PATCH] [PY-346] fix formatting --- .../classes/PyClassRefactoringUtil.java | 16 ++++++----- .../refactoring/pushdown/py346.after.py | 25 +++++++++++++++++ .../refactoring/pushdown/py346.before.py | 15 +++++++++++ .../refactoring/classes/PyPushDownTest.java | 27 +++++++++++++------ 4 files changed, 69 insertions(+), 14 deletions(-) create mode 100644 python/testData/refactoring/pushdown/py346.after.py create mode 100644 python/testData/refactoring/pushdown/py346.before.py diff --git a/python/src/com/jetbrains/python/refactoring/classes/PyClassRefactoringUtil.java b/python/src/com/jetbrains/python/refactoring/classes/PyClassRefactoringUtil.java index 458dff2c56b4..38bcebb05634 100644 --- a/python/src/com/jetbrains/python/refactoring/classes/PyClassRefactoringUtil.java +++ b/python/src/com/jetbrains/python/refactoring/classes/PyClassRefactoringUtil.java @@ -1,17 +1,18 @@ package com.jetbrains.python.refactoring.classes; -import com.intellij.codeInsight.CodeInsightUtilBase; +import com.intellij.lang.ASTNode; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Comparing; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiFileFactory; -import com.intellij.psi.PsiWhiteSpace; -import com.intellij.psi.impl.source.PostprocessReformattingAspect; import com.jetbrains.python.PythonFileType; import com.jetbrains.python.PythonLanguage; -import com.jetbrains.python.psi.*; +import com.jetbrains.python.psi.PyClass; +import com.jetbrains.python.psi.PyElement; +import com.jetbrains.python.psi.PyFunction; +import com.jetbrains.python.psi.PyUtil; import com.jetbrains.python.psi.impl.PyPsiUtils; import org.jetbrains.annotations.Nullable; @@ -108,7 +109,10 @@ public class PyClassRefactoringUtil { final PyClass newClass = PythonLanguage.getInstance().getElementGenerator().createFromText(project, PyClass.class, text); if (superClass.getMethods().length != 0) { final PyFunction previousLastMethod = superClass.getMethods()[0]; - PyPsiUtils.addBeforeInParent(previousLastMethod, newClass.getLastChild().getChildren()); + final ASTNode node = newClass.getLastChild().getNode(); + for (ASTNode child : node.getChildren(null)) { + PyPsiUtils.addBeforeInParent(previousLastMethod, child.getPsi()); + } PyPsiUtils.addBeforeInParent(previousLastMethod, newClass.getLastChild().getPrevSibling()); PyPsiUtils.addBeforeInParent(previousLastMethod, newClass.getLastChild()); } else { @@ -127,7 +131,7 @@ public class PyClassRefactoringUtil { for (PyElement element : elements) { final String name = element.getName(); if (name != null && (up || superClass.findMethodByName(name, false) == null)) { - builder.append(white).append(element.getText()).append("\n\n"); + builder.append(white).append(element.getText()).append("\n"); hasChanges = true; } } diff --git a/python/testData/refactoring/pushdown/py346.after.py b/python/testData/refactoring/pushdown/py346.after.py new file mode 100644 index 000000000000..314c685e0503 --- /dev/null +++ b/python/testData/refactoring/pushdown/py346.after.py @@ -0,0 +1,25 @@ +class A: + + +class B(A): + def meth_a1(self, name = {}): + pass + + def meth_a2(self): + pass + + def meth_b1(self): + pass + def meth_b2(self): + pass + + +class D(A): + def meth_a1(self, name = {}): + pass + + def meth_a2(self): + pass + + def meth_d1(self): + pass \ No newline at end of file diff --git a/python/testData/refactoring/pushdown/py346.before.py b/python/testData/refactoring/pushdown/py346.before.py new file mode 100644 index 000000000000..923dd38cdfb4 --- /dev/null +++ b/python/testData/refactoring/pushdown/py346.before.py @@ -0,0 +1,15 @@ +class A: + def meth_a1(self, name = {}): + pass + def meth_a2(self): + pass +class B(A): + def meth_b1(self): + pass + def meth_b2(self): + pass + + +class D(A): + def meth_d1(self): + pass \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/refactoring/classes/PyPushDownTest.java b/python/testSrc/com/jetbrains/python/refactoring/classes/PyPushDownTest.java index ead013894b0c..f0fba2bac259 100644 --- a/python/testSrc/com/jetbrains/python/refactoring/classes/PyPushDownTest.java +++ b/python/testSrc/com/jetbrains/python/refactoring/classes/PyPushDownTest.java @@ -5,35 +5,46 @@ import com.jetbrains.python.psi.PyClass; import com.jetbrains.python.psi.PyElement; import com.jetbrains.python.refactoring.classes.pushDown.PyPushDownProcessor; -import java.util.Collections; +import java.util.ArrayList; +import java.util.List; /** * @author Dennis.Ushakov */ public class PyPushDownTest extends PyClassRefactoringTest { public void testSimple() throws Exception { - doProcessorTest("Foo", ".foo", null); + doProcessorTest("Foo", null, ".foo"); } public void testSuperclass() throws Exception { - doProcessorTest("Zope", "Foo", null); + doProcessorTest("Zope", null, "Foo"); } public void testMultiple() throws Exception { - doProcessorTest("Foo", ".foo", null); + doProcessorTest("Foo", null, ".foo"); + } + + public void testPy346() throws Exception { + doProcessorTest("A", null, ".meth_a1", ".meth_a2"); } public void testExistingmethod() throws Exception { - doProcessorTest("Foo", ".foo", "function foo is already overridden in class Boo. Method will not be pushed down to that class."); + doProcessorTest("Foo", "function foo is already overridden in class Boo. Method will not be pushed down to that class.", ".foo"); } - private void doProcessorTest(final String className, final String memberName, final String expectedError) throws Exception { + private void doProcessorTest(final String className, final String expectedError, final String... membersName) throws Exception { try { String baseName = "/refactoring/pushdown/" + getTestName(true); myFixture.configureByFile(baseName + ".before.py"); final PyClass clazz = findClass(className); - final PyElement member = findMember(className, memberName); - final PyPushDownProcessor processor = new PyPushDownProcessor(myFixture.getProject(), clazz, Collections.singleton(new PyMemberInfo(member))); + final List members = new ArrayList(); + for (String memberName : membersName) { + final PyElement member = findMember(className, memberName); + assertNotNull(member); + members.add(new PyMemberInfo(member)); + } + + final PyPushDownProcessor processor = new PyPushDownProcessor(myFixture.getProject(), clazz, members); new WriteCommandAction.Simple(myFixture.getProject()) { @Override protected void run() throws Throwable {