首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在不使用I/O的情况下获得PMD报告&其中的详细信息?

如何在不使用I/O的情况下获得PMD报告&其中的详细信息?
EN

Stack Overflow用户
提问于 2017-07-11 20:14:13
回答 1查看 663关注 0票数 2

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

我试图用SourceCodeProcessor来做这件事,但是不知道一些必需的对象/参数是什么样子的,也不知道它们是如何构建的。我仍然不知道如何创建一个RuleContext对象属性。

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-12 03:35:17

根据您的计划,我会采取稍微不同的方法(我是PMD维护人员)。

SourceCodeProcessor水平很低.这是整个分析过程被编排的实际位置,但忽略了实现该过程的大部分有趣设置。

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

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

  1. 使用设置(线程、要使用的规则集等)创建一个PMDConfiguration对象。
  2. RuleSetFacory根据您的配置创建规则集
  3. 获取具有要分析的源的List<DataSource>
  4. 创建一个RuleContext
  5. 设置收听报告的人。这将允许您作为POJO直接获取冲突(您可以避免实际生成报告文件并对其进行解析)
  6. 调用PMD.processFiles进行实际分析。

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

这是非常少的代码在你的一端,只是连接不同的部分已经在PMD。

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

这可能不是要求这个的最好地方..。这主要是我偶然发现的,我不认为任何不熟悉PMD内部机制的人都能帮上忙。您可能希望更直接地与PMD开发团队联系(开发邮件列表、Github等等)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45043725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档