@Override
  public void invoke(@NotNull Project project, Editor editor, @NotNull PsiElement element)
      throws IncorrectOperationException {
    final PsiNewExpression expression =
        PsiTreeUtil.getParentOfType(element, PsiNewExpression.class, false);
    if (expression == null) {
      return;
    }

    final PsiExpressionList arguments = expression.getArgumentList();
    if (arguments == null) {
      return;
    }

    final PsiMethod constructor = expression.resolveConstructor();
    if (constructor == null) {
      return;
    }

    final PsiExpressionList newArguments =
        createNewArguments(
            JavaPsiFacade.getElementFactory(project),
            constructor.getParameterList().getParameters(),
            arguments.getExpressions());

    if (newArguments == null) {
      return;
    }

    arguments.replace(newArguments);
  }
 @Override
 public void visitNewExpression(PsiNewExpression expression) {
   super.visitNewExpression(expression);
   final PsiJavaCodeReferenceElement classReference = expression.getClassReference();
   if (classReference == null) {
     return;
   }
   final String name = classReference.getReferenceName();
   if (!"BigDecimal".equals(name)) {
     return;
   }
   final PsiMethod constructor = expression.resolveConstructor();
   if (constructor == null) {
     return;
   }
   final PsiParameterList parameterList = constructor.getParameterList();
   final int length = parameterList.getParametersCount();
   if (length != 1 && length != 2) {
     return;
   }
   final PsiParameter[] parameters = parameterList.getParameters();
   final PsiParameter firstParameter = parameters[0];
   final PsiType type = firstParameter.getType();
   if (type != PsiType.DOUBLE) {
     return;
   }
   registerNewExpressionError(expression);
 }
 @Override
 public void visitNewExpression(PsiNewExpression expression) {
   if (FileTypeUtils.isInServerPageFile(expression)) {
     return;
   }
   super.visitNewExpression(expression);
   final PsiClass containingClass = getContainingContextClass(expression);
   if (containingClass == null) {
     return;
   }
   final PsiMethod constructor = expression.resolveConstructor();
   if (constructor == null) {
     final PsiJavaCodeReferenceElement classReference =
         expression.getClassOrAnonymousClassReference();
     if (classReference == null) {
       return;
     }
     final PsiElement target = classReference.resolve();
     if (!(target instanceof PsiClass)) {
       return;
     }
     final PsiClass aClass = (PsiClass) target;
     if (!aClass.hasModifierProperty(PsiModifier.PRIVATE)) {
       return;
     }
     if (aClass.equals(containingClass)) {
       return;
     }
     registerNewExpressionError(expression, aClass);
   } else {
     if (!constructor.hasModifierProperty(PsiModifier.PRIVATE)) {
       return;
     }
     final PsiClass aClass = constructor.getContainingClass();
     if (containingClass.equals(aClass)) {
       return;
     }
     registerNewExpressionError(expression, aClass);
   }
 }
  @Override
  public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) {
    if (!super.isAvailable(project, editor, element)) {
      return false;
    }

    final PsiNewExpression expression =
        PsiTreeUtil.getParentOfType(element, PsiNewExpression.class, false);
    if (expression == null) {
      return false;
    }

    final PsiExpressionList arguments = expression.getArgumentList();
    if (arguments == null) {
      return false;
    }

    final PsiMethod constructor = expression.resolveConstructor();
    if (constructor == null) {
      return false;
    }

    final PsiExpressionList newArguments =
        createNewArguments(
            JavaPsiFacade.getElementFactory(project),
            constructor.getParameterList().getParameters(),
            arguments.getExpressions());

    if (newArguments == null) {
      return false;
    }

    setText(
        CodeInsightBundle.message(
            "intention.convert.color.representation.text", newArguments.getText()));

    return true;
  }
 private static void makeConstructorPackageLocal(Project project, PsiElement element) {
   final PsiNewExpression newExpression =
       PsiTreeUtil.getParentOfType(element, PsiNewExpression.class);
   if (newExpression == null) {
     return;
   }
   final PsiMethod constructor = newExpression.resolveConstructor();
   if (constructor != null) {
     final PsiModifierList modifierList = constructor.getModifierList();
     modifierList.setModifierProperty(PsiModifier.PRIVATE, false);
     return;
   }
   final PsiJavaCodeReferenceElement referenceElement = (PsiJavaCodeReferenceElement) element;
   final PsiElement target = referenceElement.resolve();
   if (!(target instanceof PsiClass)) {
     return;
   }
   final PsiClass aClass = (PsiClass) target;
   final PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(project);
   final PsiMethod newConstructor = elementFactory.createConstructor();
   final PsiModifierList modifierList = newConstructor.getModifierList();
   modifierList.setModifierProperty(PsiModifier.PACKAGE_LOCAL, true);
   aClass.add(newConstructor);
 }