Java: IntersectionType is missing predicates and does not work correctly
- 主要語言
- 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 還沒有評估資料。