github / github/codeql

Java: IntersectionType is missing predicates and does not work correctly

Abierto
#5,403 1 comentario 0 reacciones 0 asignados Ver en GitHub
question
Lenguaje dominante
CodeQL
Estrellas
10.1k
Forks
2.1k
Merge medio
2 d 15 h
PR fusionados (30 d)
141

Descripción

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

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.