void (List<PsiLocalVariable> vars, PsiCodeBlock block) { for (PsiLocalVariable var : vars) { List<PsiReferenceExpression> references = VariableAccessUtils.getVariableReferences(var, block); PsiAssignmentExpression firstAssignment = null; List<PsiAssignmentExpression> assignments = new ArrayList<>(); for (PsiReferenceExpression reference : references) { PsiAssignmentExpression assignment = tryCast(PsiUtil.skipParenthesizedExprUp(reference.getParent()), PsiAssignmentExpression.class); if (assignment != null && assignment.getOperationTokenType().equals(JavaTokenType.EQ) && PsiUtil.skipParenthesizedExprDown(assignment.getLExpression()) == reference && assignment.getParent() instanceof PsiExpressionStatement) { assignments.add(assignment); if (firstAssignment == null && assignment.getParent().getParent() == block) { firstAssignment = assignment; } } else { assignments = null; break; } } if (assignments != null) { for (PsiAssignmentExpression assignment : assignments) { PsiExpressionStatement statement = (PsiExpressionStatement)assignment.getParent(); PsiExpression expression = assignment.getRExpression(); CommentTracker ct = new CommentTracker(); if (expression != null) { List<PsiExpression> sideEffects = SideEffectChecker.extractSideEffectExpressions(expression); sideEffects.forEach(ct::markUnchanged); PsiStatement[] statements = StatementExtractor.generateStatements(sideEffects, expression); if (statements.length > 0) { BlockUtils.addBefore(statement, statements); } } ct.deleteAndRestoreComments(statement); } new CommentTracker().deleteAndRestoreComments(var); } else if (firstAssignment != null) { var = DeclarationJoinLinesHandler.joinDeclarationAndAssignment(var, firstAssignment); InlineUtil.tryInlineGeneratedLocal(var, false); } } }