Doppelter createChange()-Aufruf bei Refactorings #61

Open
opened 2026-03-08 18:39:31 +00:00 by automation · 0 comments
Collaborator

Problem

In RefactoringTools wird createChange() bei nicht-Preview-Aufrufen doppelt ausgeführt — einmal für die Change-Beschreibung, einmal für die Ausführung:

// Preview-Pfad:
Change change = refactoring.createChange(monitor);
// ... beschreiben und return

// Execute-Pfad — createChange() NOCHMAL:
Change change = refactoring.createChange(monitor);
change.perform(monitor);

createChange() berechnet den vollständigen Change-Tree und ist nicht billig.

Betroffene Methoden

extractMethod, moveType, encapsulateField, changeMethodSignature, introduceParameter

Fix

Change change = refactoring.createChange(monitor);
Map<String, Object> changeDesc = RefactoringSupport.describeChange(change);
result.put("changes", changeDesc);

if (previewOnly) {
    result.put("status", "PREVIEW");
    return ...;
}
change.perform(monitor);
result.put("status", "SUCCESS");

Gefunden von

Vogel

## Problem In `RefactoringTools` wird `createChange()` bei nicht-Preview-Aufrufen doppelt ausgeführt — einmal für die Change-Beschreibung, einmal für die Ausführung: ```java // Preview-Pfad: Change change = refactoring.createChange(monitor); // ... beschreiben und return // Execute-Pfad — createChange() NOCHMAL: Change change = refactoring.createChange(monitor); change.perform(monitor); ``` `createChange()` berechnet den vollständigen Change-Tree und ist nicht billig. ### Betroffene Methoden `extractMethod`, `moveType`, `encapsulateField`, `changeMethodSignature`, `introduceParameter` ### Fix ```java Change change = refactoring.createChange(monitor); Map<String, Object> changeDesc = RefactoringSupport.describeChange(change); result.put("changes", changeDesc); if (previewOnly) { result.put("status", "PREVIEW"); return ...; } change.perform(monitor); result.put("status", "SUCCESS"); ``` ## Gefunden von Vogel
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
ai-tools/jdt-mcp-server#61
No description provided.