代码之家  ›  专栏  ›  技术社区  ›  hawkeye

获取代码文件版本差异,显示受影响的方法(名称)

  •  3
  • hawkeye  · 技术社区  · 15 年前

    我想得到两个版本的代码文件(Java/C语言)的变体,并从中得到一个方法列表(名字)。是否已实施?

    我想这需要对从diff返回的行进行ast分析。

    这样做的目的是改进checkStyle/findbugs,使其只处理在冲刺期间接触到的方法。

    我看了一下Eclipse执行diff的过程:

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

    它看起来只在行号上工作,而不是实际的AST。我对行的methodname映射感兴趣。

    3 回复  |  直到 14 年前
        1
  •  1
  •   Fortega    15 年前

    即使不使用Eclipse本身,也可以使用Eclipse的比较API。 搜索 org.eclipse.compare比较

        2
  •  1
  •   Mirvnillith    15 年前

    我不知道这是否能帮助您,但是Eclipse中的diff/compare在它的顶部面板(下面是并排的两个文件/版本)中做到了这一点。是的,图形化的,但是也许在那里有一个“公共”使用的API?

        3
  •  0
  •   Ira Baxter    14 年前

    不知道它是否在其他地方实现。

    但你是对的,你需要一个AST来决定 方法体是什么,但您还需要名称和类型解析 +调用关系图以确定两个名为sam的方法实际上是否在同一类中 因此是彼此的“版本”。

    我们的DMS软件再工程工具包有Java解析器和构造 名称/类型解析和完整的调用图,因此可以使用它来确定 “方法匹配”。(当然,你可能会作弊,然后决定 如果方法名相同,它们必须是变量, 但是你会在布景等方面得到很多误报。 如果你经常这样做的话,那些误报会是 非常分散注意力)。 在决定了哪些“匹配”之后,他们的文本可能会被替换。 如果要比较大量的API文件,这将非常有用。

    另一种选择是将sd的“smart diff”应用于对 您知道的Java文件是原始的和已更改的版本。 它比较AST并找到最小的编辑 把一个映射到另一个。如果旧方法和新方法完全相似, 它将发现这一点,并告诉您如何编辑一个以获取另一个。 见 http://www.semdesigns.com/Products/SmartDifferencer/index.html