Repository navigation
Lombok causes com.google.errorprone.SourcePositionException in UnusedVariable #5964
Copy link
Copy link
Open
Labels
Description
Compilation fails when lombok annotation @Slf4j is placed on a class, but the logger is not used, causing build to fail.
Example:
@Slf4j
class A {
public void doSomething() {
// logic without using log generated by @Slf4j
}
}
Stacktrace:
error-prone version: 2.50.0
BugPattern: UnusedVariable
Stack Trace:
com.google.errorprone.SourcePositionException: invalid source position: [759, 709)
at com.google.errorprone.VisitorState.getSourceCode(VisitorState.java:485)
at com.google.errorprone.VisitorState.getOffsetTokens(VisitorState.java:558)
at com.google.errorprone.fixes.SuggestedFixes.replaceIncludingComments(SuggestedFixes.java:1790)
at com.google.errorprone.bugpatterns.UnusedVariable.buildUnusedVarFixes(UnusedVariable.java:482)
at com.google.errorprone.bugpatterns.UnusedVariable.matchCompilationUnit(UnusedVariable.java:265)
at com.google.errorprone.scanner.ErrorProneScanner.processMatchers(ErrorProneScanner.java:541)
at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:658)
at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:180)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCCompilationUnit.accept(JCTree.java:627)
at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:66)
at com.google.errorprone.scanner.Scanner.scan(Scanner.java:58)
at com.google.errorprone.scanner.ErrorProneScannerTransformer.apply(ErrorProneScannerTransformer.java:43)
at com.google.errorprone.ErrorProneAnalyzer.finished(ErrorProneAnalyzer.java:231)
at jdk.compiler/com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:133)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1423)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1370)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:955)
at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:104)
at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.invocationHelper(JavacTaskImpl.java:152)
at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:100)
at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:94)
at org.jetbrains.jps.javac.JavacMain.compile(JavacMain.java:310)
at org.jetbrains.jps.javac.JavacMain.compile(JavacMain.java:80)
at org.jetbrains.jps.incremental.java.JavaBuilder.lambda$compileJava$1(JavaBuilder.java:589)
at org.jetbrains.jps.incremental.java.JavaBuilder.invokeJavac(JavaBuilder.java:651)
at org.jetbrains.jps.incremental.java.JavaBuilder.compileJava(JavaBuilder.java:587)
at org.jetbrains.jps.incremental.java.JavaBuilder.compile(JavaBuilder.java:429)
at org.jetbrains.jps.incremental.java.JavaBuilder.doBuild(JavaBuilder.java:354)
at org.jetbrains.jps.incremental.java.JavaBuilder.build(JavaBuilder.java:308)
at org.jetbrains.jps.incremental.IncProjectBuilder.runModuleLevelBuilders(IncProjectBuilder.java:1534)
at org.jetbrains.jps.incremental.IncProjectBuilder.runBuildersForChunk(IncProjectBuilder.java:659)
at org.jetbrains.jps.incremental.IncProjectBuilder.buildTargetsChunk(IncProjectBuilder.java:1778)
at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunkIfAffected(IncProjectBuilder.java:1336)
at org.jetbrains.jps.incremental.IncProjectBuilder$BuildParallelizer$1.run(IncProjectBuilder.java:1298)
at com.intellij.util.concurrency.BoundedTaskExecutor.doRun(BoundedTaskExecutor.java:271)
at com.intellij.util.concurrency.BoundedTaskExecutor.access$200(BoundedTaskExecutor.java:44)
at com.intellij.util.concurrency.BoundedTaskExecutor$1.executeFirstTaskAndHelpQueue(BoundedTaskExecutor.java:249)
at com.intellij.util.ConcurrencyUtil.runUnderThreadName(ConcurrencyUtil.java:265)
at com.intellij.util.concurrency.BoundedTaskExecutor$1.run(BoundedTaskExecutor.java:234)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614)
at java.base/java.lang.Thread.run(Thread.java:1474)
Reactions are currently unavailable
Activity
adityaanikam commentedon Aug 10, 2026
This lines up with why
cushontagged it lombok already.UnusedVariable.java's field branch callsSuggestedFixes.replaceIncludingCommentson Lombok's synthesizedlogfield with no check for generated source positions first, and other checks in this codebase,UnnecessarilyFullyQualified.javafor one, do guard against exactly that. The stack trace matches current source line for line. I'd like to add that guard here too.fix(UnusedVariable): skip synthetic fields with no explicit source po…