github / github/codeql

Java: IntersectionType is missing predicates and does not work correctly

未关闭
#5,403 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
question
主要语言
CodeQL
星标
10.1k
派生
2.1k
平均合并
2 天 15 小时
30 天内合并 PR
141

描述

There are several issues with [`IntersectionType`](https://codeql.github.com/codeql-standard-libraries/java/semmle/code/java/Type.qll/type.Type$IntersectionType.html):
- It currently only provides `getFirstBound()`, there are no other predicates to get the other bounds (though `getASubtype()` can apparently be used as workaround)
- It does not preserve order of the bounds (i.e. `MyInterface2 & MyInterface1` would become MyInterface1 & MyInterface2)
- It requires that `getFirstBound()` is a class, returning `Object` when only interfaces are used as bounds; that is (to my understanding) wrong

It would be good to give it the following predicates:
- `getFirstBoundType()`
- `getBoundType(int position)`
- `getABoundType()`

(I cannot submit a pull request for this because it appears that database changes are required for this)

Side note: Usage of `IntersectionType` in `erase(Type)` will also behave incorrectly due to the `getFirstBound()` behavior described above, and also does not match the JLS which [does not mention intersection types](https://docs.oracle.com/javase/specs/jls/se15/html/jls-4.html#jls-4.6) for type erasure (not sure what the correct behavior would be here).
https://github.com/github/codeql/blob/a760ed8c557ae34fa96b306f5cf79e013cfdeaa2/java/ql/src/semmle/code/java/Type.qll#L1014

贡献指南

打开贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。