【发布时间】:2018-12-12 16:37:11
【问题描述】:
我的任务是使用 SonarJava 创建自定义规则。规则的目的是检查方法。如果方法用@Test 注释,它还需要有@TestInfo 注释且不为空的testCaseId 参数。
这是我准备的:
public class AvoidEmptyTestCaseIdParameterRule extends IssuableSubscriptionVisitor {
private static final String TEST_ANNOTATION_PATH = "org.testng.annotations.Test";
private static final String TEST_INFO_ANNOTATION_PATH = "toolkit.utils.TestInfo";
@Override
public List<Tree.Kind> nodesToVisit() {
return ImmutableList.of(Tree.Kind.METHOD);
}
@Override
public void visitNode(Tree tree) {
MethodTree methodTree = (MethodTree) tree;
if (methodTree.symbol().metadata().isAnnotatedWith(TEST_ANNOTATION_PATH)) {
if (methodTree.symbol().metadata().isAnnotatedWith(TEST_INFO_ANNOTATION_PATH)) {
List<AnnotationInstance> annotations = methodTree.symbol().metadata().annotations();
for (int i = 0; i < annotations.size(); i++) {
if (annotations.get(i).symbol().name().equals("TestInfo")
&& !testInfoAnnotationContainsNonEmptyTestCaseIdParameter(annotations.get(i))) {
reportIssue(methodTree.simpleName(),
"Method annotated with @TestInfo should have not empty testCaseId parameter");
}
}
} else {
reportIssue(methodTree.simpleName(),
"Method annotated with @Test should also be annotated with @TestInfo");
}
}
}
private boolean testInfoAnnotationContainsNonEmptyTestCaseIdParameter(AnnotationInstance annotation) {
return <--this is where I stuck-->;
}
}
这是我的测试类的样子:
public class TestClass {
@Test
@TestInfo(testCaseId = "", component = "Policy.IndividualBenefits")
public void testMethod() {
}
}
问题:
-是否可以获取注释参数(正确或作为字符串行)?
-还有其他可能的方法来获取这个参数吗?
【问题讨论】:
标签: annotations sonarqube squid