Java: Explicit `ArrayInit` containing annotation nested inside annotation as implicit array value is malformed
- Linguagem predominante
- CodeQL
- Estrelas
- 10.1k
- Forks
- 2.1k
- Merge médio
- 2d 15h
- PRs com merge (30d)
- 141
Descrição
### Version
CodeQL CLI v2.5.7
### Description of the issue
An explicit `ArrayInit` containing one or more annotations, which is itself the value of an annotation being the single value for an array _without_ explicit `ArrayInit`, is erroneously reported as having no children.
This can be seen with one of the LGTM demo projects: [Query Console Link](https://lgtm.com/query/2136226172412136860/)
### Reproduction steps
1. Create a Java database for the following Java source code:
```java
import java.util.*;
import java.lang.annotation.*;
public class AnnTest2 {
@interface Ann { }
enum MyEnum {
A,
B
}
@interface Nested1 {
Ann ann();
Ann[] anns();
int[] ints();
MyEnum[] enumConstants();
}
@interface Nested2 {
// Also happens when this element is named `value` and annotation omits
// element name, e.g. `@Nested2(@Nested1(...))`
Nested1[] nested();
}
@Nested2(
// Type of `nested` is array, `@Nested1` is used here as single value without
// explicit ArrayInit
nested = @Nested1(
ann = @Ann,
// This ArrayInit is modelled erroneously (has no children)
anns = { @Ann },
// But these ArrayInits are correct
ints = { 1, 2 },
enumConstants = { MyEnum.A, MyEnum.B }
)
)
private String f;
}
```
2. Run the following CodeQL query
```ql
import java
from ArrayInit arrayInit
where arrayInit.getCompilationUnit().fromSource()
select arrayInit, arrayInit.getSize()
```
3. Have a look at the one `ArrayInit` result with size 0
:x: `anns = { @Ann }` is erroneously reported as having size 0
Guia de contribuição
Avaliação
Esta issue ainda não foi avaliada.