- Since the parent class is not a utility, we are neither (the parent
class may have non-static methods and fields).
- Since this is more general than the original check for exception
types, we remove that
- Fixes#824
- Take the chance to have the rule use the rulechain
- Narrow down both rule's search space (therefore making better usage
of the rulechain and reducing number of checks performed)
- Use type resolution to simplify the rules and avoid FPs when
declaring classes with the same names
- Very ugly, uses reflection and is limited to the few
implementatations that come with Ant itself or and testutils
- Intended as a starting point for fixing #1018
- Reduce LocalScope creations. Method parameters and method locals have
the same visibility / reachability, so they should be in the same scope.
- Fix the grammar `assert` lookahead. There is no need to use `(`
- Fix illegal test code (shadowing of parameters is illegal)
- Update Scope tests to deal with changes
- Fixes#1051
The old implementation had many limitations:
- Relayed ALL measuring logic to the client
- Used `synchronized` methods
- Was unable to measure nested operations without mixing values
- Mixed wall-clock and CPU time, which caused trouble when running
multithreaded analysis (negative values for non-meassured time)
- A separate `main` existed which was undocumented and unsupported.
So I reworked it and added some goodies along the way:
- When not running in benchmark mode, all operations are NOOPs
- Nested operations are the default. Total and self time are
differentiated. This allows and encourages to better track overhead (ie:
time spent in a loop over another timed operation)
- We can meassure call count along with custom counters, which add
meaning to metrics
- Wall clock time for total execution is separated from all other CPU
times
- All meassurements are done by the `TimeTracker` itself
- No `synchronized` use, all structs are thread-safe and lock as little
and sporadically as possible
- Categories can be split up by labels
- The tracker is generic, has little knowledge of what is being
tracked. Same applies to report rendering. This is extremely flexible to
add more and custom tracks in the future