PsiElement (Project project, PyClass cls, String itemName, Function<? super String, ? extends PyStatement> callback) { if (cls != null && itemName != null) { PyFunction init = cls.findMethodByName(PyNames.INIT, false, null); if (init != null) { return appendToMethod(init, callback); } else { // no init! boldly copy ancestor's. for (PyClass ancestor : cls.getAncestorClasses(null)) { init = ancestor.findMethodByName(PyNames.INIT, false, null); if (init != null) break; } PyFunction newInit = createInitMethod(project, cls, init); appendToMethod(newInit, callback); PsiElement addAnchor = null; PyFunction[] meths = cls.getMethods(); if (meths.length > 0) addAnchor = meths[0].getPrevSibling(); PyStatementList clsContent = cls.getStatementList(); newInit = (PyFunction)clsContent.addAfter(newInit, addAnchor); PythonUiService.getInstance() .showBalloonInfo(project, PyPsiBundle.message("QFIX.add.field.to.class.popup.content.added.init", cls.getName(), itemName)); final PyStatementList statementList = newInit.getStatementList(); final PyStatement[] statements = statementList.getStatements(); return statements.length != 0 ? statements[0] : null; } } return null; }