Implementation source: https://github.com/RainWarrior/AsmStuff/commit/8c8290bcb200ff069361b52a570b2172a78fe77c
Implementation binary (implemented with -m key to my old obfuscator): https://dl.dropboxusercontent.com/u/7533713/tree_obfuscator_2.10-0.2-one-jar.jar
Example usage, will convert in.jar to out.jar:
java -jar tree_obfuscator.jar -s empty.srg -m -cf in.jar -c:in.jar=out.jar
Test case: https://github.com/RainWarrior/AsmStuff/blob/master/mixin/MixinTest.java
Only one annotation is actually needed, if method implementation is fixed. This also allows to convert code in 1 pass, after method propagation has been made (which was conveniently needed for obfuscation).
Implementation is in java, only dependency in previously-written code is method resolver (can get list of all inherited methods).