Inline Method leaves unqualified instance method call inside local class when inlining into static context
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 48/100
Direzione di ricerca
Inizia con l’implementazione di Inline Method e riproduci il problema usando l’esempio I01, concentrandoti sulle classi locali spostate in contesti statici di main. Traccia come viene gestito il ricevitore dell’obj.f() originale all’interno di H.g(); il lavoro è completato quando la chiamata generata a helper() è qualificata con il ricevitore e il codice Java sottoposto a refactoring viene compilato.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Description
Inline Method produces uncompilable code when inlining an instance method that contains a local class into the static method main.
Before refactoring, the local class H is declared inside the instance method f(). The call helper() inside H.g() is valid because it is implicitly bound to the enclosing I01 instance.
After applying Inline Method to the invocation obj.f(), the local class H is moved into the static method main. However, the call inside H.g() remains:
return helper();
At this point, there is no implicit I01.this available in the static context. The call should be qualified with the original receiver, for example:
return obj.helper();
The refactored code no longer compiles.
Code before refactoring
public class I01 {
public static void main(String[] args) {
I01 obj = new I01();
// Refactoring operation: Inline Method
// Target invocation: obj.f()
int result = obj.f();
System.out.println(result);
}
int helper() {
return 7;
}
int f() {
class H {
int g() {
return helper();
}
}
return H.class.getSimpleName().length();
}
}
Code after refactoring
public class I01 {
public static void main(String[] args) {
I01 obj = new I01();
class H {
int g() {
return helper();
}
}
// Refactoring operation: Inline Method
// Target invocation: obj.f()
int result = H.class.getSimpleName().length();
System.out.println(result);
}
int helper() {
return 7;
}
int f() {
class H {
int g() {
return helper();
}
}
return H.class.getSimpleName().length();
}
}
- Lingua principale
- TypeScript
- Stelle
- 2.3k
- Fork
- 547
- Merge medio
- 20h 9m
- PR unite (30g)
- 10
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.
Altre issue di redhat-developer/vscode-java
-
bug
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 85/100
redhat-developer/vscode-java#4509 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
redhat-developer/vscode-java#4426 ·
-
bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
redhat-developer/vscode-java#4506 · 3 commenti · 4 reazioni ·
-
bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
redhat-developer/vscode-java#4505 · 2 commenti · 2 reazioni ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 52/100
redhat-developer/vscode-java#4504 · 3 commenti · 1 reazione ·
Tutte le issue di redhat-developer/vscode-java
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
safetrustcr/dApp-SafeTrust#426 ·
-
area:workflow bug ready-for-agent
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
fil-donadoni/tolaria#4409 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
Fission-AI/OpenSpec#1960 ·
-
Add dependabot Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
corsairdev/corsair#1764 ·