void (@NotNull Project project, @NotNull PsiElement startElement, @NotNull ModPsiUpdater updater) { PsiMethodCallExpression call = PsiTreeUtil.getParentOfType(startElement, PsiMethodCallExpression.class); if (call == null) return; PsiElement parent = call.getParent(); CommentTracker ct = new CommentTracker(); if (parent instanceof PsiExpressionStatement) { List<PsiExpression> expressions = StreamEx.of(call.getArgumentList().getExpressions()) .flatCollection(SideEffectChecker::extractSideEffectExpressions) .peek(ct::markUnchanged) .toList(); PsiStatement[] sideEffectStatements = StatementExtractor.generateStatements(expressions, call); if(sideEffectStatements.length > 0) { BlockUtils.addBefore((PsiStatement)parent, sideEffectStatements); } ct.deleteAndRestoreComments(parent); } else { boolean objectCall = call.getType() instanceof PsiClassType; PsiExpression result = (PsiExpression)ct.replaceAndRestoreComments(call, startElement); if (objectCall && result.getType() instanceof PsiPrimitiveType) { PsiElement resultParent = result.getParent(); if (resultParent instanceof PsiReferenceExpression) { AutoBoxingInspection.replaceWithBoxing(result); } } } }