В настоящее время я работаю над исправлением пользовательского правила сонара.
private void reportMethodParametersClassContainingInternalAnnotation(MethodTree methodTree) {
if (!methodTree.parameters().isEmpty()) {
for (int i = 0; i < methodTree.parameters().size(); i++) {
if (!isParameterWrapperType(methodTree, i) && parameterClassContainsInternalAnnotation(methodTree, i)) {
reportIssue(methodTree.parameters().get(i),
methodTree.parameters().get(i).type().symbolType().fullyQualifiedName()
+ " class must be annotated @CanInvoke or must be standart java class");
}
}
}
}
private static final ArrayList<String> WRAPPER_TYPES = new ArrayList<String>(Arrays.asList("Boolean", "Character",
"Byte", "Short", "Integer", "Long", "Float", "Double", "void", "String", "int"));
private static boolean isParameterWrapperType(MethodTree tree, int i) {
return WRAPPER_TYPES.contains(tree.parameters().get(i).type().symbolType().name());
}
private boolean parameterClassContainsInternalAnnotation(MethodTree tree, int i) {
return tree.parameters().get(i).type().symbolType().symbol().metadata()
.isAnnotatedWith(Constants.INTERNAL_ANNOTATION_PATH);
}
Это метод, который ищет параметры в методе.После получения одного за другим метод должен проверить, имеет ли класс параметра аннотацию @Internal (пользовательская аннотация из моей компании).Если он есть, метод сообщает о проблеме.Пока что работает нормально работает.Но когда он находит параметр, который является Массивом определенного класса, последний метод пытается проверить не этот класс, а Массив (который, очевидно, не имеет @Internal).
Чтобы быть более понятным, это пример:
Когда параметр метода подобен этому:
public void hello(SimpleClass simpleClass) {
}
последний метод возвращает:
true
и это:
tree.parameters().get(i).type().symbolType().symbol().name();
возвращает это:
SimpleClass
Но когда параметр метода выглядит следующим образом:
public void hello(SimpleClass... simpleClass) {
}
последний метод возвращает:
false
и это:
tree.parameters().get(i).type().symbolType().symbol().name();
возвращаетthis:
Array
Какой метод следует использовать, чтобы получить настоящие параметры этого владельца и иметь возможность проверить, аннотирован ли он определенной аннотацией?