boolean (@NotNull Statement statement, @NotNull Map<VarExprent, List<VarExprent>> collected) { List<Exprent> exprents = statement.getExprents(); if (exprents != null) { for (Exprent exprent : exprents) { if (!(exprent instanceof AssignmentExprent assignmentExprent)) { continue; } Exprent right = assignmentExprent.getRight(); Exprent left = assignmentExprent.getLeft(); boolean containsLeft = containVar(collected, left); if (right instanceof VarExprent varExprent) { boolean containsRight = containVar(collected, varExprent); if (containsLeft || !containsRight) { continue; } return false; } if (right instanceof FunctionExprent functionExprent && functionExprent.getFuncType() == FUNCTION_CAST && functionExprent.getLstOperands().size() == 2 && functionExprent.getLstOperands().get(1) instanceof ConstExprent) { Exprent operand = functionExprent.getLstOperands().get(0); if (operand instanceof VarExprent varExprent) { boolean containsRight = containVar(collected, varExprent); if (containsLeft || !containsRight) { continue; } return false; } } } } for (Statement child : statement.getStats()) { if (!checkRecursivelyAssignmentsToDelete(child, collected)) { return false; } } return true; }