github / github/codeql

Java: `TryStmt` resource variable declaration is `LocalVariableDeclStmt` instead of `LocalVariableDeclExpr`

オープン
#5,783 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る
Java question
主要言語
CodeQL
スター
10.1k
フォーク
2.1k
平均マージ
2日 15時間
マージ済み PR(30日)
141

説明

### Description
The CodeQL class `TryStmt` models variable declarations in try-with-resources as `LocalVariableDeclStmt`.
This appears to be inconsistent with how the JLS defines them:
- [JLS 16 §14.20.3](https://docs.oracle.com/javase/specs/jls/se16/html/jls-14.html#jls-14.20.3):
```
Resource:
LocalVariableDeclaration
VariableAccess
```
- [JLS 16 §14.4](https://docs.oracle.com/javase/specs/jls/se16/html/jls-14.html#jls-LocalVariableDeclaration)
> A local variable declaration can appear in the following locations:
>- a local variable declaration statement in a block (§14.4.2)
>- the header of a basic for statement (§14.14.1)
>- the header of an enhanced for statement (§14.14.2)
>- the resource specification of a try-with-resources statement (§14.20.3)
>- a pattern (§14.30.1)

CodeQL models "local variable declaration statement in a block" (§14.4.2) as `LocalVariableDeclStmt`, other cases such as `for` statement variables are modeled as `LocalVariableDeclExpr`.
The only exception is the resource of a try-with-resources statement which is currently modeled as `LocalVariableDeclStmt`; this seems incorrect and should probably be a `LocalVariableDeclExpr` instead.

### Example
(See also `TryStmt::getAResourceDecl` result type)
```ql
import java

from LocalVariableDeclStmt varDeclStmt
where any(TryStmt s).getAResourceDecl() = varDeclStmt
select varDeclStmt
```
[Query Console link](https://lgtm.com/query/2939006923879317681/)

コントリビューションガイド

コントリビューションガイドを開く

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。