Open
Description
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
Reproduction steps
- Create a Java database for the following Java source code:
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; }
- Run the following CodeQL query
import java from ArrayInit arrayInit where arrayInit.getCompilationUnit().fromSource() select arrayInit, arrayInit.getSize()
- Have a look at the one
ArrayInit
result with size 0
❌anns = { @Ann }
is erroneously reported as having size 0