findElement gibt erstes gefundenes Element zurück — Multi-Modul-Problem #33

Closed
opened 2026-03-08 09:26:15 +00:00 by automation · 2 comments
Collaborator

Problem

findElement() iteriert über alle Projekte und gibt das erste gefundene Element zurück. Bei 29 Modulen gibt es keine Garantie, dass das zurückgegebene Element aus dem Projekt kommt, das die besten Classpath-Dependencies für die Referenz-Suche hat.

Betroffener Code

RefactoringTools.java Zeilen 1731-1786

Auswirkung

  • Rename-Scope könnte eingeschränkt sein wenn das "falsche" Projekt gewählt wird
  • Bei Interface-Konstanten die in einem Modul deklariert und in vielen anderen referenziert werden, ist das Projekt der Deklaration relevant

Vorgeschlagener Fix

Bevorzuge das Projekt, das die meisten abhängigen Projekte hat, oder nutze den Workspace-weiten Scope für die Referenz-Suche.

Kontext

Identifiziert bei der Analyse von #26 durch Agent jdt-gamma (Erich Gamma).

## Problem `findElement()` iteriert über alle Projekte und gibt das **erste** gefundene Element zurück. Bei 29 Modulen gibt es keine Garantie, dass das zurückgegebene Element aus dem Projekt kommt, das die besten Classpath-Dependencies für die Referenz-Suche hat. ## Betroffener Code `RefactoringTools.java` Zeilen 1731-1786 ## Auswirkung - Rename-Scope könnte eingeschränkt sein wenn das "falsche" Projekt gewählt wird - Bei Interface-Konstanten die in einem Modul deklariert und in vielen anderen referenziert werden, ist das Projekt der Deklaration relevant ## Vorgeschlagener Fix Bevorzuge das Projekt, das die meisten abhängigen Projekte hat, oder nutze den Workspace-weiten Scope für die Referenz-Suche. ## Kontext Identifiziert bei der Analyse von #26 durch Agent jdt-gamma (Erich Gamma).
Author
Collaborator

Fix implementiert in fix/43-refactoring-errors (Commit 3a988fb)

Neue Methode findTypeInSourceProject() bevorzugt non-binary IType mit getResource() != null — stellt sicher, dass Refactorings auf dem Quell-Projekt operieren, nicht auf einem zufälligen Classpath-Match.

Ersetzt "first project wins" Iteration an 5 Stellen:

  • findElement()
  • moveType()
  • extractInterface()
  • changeMethodSignature()
  • encapsulateField()

Wartet auf Test-Validierung.

**Fix implementiert** in `fix/43-refactoring-errors` (Commit 3a988fb) Neue Methode `findTypeInSourceProject()` bevorzugt non-binary `IType` mit `getResource() != null` — stellt sicher, dass Refactorings auf dem Quell-Projekt operieren, nicht auf einem zufälligen Classpath-Match. Ersetzt "first project wins" Iteration an **5 Stellen**: - `findElement()` - `moveType()` - `extractInterface()` - `changeMethodSignature()` - `encapsulateField()` Wartet auf Test-Validierung.
Author
Collaborator

findTypeInSourceProject() bevorzugt jetzt non-binary IType mit getResource() != null statt "first project wins". Wird an allen relevanten Stellen verwendet (findElement, moveType, extractInterface, changeMethodSignature, encapsulateField). Fix in Branch fix/43-refactoring-errors, Commit 3a988fb.

`findTypeInSourceProject()` bevorzugt jetzt non-binary IType mit `getResource() != null` statt "first project wins". Wird an allen relevanten Stellen verwendet (findElement, moveType, extractInterface, changeMethodSignature, encapsulateField). Fix in Branch `fix/43-refactoring-errors`, Commit 3a988fb.
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#33
No description provided.