github / github/codeql

Java: Explicit `ArrayInit` containing annotation nested inside annotation as implicit array value is malformed

Aperta
#6,276 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Java question
Lingua principale
CodeQL
Stelle
10.1k
Fork
2.1k
Merge medio
2g 15h
PR unite (30g)
141

Descrizione

### 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

Guida per i contributori

Apri la guida per i contributori

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.