projectlombok/lombok · error · IllegalArgumentException
Lombok supports at most v
Error message
Lombok supports at most v${s}; reduce the value of key 'checkerframework' to ${s} What it means
CheckerFrameworkVersion.valueOf parses a 'checkerframework' configuration key value (e.g. 'v3.42') into a version number. Lombok's bundled Checker Framework annotations only support versions up to MAX_SUPPORTED, so a higher requested version is rejected with IllegalArgumentException at parse time of lombok.config.
Solutions
- Lower the 'checkerframework' config key value to at most the version stated in the message (v + number reported).
- Upgrade Lombok to a release that supports your Checker Framework version, then keep the version key.
- Use only 'major' or 'major.minor' in the value (e.g. '3.42', not '3.42.0'); minor must be 0-999.
Example fix
// before (lombok.config) checkerframework = 3.999 // after checkerframework = 3.42
Defensive patterns
Strategy: validation
Validate before calling
boolean isValidCheckerFrameworkVersion(String v) {
java.util.regex.Matcher m = java.util.regex.Pattern.compile("(\\d+)(?:\\.(\\d+))?").matcher(v.trim());
if (!m.matches()) return false;
int minor = m.group(2) != null ? Integer.parseInt(m.group(2)) : 0;
return minor <= 999 && Integer.parseInt(m.group(1)) * 1000 + minor <= 42000; // compare with lombok's MAX_SUPPORTED
} Try / catch
try {
CheckerFrameworkVersion v = CheckerFrameworkVersion.valueOf(cfg);
} catch (IllegalArgumentException e) {
// fall back to the max supported version stated in e.getMessage()
} Prevention
- Pin the checkerframework config value to a version at or below the Lombok release's MAX_SUPPORTED.
- Only use major or major.minor forms; minor must be 0-999.
- When bumping Checker Framework, first upgrade Lombok.
When it happens
Trigger: Setting `lombok.checkerframework`-related config key 'checkerframework' to a version string whose major*1000+minor exceeds MAX_SUPPORTED; also thrown when minor > 999 by an earlier check in the same valueOf.
Common situations: Copying a Checker Framework version like 'v3.49.0' or a future version from documentation into lombok.config before Lombok has added support for it; typos producing an out-of-range minor segment.
Understand the failure class
Background: "value must be between 0 and 1" / "out of range" / "must not be negative" errors: fixing range-validation failures across open-source libraries — this error's family across 42 libraries.
Related errors
- Minor version must be between 0 and 999
- Invalid value
- Invalid identifier
- The declaration must follow the pattern: [LoggerType…
- There is more than one parameter definition that includes…
AI-assisted analysis of projectlombok/lombok@6d6a3e9fec (2026-09-07).
Data as JSON: /api/errors/aa3e0728bc421462.
Report an issue: GitHub.
Appendix: source
Thrown at src/core/lombok/core/configuration/CheckerFrameworkVersion.java:78
}
public boolean generateCalledMethods() {
return version >= 3100;
}
public static CheckerFrameworkVersion valueOf(String versionString) {
if (versionString != null) versionString = versionString.trim();
if (versionString == null || versionString.equalsIgnoreCase("false") || versionString.equals("0")) return new CheckerFrameworkVersion(0);
if (versionString.equalsIgnoreCase("true")) return new CheckerFrameworkVersion(DEFAULT);
Matcher m = VERSION.matcher(versionString);
if (!m.matches()) throw new IllegalArgumentException("Expected 'true' or 'false' or a major/minor version, such as '2.9'");
int major = Integer.parseInt(m.group(1));
int minor = (m.group(2) != null && !m.group(2).isEmpty()) ? Integer.parseInt(m.group(2)) : 0;
if (minor > 999) throw new IllegalArgumentException("Minor version must be between 0 and 999");
int v = major * 1000 + minor;
if (v > MAX_SUPPORTED) {
String s = (v / 1000) + "." + (v % 1000);
throw new IllegalArgumentException("Lombok supports at most v" + s + "; reduce the value of key 'checkerframework' to " + s);
}
return new CheckerFrameworkVersion(v);
}
public static String description() {
return "checkerframework-version";
}
public static String exampleValue() {
String s = (MAX_SUPPORTED / 1000) + "." + (MAX_SUPPORTED % 1000);
return "major.minor (example: 3.2 - and no higher than " + s + ") or true or false";
}
@Override public boolean equals(Object obj) {
if (!(obj instanceof CheckerFrameworkVersion)) return false;
return version == ((CheckerFrameworkVersion) obj).version;
}
View on GitHub (pinned to 6d6a3e9fec)