10

您知道 eclipse 的查找所有参考资料功能(搜索 > 参考资料 > 工作区或 Ctrl-Shift-G)吗?我怎样才能以编程方式运行它?

我有一个庞大的代码库,我需要对其安全违规进行审计,并且需要链接大约十几个条件。

是否有可以在 Java 中分析大型项目(我有 1GB 的源文件)的库?以下是我需要回答的问题:

  • 传入一个接口列表,找到这些接口的所有实现
  • 在该列表中搜索我们的安全库的调用
  • 搜索上面列表中引用的每个方法,以确认进行了正确的授权库调用。

我可以在一天内手动完成这项工作,但宁愿花 2 时间编写一个漂亮的脚本来为我完成这项工作。

我可以用来编写这些 Eclipse 做得很好的常见任务的库的任何线索?理想情况下,我想在命令行中执行它们,以便它们可以重复和编写脚本,但显然会采用我能得到的。

4

2 回答 2

1

您可以在 IntelliJ IDEA 中编写自己的插件来完成此操作。

以编程方式,您可以利用PSI(程序结构接口)树来搜索各种代码元素(类、变量、方法、语句等),在代码库中导航,然后做任何您需要做的事情。

以下是一些参考资料:

  1. IntelliJ IDEA 插件开发

  2. PSI 食谱

  3. PsiViewer 插件

您需要做的所有事情(查找实现、搜索调用、搜索特定语句的方法)都是可能的。

如果您下载 IntelliJ IDEA 社区版的源代码,您可以查看代码并了解这些操作是如何完成的。

或者您可以在此处发布特定问题(用 标记intellij-plugin),像 CrazyCoder 这样的人可能会很乐意帮助您:)

关于代码库的范围(您说 1 GB?),您只需要尝试一下,看看效果如何。最坏的情况是,您可以分部分分析您的代码库。

在任何情况下,IntelliJ IDEA 中的插件开发都非常强大,我推荐这种方法用于任何类型的 Java 代码分析或您想要自己以编程方式控制的重构(并且还没有被开箱即用的重构所涵盖) )。

祝你好运!

于 2013-07-03T20:04:57.967 回答
0

六年过去了,所以这可能对你没有多大帮助。也许它会帮助别人......

我在这里有许多有用的 Eclipse JDT 搜索方法,它们使用SearchEngine等。例如:

    /**
     * Collects the methods that access the specified member
     * @param element the field or method whose accessors are being determined
     * @param scope the elements being examined, e.g. this class or this package
     * @return the collection of methods that access the indicated member
     */
    public static Set<IMethod> calculateCallingMethods(
            IJavaElement element,
            IJavaSearchScope scope)
            throws CoreException {
        SearchEngine searchEngine = new SearchEngine();
        SearchParticipant[] participants =
            new SearchParticipant[] { SearchEngine.getDefaultSearchParticipant() };
        SearchPattern callingMethodPattern = SearchPattern.createPattern(
                element, REFERENCES);
        MethodCollector methodCollector = new MethodCollector();
        searchEngine.search(callingMethodPattern, participants, scope,
                methodCollector, null);
        Set<IMethod> callers = methodCollector.getResults();
        return callers;
}
于 2019-07-08T16:20:26.010 回答