fix(refactoring): rename overrides of generic methods headless (#29) #97
No reviewers
Labels
No labels
bug
build
enhancement
headless
P1-critical
P2-high
P3-medium
P4-low
refactoring
No milestone
No project
No assignees
1 participant
Due date
No due date set.
Dependencies
No dependencies set.
Reference
ai-tools/jdt-mcp-server!97
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fix/29-generics-override-rename"
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?
Basis: PR #95 (
fix/79-move-type-cross-module) — dieser Branch stacked darauf, weil beideRenameRefactoring.javaanfassen.Closes #29
Befund
Zwei unabhängige Headless-Defekte, nicht einer:
checkFinalConditionsbrach mitAssertionFailedExceptionab, bevor überhaupt ein Change entstand. JDTs Post-Rename-Analyse (RenameAnalyzeUtil) öffnet Preview-Working-Copies überTextChange.getPreviewContent(); ausserhalb der IDE scheitert dabeiAssert.isTrue()inTextFileChange.releaseDocument(). Der Change-Satz ist zu diesem Zeitpunkt bereits vollständig (RenameMethodProcessor.doCheckFinalConditions()ruftcreateChanges()vor der Analyse), deshalb wird die Analyse übersprungen und der Change direkt vom Processor genommen — mit Warnung in der Antwort, weil JDTs eigene Validierung dann fehlt.RippleMethodFinder2/MethodOverrideTesterverknüpft die generische Deklaration nicht mit einem Override mit substituiertem Parametertyp (Processor<T>.process(T)vs.SimpleProcessor.process(String)), die Overrides landen also nie im Change-Satz. Nicht-generische virtuelle Methoden sind nicht betroffen — Test 0b belegt das.Die Typhierarchie ist intakt (verifiziert über
jdt_find_implementationsundjdt_get_type_hierarchygegen das gebaute Produkt), deshalb werden die Übriggebliebenen darüber gesucht und einzeln umbenannt. Ein einzelner Override ist nach dem Umbenennen der Deklaration nicht mehr virtuell, und diesen Fall behandelt JDT korrekt — inklusive Call-Sites und Self-Calls, die ein reines Patchen der Deklaration (frühere, revertierte Versuche im Issue) verfehlt hätte.Der Fehler
"will be shadowed by a renamed declaration"tritt in diesem Schritt zwangsläufig auf — er beschreibt genau die gewollte Override-Beziehung — und wird nur dort toleriert.Verhalten nach dem Fix
jdt_rename_elementauforg.fixture.api.Processor#processbenennt Deklaration, beide Overrides, den Self-Call und alle Caller um, modul- und projektübergreifend.status: WARNINGmitunrenamedOverridesund einer Meldung, die Fall und Ausweg benennt."assertion failed:"gibt es nicht mehr.Verifikation (lokal, Produkt-Build)
mvn clean package(Maven 3.9.14,MAVEN_OPTSwie in CLAUDE.md)tests/refactoring-test.sh: 4 passed, 0 failed — neu Test 0 (generisch, #29) und Test 0b (nicht-generisch, Schutz gegen falsche Leftover-Meldungen); Test 1 (#79) und Test 2 (#77) weiter grüntests/smoke-test.sh: 9 passed, 0 failed🤖 Generated with Claude Code
https://claude.ai/code/session_018q6miiQHwQYFgZBy71aUhL