github / github/codeql

Java: `MemberRefExpr.getReferencedCallable()` does not work for creation of arrays

Open
#5,707 0 comments 0 reactions 0 assignees View on GitHub
enhancement Java
Dominant language
CodeQL
Stars
10.1k
Forks
2.1k
Avg merge
2d 15h
Merged PRs (30d)
141

Description

### Description
When a Method Reference Expression performs creation of an array (e.g. `String[]::new`), `MemberRefExpr.getReferencedCallable()` has no result.

This is technically correct since there exists no 'array constructor', however it might make working with `MemberRefExpr` more cumbersome. I created this issue mainly to discuss how this can be solved, or how the current situation can be improved. A few solutions might be:
- Model a 'dummy' array constructor so `getReferencedCallable()` has a result; however, make sure that no other element by accident has this dummy constructor as result (e.g. array creation expression)
- Adjust the documentation for `getReferencedCallable()` and create a new predicate `getCreatedArrayType()` which has in these cases the result

### Example
CodeQL query:
```ql
import java

from MemberRefExpr m
where not exists(m.getReferencedCallable())
select m
```
[Query Console link](https://lgtm.com/query/8386794043699946607/)

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.