Ergonomie-Befunde aus dem arknet-Test (Paging, Scope, Signaturen, Zeilennummern, Preview, Import-Order) #86

Open
opened 2026-09-07 16:23:39 +00:00 by hauschel.fred · 0 comments
Collaborator

Sammel-Issue aus dem Test gegen arknet (27 Module, 1682 Java-Dateien, Java 25) am 2026-09-07. Keine Blocker, aber jeder Punkt macht ein Tool im Alltag unbrauchbar oder unhandlich. Bei Bedarf in Einzel-Issues aufteilen.

1. Kein Limit/Paging bei großen Antworten

  • jdt_find_references (CLASS) auf de.hauschel.arknet.kernel.ProjectId: 1900 Treffer, 422k Zeichen.
  • jdt_get_compilation_errors auf arknet-mcp: 267 Warnungen, 73k Zeichen.

Beides sprengt das Tool-Result-Limit des MCP-Clients.

Vorschlag: limit/offset mit Default (z.B. 200) plus totalCount und truncated: true; alternativ Gruppierung je Datei. Für get_compilation_errors zusätzlich severity-Filter (Default ERROR-only).

2. jdt_find_type liefert JDK-Interna und Library-Typen

*Repository → 88 Treffer, darunter jdk.jfr.internal, sun.reflect.generics, com.sun.jmx, rdf4j, Spring. Ursache: NavigationTools nutzt SearchEngine.createWorkspaceScope() (inkl. JRE + Libraries).

Vorschlag: Parameter sourceOnly (Default true) → createJavaSearchScope(projects, IJavaSearchScope.SOURCES); Treffer mit origin: SOURCE|LIBRARY|JRE kennzeichnen.

3. Signaturen in JDT-Binärnotation

jdt_get_method_signature / jdt_parse_java_file liefern "QAdrRepository;" und "(QProjectId;QAdrCode;)V". CodeAnalysisTools gibt IMethod.getSignature() roh aus, CodeGenerationTools nutzt bereits Signature.toString(...) — inkonsistent.

Vorschlag: überall Signature.toString() / getSimpleName(); Rohform höchstens als rawSignature.

4. find_references / find_callers ohne Zeilennummer, Lambda-Aufrufer anonym

Treffer enthalten nur offset/length. Aufrufer in Lambdas erscheinen als AdrServiceTest$1#execute statt der umgebenden Testmethode.

Vorschlag: line via Document.getLineOfOffset bzw. CompilationUnit.getLineNumber ergänzen, dazu ein snippet; bei anonymen/Lambda-Typen zum umgebenden IMethod hochlaufen und als enclosingMethod ausgeben.

5. jdt_rename_element preview liefert Outline statt Diff; falsches "name already exists"

  • preview=true gibt via RefactoringSupport.describeChange() die Datei-Outline zurück. Vorschlag: TextEditBasedChange.getPreviewContent() gegen getCurrentContent() diffen, Unified-Diff ausgeben.
  • Rename AdrService#skippedCountcountSkipped wird mit "This name already exists" abgelehnt, obwohl countSkipped nirgends im Repo vorkommt. Die Methode implementiert das In-Port-Interface CountSkippedAdrs. Möglicher Zusammenhang mit #29 (Virtual vs Non-Virtual Processor). Fixture nötig: Interface-Methode + Implementierung, Rename an der Implementierung.

6. jdt_organize_imports sortiert nach Eclipse-Default, nicht nach Spotless

Eclipse-Reihenfolge (DeprecateAdr vor DescribeAdrDisplayFallback) weicht von der Spotless-Sortierung ab → Diff-Rauschen bei jedem Aufruf.

Vorschlag: Import-Order konfigurierbar (org.eclipse.jdt.ui.importorder, Headless-Fallback für ProjectScope beachten); optional Spotless-Config aus dem pom.xml übernehmen; mindestens dokumentieren, dass danach ein Formatter-Lauf nötig ist.

Funktioniert (zur Einordnung)

Import aller 27 Module mit Java 25, get_compilation_errors (deckt sich mit ECJ), find_type, find_implementations, get_type_hierarchy, find_callers, list_tests, find_unused_code, find_dead_code, organize_imports (inhaltlich korrekt), maven_build, maven_update_project, refresh_project, rename_element preview auf privater Methode.

Sammel-Issue aus dem Test gegen arknet (27 Module, 1682 Java-Dateien, Java 25) am 2026-09-07. Keine Blocker, aber jeder Punkt macht ein Tool im Alltag unbrauchbar oder unhandlich. Bei Bedarf in Einzel-Issues aufteilen. ## 1. Kein Limit/Paging bei großen Antworten - `jdt_find_references` (CLASS) auf `de.hauschel.arknet.kernel.ProjectId`: 1900 Treffer, 422k Zeichen. - `jdt_get_compilation_errors` auf `arknet-mcp`: 267 Warnungen, 73k Zeichen. Beides sprengt das Tool-Result-Limit des MCP-Clients. Vorschlag: `limit`/`offset` mit Default (z.B. 200) plus `totalCount` und `truncated: true`; alternativ Gruppierung je Datei. Für `get_compilation_errors` zusätzlich `severity`-Filter (Default ERROR-only). ## 2. `jdt_find_type` liefert JDK-Interna und Library-Typen `*Repository` → 88 Treffer, darunter `jdk.jfr.internal`, `sun.reflect.generics`, `com.sun.jmx`, rdf4j, Spring. Ursache: `NavigationTools` nutzt `SearchEngine.createWorkspaceScope()` (inkl. JRE + Libraries). Vorschlag: Parameter `sourceOnly` (Default `true`) → `createJavaSearchScope(projects, IJavaSearchScope.SOURCES)`; Treffer mit `origin: SOURCE|LIBRARY|JRE` kennzeichnen. ## 3. Signaturen in JDT-Binärnotation `jdt_get_method_signature` / `jdt_parse_java_file` liefern `"QAdrRepository;"` und `"(QProjectId;QAdrCode;)V"`. `CodeAnalysisTools` gibt `IMethod.getSignature()` roh aus, `CodeGenerationTools` nutzt bereits `Signature.toString(...)` — inkonsistent. Vorschlag: überall `Signature.toString()` / `getSimpleName()`; Rohform höchstens als `rawSignature`. ## 4. `find_references` / `find_callers` ohne Zeilennummer, Lambda-Aufrufer anonym Treffer enthalten nur `offset`/`length`. Aufrufer in Lambdas erscheinen als `AdrServiceTest$1#execute` statt der umgebenden Testmethode. Vorschlag: `line` via `Document.getLineOfOffset` bzw. `CompilationUnit.getLineNumber` ergänzen, dazu ein `snippet`; bei anonymen/Lambda-Typen zum umgebenden `IMethod` hochlaufen und als `enclosingMethod` ausgeben. ## 5. `jdt_rename_element` preview liefert Outline statt Diff; falsches "name already exists" - `preview=true` gibt via `RefactoringSupport.describeChange()` die Datei-Outline zurück. Vorschlag: `TextEditBasedChange.getPreviewContent()` gegen `getCurrentContent()` diffen, Unified-Diff ausgeben. - Rename `AdrService#skippedCount` → `countSkipped` wird mit "This name already exists" abgelehnt, obwohl `countSkipped` nirgends im Repo vorkommt. Die Methode implementiert das In-Port-Interface `CountSkippedAdrs`. Möglicher Zusammenhang mit #29 (Virtual vs Non-Virtual Processor). Fixture nötig: Interface-Methode + Implementierung, Rename an der Implementierung. ## 6. `jdt_organize_imports` sortiert nach Eclipse-Default, nicht nach Spotless Eclipse-Reihenfolge (`DeprecateAdr` vor `DescribeAdrDisplayFallback`) weicht von der Spotless-Sortierung ab → Diff-Rauschen bei jedem Aufruf. Vorschlag: Import-Order konfigurierbar (`org.eclipse.jdt.ui.importorder`, Headless-Fallback für `ProjectScope` beachten); optional Spotless-Config aus dem `pom.xml` übernehmen; mindestens dokumentieren, dass danach ein Formatter-Lauf nötig ist. ## Funktioniert (zur Einordnung) Import aller 27 Module mit Java 25, `get_compilation_errors` (deckt sich mit ECJ), `find_type`, `find_implementations`, `get_type_hierarchy`, `find_callers`, `list_tests`, `find_unused_code`, `find_dead_code`, `organize_imports` (inhaltlich korrekt), `maven_build`, `maven_update_project`, `refresh_project`, `rename_element` preview auf privater Methode.
Commenting is not possible because the repository is archived.
No project
No assignees
1 participant
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#86
No description provided.