import com.intellij.psi.stubs.StubElement;
import com.intellij.psi.tree.TokenSet;
import com.intellij.psi.util.PsiTreeUtil;
+import com.intellij.psi.util.QualifiedName;
import com.intellij.ui.awt.RelativePoint;
import com.intellij.util.ArrayUtil;
import com.intellij.util.IncorrectOperationException;
import com.jetbrains.python.codeInsight.stdlib.PyNamedTupleType;
import com.jetbrains.python.psi.impl.PyBuiltinCache;
import com.jetbrains.python.psi.impl.PyPsiUtils;
-import com.intellij.psi.util.QualifiedName;
import com.jetbrains.python.psi.resolve.PyResolveContext;
import com.jetbrains.python.psi.resolve.QualifiedResolveResult;
import com.jetbrains.python.psi.types.*;
final PyStatement[] statements = statementList.getStatements();
if (toTheBeginning && statements.length > 0) {
final PyDocStringOwner docStringOwner = PsiTreeUtil.getParentOfType(statementList, PyDocStringOwner.class);
- final PyStatement firstStatement = statements[0];
- if (docStringOwner != null && firstStatement instanceof PyExpressionStatement &&
- ((PyExpressionStatement)firstStatement).getExpression() == docStringOwner.getDocStringExpression()) {
- element = statementList.addAfter(element, firstStatement);
+ PyStatement anchor = statements[0];
+ if (docStringOwner != null && anchor instanceof PyExpressionStatement &&
+ ((PyExpressionStatement)anchor).getExpression() == docStringOwner.getDocStringExpression()) {
+ final PyStatement next = PsiTreeUtil.getNextSiblingOfType(anchor, PyStatement.class);
+ if (next == null) {
+ return statementList.addAfter(element, anchor);
+ }
+ anchor = next;
+ }
+ while (anchor instanceof PyExpressionStatement) {
+ final PyExpression expression = ((PyExpressionStatement)anchor).getExpression();
+ if (expression instanceof PyCallExpression) {
+ final PyExpression callee = ((PyCallExpression)expression).getCallee();
+ if ((isSuperCall((PyCallExpression)expression) || (callee != null && PyNames.INIT.equals(callee.getName())))) {
+ final PyStatement next = PsiTreeUtil.getNextSiblingOfType(anchor, PyStatement.class);
+ if (next == null) {
+ return statementList.addAfter(element, anchor);
+ }
+ anchor = next;
+ }
+ else break;
+ }
+ else break;
}
- else
- element = statementList.addBefore(element, firstStatement);
+ element = statementList.addBefore(element, anchor);
}
else {
element = statementList.add(element);
doInspectionTest("AddClass.py", PyUnresolvedReferencesInspection.class, "Create class 'Xyzzy'", true, true);
}
- public void testFieldFromUnusedParameter() { // PY-1398
- doInspectionTest("FieldFromUnusedParameter.py", PyUnusedLocalInspection.class, "Add field 'foo' to class A", true, true);
- }
-
- public void testFieldFromUnusedParameterKeyword() { // PY-1602
- doInspectionTest("FieldFromUnusedParameterKeyword.py", PyUnusedLocalInspection.class, "Add field 'foo' to class A", true, true);
- }
public void testAddFunctionToModule() { // PY-1602
doInspectionTest(
*/
package com.jetbrains.python.quickFixes;
+import com.intellij.testFramework.TestDataPath;
import com.jetbrains.python.PyBundle;
import com.jetbrains.python.PyQuickFixTestCase;
import com.jetbrains.python.inspections.PyUnresolvedReferencesInspection;
+import com.jetbrains.python.inspections.PyUnusedLocalInspection;
/**
* User: ktisha
*/
+@TestDataPath("$CONTENT_ROOT/../testData//quickFixes/AddFieldQuickFixTest/")
public class AddFieldQuickFixTest extends PyQuickFixTestCase {
public void testAddClassField() {
doQuickFixTest(PyUnresolvedReferencesInspection.class, PyBundle.message("QFIX.NAME.add.field.$0.to.class.$1", "x", "B"));
}
+ public void testFromUnusedParameter() { // PY-1398
+ doQuickFixTest(PyUnusedLocalInspection.class, "Add field 'foo' to class A");
+ }
+
+ public void testFromUnusedParameterKeyword() { // PY-1602
+ doQuickFixTest(PyUnusedLocalInspection.class, "Add field 'foo' to class A");
+ }
+
}