Add PyElementGenerator#createParameterList and PyElementGenerator#createParameterList
authorMikhail Golubev <mikhail.golubev@jetbrains.com>
Mon, 21 Sep 2015 16:12:03 +0000 (19:12 +0300)
committerMikhail Golubev <mikhail.golubev@jetbrains.com>
Mon, 5 Oct 2015 10:08:58 +0000 (13:08 +0300)
python/psi-api/src/com/jetbrains/python/psi/PyElementGenerator.java
python/src/com/jetbrains/python/inspections/quickfix/AddCallSuperQuickFix.java
python/src/com/jetbrains/python/psi/impl/PyElementGeneratorImpl.java
python/src/com/jetbrains/python/refactoring/PyRefactoringUtil.java

index 09dc5cee52321a9a89fd80ae50578c00ed479b5e..11a3dd090178bc3ddf0519b460d14eadd721e342 100644 (file)
@@ -121,6 +121,18 @@ public abstract class PyElementGenerator {
 
   public abstract PyNamedParameter createParameter(@NotNull String name);
 
+  /**
+   * @param text parameters list already in parentheses, e.g. {@code (foo, *args, **kwargs)}.
+   */
+  @NotNull
+  public abstract PyParameterList createParameterList(@NotNull LanguageLevel languageLevel, @NotNull String text);
+
+  /**
+   * @param text argument list already in parentheses, e.g. {@code (1, 2, *xs)}.
+   */
+  @NotNull
+  public abstract PyArgumentList createArgumentList(@NotNull LanguageLevel languageLevel, @NotNull String text);
+
   public abstract PyKeywordArgument createKeywordArgument(LanguageLevel languageLevel, String keyword, String value);
 
   public abstract PsiFile createDummyFile(LanguageLevel langLevel, String contents);
index 83617ed4479b57bc83fc9680cadbf6c3c9a37c55..9e88cb75cd24bd98d1bf057bbb0398e2b3a5beeb 100644 (file)
@@ -86,16 +86,11 @@ public class AddCallSuperQuickFix implements LocalQuickFix {
       addSelfToCall = true;
       superCall.append(superClass.getName()).append(".__init__(");
     }
-    final StringBuilder newFunction = new StringBuilder("def __init__(");
 
     final Couple<List<String>> couple = buildNewFunctionParamsAndSuperInitCallArgs(origInfo, superInfo, addSelfToCall);
-    StringUtil.join(couple.getFirst(), ", ", newFunction);
-    newFunction.append(")");
-
-    if (problemFunction.getAnnotation() != null) {
-      newFunction.append(problemFunction.getAnnotation().getText());
-    }
-    newFunction.append(": pass");
+    final StringBuilder newParameters = new StringBuilder("(");
+    StringUtil.join(couple.getFirst(), ", ", newParameters);
+    newParameters.append(")");
 
     StringUtil.join(couple.getSecond(), ", ", superCall);
     superCall.append(")");
@@ -103,10 +98,7 @@ public class AddCallSuperQuickFix implements LocalQuickFix {
     final PyElementGenerator generator = PyElementGenerator.getInstance(project);
     final LanguageLevel languageLevel = LanguageLevel.forElement(problemFunction);
     final PyStatement callSuperStatement = generator.createFromText(languageLevel, PyStatement.class, superCall.toString());
-    final PyParameterList newParameterList = generator.createFromText(languageLevel,
-                                                                      PyParameterList.class,
-                                                                      newFunction.toString(),
-                                                                      new int[]{0, 3});
+    final PyParameterList newParameterList = generator.createParameterList(languageLevel, newParameters.toString());
     problemFunction.getParameterList().replace(newParameterList);
     final PyStatementList statementList = problemFunction.getStatementList();
     PyUtil.addElementToStatementList(callSuperStatement, statementList, true);
index b1f36a7874a11962d112a1c145835bdbe52ee38a..9991cac8b3a93cb169e730f0bf567832b2f803af 100644 (file)
@@ -329,6 +329,19 @@ public class PyElementGeneratorImpl extends PyElementGenerator {
     return createParameter(name, null, null, LanguageLevel.getDefault());
   }
 
+  @NotNull
+  @Override
+  public PyParameterList createParameterList(@NotNull LanguageLevel languageLevel, @NotNull String text) {
+    return createFromText(languageLevel, PyParameterList.class, "def f" + text + ": pass", new int[]{0, 3});
+  }
+
+  @NotNull
+  @Override
+  public PyArgumentList createArgumentList(@NotNull LanguageLevel languageLevel, @NotNull String text) {
+    return createFromText(languageLevel, PyArgumentList.class, "f" + text, new int[]{0, 0, 1});
+  }
+
+
   public PyNamedParameter createParameter(@NotNull String name, @Nullable String defaultValue, @Nullable String annotation,
                                           @NotNull LanguageLevel languageLevel) {
     String parameterText = name;
index 03711d3d22ec8f878f7fd3c2d65c11d93a1743c1..db4b8d217a558c86bc05db72a012a88dbc6275fa 100644 (file)
@@ -41,6 +41,9 @@ import java.util.*;
  * Time: 7:07:02 PM
  */
 public class PyRefactoringUtil {
+  private PyRefactoringUtil() {
+  }
+
   @NotNull
   public static List<PsiElement> getOccurrences(@NotNull final PsiElement pattern, @Nullable final PsiElement context) {
     if (context == null) {
@@ -279,9 +282,6 @@ public class PyRefactoringUtil {
     return PsiUtilCore.toPsiElementArray(array);
   }
 
-  private PyRefactoringUtil() {
-  }
-
   public static boolean areConflictingMethods(PyFunction pyFunction, PyFunction pyFunction1) {
     final PyParameter[] firstParams = pyFunction.getParameterList().getParameters();
     final PyParameter[] secondParams = pyFunction1.getParameterList().getParameters();