void (@NotNull Project project, @NotNull PsiElement element, @NotNull ModPsiUpdater updater) { final PsiMethodCallExpression methodCallExpression = updater.getWritable(myMethodCallExpression.getElement()); if (methodCallExpression == null) return; PsiExpressionStatement expressionStatement = ObjectUtils.tryCast(methodCallExpression.getParent(), PsiExpressionStatement.class); if (expressionStatement == null) return; final PsiNewExpression newExpression = updater.getWritable(myNewExpression.getElement()); if (newExpression == null) return; PsiElement parent = PsiUtil.skipParenthesizedExprUp(newExpression.getParent()); PsiVariable variable = null; if (parent instanceof PsiVariable) { variable = (PsiVariable)parent; } else if (parent instanceof PsiAssignmentExpression) { variable = ExpressionUtils.resolveLocalVariable(((PsiAssignmentExpression)parent).getLExpression()); } if (variable == null) return; PsiJavaCodeReferenceElement reference = newExpression.getClassReference(); if (reference == null) return; CommentTracker ct = new CommentTracker(); final PsiElement parameter = methodCallExpression.getArgumentList().getExpressions()[0]; String replacement = "new " + reference.getText() + "(" + ct.text(parameter) + ")"; if (parent instanceof PsiAssignmentExpression) { ct.delete(parent); } else { if (variable.getParent() instanceof PsiDeclarationStatement && ((PsiDeclarationStatement)variable.getParent()).getDeclaredElements().length == 1) { PsiElement scope = PsiTreeUtil.getParentOfType(expressionStatement, PsiMember.class, PsiStatement.class, PsiLambdaExpression.class); if (scope != null && ReferencesSearch.search(variable).allMatch(ref -> PsiTreeUtil.isAncestor(scope, ref.getElement(), true))) { PsiDeclarationStatement newDeclaration = JavaPsiFacade.getElementFactory(project).createVariableDeclarationStatement("x", PsiTypes.intType(), null, methodCallExpression); PsiVariable newVariable = (PsiVariable)newDeclaration.getDeclaredElements()[0].replace(variable); ct.delete(variable); ct.replace(Objects.requireNonNull(newVariable.getInitializer()), replacement); ct.replaceAndRestoreComments(expressionStatement, newDeclaration); return; } } ct.delete(newExpression); } ct.replaceAndRestoreComments(methodCallExpression, variable.getName() + "=" + replacement); }