Java 以编程方式在整个工作区中查找接口的引用

Java 以编程方式在整个工作区中查找接口的引用,java,eclipse,parsing,abstract-syntax-tree,javacc,Java,Eclipse,Parsing,Abstract Syntax Tree,Javacc,只是想知道哪种工具/方法可以轻松/省力地解决以下问题?需要通过ANT脚本进行调用 eclipse工作区有几个项目,比如projectA-projectO(15个)。其中大多数是Java项目。这里我需要收集一些数据,而不使用EclipseIDE,而是通过编程方式 在projectA中,它是一个java项目,有一个接口,比如说InterFaceA,它正在各种其他项目中实现 重点是我需要列出所有15个已经实现InterfaceA的项目中的所有类 我遇到了两个工具,比如扩展Javadoc、Eclipse

只是想知道哪种工具/方法可以轻松/省力地解决以下问题?需要通过ANT脚本进行调用

eclipse工作区有几个项目,比如projectA-projectO(15个)。其中大多数是Java项目。这里我需要收集一些数据,而不使用EclipseIDE,而是通过编程方式

在projectA中,它是一个java项目,有一个接口,比如说InterFaceA,它正在各种其他项目中实现

重点是我需要列出所有15个已经实现InterfaceA的项目中的所有类

我遇到了两个工具,比如扩展Javadoc、EclipseAST、javaCC、ANTLR,但没有找到现成的解决方案

考虑了以下方法,但发现很难实现

  • 找出所有声明的变量、字段、方法级别,即整个java文件/类,找出它们的类型,并在其中找出实现InterfaceA的类
  • 像eclipse这样的东西会在interfaceA的整个工作区中找到引用吗,但是通过代码?如果我能得到eclipse如何如此快速地实现这一点的源代码,我将不胜感激
我是否可以请求一个直接的解决方案,可能是使用EclipseAST以一种友好和直观的方式完成这项工作

注意:现有的代码没有得到很好的维护。因此,可能的情况是interfaceA可能没有用实例变量声明,只是在使用之前用作局部变量,等等。 另外还有很多内部类等等


提前感谢。

对我来说,最简单的方法就是在Linux shell中使用grepwc等工具来实现这一点。 GREP会让你找到你喜欢的任何类型的模式(毕竟你有源代码,所以挖掘它应该不会有任何问题),即“implements InterFaceA”或“extensed SomeClassB”。 由于WC,您可以计算模式的出现次数。两者的结合将给你带来巨大的可能性

例如:

  • 搜索实现可序列化接口的所有类:
    grep-iR'implements Serializable'*
  • 计算实现可序列化接口的所有类:
    grep-iR'implements Serializable'*| wc-l
  • 执行与#2相同的操作,但跳过.svn子目录中的任何文件:
    grep-iR'implements Serializable'*| grep-v.svn | wc-l
    
  • 现在,要将其与ANT连接起来,您只需创建一个ANT任务,该任务将执行bash命令。你应该不难找到很多这样做的例子

    如果您不使用Linux,那么在Windows下可以使用等效的工具。只要在网上搜索,你就会发现类似的东西


    希望能有所帮助。

    一般来说,这是一个依赖关系分析/管理的问题

    已存在多个工具/主题:

    • 在谷歌搜索“eclipse依赖关系图”

    您想开发一种工具吗?或者只想做一次?想添加为ANT任务,每天都会触发。从技术上讲,这不会找到所有实现
    可序列化的类,因为它不会找到在
    实现
    可序列化
    之间有多个空格的源文件(或者,更糟糕的是,它们之间的注释和/或换行符),也不是包含
    实现列表的源文件、可序列化的
    ,也不是扩展实现
    可序列化的
    的类的类,也不是实现扩展
    可序列化的
    接口的类。这是正确的。我想提供如何实现这一点的一般思路。正则表达式本身应该很好被认为提供了最精确的匹配。这是一个非常糟糕的想法,像Java、C/C++/C#或Ada这样的复杂源代码不能很好地用词汇工具分析,而只能用语法工具分析