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);
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(")");
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);
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;
* 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) {
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();