Reported issues for JavaLens
Pod holds 19 of 19 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.
Back to JavaLens.
Most discussed
Bug: get_diagnostics floods results with BUILDPATH false positives on files that compile cleanly
get_diagnostics returns hundreds of BUILDPATH-category errors on files that import from
pre-Java 9 jars (e.g. org.codehaus.jackson 1.x). The file compiles with zero errors under
mvn test-compile. The BUILDPATH failures cascade into synthetic IMPORT, TYPE, and MEMBER
errors, making the file appear completely broken when it is not.
Minimal example
pom.xml dependency (the trigger — any pre-Java 9 jar works):
<dependency>
<groupId>org.codehaus.jackson</groupId>
[Read the thread](https://github.com/pzalutski-pixel/javalens-mcp/issues/18) · 2026-05-25 · closed · external user · 32 comments
### get_diagnostics does not report any issues
### Summary
No errors reported
### Steps to reproduce
1. edit any java file, making it uncompilable: syntax error or anything else (e.g. `class` -> `clazz`)
2. call `load_project` tool to refresh indexes
3. call `get_diagnostics` tool - it returns clean state - **no errors** reported!
4. call `diagnose_and_fix` with the exact file path - **no errors** reported!
5. call `validate_syntax` with the exact file path (same as step 4) - **error confirmed**.
This is what I get:
● javalens - load
Read the thread · 2026-06-11 · closed · external user · 6 comments
javalens_analyze_method fails with PROJECT_NOT_LOADED after successful load_project call
I just installed javalens-mcp and I'm trying to call javalens_analyze_method, but I always get a PROJECT_NOT_LOADED response, even after 10 minutes. The javalens-workspaces directory is empty.
Environment
- OS: macOS 26.3 ARM64
- Java: OpenJDK Temurin 21.0.6 (LTS)
- javalens-mcp: 1.2.0 (installed via zip file)
Configuration in config.toml (Mistral Vibe)
[[mcp_servers]]
name = "javalens"
transport = "stdio"
command = "java"
args = [
"-jar",
"/Users/
[Read the thread](https://github.com/pzalutski-pixel/javalens-mcp/issues/4) · 2026-04-17 · closed · external user · 5 comments
### find_unused_code: false positives for every private field in a generic class (reads not detected)
## Summary
`find_unused_code` reports `private` fields of a **generic class** (any class with a type parameter) as unused even when they are clearly read inside that class's own methods. Non-generic classes are
unaffected. The field's *own* type is irrelevant — a plain `String` field in a generic class is mis-flagged just the same.
## Environment
- javalens-mcp version reported by `health_check`: **`2.0.0-SNAPSHOT`** (npm `latest` is `1.3.2`)
- Java: 21.0.6 (Eclipse Adoptium)
- OS:
[Read the thread](https://github.com/pzalutski-pixel/javalens-mcp/issues/17) · 2026-05-21 · closed · external user · 4 comments
### Bug: `change_method_signature` does not update constructor call sites
`change_method_signature` returns only the constructor declaration edit. All `new ClassName(…)` call sites in other files are silently dropped, leaving the project non-compilable after the edit is applied.
A secondary issue: `newSignature` in the response renders the constructor with a spurious `void` return type (e.g. `void Widget(String name)`) which is not valid Java.
## Minimal example
**Widget.java**
```java
package com.example;
public class Widget {
private final String name;
[Read the thread](https://github.com/pzalutski-pixel/javalens-mcp/issues/15) · 2026-05-10 · closed · external user · 4 comments
### Bug: `rename_symbol` returns 0 edits for a field with a custom-type
`rename_symbol` silently produces `totalEdits: 0, filesAffected: 0` when positioned on a class field whose declared type is a project-local class. The response is `success: true` with no edits applied and no error signal.
## Minimal example
These files are present in the project's `simple-maven` test fixture
(`org.javalens.core.tests/test-resources/sample-projects/simple-maven`):
**FieldHolder.java**
```java
package com.example;
public class FieldHolder {
Animal pet; /
[Read the thread](https://github.com/pzalutski-pixel/javalens-mcp/issues/13) · 2026-05-10 · closed · external user · 4 comments
### Bug: `find_implementations` omits transitive implementors
`find_implementations` returns only direct implementors of a target interface. Classes that implement the interface through a sub-interface chain are silently absent from the result, with no indication that the list is truncated.
## Minimal example
**IShape.java**
```java
package com.example;
public interface IShape { void draw(); }
IFillable.java
package com.example;
public interface IFillable extends IShape { void fill(); }
Rectangle.java
package com.example
[Read the thread](https://github.com/pzalutski-pixel/javalens-mcp/issues/11) · 2026-05-10 · closed · external user · 3 comments
### Sources under nested aggregator modules are not indexed
I recently stumbled into this MCP server which I was working on creating a java based refactoring skill for claude and found this tool to be extremely useful.
Ours is a multi level multi module maven project. I found that when using this tool against my company project, it would not index the classes that are present in the nested sub modules.
## Summary
`load_project` does not index Maven modules that are themselves multi-module
aggregator POMs — i.e. modules that have `<modules>` entries bu
[Read the thread](https://github.com/pzalutski-pixel/javalens-mcp/issues/8) · 2026-05-08 · closed · external user · 3 comments
## Most recent
### zero-based vs 1-based line numbers
### Summary
`search_symbols` returns 1-based line numbers, and `find_affected_tests` also takes 1-based lines (despite the docs saying zero-based)
### Steps to reproduce
Prompt:
use find_affected_tests for class XYZ. don't grep, use search_symbols tool to discover it.
### Expected behavior
All tools use the same line numbers.
### Actual behavior
Claude Code is confused and makes many mistakes, which is resulting in a high number of additional calls.
### Minimal reproducible exam
[Read the thread](https://github.com/pzalutski-pixel/javalens-mcp/issues/31) · 2026-06-12 · closed · external user · 2 comments
### Test rigor — boundary and error-code coverage
# Test rigor — boundary and error-code coverage
## Summary
Add systematic `maxResults` boundary coverage and per-tool error-code assertions across the tool suite.
## Problem / motivation
Two cross-cutting test dimensions are not systematically covered:
- **`maxResults` boundaries** — tools with a `maxResults` parameter are mostly tested at one value; there is no systematic 0 / 1 / total / total+1 / `MAX_VALUE` coverage, and no dedicated boundary test class exists.
- **Per-tool error codes** —
[Read the thread](https://github.com/pzalutski-pixel/javalens-mcp/issues/29) · 2026-06-06 · closed · 1 comment
### Lombok support
# Lombok support
## Summary
Attach the Lombok javaagent to the analysis runtime so JDT/ECJ surfaces Lombok-generated members.
## Problem / motivation
Lombok is ubiquitous. Without its javaagent, JDT analyzes the unprocessed source, so generated members (getters/setters/builders/constructors) are invisible — producing false "unresolved" errors and breaking rename/references/diagnostics on Lombok code. This is the same false-error class as issue #18, different cause. Raised in Discussion #6; the
[Read the thread](https://github.com/pzalutski-pixel/javalens-mcp/issues/28) · 2026-06-06 · closed · 1 comment
### Working-copy / incremental mode
# Working-copy / incremental mode
## Summary
Apply an edit in-memory and re-query without a full `load_project` reindex, using JDT working copies and `reconcile`.
## Problem / motivation
Every edit currently forces a full project reload to re-query, and stale-index correctness is pushed onto the caller. That tax sits on the agent's hottest loop (edit → verify). A working copy lets analysis run against in-memory edits without a reindex.
## Proposed approach
- Use `ICompilationUnit.becomeWorkin
[Read the thread](https://github.com/pzalutski-pixel/javalens-mcp/issues/26) · 2026-06-06 · closed · 1 comment
### New descriptor-based refactorings
# New descriptor-based refactorings
## Summary
Expose JDT-shipped refactorings not currently available — extract-superclass, pull-up/push-down member, encapsulate-field, introduce-parameter-object, move-type-to-new-file.
## Problem / motivation
The refactoring catalog covers rename / extract-* / inline / change-signature. JDT ships many more as refactoring descriptors; reusing them roughly doubles the catalog without hand-writing each transformation.
## Proposed approach
- Use JDT refactoring
[Read the thread](https://github.com/pzalutski-pixel/javalens-mcp/issues/25) · 2026-06-06 · closed · 1 comment
### Framework-semantic extractors — JPA + HTTP endpoints
# Framework-semantic extractors — JPA + HTTP endpoints
## Summary
Add extractors for JPA entities/relationships and HTTP endpoint mappings, alongside the existing Spring DI extractor.
## Problem / motivation
`get_di_registrations` surfaces Spring DI (`@Component`/`@Bean`/`@Autowired`/`@Inject`), but two other high-value framework structures are invisible: the JPA data model (entities, fields, relationships) and the HTTP surface (`@RequestMapping`/JAX-RS route → handler). An agent must otherwis
[Read the thread](https://github.com/pzalutski-pixel/javalens-mcp/issues/24) · 2026-06-06 · closed · 1 comment
### Interprocedural data / control flow (opt-in)
# Interprocedural data / control flow (opt-in)
## Summary
Extend data/control-flow analysis across method boundaries — sound nullability and simple taint (e.g. does a request parameter reach a SQL string).
## Problem / motivation
`analyze_data_flow` and `analyze_control_flow` are intra-method only. The genuinely "compiler-accurate" findings — cross-method null propagation, taint from source to sink — require following calls between methods. This is also what would make `find_possible_bugs` mor
[Read the thread](https://github.com/pzalutski-pixel/javalens-mcp/issues/23) · 2026-06-06 · closed · 1 comment
### Compound diagnose→fix (read-only)
# Compound diagnose→fix (read-only)
## Summary
A single tool that runs diagnostics, computes the available quick-fix edits, and returns the combined edits in one response — without applying them.
## Problem / motivation
The diagnose→fix loop is the tightest loop an agent runs, but today it takes three calls: `get_diagnostics`, then `get_quick_fixes`, then `apply_quick_fix`. A compound read-only aggregator collapses that to one round-trip.
## Proposed approach
- New compound tool: for a file (
[Read the thread](https://github.com/pzalutski-pixel/javalens-mcp/issues/22) · 2026-06-06 · closed · 1 comment
### `find_affected_tests(symbol)`
# `find_affected_tests(symbol)`
## Summary
Given a symbol, return the test methods that exercise it by walking callers transitively to JUnit/TestNG test methods.
## Problem / motivation
After changing a symbol, an agent needs to know which tests to run. Today it can discover tests (`find_tests`) and walk callers (call hierarchy) separately, but nothing connects the two into "what tests cover X."
## Proposed approach
- New tool: from the target symbol, walk incoming calls transitively; collect
[Read the thread](https://github.com/pzalutski-pixel/javalens-mcp/issues/21) · 2026-06-06 · closed · 1 comment
### Whole-program reachability graph
# Whole-program reachability graph
## Summary
Aggregate the per-method call hierarchy and type-dependency data into one queryable project-wide graph, enabling reachability and true dead-code questions.
## Problem / motivation
Today's graph tools answer local questions only: callers/callees of one method, dependencies of one package. There is no project-wide reachability view, so questions like "is this public method reachable from any entry point or test?" or "what is the full blast radius of
[Read the thread](https://github.com/pzalutski-pixel/javalens-mcp/issues/20) · 2026-06-06 · closed · 1 comment
### Adopt JDT `ASTRewrite` / `ImportRewrite` for refactoring edit generation
# Adopt JDT `ASTRewrite` / `ImportRewrite` for refactoring edit generation
## Summary
Refactoring tools generate edits by building replacement text and computing source offsets. Move edit generation onto JDT's `ASTRewrite` and `ImportRewrite` so edits are produced structurally from the AST.
## Problem / motivation
Text-based edit generation must enumerate every syntactic form it may encounter — the various call-site node types, type-parameter clauses, import placement and ordering. `ASTRewrite
[Read the thread](https://github.com/pzalutski-pixel/javalens-mcp/issues/19) · 2026-06-06 · closed · 1 comment
The remaining reports are on [the project's issue tracker](https://github.com/pzalutski-pixel/javalens-mcp/issues).