Skip to content

Commit ca05e5a

Browse files
committed
SONARJAVA-1433 Handle unknown annotations
1 parent eba217b commit ca05e5a

2 files changed

Lines changed: 11 additions & 4 deletions

File tree

java-checks/src/main/java/org/sonar/java/checks/AnnotationArgumentOrderCheck.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.sonar.check.Rule;
2626
import org.sonar.java.tag.Tag;
2727
import org.sonar.plugins.java.api.semantic.Symbol;
28+
import org.sonar.plugins.java.api.semantic.Symbol.TypeSymbol;
2829
import org.sonar.plugins.java.api.tree.AnnotationTree;
2930
import org.sonar.plugins.java.api.tree.AssignmentExpressionTree;
3031
import org.sonar.plugins.java.api.tree.ExpressionTree;
@@ -34,7 +35,6 @@
3435
import org.sonar.squidbridge.annotations.SqaleSubCharacteristic;
3536

3637
import java.util.ArrayList;
37-
import java.util.Collection;
3838
import java.util.List;
3939

4040
@Rule(
@@ -53,9 +53,12 @@ public List<Tree.Kind> nodesToVisit() {
5353
@Override
5454
public void visitNode(Tree tree) {
5555
AnnotationTree annotationTree = (AnnotationTree) tree;
56-
Collection<Symbol> symbols = annotationTree.symbolType().symbol().memberSymbols();
56+
TypeSymbol annotationSymbol = annotationTree.symbolType().symbol();
57+
if (annotationSymbol.isUnknown()) {
58+
return;
59+
}
5760
List<String> declarationNames = new ArrayList<>();
58-
for (Symbol symbol : symbols) {
61+
for (Symbol symbol : annotationSymbol.memberSymbols()) {
5962
declarationNames.add(symbol.name());
6063
}
6164
List<String> annotationArguments = new ArrayList<>();

java-checks/src/test/files/checks/AnnotationArgumentOrderCheck.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import org.sonar.java.checks.targets.CustomAnnotation;
2+
import org.sonar.java.MyUnknownAnnotation;
23

34
@interface MyAnnotation {
45
String myName();
@@ -22,4 +23,7 @@ void wrongMethod() {
2223

2324
List<@MyAnnotation(myInteger=2, myName="XXX") Object[]> field;// Noncompliant
2425
List<@MyAnnotation(myName="XXX", aaaLast = "") Object[]> field;
25-
}
26+
}
27+
28+
@MyUnknownAnnotation(name = "XXX") // Compliant
29+
class MySecondClass {}

0 commit comments

Comments
 (0)