github / github/codeql

Java: IntersectionType is missing predicates and does not work correctly

Aperta
#5,403 1 commento 0 reazioni 0 assegnatari Vedi su GitHub
question
Lingua principale
CodeQL
Stelle
10.1k
Fork
2.1k
Merge medio
2g 15h
PR unite (30g)
141

Descrizione

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

Guida per i contributori

Apri la guida per i contributori

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.