redhat-developer / redhat-developer/vscode-java

JDT LS fails to resolve lombok.config in single-folder Maven projects

Aperta
#4,461 1 commento 1 reazione 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

bug
Lingua principale
TypeScript
Stelle
2.3k
Fork
546
Merge medio
20h 1m
PR unite (30g)
11

Descrizione

Bug Report Issue: lombok.config not loaded in single-folder Maven project

Describe the bug

When opening a Maven multi-module project via VSCode's "Open Folder" (single-folder mode), the lombok.config file at the project root is completely ignored. Lombok annotations work (e.g., @Data, @Getter), but all settings in lombok.config (such as lombok.accessors.chain=true, lombok.tostring.callsuper=CALL) are not applied. The editor shows errors where it shouldn't, e.g., setter methods not returning this for chaining, or toString() not calling super.toString().

The project compiles fine from command line (mvn clean compile passes without errors), which confirms the lombok.config file itself is correct and Maven picks it up properly. The issue is exclusively within the JDT Language Server's handling of lombok.config in VSCode's single-folder mode.

Notably, opening the same project via .code-workspace file (workspace mode) works correctly — lombok.config is loaded and all settings take effect.

To Reproduce

  1. Create or open a Maven multi-module project with a lombok.config file at the project root directory
  2. Open the project via VSCode's "Open Folder" (single-folder mode, NOT workspace mode)
  3. Configure lombok.config with non-default settings, e.g.:
    lombok.accessors.chain=true
    lombok.tostring.callsuper=CALL
    lombok.equalsandhashcode.callsuper=CALL
    
  4. Create a class with @Data annotation and verify:
    • Setters should return this (chain = true) but they return void (default behavior)
    • toString() should call super.toString() but it doesn't
  5. Run mvn clean compile from terminal — this works correctly, confirming the config file is valid

Expected behavior

lombok.config at the project root should be discovered and applied by JDT LS, even in single-folder mode. All configured settings (chain, callsuper, etc.) should take effect in the editor's language features.

Environment

Item Value
Operating System Windows 11 Home Chinese Edition (Version 2009)
JDK Oracle GraalVM 21.0.10+8.1 (build 21.0.10+8-LTS-jvmci-23.1-b84)
Visual Studio Code 1.128.0 (x64)
Java Extension (redhat.java) 1.55.0
Java Extension Pack 0.31.1
Lombok version 1.18.46
Project type Maven multi-module (ruoyi-vue-pro)

Additional Information

What works
  • Opening the project via .code-workspace file (workspace mode): lombok.config loads correctly
  • mvn clean compile from command line: compiles correctly with all lombok.config settings applied
What does NOT work (all attempted and failed)
  1. Lombok version upgrade: Using 1.18.46, well above the 1.18.28 fix for Eclipse 4.27 compatibility (issue #2887)
  2. Manual -javaagent injection: Setting java.jdt.ls.vmargs to -javaagent:<path>/lombok-1.18.46.jar in .vscode/settings.json — no effect
  3. Disabling built-in Lombok support: Setting java.jdt.ls.lombokSupport.enabled: false + manual javaagent — no effect
  4. Copying lombok.config to src/main/java/: No effect
  5. Removing config.stopBubbling: No effect
  6. Java: Clean Java Language Server Workspace after each change: No effect
Suspected root cause

Based on Lombok source code analysis (FileSystemSourceCache.forUri() and EclipseAST.getAbsoluteFileLocation()), the issue likely lies in how JDT LS resolves the source file URI in single-folder mode. In workspace mode, the .code-workspace file provides a clear project root context, allowing JDT LS to pass correct absolute file paths to Lombok. In single-folder mode, the Invisible Project mechanism may resolve URIs differently, causing Lombok's lombok.config discovery (which walks up from the source file's parent directory) to never reach the actual project root directory where lombok.config resides.

Related issues
  • #2887lombok.config ignored in 1.14.0 (fixed in Lombok 1.18.28 for Eclipse 4.27 compatibility)
  • projectlombok/lombok#3332 — The upstream Lombok fix for Eclipse 4.27
lombok.config content
lombok.tostring.callsuper=CALL
lombok.equalsandhashcode.callsuper=CALL
lombok.accessors.chain=true

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia tracciando Lombok's FileSystemSourceCache.forUri() ed EclipseAST.getAbsoluteFileLocation() attraverso la gestione di single-folder e Invisible Project di JDT LS. Confronta gli URI dei file sorgente e la risoluzione della radice del progetto con workspace mode; l'issue è completata quando la root lombok.config viene individuata in single-folder mode e le sue impostazioni influenzano le funzionalità linguistiche dell'editor.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
java, vscode
Ambito
devtools, tooling
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Tranquilla
Chiarezza
Abbastanza chiara
Idoneità per principianti
48/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.