Не знаю, если это реализовано где-то еще.
Но вы правы, вам нужен AST, просто чтобы решить
что такое тело метода, но вам также нужно разрешение имени и типа
+ вызвать граф, чтобы решить, находятся ли два метода с именем SAM на самом деле в одном классе
и, таким образом, являются «версиями» друг друга.
Наш инструментарий реинжиниринга программного обеспечения DMS содержит анализаторы и конструкции Java
разрешение имени / типа и полный граф вызовов, поэтому его можно использовать для определения
"метод соответствует". (Конечно, вы можете обмануть и просто решить,
что если имена методов были одинаковыми, они должны быть вариантами,
но вы получите много ложных срабатываний на Get и Set и т. д.
и если бы вы сделали это много, эти ложные срабатывания будут
очень отвлекает).
Решив, какие из них «совпадают», их текст можно было бы вытеснить.
Это было бы полезно, если бы вы сравнивали множество API-файлов.
В качестве альтернативы можно применить «Smart Diff» SD к парам.
Java-файлов, которые вы знаете, являются исходной и измененной версией.
Он сравнивает AST и находит минимальные правки
сопоставить одно в другое. Если старый и новый методы вообще похожи,
он обнаружит это и скажет вам, как один был отредактирован, чтобы получить другой.
См http://www.semdesigns.com/Products/SmartDifferencer/index.html