Closed. This question needs details or clarity。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
                        
                        2年前关闭。
                                                                                            
                
        
我正在尝试通过使用自定义规则集生成PMD报告。输入是一堆字符串格式的Apex类。在不输出到文件的情况下,我想直接分析报告内容(XML格式)以创建违规摘要,开始/结束行,优先级,规则名称和附带的消息。这将在Apex代码的多个主体上完成,并在每次发生违规时将其添加到报告bean中。

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

任何帮助深表感谢。

最佳答案

根据您打算做什么,我会采取略有不同的方法(我是PMD维护者)。

SourceCodeProcessor是非常低的级别。这是安排整个分析过程的实际位置,但是却错过了大多数有趣的设置。

还要注意的是,SourceCodeProcessor处理单个文件。对于Apex,这目前可能没有什么不同,但是PMD越来越趋向于在分析之间交叉信息(即:我们计划将当前的数据流分析/控制流图代码扩展到进程间调用),因此能够PMD控制一次完整的项目分析将是最好的。

因此,我来​​看看PMD.doPmd。您可能应该编写这种方法的自己的版本,但要涵盖大多数基础知识:


用您的设置创建一个PMDConfiguration对象(线程,要使用的规则集等)
RuleSetFacory根据您的配置创建规则集
获得带有来源的List<DataSource>进行分析
创建一个RuleContext
设置a listener for the report。这样一来,您就可以直接以POJO的形式获取违规信息(可以避免实际生成报告文件并对其进行解析)
调用PMD.processFiles进行分析。


您应该与PMD当前的工作有所不同的一点是步骤3。除了指向文件(FileDataSource),还应创建一个ReaderDataSource列表,并在从中检索到的源代码字符串周围使用StringReader数据库。

您端的代码很少,只需将PMD中已经存在的不同部分连接起来即可。

附言这种方法的另一个优点是,由于PMD是PMD的高级级别,因此在将来的版本中,它是最不可能进行API更改的。 PMD最近采用了语义版本控制,即将发布的版本(6.0.0)将引入一些API更改/删除不推荐使用的方法和类。

附言2:这可能不是要求此的最佳地点...这是我偶然碰到的大部分机会,而且我认为不熟悉PMD内部原理的人不会提供帮助。您可能想直接与PMD开发团队联系(开发邮件列表,Github等)。

关于java - 如何在不使用I/O的情况下获取PMD报告及其中的详细信息? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45043725/

10-15 10:44