Due to lazy initialization on AnalysisConsumer, that needs to smuggle analysis consumers from its ctor to the initialize function; hence we need the TempPathConsumers.
The consumers are usually populated by DigestAnalyzerOptions from the ctor.
At least now, we only have a single place storing pointers to the consumers - unlike in the past where you could call the virtual addDiagnosticConsumer on AnalysisConsumer and end up pushing to the "stale" vector of consumers without observing any effects - except for leaking memory.
Now, it's gone. And pushing back there would push back to the AnalysisManager (who owns the consumers) - and behave as expected.
Note that the code quality begs for refactoring how consumers passed across, but I'm not intending to fix that.