You may be familiar with reports that are demonstrated in the test file -- While invalidation is a fundamental part of static analysis, it is unfortunately not an under-approximation (resulting in fewer but more precise paths of execution). Invalidation are often incorrect, so this patch attempts to suppress reports where a tracked expression's last value change was a result of an invalidation.
This is solved by a adding a new checker that notes which regions at which ProgramPoint were invalidated, and adding a new BugReporterVisitor to the army of trackExpressionValue related visitors that looks for the last value change, and suppresses the report if it was a previously noted invalidation.
The big scare in such changes is always whether we would suppress so many things, so this patch says little without results. I'll share some as soon as I have them :)
In particular, i believe this is a true positive. Because either flag may be set to false by foo() which makes the path feasible, or the if-statement is dead code.