AI Slop Code RIsk Monitor

projectlombok/lombok

Very spicy additions to the Java programming language.

19.5 Elevated pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for projectlombok/lombok, a Java project with 13,480 GitHub stars. SynthScan examined 142,997 lines of code across 2073 source files, recording 257 pattern matches distributed across 8 syntactic categories. The legacy adjusted pattern signal is 19.5 (Elevated pattern signal); it is not an authorship estimate.

Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.

19.5
Adjusted Signal
19.5
Raw Pattern Score
100%
Time Factor
2026-10-01
Last Push
13.5K
Stars
Java
Language
143.0K
Lines of Code
2.1K
Files
257
Pattern Hits
2026-10-12
Scan Date
0.11
HC Hit Rate

Risk Review · v3

Use each vector to guide manual verification of the underlying findings.

Cognitive Ownership Risk 1.8/100 · LOW

Can maintainers explain intent, assumptions, and trade-offs? 38 finding(s).

Hallucinated Dependency & Supply Chain Risk 61.5/100 · HIGH

Are imports declared and package/API names verified? 219 finding(s).

Agent Over-Engineering Ratio 0.0/100 · LOW

Are wrappers, guards, and repeated structures necessary? 1 finding(s).

PR Review Velocity Impact 54.3/100 · HIGH

Which changes need focused human review? 257 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.

Severity Breakdown

Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.

CRITICAL 219HIGH 0MEDIUM 7LOW 31

Directory Score Breakdown

This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.

Pattern Findings

The scanner identified 257 distinct pattern matches across 8 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.

Hallucination Indicators219 hits · 2730 pts
SeverityFileLineSnippetContext
CRITICALtest/core/src/lombok/RunTestsViaEcj.java240 org.eclipse.jdt.internal.core.CompilationUnit ccu = new org.eclipse.jdt.internal.core.CompilationUnit(null, null, nulCODE
CRITICAL…ource/after-delombok/CheckerFrameworkSuperBuilder.java91 public abstract C build(CheckerFrameworkSuperBuilder.Parent.@org.checkerframework.checker.calledmethods.qual.CalledMeCODE
CRITICAL…ource/after-delombok/CheckerFrameworkSuperBuilder.java119 public CheckerFrameworkSuperBuilder.Parent build(CheckerFrameworkSuperBuilder.Parent.@org.checkerframework.checker.caCODE
CRITICAL…ource/after-delombok/CheckerFrameworkSuperBuilder.java199 public abstract C build(CheckerFrameworkSuperBuilder.ZChild.@org.checkerframework.checker.calledmethods.qual.CalledMeCODE
CRITICAL…ource/after-delombok/CheckerFrameworkSuperBuilder.java227 public CheckerFrameworkSuperBuilder.ZChild build(CheckerFrameworkSuperBuilder.ZChild.@org.checkerframework.checker.caCODE
CRITICAL…sform/resource/after-delombok/JacksonizedOnRecord.java8@com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = JacksonizedOnRecord.JacksonizedOnRecordBuilder.clasCODE
CRITICAL…sform/resource/after-delombok/JacksonizedOnRecord.java14 @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(withPrefix = "", buildMethodName = "build")CODE
CRITICAL…/resource/after-delombok/BuilderSingularGuavaMaps.java35 if (this.battleaxes == null) this.battleaxes = com.google.common.collect.ImmutableMap.builder();CODE
CRITICAL…/resource/after-delombok/BuilderSingularGuavaMaps.java45 if (this.battleaxes == null) this.battleaxes = com.google.common.collect.ImmutableMap.builder();CODE
CRITICAL…/resource/after-delombok/BuilderSingularGuavaMaps.java58 if (this.vertices == null) this.vertices = com.google.common.collect.ImmutableSortedMap.naturalOrder();CODE
CRITICAL…/resource/after-delombok/BuilderSingularGuavaMaps.java68 if (this.vertices == null) this.vertices = com.google.common.collect.ImmutableSortedMap.naturalOrder();CODE
CRITICAL…/resource/after-delombok/BuilderSingularGuavaMaps.java81 if (this.rawMap == null) this.rawMap = com.google.common.collect.ImmutableBiMap.builder();CODE
CRITICAL…/resource/after-delombok/BuilderSingularGuavaMaps.java91 if (this.rawMap == null) this.rawMap = com.google.common.collect.ImmutableBiMap.builder();CODE
CRITICAL…m/resource/after-delombok/CheckerFrameworkBuilder.java100 public CheckerFrameworkBuilder build(CheckerFrameworkBuilder.@org.checkerframework.checker.calledmethods.qual.CalledMeCODE
CRITICAL…orm/resource/after-delombok/BuilderWithDeprecated.java99 if (this.numbers == null) this.numbers = com.google.common.collect.ImmutableList.builder();CODE
CRITICAL…orm/resource/after-delombok/BuilderWithDeprecated.java110 if (this.numbers == null) this.numbers = com.google.common.collect.ImmutableList.builder();CODE
CRITICAL⚡…t/transform/resource/after-delombok/LoggerCommons.java4 private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LoggerCommons.clCODE
CRITICAL⚡…t/transform/resource/after-delombok/LoggerCommons.java9 private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LoggerCommonsWitCODE
CRITICAL⚡…t/transform/resource/after-delombok/LoggerCommons.java14 private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog("DifferentName")CODE
CRITICAL⚡…t/transform/resource/after-delombok/LoggerCommons.java19 private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LoggerCommonsWitCODE
CRITICAL…sform/resource/after-delombok/LoggerFloggerRecord.java6 private static final com.google.common.flogger.FluentLogger log = com.google.common.flogger.FluentLogger.forEnclosingCCODE
CRITICAL⚡…ransform/resource/after-delombok/NonNullWithGuava.java7 com.google.common.base.Preconditions.checkNotNull(arg, "arg is marked non-null but is null");CODE
CRITICAL⚡…ransform/resource/after-delombok/NonNullWithGuava.java17 com.google.common.base.Preconditions.checkNotNull(arg);CODE
CRITICAL⚡…ransform/resource/after-delombok/NonNullWithGuava.java20 com.google.common.base.Preconditions.checkNotNull(arg, "arg is marked non-null but is null");CODE
CRITICAL⚡…ransform/resource/after-delombok/NonNullWithGuava.java24 com.google.common.base.Preconditions.checkNotNull(arg, "arg is marked non-null but is null");CODE
CRITICAL⚡…ransform/resource/after-delombok/NonNullWithGuava.java25 com.google.common.base.Preconditions.checkNotNull(test);CODE
CRITICAL⚡…ransform/resource/after-delombok/NonNullWithGuava.java28 com.google.common.base.Preconditions.checkNotNull(arg, "arg is marked non-null but is null");CODE
CRITICAL⚡…ransform/resource/after-delombok/NonNullWithGuava.java34 com.google.common.base.Preconditions.checkNotNull(test, "test is marked non-null but is null");CODE
CRITICAL…after-delombok/SuperBuilderSingularToBuilderGuava.java45 if (this.cards == null) this.cards = com.google.common.collect.ImmutableList.builder();CODE
CRITICAL…after-delombok/SuperBuilderSingularToBuilderGuava.java55 if (this.cards == null) this.cards = com.google.common.collect.ImmutableList.builder();CODE
CRITICAL…after-delombok/SuperBuilderSingularToBuilderGuava.java68 if (this.frogs == null) this.frogs = com.google.common.collect.ImmutableList.builder();CODE
CRITICAL…after-delombok/SuperBuilderSingularToBuilderGuava.java78 if (this.frogs == null) this.frogs = com.google.common.collect.ImmutableList.builder();CODE
CRITICAL…after-delombok/SuperBuilderSingularToBuilderGuava.java91 if (this.rawSet == null) this.rawSet = com.google.common.collect.ImmutableSet.builder();CODE
CRITICAL…after-delombok/SuperBuilderSingularToBuilderGuava.java101 if (this.rawSet == null) this.rawSet = com.google.common.collect.ImmutableSet.builder();CODE
CRITICAL…after-delombok/SuperBuilderSingularToBuilderGuava.java114 if (this.passes == null) this.passes = com.google.common.collect.ImmutableSortedSet.naturalOrder();CODE
CRITICAL…after-delombok/SuperBuilderSingularToBuilderGuava.java124 if (this.passes == null) this.passes = com.google.common.collect.ImmutableSortedSet.naturalOrder();CODE
CRITICAL…after-delombok/SuperBuilderSingularToBuilderGuava.java137 if (this.users == null) this.users = com.google.common.collect.ImmutableTable.builder();CODE
CRITICAL…after-delombok/SuperBuilderSingularToBuilderGuava.java147 if (this.users == null) this.users = com.google.common.collect.ImmutableTable.builder();CODE
CRITICAL⚡…t/transform/resource/after-delombok/LoggerFlogger.java4 private static final com.google.common.flogger.FluentLogger log = com.google.common.flogger.FluentLogger.forEnclosingClCODE
CRITICAL⚡…t/transform/resource/after-delombok/LoggerFlogger.java9 private static final com.google.common.flogger.FluentLogger log = com.google.common.flogger.FluentLogger.forEnclosingClCODE
CRITICAL⚡…t/transform/resource/after-delombok/LoggerFlogger.java15 private static final com.google.common.flogger.FluentLogger log = com.google.common.flogger.FluentLogger.forEnclosingCCODE
CRITICAL⚡…t/transform/resource/after-delombok/LoggerFlogger.java22 private static final com.google.common.flogger.FluentLogger log = com.google.common.flogger.FluentLogger.forEnclosingClCODE
CRITICAL⚡…t/transform/resource/after-delombok/LoggerFlogger.java29 private static final com.google.common.flogger.FluentLogger log = com.google.common.flogger.FluentLogger.forEnclosingCCODE
CRITICAL…rce/after-delombok/BuilderSingularRedirectToGuava.java34 if (this.dangerMice == null) this.dangerMice = com.google.common.collect.ImmutableSet.builder();CODE
CRITICAL…rce/after-delombok/BuilderSingularRedirectToGuava.java44 if (this.dangerMice == null) this.dangerMice = com.google.common.collect.ImmutableSet.builder();CODE
CRITICAL…rce/after-delombok/BuilderSingularRedirectToGuava.java57 if (this.things == null) this.things = com.google.common.collect.ImmutableSortedMap.naturalOrder();CODE
CRITICAL…rce/after-delombok/BuilderSingularRedirectToGuava.java67 if (this.things == null) this.things = com.google.common.collect.ImmutableSortedMap.naturalOrder();CODE
CRITICAL…rce/after-delombok/BuilderSingularRedirectToGuava.java80 if (this.doohickeys == null) this.doohickeys = com.google.common.collect.ImmutableList.builder();CODE
CRITICAL…rce/after-delombok/BuilderSingularRedirectToGuava.java90 if (this.doohickeys == null) this.doohickeys = com.google.common.collect.ImmutableList.builder();CODE
CRITICAL…esource/after-delombok/JacksonizedBuilderSingular.java8@com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = JacksonizedBuilderSingular.JacksonizedBuilderSingulCODE
CRITICAL…esource/after-delombok/JacksonizedBuilderSingular.java29 @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(withPrefix = "", buildMethodName = "build")CODE
CRITICAL…esource/after-delombok/JacksonizedBuilderSingular.java116 if (this.guavaAny == null) this.guavaAny = com.google.common.collect.ImmutableMap.builder();CODE
CRITICAL…esource/after-delombok/JacksonizedBuilderSingular.java126 if (this.guavaAny == null) this.guavaAny = com.google.common.collect.ImmutableMap.builder();CODE
CRITICAL…esource/after-delombok/JacksonizedBuilderSingular.java139 if (this.guavaValues == null) this.guavaValues = com.google.common.collect.ImmutableList.builder();CODE
CRITICAL…esource/after-delombok/JacksonizedBuilderSingular.java150 if (this.guavaValues == null) this.guavaValues = com.google.common.collect.ImmutableList.builder();CODE
CRITICAL…resource/after-delombok/JacksonizedNoConfigChoice.java1@com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = JacksonizedNoConfigChoice.JacksonizedNoConfigChoiceCODE
CRITICAL…resource/after-delombok/JacksonizedNoConfigChoice.java11 @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(withPrefix = "", buildMethodName = "build")CODE
CRITICAL…urce/after-delombok/JacksonizedSuperBuilderSimple.java4 @com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = JacksonizedSuperBuilderSimple.Parent.ParentBuilderCODE
CRITICAL…urce/after-delombok/JacksonizedSuperBuilderSimple.java39 @com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder(withPrefix = "", buildMethodName = "build")CODE
CRITICAL…resource/after-delombok/JacksonizedBuilderComplex.java4@com.fasterxml.jackson.databind.annotation.JsonDeserialize(builder = JacksonizedBuilderComplex.TestVoidName.class)CODE
159 more matches not shown…
Over-Commented Block20 hits · 20 pts
SeverityFileLineSnippetContext
LOWtest/configuration/resource/configurationRoot/out.txt61lombok.accessors.prefix += m_COMMENT
LOWtest/configuration/resource/configurationRoot/out.txt81# 4: lombok.addGeneratedAnnotation = trueCOMMENT
LOWtest/configuration/resource/configurationRoot/out.txt101# BASE/archives/a2.zip!reset.config (imported from BASE/d1/d11/d111/lombok.config:2):COMMENT
LOWtest/configuration/resource/configurationRoot/out.txt121# 3: lombok.accessors.chain = falseCOMMENT
LOWtest/configuration/resource/configurationRoot/out.txt141# BASE/d1/d11/d111/lombok.config:COMMENT
LOWtest/configuration/resource/configurationRoot/out.txt161# Generate @ConstructorProperties for generated constructors (default: false).COMMENT
LOW…rm/resource/before/FieldDefaultsViaConfigOnRecord.java1// version 14:COMMENT
LOWsrc/core/lombok/eclipse/EclipseAST.java101 COMMENT
LOWsrc/core/lombok/eclipse/EclipseAST.java141 }COMMENT
LOWsrc/core/lombok/eclipse/EclipseAST.java161// in.close();COMMENT
LOW…ore/lombok/eclipse/handlers/SetGeneratedByVisitor.java941// public boolean visit(LambdaExpression node, BlockScope scope){ return true;}COMMENT
LOW…c/core/lombok/eclipse/handlers/HandleSneakyThrows.java121// return handleField(annotationNode, (FieldDeclaration)owner.get(), exceptions);COMMENT
LOW…c/core/lombok/eclipse/handlers/HandleSneakyThrows.java141// for (DeclaredException exception : exceptions) {COMMENT
LOWsrc/utils/lombok/javac/JavacTreeMaker.java841// private static final MethodId<JCTypeUnion> TypeUnion = MethodId("TypeUnion");COMMENT
LOW…ombok/javac/java8/CommentCollectingScannerFactory.java41 // the lower bound for T, as a synthetic accessor for the make with returntype ScannerFactory) for that make method wCOMMENT
LOW…ombok/javac/java6/CommentCollectingScannerFactory.java41 //COMMENT
LOW…ombok/javac/java7/CommentCollectingScannerFactory.java41 // is actually on the classpath (either make() for javac6-, or make(Context) for javac7+).COMMENT
LOW…c/eclipseAgent/lombok/eclipse/agent/PatchDelegate.java401// if (ref.resolvedType != null) {COMMENT
LOW…c/eclipseAgent/lombok/eclipse/agent/PatchDelegate.java421// char[] name = md.selector;COMMENT
LOW…c/eclipseAgent/lombok/eclipse/agent/PatchDelegate.java441// }COMMENT
AI Slop Vocabulary4 hits · 8 pts
SeverityFileLineSnippetContext
MEDIUM…c/core/lombok/eclipse/handlers/EclipseHandlerUtil.java1473 if (ann.getInstance().value() == AccessLevel.NONE) return null; //Definitely WONT have a getter.CODE
MEDIUM…c/core/lombok/eclipse/handlers/EclipseHandlerUtil.java1488 if (ann.getInstance().value() == AccessLevel.NONE) return null; //Definitely WONT have a getter.CODE
MEDIUMsrc/core/lombok/javac/handlers/JavacHandlerUtil.java1051 if (ann.getInstance().value() == AccessLevel.NONE) return null; //Definitely WONT have a getter.CODE
MEDIUMsrc/core/lombok/javac/handlers/JavacHandlerUtil.java1066 if (ann.getInstance().value() == AccessLevel.NONE) return null; //Definitely WONT have a getter.CODE
Verbosity Indicators4 hits · 8 pts
SeverityFileLineSnippetContext
LOW⚡src/core/lombok/javac/apt/LombokProcessor.java326 // Step 1: Take all CUs which aren't already in the map. Give them the first priority level.COMMENT
LOW⚡src/core/lombok/javac/apt/LombokProcessor.java336 // Step 2: For all CUs (in the map, not the roundEnv!), run them across all handlers at their current prio level.COMMENT
LOWsrc/core/lombok/javac/apt/LombokProcessor.java348 // Step 3: Push up all CUs to the next level. Set level to null if there is no next level.COMMENT
LOWsrc/core/lombok/javac/apt/LombokProcessor.java367 // Step 4: If ALL values are null, quit. Else, either do another loop right now or force a resolution reset by forcinCOMMENT
Structural Annotation Overuse4 hits · 8 pts
SeverityFileLineSnippetContext
LOW⚡src/core/lombok/javac/apt/LombokProcessor.java326 // Step 1: Take all CUs which aren't already in the map. Give them the first priority level.COMMENT
LOW⚡src/core/lombok/javac/apt/LombokProcessor.java336 // Step 2: For all CUs (in the map, not the roundEnv!), run them across all handlers at their current prio level.COMMENT
LOWsrc/core/lombok/javac/apt/LombokProcessor.java348 // Step 3: Push up all CUs to the next level. Set level to null if there is no next level.COMMENT
LOWsrc/core/lombok/javac/apt/LombokProcessor.java367 // Step 4: If ALL values are null, quit. Else, either do another loop right now or force a resolution reset by forcinCOMMENT
Modern AI Meta-Vocabulary3 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMwebsite/templates/_scaffold.html34<#macro scaffold load=[] title='Project Lombok'>CODE
MEDIUMwebsite/templates/features/_features.html66<#macro scaffold title logline load=[]>CODE
MEDIUMwebsite/templates/setup/_setup.html17<#macro scaffold title load=[]>CODE
Slop Phrases2 hits · 2 pts
SeverityFileLineSnippetContext
LOWwebsite/templates/contributing/contributing.html30 To create new features and add them to project lombok itself, send us pull requests via github. However, before you CODE
LOWsrc/installer/lombok/installer/InstallerGUI.java941 "Don't forget to:<ul><li> add <code>lombok.jar</code> to your projects,<li><b>exit and start</b> your IDE,<li><b>rebuCODE
Hyper-Verbose Identifiers1 hit · 1 pts
SeverityFileLineSnippetContext
LOWwebsite/resources/js/main.js36 function aButtonsRespondToSpacebar() {CODE