private static boolean newExpressionsAreEquivalent(
     @NotNull PsiNewExpression newExpression1, @NotNull PsiNewExpression newExpression2) {
   final PsiJavaCodeReferenceElement classReference1 = newExpression1.getClassReference();
   final PsiJavaCodeReferenceElement classReference2 = newExpression2.getClassReference();
   if (classReference1 == null || classReference2 == null) {
     return false;
   }
   final String text = classReference1.getText();
   if (!text.equals(classReference2.getText())) {
     return false;
   }
   final PsiExpression[] arrayDimensions1 = newExpression1.getArrayDimensions();
   final PsiExpression[] arrayDimensions2 = newExpression2.getArrayDimensions();
   if (!expressionListsAreEquivalent(arrayDimensions1, arrayDimensions2)) {
     return false;
   }
   final PsiArrayInitializerExpression arrayInitializer1 = newExpression1.getArrayInitializer();
   final PsiArrayInitializerExpression arrayInitializer2 = newExpression2.getArrayInitializer();
   if (!expressionsAreEquivalent(arrayInitializer1, arrayInitializer2)) {
     return false;
   }
   final PsiExpression qualifier1 = newExpression1.getQualifier();
   final PsiExpression qualifier2 = newExpression2.getQualifier();
   if (!expressionsAreEquivalent(qualifier1, qualifier2)) {
     return false;
   }
   final PsiExpressionList argumentList1 = newExpression1.getArgumentList();
   final PsiExpression[] args1;
   if (argumentList1 == null) {
     args1 = null;
   } else {
     args1 = argumentList1.getExpressions();
   }
   final PsiExpressionList argumentList2 = newExpression2.getArgumentList();
   final PsiExpression[] args2;
   if (argumentList2 == null) {
     args2 = null;
   } else {
     args2 = argumentList2.getExpressions();
   }
   return expressionListsAreEquivalent(args1, args2);
 }
  protected void changeInternalUsage(InternalUsageInfo usage, PsiElementFactory factory)
      throws IncorrectOperationException {
    if (!mySettings.isChangeSignature()) return;

    PsiElement element = usage.getElement();

    if (element instanceof PsiReferenceExpression) {
      PsiReferenceExpression newRef = null;

      if (mySettings.isMakeFieldParameters()) {
        PsiElement resolved = ((PsiReferenceExpression) element).resolve();
        if (resolved instanceof PsiField) {
          String name = mySettings.getNameForField((PsiField) resolved);
          if (name != null) {
            newRef = (PsiReferenceExpression) factory.createExpressionFromText(name, null);
          }
        }
      }

      if (newRef == null && mySettings.isMakeClassParameter()) {
        newRef =
            (PsiReferenceExpression)
                factory.createExpressionFromText(
                    mySettings.getClassParameterName() + "." + element.getText(), null);
      }

      if (newRef != null) {
        CodeStyleManager codeStyleManager = CodeStyleManager.getInstance(myProject);
        newRef = (PsiReferenceExpression) codeStyleManager.reformat(newRef);
        element.replace(newRef);
      }
    } else if (element instanceof PsiThisExpression && mySettings.isMakeClassParameter()) {
      element.replace(factory.createExpressionFromText(mySettings.getClassParameterName(), null));
    } else if (element instanceof PsiSuperExpression && mySettings.isMakeClassParameter()) {
      element.replace(factory.createExpressionFromText(mySettings.getClassParameterName(), null));
    } else if (element instanceof PsiNewExpression && mySettings.isMakeClassParameter()) {
      final PsiNewExpression newExpression = ((PsiNewExpression) element);
      LOG.assertTrue(newExpression.getQualifier() == null);
      final String newText = mySettings.getClassParameterName() + "." + newExpression.getText();
      final PsiExpression expr = factory.createExpressionFromText(newText, null);
      element.replace(expr);
    }
  }
 private static void removeParensFromNewExpression(
     @NotNull PsiNewExpression newExpression, boolean ignoreClarifyingParentheses) {
   final PsiExpression[] dimensions = newExpression.getArrayDimensions();
   for (PsiExpression dimension : dimensions) {
     removeParentheses(dimension, ignoreClarifyingParentheses);
   }
   final PsiExpression qualifier = newExpression.getQualifier();
   if (qualifier != null) {
     removeParentheses(qualifier, ignoreClarifyingParentheses);
   }
   final PsiExpression arrayInitializer = newExpression.getArrayInitializer();
   if (arrayInitializer != null) {
     removeParentheses(arrayInitializer, ignoreClarifyingParentheses);
   }
   final PsiExpressionList argumentList = newExpression.getArgumentList();
   if (argumentList != null) {
     final PsiExpression[] arguments = argumentList.getExpressions();
     for (PsiExpression argument : arguments) {
       removeParentheses(argument, ignoreClarifyingParentheses);
     }
   }
 }