github / github/codeql

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

未關閉
#5,707 0 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
enhancement Java
主要語言
CodeQL
星號
10.1k
分支
2.1k
平均合併
2 天 15 小時
30 天內合併 PR
141

描述

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

貢獻指南

開啟貢獻指南

評估

這個 Issue 還沒有評估資料。

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。