我正在尝试使用自定义规则集生成PMD报告。输入是一串String格式的Apex类。如果不输出到文件,我想直接解析报告内容(XML格式)以创建违规,开始/结束行,优先级,规则名称和附加消息的摘要。这将在Apex代码的多个主体上完成,每次发生违规时都会添加到报告bean。
我试图用SourceCodeProcessor做这个,但是无法弄清楚一些所需的对象/参数是什么样的,也不知道它们是如何构建的。我仍然不知道如何制作RuleContext对象属性。
非常感谢任何帮助。
答案 0 :(得分:0)
根据你打算做的事情,我会采取一种稍微不同的方法(我是PMD维护者)。
SourceCodeProcessor
非常低级。它是整个分析过程精心策划的实际位置,但却错过了大部分有趣的设置。
另外值得注意的是,SourceCodeProcessor
处理单个文件。对于Apex而言,目前这可能没有什么区别,但PMD越来越倾向于在分析之间交换信息(即:我们计划将当前的数据流分析/控制流图代码扩展到进程间调用),因此能够让PMD控制单次运行的完整项目分析将是最好的。
因此,我会看一下PMD.doPmd
。您应该编写自己的此类方法版本,但涵盖了大部分基础知识:
PMDConfiguration
对象(线程,要使用的规则集等)RuleSetFacory
根据您的配置创建规则集List<DataSource>
RuleContext
PMD.processFiles
进行实际分析。您应该与PMD当前所做的不同的一点是步骤3.您应该使用{{3}创建一个ReaderDataSource
列表,而不是指向文件(FileDataSource
)。你从db中找到的源代码字符串。
你的代码很少,只需在PMD中连接不同的部分。
P.S。这种方法的另一个优点是,PMD
是一个非常高级别的PMD,它是未来版本中最不可能进行API更改的。 PMD最近采用了语义版本控制,即将发布的版本(6.0.0)将引入几个API更改/删除已弃用的方法和类。
P.S。 2:这可能不是要求这个问题的最好的地方......这主要是偶然的,我遇到过这个问题,而且我认为不熟悉PMD内部人员的人也无法提供帮助。您可能希望更直接地联系PMD开发团队(开发邮件列表,Github等)。