我如何获得PMD报告&其中的细节不使用I / O?

时间:2017-07-11 20:14:13

标签: java pmd

我正在尝试使用自定义规则集生成PMD报告。输入是一串String格式的Apex类。如果不输出到文件,我想直接解析报告内容(XML格式)以创建违规,开始/结束行,优先级,规则名称和附加消息的摘要。这将在Apex代码的多个主体上完成,每次发生违规时都会添加到报告bean。

我试图用SourceCodeProcessor做这个,但是无法弄清楚一些所需的对象/参数是什么样的,也不知道它们是如何构建的。我仍然不知道如何制作RuleContext对象属性。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

根据你打算做的事情,我会采取一种稍微不同的方法(我是PMD维护者)。

SourceCodeProcessor非常低级。它是整个分析过程精心策划的实际位置,但却错过了大部分有趣的设置。

另外值得注意的是,SourceCodeProcessor处理单个文件。对于Apex而言,目前这可能没有什么区别,但PMD越来越倾向于在分析之间交换信息(即:我们计划将当前的数据流分析/控制流图代码扩展到进程间调用),因此能够让PMD控制单次运行的完整项目分析将是最好的。

因此,我会看一下PMD.doPmd。您应该编写自己的此类方法版本,但涵盖了大部分基础知识:

  1. 使用您的设置创建PMDConfiguration对象(线程,要使用的规则集等)
  2. RuleSetFacory根据您的配置创建规则集
  3. 获取包含要分析的来源的List<DataSource>
  4. 创建RuleContext
  5. 设置a listener for the report。这将允许您直接以POJO的形式获取违规(您可以避免实际生成报告文件并对其进行解析)
  6. 致电PMD.processFiles进行实际分析。
  7. 您应该与PMD当前所做的不同的一点是步骤3.您应该使用{{3}创建一个ReaderDataSource列表,而不是指向文件(FileDataSource)。你从db中找到的源代码字符串。

    你的代码很少,只需在PMD中连接不同的部分。

    P.S。这种方法的另一个优点是,PMD是一个非常高级别的PMD,它是未来版本中最不可能进行API更改的。 PMD最近采用了语义版本控制,即将发布的版本(6.0.0)将引入几个API更改/删除已弃用的方法和类。

    P.S。 2:这可能不是要求这个问题的最好的地方......这主要是偶然的,我遇到过这个问题,而且我认为不熟悉PMD内部人员的人也无法提供帮助。您可能希望更直接地联系PMD开发团队(开发邮件列表,Github等)。