redhat-developer / redhat-developer/vscode-java
Extended generic type loses more specific type when using recursive type bound (works in IntelliJ)
Nessuno ha ancora preso questa issue.
- Lingua principale
- TypeScript
- Stelle
- 2.3k
- Fork
- 546
- Merge medio
- 20h 1m
- PR unite (30g)
- 11
Descrizione
The inferred type when using recursive type bounds is missing a more specific wildcard when looking at the definition of a variable (e.g. via hovering it). This works in IntelliJ, but not in VS Code.
VS Code:
Fruit<?>
IntelliJ:
Fruit<? extends Fruit<?>>
Environment
- Operating System: macOS Sonoma 14
- JDK version: 21.0.2
- Visual Studio Code version: 1.94.2
- Java extension version: v0.29.0
Steps To Reproduce
Here is a made-up example with two classes:
Fruit.java
public class Fruit<T extends Fruit<T>> implements Comparable<T> {
private final Integer size;
public Fruit(Integer size) {
this.size = size;
}
public Integer getSize() {
return size;
}
@Override public int compareTo(T other) {
return size.compareTo(other.getSize()); // Now getSize() is available.
}
}
Apple.java
class Apple extends Fruit<Apple> {
public Apple(Integer size) {
super(size);
}
}
Some random class/function to check:
public Fruit<? extends Fruit<?>> getFruit(Fruit<? extends Fruit<?>> someFruit) {
// in real world code, assume some mapper/runtime check here
// var someFruit = ...
return new Fruit<>(1);
}
Somewhere else:
var fruit = getFruit(new Apple(1));
Current Result
Fruit<?> (in the definition window)
Expected Result
Fruit<? extends Fruit<?>> (in the definition window)
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia riproducendo il risultato dell’hover o della definizione con gli esempi Fruit.java e Apple.java, utilizzando la configurazione indicata di VS Code e dell’estensione Java. Confronta il tipo inferito con la forma attesa del wildcard ricorsivo. Il lavoro è completato quando la finestra della definizione riporta Fruit\u003c? extends Fruit\u003c?\u003e\u003e invece di Fruit\u003c?\u003e per l’esempio.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- java, vscode
- Ambito
- devtools
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100