Получить версию кода файла diff, показывающую влияние на методы (имена) - PullRequest
3 голосов
/ 25 мая 2009

Я хочу получить различие между двумя версиями файла кода (Java / C #) и получить список методов (имен), на которые влияют. Это было реализовано?

Полагаю, для этого потребуется анализ AST линий, которые возвращаются из diff.

Смысл этого в том, чтобы усовершенствовать checkstyle / findbugs, чтобы просто работать с методами, к которым обращались во время Sprint

Я посмотрел процесс затмения для создания diff:

http://dev.eclipse.org/viewsvn/index.cgi/org.eclipse.compare.tests/src/org/eclipse/compare/tests/

Похоже, он работает только с номером строки, а не с реальным AST. Меня интересует отображение строки # => methodName.

Ответы [ 3 ]

1 голос
/ 25 мая 2009

Вы можете использовать API сравнения Eclipse, даже без использования Eclipse. Поиск org.eclipse.compare

1 голос
/ 25 мая 2009

Я не знаю, поможет ли это / может помочь вам, но diff / Compare в Eclipse делает это на своей верхней панели (ниже находятся два файла / версии рядом). Графический, да, но, возможно, где-то есть API для «публичного» использования?

0 голосов
/ 17 июня 2009

Не знаю, если это реализовано где-то еще.

Но вы правы, вам нужен AST, просто чтобы решить что такое тело метода, но вам также нужно разрешение имени и типа + вызвать граф, чтобы решить, находятся ли два метода с именем SAM на самом деле в одном классе и, таким образом, являются «версиями» друг друга.

Наш инструментарий реинжиниринга программного обеспечения DMS содержит анализаторы и конструкции Java разрешение имени / типа и полный граф вызовов, поэтому его можно использовать для определения "метод соответствует". (Конечно, вы можете обмануть и просто решить, что если имена методов были одинаковыми, они должны быть вариантами, но вы получите много ложных срабатываний на Get и Set и т. д. и если бы вы сделали это много, эти ложные срабатывания будут очень отвлекает). Решив, какие из них «совпадают», их текст можно было бы вытеснить. Это было бы полезно, если бы вы сравнивали множество API-файлов.

В качестве альтернативы можно применить «Smart Diff» SD к парам. Java-файлов, которые вы знаете, являются исходной и измененной версией. Он сравнивает AST и находит минимальные правки сопоставить одно в другое. Если старый и новый методы вообще похожи, он обнаружит это и скажет вам, как один был отредактирован, чтобы получить другой. См http://www.semdesigns.com/Products/SmartDifferencer/index.html

...