Rework NFA matching and try with resources filtering #1020
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The slot storage system in the NFA matching library was a bit of hack,
storing any matched values even if that branch do not match. Working
around this complicated using the matching library as the behaviour was
not intuitive.
This change fixes the implementation so updates to the context are tied
to the state that made them. The behaviour is now 'correct' and much
easier to understand.
Unfortunately the analysis is now much slower to execute (8 seconds vs < 1 seconds on one example project) if the queries are left unmodified. To ensure that this will scale as the size of the input project grows, mitigation has been put in place. Previously the filters were run in the prescan (because they were so cheap). Most filters will now not be run, unless they have the new type of PRESCAN_FILTER. Some queries have also been rewritten.
The try with resources filter relied on the previous broken behaviour and has been re-written based on the analysis used in jacoco. This should now detect cases previously missed.