热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在SonarQube中使用NewRule.addParam()方法及其代码实例

本文介绍了在SonarQube插件开发中如何利用`org.sonar.api.batch.rule.internal.NewRule.addParam()`方法为规则添加参数,并提供了多个实际应用的代码示例。

本文详细探讨了在Java编程语言中,特别是在SonarQube插件开发场景下,如何有效使用org.sonar.api.batch.rule.internal.NewRule.addParam()方法来为自定义规则添加参数。该方法允许开发者向规则中添加必要的配置项,以增强规则的灵活性和适用性。以下是一些从不同源码库中提取的实际代码示例,旨在提供具体的实现参考。

方法概述

此方法属于NewRule类,位于org.sonar.api.batch.rule.internal包下,主要用于向规则中添加参数。每个参数通常包含一个名称和可选的描述信息。如果尝试添加已存在的参数,则会抛出IllegalStateException异常。

代码示例

以下代码示例展示了如何在一个单元测试中正确使用addParam()方法:

@Test
public void testAddParams() {
RulesBuilder builder = new RulesBuilder();
NewRule newRule = builder.add(RuleKey.of("squirrel", "SQ0001"));
newRule.addParam("min").setDescription("Minimum value");
newRule.addParam("max").setDescription("Maximum value");
try {
newRule.addParam("min");
} catch (IllegalStateException e) {
assertEquals("Parameter 'min' already exists on rule 'squirrel:SQ0001'", e.getMessage());
}
}

另一个例子展示了如何在创建新的规则时设置参数:

newSquid1.setSeverity(Severity.CRITICAL);
newSquid1.setStatus(RuleStatus.BETA);
newSquid1.addParam("min").setDescription("Minimum threshold");
newSquid1.addParam("max").setDescription("Maximum threshold");

此外,还有一个更复杂的示例,展示了如何从数据库加载规则并为其添加参数:

private Rules loadRules(RuleDao ruleDao, DefaultDebtModel debtModel, Durations durations) {
RulesBuilder rulesBuilder = new RulesBuilder();
List ruleParams = ruleDao.selectParameters();
ListMultimap paramsByRuleId = ArrayListMultimap.create();
for (RuleParamDto dto : ruleParams) {
paramsByRuleId.put(dto.getRuleId(), dto);
}
for (RuleDto ruleDto : ruleDao.selectEnabledAndNonManual()) {
RuleKey ruleKey = RuleKey.of(ruleDto.getRepositoryKey(), ruleDto.getRuleKey());
NewRule newRule = rulesBuilder.add(ruleKey)
.setId(ruleDto.getId())
.setName(ruleDto.getName())
.setSeverity(ruleDto.getSeverityString())
.setDescription(ruleDto.getDescription())
.setStatus(ruleDto.getStatus())
.setInternalKey(ruleDto.getConfigKey());
if (hasCharacteristic(ruleDto)) {
newRule.setDebtSubCharacteristic(effectiveCharacteristic(ruleDto, ruleKey, debtModel).key());
newRule.setDebtRemediationFunction(effectiveFunction(ruleDto, ruleKey, durations));
}
for (RuleParamDto ruleParamDto : paramsByRuleId.get(ruleDto.getId())) {
newRule.addParam(ruleParamDto.getName())
.setDescription(ruleParamDto.getDescription());
}
}
return rulesBuilder.build();
}

最后,这里有一个来自SonarLint Core的例子,说明了如何在加载规则定义时动态地为规则添加参数:

private static Rules createRules(StandaloneRuleDefinitionsLoader loader) {
RulesBuilder builder = new RulesBuilder();
for (RulesDefinition.Repository repoDef : loader.getContext().repositories()) {
for (RulesDefinition.Rule ruleDef : repoDef.rules()) {
if (ruleDef.type() == RuleType.SECURITY_HOTSPOT) {
continue;
}
NewRule newRule = builder.add(RuleKey.of(repoDef.key(), ruleDef.key()))
.setInternalKey(ruleDef.internalKey())
.setDescription(ruleDef.htmlDescription() != null ? ruleDef.htmlDescription() : Markdown.convertToHtml(ruleDef.markdownDescription()))
.setSeverity(ruleDef.severity())
.setType(ruleDef.type() != null ? ruleDef.type().toString() : null)
.setName(ruleDef.name());
for (Param p : ruleDef.params()) {
newRule.addParam(p.key())
.setDescription(p.description());
}
}
}
return builder.build();
}

推荐阅读
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 本文详细介绍了Java中org.w3c.dom.Text类的splitText()方法,通过多个代码示例展示了其实际应用。该方法用于将文本节点在指定位置拆分为两个节点,并保持在文档树中。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • Android 渐变圆环加载控件实现
    本文介绍了如何在 Android 中创建一个自定义的渐变圆环加载控件,该控件已在多个知名应用中使用。我们将详细探讨其工作原理和实现方法。 ... [详细]
  • 作为一名新手,您可能会在初次尝试使用Eclipse进行Struts开发时遇到一些挑战。本文将为您提供详细的指导和解决方案,帮助您克服常见的配置和操作难题。 ... [详细]
  • 本文介绍了如何在C#中启动一个应用程序,并通过枚举窗口来获取其主窗口句柄。当使用Process类启动程序时,我们通常只能获得进程的句柄,而主窗口句柄可能为0。因此,我们需要使用API函数和回调机制来准确获取主窗口句柄。 ... [详细]
  • 本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文详细介绍如何使用Samba软件配置CIFS文件共享服务,涵盖安装、配置、权限管理及多用户挂载等关键步骤。通过具体示例和命令行操作,帮助读者快速搭建并优化Samba服务器。 ... [详细]
author-avatar
小青年
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有