`collected_paths` users never stomp on each other? This might be more reliable if it did something like

```rust
let old_collected_paths = mem::replace(&mut self.collected_paths, vec![]);

// ...

self.collected_paths = old_collected_paths;
```

?

(Unless you're 100% sure that things can never get confused.)