jdt_rename_element: NullPointerException in RefactoringTools.renameElement (v0.2.17) #39

Closed
opened 2026-03-08 09:53:19 +00:00 by automation · 1 comment
Collaborator

Description

jdt_rename_element throws a NullPointerException in v0.2.17. This is a regression from #26 (v0.2.16), where the same operation was a silent no-op. The NPE occurs at a different location than #24 (v0.2.15).

Environment

  • JDT MCP Server version: 0.2.17
  • Workspace: Multi-module Maven project (30 projects across rdf/ + platform/)

Steps to Reproduce

jdt_rename_element:
  elementName: com.culinarygraph.rdf.vocab.VocabCg#CACHED_AT
  newName: CACHED_AT_TEST
  elementType: FIELD
  updateReferences: true
  preview: false

Field CACHED_AT is declared in com.culinarygraph.rdf.vocab.VocabCg (interface constant in culinarygraph-rdf-api), with 12 references in 3 files in platform/activitypub-mgmt-adapter.

Actual Result

{
  "exceptionType": "NullPointerException",
  "stackTrace": [
    "java.base/java.util.Objects.requireNonNull(Objects.java:220)",
    "java.base/java.util.ImmutableCollections$List12.<init>(ImmutableCollections.java:583)",
    "java.base/java.util.List.of(List.java:935)",
    "org.naturzukunft.jdt.mcp.tools.RefactoringTools.renameElement(RefactoringTools.java:158)",
    "org.naturzukunft.jdt.mcp.tools.RefactoringTools.lambda$0(RefactoringTools.java:93)"
  ],
  "message": "Error during rename: java.lang.NullPointerException",
  "status": "ERROR"
}

Expected Result

  • Declaration renamed to CACHED_AT_TEST and all 12 references updated
  • Or a meaningful error message if the rename cannot be performed

Analysis

The NPE is in List.of() at RefactoringTools.java:158, which does not accept null arguments. Likely the IField or its ICompilationUnit is not being resolved.

History

Version Behavior Issue
v0.2.15 NPE in ProcessorBasedRefactoring.createChange #24
v0.2.16 Silent no-op (SUCCESS with childCount: 0) #26
v0.2.17 NPE in RefactoringTools.renameElement this issue
## Description `jdt_rename_element` throws a `NullPointerException` in v0.2.17. This is a **regression** from #26 (v0.2.16), where the same operation was a silent no-op. The NPE occurs at a different location than #24 (v0.2.15). ## Environment - **JDT MCP Server version:** 0.2.17 - **Workspace:** Multi-module Maven project (30 projects across `rdf/` + `platform/`) ## Steps to Reproduce ``` jdt_rename_element: elementName: com.culinarygraph.rdf.vocab.VocabCg#CACHED_AT newName: CACHED_AT_TEST elementType: FIELD updateReferences: true preview: false ``` Field `CACHED_AT` is declared in `com.culinarygraph.rdf.vocab.VocabCg` (interface constant in `culinarygraph-rdf-api`), with 12 references in 3 files in `platform/activitypub-mgmt-adapter`. ## Actual Result ```json { "exceptionType": "NullPointerException", "stackTrace": [ "java.base/java.util.Objects.requireNonNull(Objects.java:220)", "java.base/java.util.ImmutableCollections$List12.<init>(ImmutableCollections.java:583)", "java.base/java.util.List.of(List.java:935)", "org.naturzukunft.jdt.mcp.tools.RefactoringTools.renameElement(RefactoringTools.java:158)", "org.naturzukunft.jdt.mcp.tools.RefactoringTools.lambda$0(RefactoringTools.java:93)" ], "message": "Error during rename: java.lang.NullPointerException", "status": "ERROR" } ``` ## Expected Result - Declaration renamed to `CACHED_AT_TEST` and all 12 references updated - Or a meaningful error message if the rename cannot be performed ## Analysis The NPE is in `List.of()` at `RefactoringTools.java:158`, which does not accept `null` arguments. Likely the `IField` or its `ICompilationUnit` is not being resolved. ## History | Version | Behavior | Issue | |---------|----------|-------| | v0.2.15 | NPE in `ProcessorBasedRefactoring.createChange` | #24 | | v0.2.16 | Silent no-op (`SUCCESS` with `childCount: 0`) | #26 | | v0.2.17 | NPE in `RefactoringTools.renameElement` | this issue |
Author
Collaborator

Retest v0.2.17-1-g76b4e6a (2026-03-08)

Setup

  • Workspace: /tmp/mcpJdtTest mit rdf/ + platform/ (30 Projekte, Java 25)
  • Feld: VocabCg#CACHED_AT (Deklaration in culinarygraph-rdf-api, 12 Referenzen in 3 Dateien in platform/activitypub-mgmt-adapter)
  • Vorher: 13 Vorkommen in 4 Dateien bestätigt per grep

Aufruf

jdt_rename_element:
  elementName: com.culinarygraph.rdf.vocab.VocabCg#CACHED_AT
  newName: CACHED_AT_TEST
  elementType: FIELD
  updateReferences: true
  preview: false

Ergebnis

{
  "status": "SUCCESS",
  "message": "Rename completed via AST-based fallback",
  "fallback": true,
  "totalReferences": 0,
  "changedFiles": [
    {"type": "declaration", "file": ".../rdf/culinarygraph-rdf-api/.../VocabCg.java"}
  ]
}

Deklaration umbenannt, Referenzen NICHT aktualisiert:

  • CACHED_AT_TEST nur in VocabCg.java (1x)
  • CACHED_AT weiterhin in 12 Stellen in platform/ — Code ist danach kaputt

Vergleich zur History

Version Verhalten Issue
v0.2.15 NPE in ProcessorBasedRefactoring.createChange #24
v0.2.16 Silent no-op (SUCCESS, childCount: 0, 0 Dateien geändert) #26
v0.2.17 NPE in RefactoringTools.renameElement #39
v0.2.17-1-g76b4e6a Kein NPE mehr, Deklaration wird umbenannt, aber 0 Referenzen aktualisiert (AST-fallback) dieses Retest

Fazit

  • NPE ist behoben
  • Deklaration wird jetzt umbenannt (Fortschritt vs. v0.2.16)
  • Cross-Modul-Referenzen werden nicht gefunden/aktualisiert
  • fallback: true → der reguläre JDT-Refactoring-Pfad greift nicht, AST-Fallback kennt nur die lokale Datei
  • Workspace nach Test per git checkout . zurückgesetzt
## Retest v0.2.17-1-g76b4e6a (2026-03-08) ### Setup - Workspace: `/tmp/mcpJdtTest` mit `rdf/` + `platform/` (30 Projekte, Java 25) - Feld: `VocabCg#CACHED_AT` (Deklaration in `culinarygraph-rdf-api`, 12 Referenzen in 3 Dateien in `platform/activitypub-mgmt-adapter`) - Vorher: 13 Vorkommen in 4 Dateien bestätigt per `grep` ### Aufruf ``` jdt_rename_element: elementName: com.culinarygraph.rdf.vocab.VocabCg#CACHED_AT newName: CACHED_AT_TEST elementType: FIELD updateReferences: true preview: false ``` ### Ergebnis ```json { "status": "SUCCESS", "message": "Rename completed via AST-based fallback", "fallback": true, "totalReferences": 0, "changedFiles": [ {"type": "declaration", "file": ".../rdf/culinarygraph-rdf-api/.../VocabCg.java"} ] } ``` **Deklaration umbenannt, Referenzen NICHT aktualisiert:** - `CACHED_AT_TEST` nur in `VocabCg.java` (1x) - `CACHED_AT` weiterhin in 12 Stellen in `platform/` — Code ist danach kaputt ### Vergleich zur History | Version | Verhalten | Issue | |---------|-----------|-------| | v0.2.15 | NPE in `ProcessorBasedRefactoring.createChange` | #24 | | v0.2.16 | Silent no-op (`SUCCESS`, `childCount: 0`, 0 Dateien geändert) | #26 | | v0.2.17 | NPE in `RefactoringTools.renameElement` | #39 | | v0.2.17-1-g76b4e6a | **Kein NPE mehr**, Deklaration wird umbenannt, aber **0 Referenzen** aktualisiert (AST-fallback) | dieses Retest | ### Fazit - NPE ist behoben ✅ - Deklaration wird jetzt umbenannt ✅ (Fortschritt vs. v0.2.16) - Cross-Modul-Referenzen werden **nicht** gefunden/aktualisiert ❌ - `fallback: true` → der reguläre JDT-Refactoring-Pfad greift nicht, AST-Fallback kennt nur die lokale Datei - Workspace nach Test per `git checkout .` zurückgesetzt
fred closed this issue 2026-03-08 10:35:56 +00:00
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#39
No description provided.