@Override
  protected void performRefactoring(UsageInfo @NotNull [] usages) {
    RefactoringTransaction transaction = getTransaction();
    final ChangeInfo changeInfo = myChangeInfo;
    PsiElement method = changeInfo.getMethod();
    final RefactoringElementListener elementListener = transaction == null ? null : transaction.getElementListener(method);
    final String fqn = CopyReferenceAction.elementToFqn(method);
    SmartPsiElementPointer<PsiElement> pointer = SmartPointerManager.createPointer(method);
    if (fqn != null) {
      UndoManager.getInstance(myProject).undoableActionPerformed(new UndoChangeSignatureAction(elementListener, pointer, fqn));
    }
    try {
      doChangeSignature(changeInfo, usages);
      method = pointer.getElement();
      LOG.assertTrue(method != null && method.isValid());
      if (elementListener != null && changeInfo.isNameChanged()) {
        elementListener.elementRenamed(method);
      }
    }
    catch (IncorrectOperationException e) {
      LOG.error(e);
    }
  }
@Override
  protected void performRefactoring(UsageInfo @NotNull [] usages)