mono-api-check
Our current ABI/API checker tool for CLI libraries sucks.
Why? Because it fully relies on mono-api-diff to find missing interfaces (public types, methods and properties).
Issues
The issue with mono-api-diff It compares 2 APIs by comparing each type, method and property. If one misses or has now different arguments, it will say it's missing and thus mono-api-check will take it as ABI/API brekage. This means there are lots of false positives, because when you remove a overridden method (that is a method that exists in the base-type), is _not_ an ABI/API breakage. The runtime will just call the method of the base-type then instant.
Simple Example:
public class A { public void Foo(); } public class B : A { public void Foo(); }
Now if you remove Foo() from B, mono-api-diff will say Foo() is missing in B. But this is not an ABI or API breakage.
Only protected and public (not private or internal) types/fields/methods/properties are subject and with that part of the ABI!
Solution
Writing a new tool that analyses the XML-diff file and verifies if the change is an ABI breakage or not.
Command Line Interface:
mono-api-comparer old-lib new-lib
Output:
???
Programming Language:
C#
Why C#? We have to load the new library file to inspect the base-types and that would be very difficult to do if not a CLI based language would be used.
Code
git://github.com/dpaleino/mono-api-compare.git