我试图使用自定义规则集生成PMD报告。输入是一串字符串格式的Apex类。在不输出文件的情况下,我想直接解析报表内容(XML格式),以创建违规、开始/结束行、优先级、规则名称和附加消息的摘要。这将在Apex代码的多个主体上完成,每次出现违规时都会添加到报表bean中。
我试图用SourceCodeProcessor来做这件事,但是不知道一些必需的对象/参数是什么样子的,也不知道它们是如何构建的。我仍然不知道如何创建一个RuleContext对象属性。
任何帮助都是非常感谢的。
发布于 2017-07-11 19:35:17
根据您的计划,我会采取稍微不同的方法(我是PMD维护人员)。
SourceCodeProcessor
水平很低.这是整个分析过程被编排的实际位置,但忽略了实现该过程的大部分有趣设置。
同样值得注意的是,SourceCodeProcessor
处理的是(一个文件)。对于Apex来说,这目前可能没有什么区别,但是PMD正越来越倾向于将分析之间的信息交叉(即:我们计划将当前的数据流分析/控制流图代码扩展到进程间调用),因此能够让PMD在一次运行中控制完整的项目分析将是最好的。
因此,我想看看PMD.doPmd
。您可能应该编写自己版本的此类方法,但应涵盖大部分基本知识:
PMDConfiguration
对象。RuleSetFacory
根据您的配置创建规则集List<DataSource>
RuleContext
PMD.processFiles
进行实际分析。与PMD当前所做的工作不同的一点是步骤3,而不是指向文件(FileDataSource
),您应该创建一个ReaderDataSource
列表,在从db中检索到的源代码字符串周围使用StringReader
。
这是非常少的代码在你的一端,只是连接不同的部分已经在PMD。
P.S.这种方法的另一个优点是,作为一个非常高级别的PMD
类,它是未来版本中最不可能经历API更改的类之一。PMD最近采用了语义版本控制,即将发布的版本(6.0.0)将引入几个API更改/删除不推荐的方法和类。
这可能不是要求这个的最好地方..。这主要是我偶然发现的,我不认为任何不熟悉PMD内部机制的人都能帮上忙。您可能希望更直接地与PMD开发团队联系(开发邮件列表、Github等等)。
https://stackoverflow.com/questions/45043725
复制相似问题