Java: Generic Class Methods not connected when type parameter is unknown (build-mode=none)
- Vorherrschende Sprache
- CodeQL
- Sterne
- 10.1k
- Forks
- 2.1k
- Ø Merge
- 2 T. 15 Std.
- Gemergte PRs (30 T.)
- 141
Beschreibung
The introduction of `build-mode=none` has been very helpful for us. This allows us to create (partial) CodeQL databases, without being forced to fully resolve (maven) dependencies. Sometimes this is convenient because some dependencies might not be easily resolvable.
That said, we also see many examples of Generic Classes and Methods in our codebases. Unfortunately, we cannot analyse (calls to) Generic Methods that are instantiated with type parameters that are unknown.
Note that, while the code of the type parameter `T` is unavailable, the code of the `GenericClass` *is* available.
## Example pseudo code
```
class GenericClass {
public method() { ... };
};
GenericClass i1 = new GenericClass<>();
i1.method(); // not connected
GenericClass i2 = new GenericClass<>();
i2.method(); // connected
```
See attached [codeql_issue.zip](https://github.com/user-attachments/files/20345107/codeql_issue.zip) zip file for a more thorough analysis of the issue.
Beitragsleitfaden
Rechercherichtung
Beginne damit, die angehängte codeql_issue.zip zu entpacken und die verbundene Boolean-Instanziierung mit der nicht verbundenen Instanziierung des unbekannten Typs unter build-mode=none zu vergleichen. Das Issue nennt keine Quelldateien oder Tests, daher verfolge den relevanten Java-Analyse-Einstiegspunkt anhand der Reproduktion. Die Aufgabe ist erledigt, wenn Aufrufe von GenericClass.method() genauso verbunden sind wie Aufrufe mit einem bekannten Typparameter.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- java
- Bereich
- devtools
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100