- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 Sonar 非常陌生。
我正在尝试制作自己的 Sonar 插件。下载插件示例后,我使用 mvn eclipse:eclipse 使其准备好 Eclipse 并导入到工作区。编译正常。
但我需要向其中添加我自己的规则文件。
为此,我创建了 2 个文件。
MyCustomNLSRuleTest.java
package org.sonar.samples.java.checks;
import org.junit.Test;
import org.sonar.java.checks.verifier.JavaCheckVerifier;
public class MyCustomNLSRuleTest {
@Test
public void check() {
// Verifies that the check will raise the adequate issues with the expected message.
// In the test file, lines which should raise an issue have been commented out
// by using the following syntax: "// Noncompliant {{EXPECTED_MESSAGE}}"
JavaCheckVerifier.verify("src/test/files/MissingCheck.java", new MyCustomSubscriptionRule());
}
}
实际规则在以下 java 文件中提供给我,如下所示 -
MissingCheck.java
public class MissingCheck extends Check
{
private HashMap<Integer, Integer> lineStringMap;
@Override
public void beginTree(DetailAST aRootAST) {
super.beginTree(aRootAST);
lineStringMap = new HashMap<>();
}
@Override
public int[] getDefaultTokens() {
return new int[] { TokenTypes.STRING_LITERAL};
}
@Override
public void visitToken(DetailAST ast) {
DetailAST parent = ast.getParent();
if (parent != null) {
DetailAST grandpa = parent.getParent();
if (isAnnotation(grandpa.getType())) {
return;
}
}
Integer count = lineStringMap.get(ast.getLineNo());
if (count == null) {
count = new Integer(1);
} else {
count++;
}
FileContents contents = getFileContents();
String[] line = contents.getLines();
if (line.length >= ast.getLineNo()) {
String l = line[ast.getLineNo() - 1];
if (!l.contains("$NON-NLS-" + count + "$")) {
log(ast.getLineNo(), "String_Not_Externalized", new Object[] { ast.getText() });
}
}
lineStringMap.put(ast.getLineNo(), count);
}
/**
* Checks if type is an annotation.
* @param type to check
* @return <code>true</code> if type is an annotation.
*/
private boolean isAnnotation(int type) {
return (type >= TokenTypes.ANNOTATION_DEF && type <= TokenTypes.ANNOTATION_ARRAY_INIT);
}
}
但是,我正在尝试 mvn clean package 这个项目,它给了我错误:
Results :
Tests in error:
MyCustomNLSRuleTest.check:13 » IllegalState At least one issue expected
Tests run: 8, Failures: 0, Errors: 1, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ---------------------------------------------------------------------
知道如何在插件中添加新规则吗?
谢谢!
最佳答案
好吧,看起来你离为java插件编写自定义规则时应该做的事情还很远......首先有几个问题:
您是否真的尝试过查看 SonarQube Confluence 的专用页面? http://docs.sonarqube.org/display/DEV/Custom+Rules+for+Java
在尝试编写规则之前,您是否确实查看了以下链接?
现在...让我们首先向您解释一下您当前正在做什么,因为显然根本不清楚。
MyCustomNLSRuleTest.java
的测试文件,理论上它应该对应于名为 MyCustomNLSRule
的规则。请注意,情况可能并非如此,因为您所说的规则是在 MissingCheck.java
文件中提供给您的。JavaCheckVerifier
来验证作为参数提供的文件 "src/test/files/MissingCheck.java"
在以下情况下是否会引发所有预期问题:对其使用规则 MyCustomSubscriptionRule
。此时,您根本没有测试您的 MissingCheck
,而是将其用作 MyCustomSubscriptionRule
规则的数据...并且这可能是您的主要问题。
但是,如果这确实是您想要实现的目标,则意味着:
MyCustomSubscriptionRule
以具有与原始示例项目不同的自定义行为。MissingCheck.java
上执行时,检查应该会引发问题(有问题的行被注释掉 //Noncompliant {{expected message}}
)请查看上面提供的所有链接,了解自定义规则的工作原理、java 插件 API 中提供的功能以及可以使用它实现的功能。
关于java - IllegalState Sonar 自定义插件中至少存在一个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35456550/
我有 json 数据: { "products": [ { "productId" : 0, "productImg" : "../img/product-ph
我是一名优秀的程序员,十分优秀!