We have adopted code from Cobertura plugin, and it will aggregate coverage by rules in `CoverageAggregationRule`. So we need to add more rules if we want to implement a different type of coverage tool. (we have two types of coverage tool now, one is Java coverage tool and another is llvm coverage tool)
Also, we have coverage metric and coverage element for each type of coverage tool. We need to add new metrics and elements if we have a new type of coverage tool.
So it is necessary to make the Code Coverage API plugin more generic:
- Because of the similarity of rules, we can remove those rules and make them as the default behavior
- Make CoverageMetric and CoverageElement injectable, so other guys can add new metric and new element in their own plugin.