boolean (final ChangeInfo changeInfo, UsageInfo usageInfo, boolean beforeMethodChange, final UsageInfo[] usages) { if (!isPythonUsage(usageInfo)) return false; if (!(changeInfo instanceof PyChangeInfo)) return false; if (!beforeMethodChange) return false; PsiElement element = usageInfo.getElement(); if (changeInfo.isNameChanged()) { final PsiElement method = changeInfo.getMethod(); RenameUtil.doRenameGenericNamedElement(method, changeInfo.getNewName(), usages, null); } if (element == null) return false; if (element.getParent() instanceof PyCallExpression call) { // Don't modify the call that was the cause of Change Signature invocation if (call.getUserData(PyChangeSignatureQuickFix.CHANGE_SIGNATURE_ORIGINAL_CALL) != null) { return true; } final PyArgumentList argumentList = call.getArgumentList(); if (argumentList != null) { final PyElementGenerator elementGenerator = PyElementGenerator.getInstance(element.getProject()); StringBuilder builder = buildSignature((PyChangeInfo)changeInfo, call); final PyExpression newCall; if (call instanceof PyDecorator) { newCall = elementGenerator.createDecoratorList("@" + builder).getDecorators()[0]; } else { newCall = elementGenerator.createExpressionFromText(LanguageLevel.forElement(element), builder.toString()); } call.replace(newCall); return true; } } else if (element instanceof PyFunction && element != changeInfo.getMethod()) { processFunctionDeclaration((PyChangeInfo)changeInfo, (PyFunction)element); } return false; }