Method-Rename: Virtual vs Non-Virtual Processor fehlt #29
Labels
No labels
bug
build
enhancement
headless
P1-critical
P2-high
P3-medium
P4-low
refactoring
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
ai-tools/jdt-mcp-server#29
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
jdt_rename_elementauf Interface-Methoden mit Generics aktualisiert Implementierungen in anderen Modulen nicht.Betrifft nur: Virtuelle Methoden (Interface/Override) mit Generics-Typ-Parametern.
Funktioniert: Felder, Klassen, nicht-virtuelle Methoden — auch cross-project.
Reproduktion (Test I4, v0.2.18)
Ergebnis: STATUS=SUCCESS, aber nur 3 Dateien geändert:
Processor.java(fixture-api) — Interface-Deklaration ✅AppService.java(fixture-app) — Caller ✅ExternalService.java(fixture-external) — Caller ✅Fehlend:
SimpleProcessor.java(fixture-core) — behältprocess()stattexecute()❌BatchProcessor.java(fixture-core) — behältprocess()stattexecute()❌BaseProcessor.java(fixture-core) — behältprocess()stattexecute()❌→ 4 Compile-Fehler
Root Cause: JDT Generics-Binding-Resolution im Headless-Modus
RenameVirtualMethodProcessor (Processor-basierter Weg)
isVirtual=true,RenameVirtualMethodProcessor)checkFinalConditionsläuft ohne Fehler durchcreateChangeproduziert Changes — aber nur für Caller, nicht für ImplementierungenRippleMethodFinder2denMethodOverrideTestermit Binding-VergleichenProcessor<T>.process(T)hat Signatur(QT;)— die Implementierungprocess(String)hat(QString;)MethodOverrideTesterbraucht aufgelöste Bindings für die Erasure-Zuordnung, die im Headless-Mode fehlenSearchEngine (AST-basierter Weg)
ALL_OCCURRENCESfindet ebenfalls nur Interface-Deklaration + CallerTypeHierarchy (funktioniert!)
IType.newTypeHierarchy()findet alle Subtypes korrektIType.getMethods()listet die Methoden korrektVersuchte Fix-Ansätze (alle gescheitert)
Offene Frage
Ob das Problem auch bei virtuellen Methoden ohne Generics auftritt (z.B.
void doStuff(String)in Interface und Implementierung). Falls nicht, ist es rein ein Generics-Binding-Problem.Status
65daec8)Kontext
This is already implemented in
RefactoringTools.java(lines 1577-1611):isVirtualMethod(method)delegates toMethodChecks.isVirtual(method)(line 1607)RenameVirtualMethodProcessor(line 1579)RenameNonVirtualMethodProcessor(line 1583)This was part of the PR #40 (AST-based rename fallback) merge. Can be closed.