- We recently released v1.18.36; there is no edge release since then.
- PLATFORM: JDK23 support added.
- BUGFIX: Eclipse projects using the
com.pro-crafting.tools:jasperreports-maven-plugin
will now compile.
- PLATFORM: Added support for Eclipse 2024-06; you'd get some
NoSuchMethodError
traces in your logs if using@Builder
or@Singular
prior to this fix. Issue #3638. - IMPROBABLE BREAKING CHANGE: Lombok now adds
@lombok.Generated
by default to methods and types it generates. This may result in accidentally increasing your test coverage percentage. Issue #3667. - IMPROBABLE BREAKING CHANGE: When
lombok.config
containslombok.onX.flagUsage = WARNING
, from now on warnings will actually be generated if onX is used.Issue #2848 - BUGFIX: When
@SuperBuilder
was used on a type with an generic array type, it would errorwrong number of type arguments
. Issue #3694. - FEATURE: Lombok generates javadoc for you for most of the methods it adds; with this release, javadoc is also added to generated constructors. Issue #933.
- PLATFORM: Initial JDK22 support added.
- PLAFTORM Added support for Eclipse 2024-03. Issue #3620.
- PLATFORM: Added support for recent versions of eclipse (released Q4 2023 or later or so) which would cause failures in the eclipse logs such as
java.lang.NoSuchMethodError: 'java.lang.StringBuffer org.eclipse.jdt…
. Issue #3564. - FEATURE:
@Locked
has been introduced. Like@Synchronized
but withjava.util.concurrent.locks
locks instead of thesynchronized
primitive. Thanks, Pim van der Loos for the PR! Issue #3506. - NECROMANCY: Inlining a generated getter in eclipse would result in eclipse incorrectly replacing calls with
@Getter
instead of the actual field's name. Issue #562. This issue is almost old enough to drink. Points for dedication go to Rawi for fixing this one. - BUGFIX: When
@SuperBuilder
was used on a type with an annotated generic type, it would errorwrong number of type arguments
. Issue #3592. - BUGFIX: It was possible to create an infinite build loop using
@ExtensionMethod
. Issue #3225. - BUGFIX: Using
@Getter(lazy=true)
would fail if the expression contained a variable calledvalue
. Issue #2917. - BUGFIX: Many lombok features wouldn't work properly on records contained within an outer type unless you explicitly marked it
static
. Issue #3497 Issue #3559. - BUGFIX: Eclipse projects using the
com.pro-crafting.tools:jasperreports-plugin
will now compile. - BUGFIX:
@FieldNameConstants
now works when generated fields are involved. Issue #3529. - IMPROBABLE BREAKING CHANGE: For JSpecify, the package name changed from
org.jspecify.nullness
toorg.jspecify.annotations
, which might lead to a different null analysis. Issue #3608.
- PLATFORM: Initial JDK21 support added. Issue #3393.
- BUGFIX: Any
@Helper
class directly in a method (and not nested more deeply) wouldn't work. Issue #3370. - BUGFIX: If using the module system and lombok is on the runtime classpath (shouldn't be, but happens), you'd get a split package error:
Package org.objectweb.asm in both module lombok and module org.objectweb.asm
. Issue #3474. - BUGFIX: Lombok wasn't properly copying the annotations it should be copying when generating methods in
record
s. Issue #3315. - BUGFIX: Delomboking anything with
@lombok.Singular
in it wouldn't remove that annotation. Issue #1377. - BUGFIX: Calling extension methods such that automatic widening is applied (i.e. calling
void ext(long arg)
with anint
) would fail at runtime. Issue #3463. - BUGFIX: Extension methods can now be used in records. Issue #3450.
- BUGFIX:
@Getter(lazy=true)
with complicated initialization expressions would fail on javac. Issue #3314. - BUGFIX: Using the maven surefire plugin with a
module-info.java
based project would fail with aSurefireBooterForkException
. Issue #3474.
- PLATFORM: JDK20 support added. Issue #3353.
- BUGFIX: Eclipse 4.27 and VSCode 1.14.0 would ignore
lombok.config
. Issue #3332. - BUGFIX:
@NonNull
on a primitive array field on a record wouldn't work. Issue #3366. - FEATURE: Jakarta has some non-null annotations (such as
jakarta.annotation.Nonnull
) which we now support. Issue #3346. - BUGFIX: Eclipse didn't find usages of extension methods (
@ExtensionMethod
) in "find references" nor rename-refactoring. Issue #3373
- PLATFORM: JDK19 support added. Issue #3264.
- BUGFIX: Using the refactor script: "Rename field" in a
@(Super)Builder
-marked file in eclipse or VSCode would cause issues. [Issue #3181] (#3181). - BUGFIX: Using
val
together with any call to a method that explicitly resolves to a default impl in an interface didn't work in javac. Issue #3242.
- PLATFORM: JDK18 support added. Issue #3129.
- PLATFORM: Using ecj and maven? There's now a command line option to integrate lombok into your build chain. Issue #3143.
- FEATURE:
@ToString
has an annotation parameter calledonlyExplicitlyIncluded
. There's now a config keylombok.toString.onlyExplicitlyIncluded
to set this property as well. Issue #2849. - FEATURE: Turning a field named
uShape
into a getter is tricky:getUShape
orgetuShape
? The community is split on which style to use. Lombok doesgetUShape
, but if you prefer thegetuShape
style, add tolombok.config
:lombok.accessors.capitalization = beanspec
. Issue #2693 Pull Request #2996. Thanks @YonathanSherwin! - FEATURE: You can now use
@Accessors(makeFinal = true)
to makefinal
getters, setters, and with-ers. Issue #1456. - BUGFIX: Various save actions and refactor scripts in eclipse work better. Issue #2995 Issue #1309 Issue #2985 Issue #2509.
- BUGFIX: Eclipse projects using the jasperreports-plugin will now compile. Issue #1036.
- BUGFIX: inner classes in
@UtilityClass
classes were broken in JDK9+. Issue #3097. - BUGFIX: Delomboking code with
@Builder.Default
in it would generate different code vs lombok itself. Issue #3053. - BUGFIX: Combining
@NonNullByDefault
andlombok.addNullAnnotations
would generate two@Nullable
annotations and thus generate a compiler error. Issue #3120. Thanks @JohnPaulTaylorII! - BUGFIX: Null analysis in eclipse was broken for incremental builds. Issue #3133.
- BUGFIX
VerifyError
would show up in the latest eclipse release when using various refactor scripts. Issue #3134. - BUGFIX: The various
@Log
annotations can now be placed on inner enums and records. Issue #2990. - SECURITY: A widely reported security issue with log4j2 (CVE-2021-44228) has absolutely no effect on either lombok itself nor does usage of lombok on its own, or even the usage of lombok's
@Log4j2
, cause any issues whatsoever: You have to ship your own log4j2 dependency in your app - update that to 2.17 or otherwise mitigate this issue (see the CVE page). To avoid unnecessary warnings from dependency checkers, our dep on log4j2, which is used solely for testing, isn't shipped by us, and cannot be exploited in any way, has been updated to 2.17.1. Issue #3063 - IMPROBABLE BREAKING CHANGE: Lombok now understands a few more annotations that imply "this field should not ever contain a null reference". Lombok will thus copy some of these new annotations e.g. to generated getters and the like. Pull Request #2904
- PLATFORM: JDK17 support added. Issue #2898.
- FEATURE: Added the
@StandardException
feature. Pull Request #2702. - IMPROBABLE BREAKING CHANGE: If the underlying compiler and
--release
/--source
option is 10 or higher, lombok'sval
is now replaced byfinal var
. That means compound declarations such asval x = 10, y = 12;
now fail (lombok's oldval
implementation supported it, javac'svar
does not), but IDE support in particular is more reliable. We decided it was worth the tradeoff. - BUGFIX: Syntax highlighting in VSCode now works reliably when using lombok. Issue #2950.
- BUGFIX: Eclipse's organize imports feature would sometimes remove your
lombok.val
import. Issue #2972.
- PLATFORM: JDK16 support added. Issue #2681.
- PLATFORM: All lombok features updated to act in a sane fashion with JDK16's record feature. In particular, you can annotate record components with
@NonNull
to have lombok add null checks to your compact constructor (which will be created if need be). - BUGFIX: Trying to use a lambda expression as parameter to an
@ExtensionMethod
did not work. Issue #2741. (by @Rawi01). - BUGFIX:
@SuperBuilder
with an existing constructor caused issues in eclipse. Issue #2704. (by @JanRieke). - BUGFIX: Using
@SuperBuilder
with a handwritten builder class caused issues. Issue #2701. (by @JanRieke). - BUGFIX: Lombok interacts properly with the new save actions in eclipse 2021-03.
- POTENTIAL BUGFIX: lombok + errorprone could cause
IllegalArgumentException
if using theMissingSummary
bug pattern. Issue #2730.
- BUGFIX: Various tools using ecj under the hood (including intellij) could cause corrupt class files to be generated. PR #2637, lombok-intellij-plugin issue #969.
- BUGFIX: Netbeans would not work with 1.18.16 anymore. Issue #2612.
- BUGFIX:
@ExtensionMethod
support in ecj improved when generics are involved. Issue #2648, PR #2658 thanks to @Rawi01. - PLATFORM: using
lombok.config
files when compiling with sbt 1.4 now works again. Issue #2645
- BUGFIX: Version 1.18.14 could not be installed in Eclipse, it would break Eclipse.
- BREAKING CHANGE: mapstruct users should now add a dependency to lombok-mapstruct-binding. This solves compiling modules with lombok (and mapstruct).
- IMPROBABLE BREAKING CHANGE: The generated hashcode has changed for classes that include both primitive fields and reference fields.
- FEATURE: Similar to
@Builder
, you can now configure a@SuperBuilder
's 'setter' prefixes via@SuperBuilder(setterPrefix = "set")
for example. We still discourage doing this. Pull Request #2357. - FEATURE: If using
@Synchronized("lockVar")
, iflockVar
is referring to a static field, the code lombok generates no longer causes a warning about accessing a static entity incorrectly. Issue #678 - FEATURE:
@Jacksonized
on a@Builder
or@SuperBuilder
will configure Jackson to use this builder when deserializing. Pull Request #2387 thanks to @JanRieke. @Jacksonized documentation. - FEATURE: The checkerframework support has been updated; the relevant annotations were renamed in checkerframework's APIs, lombok now generates the annotations according to their current API names.
- FEATURE: Add option to cache hashCode via
@EqualsAndHashCode(cacheStrategy = EqualsAndHashCode.CacheStrategy.LAZY)
. Issue #784 Pull Request #2513 thanks to @andrebrait. - PLATFORM: Added support for compiling projects with OpenJ9 Pull Request #2437
- PLATFORM: Improved support for recent JVM/javac versions (14 and 15) and new language features.
- PERFORMANCE: Several performance improvements during parsing/compilation, both using javac and Eclipse. Thanks @Rawi01!
- PERFORMANCE: The generated equals method will first compare primitives, then primitive wrappers and then reference fields. Manual re-ordering is possible using
@Include(rank=n)
. Pull Request #2485, Issue #1543 - BUGFIX: Delombok prints the first
this
parameter. Issue #2444 - BUGFIX: Using
val
in combination with values whose generics include wildcards that reference themselves would cause aStackOverflowError
in javac. Issue #2358. - BUGFIX: Using
@SuperBuilder
on a class that has some fairly convoluted generics usage would fail with 'Wrong number of type arguments'. Issue #2359 Pull Request #2362 - BUGFIX: Various lombok annotations on classes nested inside enums or interfaces would cause errors in eclipse. Issue #2369
- BUGFIX: Trying to add
@ExtensionMethod
s with exactly 2 arguments would fail in eclipse. Issue #1441 Pull Request #2376 thanks to @Rawi01. - BUGFIX: Javac sets incorrect annotated type on with methods. Issue #2463
- Don't use this version. It is broken. Changes are listed under 1.18.16
- PLATFORM: Support for JDK13 (including
yield
in switch expressions, as well as delombok having a nicer style for arrow-style switch blocks, and text blocks). - PLATFORM: Support for JDK14 (including
pattern match
instanceof expressions). - FEATURE: In
lombok.config
it is possible to import other config files, even from a.zip
or.jar
. - FEATURE: You can now configure a builder's 'setter' prefixes via
@Builder(setterPrefix = "set")
for example. We discourage doing this, but if some library you use requires them, have at it. Pull Request #2174, Issue #1805. - FEATURE: If you use
@Builder
's@Singular
, a plural form is also generated, which has the effect of adding all elements in the passed collection. If you pass a null reference, this would result in a message-lessNullPointerException
. Now, it results in that exception but with a useful message attached (uses the same config as@NonNull
), or alternatively via a parameter on@Singular
, you can choose to ignore such a call (add nothing, return immediately); this can be useful when deserializing (e.g. Jackson JSON) and JPA/Hibernate code. Issue #2221. singular documentation. - FEATURE: Tired of being unable to use
@javax.annotation.ParametersAreNonnullByDefault
or@org.eclipse.jdt.annotation.NonNullByDefault
because then the equals method that lombok generates isn't valid? Fret no more; lombok can now add nullity annotations where relevant. Set the flavour of nullity annotation you prefer in yourlombok.config
. Applies to the return value oftoString
,withX
, chainablesetX
, static constructors,build
,builder
, etcetera, and the parameter ofequals
,canEqual
, and the plural form of@Singular
marked fields for builder classes. Issue #788 - BUGFIX: If using the sonarlint plugin in eclipse for projects bound to sonarcloud, you now no longer get internal errors on sonarlint processing. Issue #2351
- BUGFIX:
lombok.experimental.Wither
has been deprecated (it has been renamed tolombok.With
). However, the intent is that lombok still handles the old annotation in case you haven't updated your lombok dep yet. However, only a star import onlombok.experimental.*
worked; an explicit one would cause lombok to not generate any with method. Issue #2235 - BUGFIX: Referring to an inner class inside the generics on a class marked with
@SuperBuilder
would cause the errorwrong number of type arguments; required 3
Issue #2262; fixed by github user@Lekanich
- thank you! - BUGFIX: Some of the code generated by
@Builder
did not includethis.
prefixes when accessing fields. While semantically it didn't matter, if you use the 'add this prefix for field accesses' save action in eclipse, the save action would break. Issue #2327 - BUGFIX: When lombok copies javadoc from fields to relevant methods, it should generate an appropriate
@return this
line if lombok copies the javadoc to a generated setter that is chainable (returns itself). It didn't do that when generating the 'setters' in a@Builder
. Lombok also didn't generate an appropriate@return
item for@With
methods. The javadoc has also been updated slightly (thethis
reference in the javadoc is now rendered in a code tag).Issue #2323 - IMPROBABLE BREAKING CHANGE: Lombok now generates qualified types (so,
Outer.Inner
instead of justInner
) in most type signatures that it generates; this should avoid exotic scenarios where the types lombok puts in signatures end up referring to unintended other types, which can occur if your class implements an interface that itself defines a type with the same name as one defined in your source file. I told you it was exotic. Thanks to Hunter Anderson for doing some preliminary work on this change. Issue #2268 - IMPROBABLE BREAKING CHANGE: Running
java -jar lombok.jar config -v <files>
no longer shows which files do not mention the specified keys. Use--non-mentioned
or-n
to show them anyway.
- PROMOTION:
@Wither
has been promoted to the main package, renamed to@With
. Otherwise, no changes have been made to the annotation. The old experimental annotation will remain for a few versions as a deprecated annotation. If you hadlombok.config
configuration for this annotation, the configuration keys for this feature have been renamed. - FEATURE: You can now configure a custom logger framework using the new
@CustomLog
annotation in combination with thelombok.log.custom.declaration
configuration key. See the log documentation for more information. Pullrequest #2086 with thanks to Adam Juraszek. - ENHANCEMENT: Thanks to Mark Haynes, the
staticConstructor
will now also be generated if a (private) constructor already exists. Issue #2100 - ENHANCEMENT:
val
is now capable of decoding the type of convoluted expressions (particularly if the right hand side involves lambdas and conditional (ternary) expressions). Pull Request #2109 with thanks to Alexander Bulgakov. - ENHANCEMENT: You can now configure the generated builder class name via the config system, using key
lombok.builder.className
. See the Builder documentation and SuperBuilder documentation - ENHANCEMENT: If you mix up eclipse's non-null support, such as
@NonNullByDefault
, with lombok's@NonNull
, you get a bunch of warnings about dead code that are inappropriate. These warnings are now suppressed, thanks to a contribution from Till Brychcy! Pull Request #2155 - ENHANCEMENT:
@NonNull
can now also generate checks using jdk'sObjects.requireNonNull
or Guava'sPreconditions.checkNotNull
. Issue #1197 - EXPERIMENT: Lombok is working together with checkerframework to enable detection of improper builder use (such as forgetting to set a mandatory property prior to calling
build()
). This experiment can be turned on by addingcheckerframework = true
to yourlombok.config
file. - BUGFIX: Using
@JsonProperty
or@JsonValue
on a field in combination with@Setter
or@Data
would sometimes throw a ClassCastException during compilation. Issue #2156 - BUGFIX: Delombok would turn something like
List<byte[]>...
in a method parameter toList<byte...>...
Issue #2140 - BUGFIX: Javac would generate the wrong equals and hashCode if a type-use annotation was put on an array type field Issue #2165
- BUGFIX: Eclipse 2019-06 + JDK-12 compatibility + an
@Singular
builder entry would produce a cascade of error dialogs. Issue #2169 - BUGFIX: Javac would throw a NullPointerException if the package-info.java did not contain a package declaration. Issue #2184
- BUGFIX: Javac sets incorrect annotated type on constructor, getter and setter. Issue #2189
- IMPROBABLE BREAKING CHANGE: Stricter validation of configuration keys dealing with identifiers and types (
lombok.log.fieldName
,lombok.fieldNameConstants.innerTypeName
,lombok.copyableAnnotations
). - IMPROBABLE BREAKING CHANGE: The fields generated inside builders for fields with defaults (with
@Builder
on a class with fields marked@Default
) now have$value
as the name; direct manipulation of these fields is not advised because there is an associated$set
variable that also needs to be taken into account. Issue #2115
- FEATURE: You can now configure
@FieldNameConstants
toCONSTANT_CASE
the generated constants, using alombok.config
option. See the FieldNameConstants documentation. Issue #2092. - FEATURE: You can now suppress generation of the
builder
method when using@Builder
; usually because you're only interested in thetoBuilder
method. As a convenience we won't emit warnings about missing@Builder.Default
annotations when you do this. Issue #2046 - FEATURE: You can now change the access modifier of generated builder classes. Issue #2083.
- FEATURE: When using
@NonNull
, or any other annotation that would result in a null-check, you can configure to generate an assert statement instead. Issue #2078. - FEATURE: Lombok now knows exactly how to treat
@com.fasterxml.jackson.annotation.JsonProperty
and will copy it to the right places for example when making builders. Issue #1961 Issue #1981 - PLATFORM: A few lombok features (most notably delombok) failed on JDK12. Issue #2082
- BUGFIX: var/val on methods that return an intersection type would now work in Eclipse. Issue #1986
- BUGFIX: Fix for java6 regression if a field has javadoc. Issue #2066
- BUGFIX: Delombok now delomboks java10's own
var
asvar
and not as the actual underlying type. Issue #2049 - BUGFIX: If you use
@Builder
and manually write thebuild()
method in your builder class, javac would error out instead of deferring to your implementation. Issue #2050 Issue #2061 - BUGFIX:
@SuperBuilder
together with@Singular
on non-lists would produce an erroneousemptyList
call. Issue #2104. - IMPROBABLE BREAKING CHANGE: For fields and parameters marked non-null, if the method body starts with an assert statement to ensure the value isn't null, no code to throw an exception will be generated.
- IMPROBABLE BREAKING CHANGE: When using
ecj
to compile java code with@Builder
or@SuperBuilder
in it, and a builder setter method was generated for a@NonNull
-marked method, no explicit null check would be present. However, runningjavac
on the exact same file would produce the null check. Now ecj also produces this null check. Issue #2120. - IMPROBABLE BREAKING CHANGE: We slightly changed the message of the exception lombok generates to handle
@NonNull
marked parameters. Issue #2122
- FEATURE: Javadoc on fields will now also be copied to the Builders' setters. Thanks for the contribution, Emil Lundberg. Issue #2008
- FEATURE: The
@FieldNameConstants
feature now allows you to write the inner type by hand and add whatever you like to it; lombok will add the constants to this class. See the updated FieldNameConstants feature page. - FEATURE: There is now a
lombok.config
key to configure@ToString
's call super behavior; it's just like@EqualsAndHashCode
which has had it for a while now. Issue #1918 - ENHANCEMENT: The toString generation of enums now contains the name of the enum constant. Issue #1916
- PLATFORM: Due to changes to switch statements in JDK12, lombok wasn't working with the JDK12 preview. Issue #1888
- BUGFIX: Using
@Delegate
in combination@NonNull
would give an error in jdk8. Issue #1935 - BUGFIX: Using the new
@FieldNameConstants
in eclipse would cause errors in the error log view, and error popups if save actions are turned on. Issue #2024 - BUGFIX: Since version 1.18.4, the delombok ant task didn't work and errored with a
NoClassDefFoundError
. Issue #1932 - BUGFIX: Combining both
@Setter
and@Wither
on the same field, when that field also has javadoc with a--setter--
section or an@param
tag, resulted in a race condition where the first handler to get to the field would take that part of the javadoc. This is a step along the way to fixing Issue #1033 - BUGFIX: Compiling multi-module projects would fail on forcing new rounds. Issue #1723, Issue #1858, Issue #1946, Issue #2028
- PLATFORM: Support for Eclipse Photon. Issue #1831
- PLATFORM: Angular IDE is now recognized by the installer Issue #1830
- PLATFORM: Many improvements for lombok's JDK10/11 support.
- BREAKING CHANGE: The
@FieldNameConstants
feature has been completely redesigned. Issue #1774 FieldNameConstants documentation - BREAKING CHANGE: Lombok will now always copy specific annotations around (from field to getter, from field to builder 'setter', etcetera): A specific curated list of known annotations where that is the right thing to do (generally,
@NonNull
style annotations from various libraries), as well as any annotations you explicitly list in thelombok.copyableAnnotations
config key in yourlombok.config
file. Also, lombok is more consistent about copying these annotations. (Previous behaviour: Lombok used to copy any annotation whose simple name wasNonNull
,Nullable
, orCheckForNull
). Issue #1570 and Issue #1634 - FEATURE: Lombok's
@NonNull
annotation can now be used on type usages (annotation on type usages has been introduced in JDK 8).@Builder
's@Singular
annotation now properly deals with annotations on the generics type on the collection:@Singular List<@NonNull String> names;
now does the right thing. - FEATURE: You can now mix
@SuperBuilder
andtoBuilder
, andtoBuilder
no longer throwsNullPointerException
if a@Singular
-marked collection field isnull
. Issue #1324 - FEATURE: delombok now supports module paths via the
--module-path
option, and will automatically add lombok itself to the module path. This should make it possible to delombok your modularized projects. Issue #1848 - FEATURE: You can pass
@args.txt
todelombok
to read args from the text file; useful if you have really long classpaths you need to pass to delombok. Issue #1795 - BUGFIX:
@NoArgsConstructor(force=true)
would try to initialize already initialized final fields in Eclipse. Issue #1829 - BUGFIX: When using lombok to compile modularized (
module-info.java
-style) code, if the module name has dots in it, it wouldn't work. Issue #1808 - BUGFIX: Errors about lombok not reading a module providing
org.mapstruct.ap.spi
when trying to use lombok in jigsaw-mode on JDK 11. Issue #1806 - BUGFIX: Fix NetBeans compile on save. Issue #1770
- BUGFIX: If you manually write your builder class so you can add a few methods of your own, and those methods refer to generated methods, you'd usually run into various bizarre error messages, but only on JDK9/10/11. This one is hard to describe, but we fixed it. Issue #1907
- BUGFIX: mapstruct + lombok in eclipse should hopefully work again. Issue #1359 and mapstruct issue #1159
- BUGFIX: Equals and hashCode again exclude transient fields by default. Issue #1724
- BUGFIX: Eclipse 'organize imports' feature (either explicitly, or if automatically triggered on saving via 'save actions') would remove the import for
lombok.var
. Issue #1783 - BUGFIX: Lombok and gradle v4.9 didn't work together; that's been fixed. Issue #1716 and gradle-apt-plugin issue #87
- FEATURE: You can now make builders for type hierarchies, using the new (experimental)
@SuperBuilder
annotation. Thanks for the contribution, Jan Rieke.@SuperBuilder
documentation - FEATURE:
@NoArgsConstructor
, including forcing one withlombok.config: lombok.noArgsConstructor.extraPrivate=true
now take any defaults set with@Builder.Default
into account. Issue #1347
- BREAKING CHANGE: The in 1.16.22 introduced configuration key
lombok.noArgsConstructor.extraPrivate
is nowfalse
by default. Issue #1708 - BUGFIX: Do not generate a private no-args constructor if that breaks the code. Issue #1703, Issue #1704, Issue #1712
- BUGFIX: Using boolean parameters in lombok annotations would fail. Issue #1709
- BUGFIX: Delombok would give an error message. Issue #1705
- BUGFIX: Eclipse java10 var support didn't work if lombok was installed in your eclipse. Issue #1676
- FEATURE: Google's Flogger (a.k.a. FluentLogger) is now available via
@Flogger
. Issue #1697 - FEATURE:
@FieldNameConstants
has been extended to support prefixes and suffixes. By default, the generated constants are prefixed withFIELD_
. Docs on @FieldNameConstants.
- FEATURE: Private no-args constructor for
@Data
and@Value
to enable deserialization frameworks (like Jackson) to operate out-of-the-box. Uselombok.noArgsConstructor.extraPrivate = false
to disable this behavior. - FEATURE: Methods can now be marked for inclusion in
toString
,equals
, andhashCode
generation. There is a new mechanism to mark which fields (and now, methods) are to be included or excluded for the generation of these methods: mark the relevant member with for example@ToString.Include
or@EqualsAndHashCode.Exclude
. ToString documentation EqualsAndHashCode documentation - FEATURE:
@Getter
and@Setter
also allowonMethod
andonParam
when put on a type. Issue #1653 - FEATURE:
@FieldNameConstants
is a new feature that generates string constants for your field names. Docs on @FieldNameConstants. - PLATFORM: Lombok can be compiled on JDK10, and should run on JDK10. Issue #1693
- PLATFORM: lombok now counts as an incremental annotation processor for gradle. Should speed up your gradle builds considerably! Issue #1580
- PLATFORM: Fix for using lombok together with JDK9+'s new
module-info.java
feature. Issue #985 - BUGFIX: Solved some issues in eclipse that resulted in error 'A save participant caused problems'. Issue #879
- BUGFIX: Netbeans on jdk9. Issue #1617
- BUGFIX: Netbeans < 9. Issue #1555
- PROMOTION:
var
has been promoted from experimental to the main package with no changes. The 'old' experimental one is still around but is deprecated, and is an alias for the new main package one. var documentation. - OLD-CRUFT:
lombok.experimental.Builder
andlombok.experimental.Value
are deprecated remnants of when these features were still in experimental. They are now removed entirely. If your project is dependent on an older version of lombok which still has those; fret not, lombok still processes these annotations. It just no longer includes them in the jar.
- PLATFORM: Better support for jdk9 in the new IntelliJ, Netbeans and for Gradle.
- BREAKING CHANGE: lombok config key
lombok.addJavaxGeneratedAnnotation
now defaults tofalse
instead of true. Oracle broke this annotation with the release of JDK9, necessitating this breaking change. - BREAKING CHANGE: lombok config key
lombok.anyConstructor.suppressConstructorProperties
is now deprecated and defaults totrue
, that is, by default lombok no longer automatically generates@ConstructorProperties
annotations. New config keylombok.anyConstructor.addConstructorProperties
now exists; set it totrue
if you want the old behavior. Oracle more or less broke this annotation with the release of JDK9, necessitating this breaking change. - DEVELOPMENT: Compiling lombok on JDK1.9 is now possible.
- BUGFIX: The generated hashCode would break the contract if
callSuper=true,of={}
. Issue #1505 - BUGFIX:
delombok
no longer prints the synthetic outer-class parameter. Issue #1521 - BUGFIX: @Builder.Default now also works when type parameters are present. Issue #1527
- BUGFIX: @Builder now also works on method with a generified return type. Issue #1420
- INSTALLER: By default, the lombok installer now inserts an absolute path in
eclipse.ini
and friends, instead of a relative path. If you want the old behavior, you can usejava -jar -Dlombok.installer.fullpath=false lombok.jar
.
- PLATFORM: JDK9 support much improved since v1.16.16; Issue #985
- BUGFIX: Lombok now works with Bazel and Error Prone. Issue #1290
- FEATURE: Lombok has a new website! A few very minor changes to the code to be more consistent with it have been added, mostly to the javadoc.
- FEATURE:
@Builder.Default
lets you configure default values for your fields when using@Builder
. See the Builder feature page for more information. Issue #1201 - PLATFORM: JDK9 now supported for compilation (delomboking with java9 not yet possible). Note, you'll have to do some command line wrangling. See Issue #985
- BUGFIX: The
onX
feature (which lets you add annotations to generated methods) did not work if the annotation you added contained named parameters, and you are compiling with JDK8's javac. We can't fix this (it's a bug in javac), but we have provided an alternate, prettier way to doonX
on javac8+. Issue #778 onX documentation - BUGFIX:
@Data
and@Value
now respect the configuration for field access when generating equals, hashCode and toString. Issue #1329 - BUGFIX:
@Builder
now marks generated builder 'setters' as@Deprecated
if the source field is deprecated. Issue #1342 - CHANGE:
@ConstructorProperties
will now also be generated for private and package private constructors. This is useful for Jackson Issue #1180
- FEATURE: Generated classes, methods and fields can now also annotated with
@lombok.Generated
Issue #1014 - PLATFORM: Lombok can now be used together with other annotation processors that are looking for lombok-generated methods, but only if lombok is the first annotation processor executed. The most commonly used annotation processor affected by this change is MapStruct; we've worked with the mapstruct team specifically to allow any order. Other annotation processors might follow the framework we've built to make this possible; point the authors of any such processor to us and we'll get it sorted MapStruct issue #510 Lombok issue #973
- PLATFORM: Eclipse: Refactor script 'rename field' when lombok has also generated getters and/or setters for this field is nicer now Issue #210
- BUGFIX: Something you never encountered. Issue #1274
- DEPRECATION: The configuration key
lombok.addGeneratedAnnotation
is now deprecated, uselombok.addJavaxGeneratedAnnotation
instead.
- FEATURE:
var
is the mutable sister ofval
. For now experimental, and opt-in usingALLOW
in the flagUsage configuration key. Thanks for the contribution, Bulgakov Alexander. - CHANGE:
@Value
and@FieldDefaults
no longer touch static fields Issue #1254 - BUGFIX:
val
in lambda expressions now work as expected Issue #911 - BUGFIX:
Getter(lazy=true)
now emits an error message when used on a transient field Issue #1236 - BUGFIX: Annotation Processors that use ecj internally (dagger) no longer give linkage errors Issue #1218
- PLATFORM: Red Hat JBoss Developer Studio is now correctly identified by the installer Issue #1164
- BUGFIX: delombok: for-loops with initializers that are not local variables would be generated incorrectly Issue #1076
- FEATURE: Added support for JBoss logger Issue #1103
- ENHANCEMENT: Running
javac -Xlint:all
would generate a warning about unclaimed annotations Issue #1117 - BUGFIX: Eclipse Mars would sometimes throw a NullPointerException when using
@Delegate
Issue #913 - ENHANCEMENT: Add support for older maven-compiler-plugin Issue #1138
- PLATFORM: Starting jdk9 support: No more error message regarding
pid
- FEATURE:
@Builder
updates: It now generatesclearFieldName()
methods if@Singular
is used. Issue #967. - FEATURE:
@Builder
updates: The annotation can now be put on instance methods. Issue #63. - FEATURE:
@Builder
updates:@Singular
now supports guava's ImmutableTable Issue #937. - FEATURE: A
lombok.config
key can now be used to make your fieldsfinal
and/orprivate
... everywhere. We'll be monitoring the performance impact of this for a while. We'll touch every source file if you turn these on, and even if you don't, we have to call into the lombok config system for every file. - FEATURE: A
lombok.config
key can now be used to set the default behaviour of@EqualsAndHashCode
when generating methods for a class that extends something in regards to calling the superclass implementations ofequals
andhashCode
or not. Issue #965. - FEATURE: Putting
@Wither
on abstract classes now generates something slightly more useful: An abstract wither method. Issue #945. - BUGFIX:
@Helper
used to only be be legal in pretty specific places; now it works just about everywhere. - BUGFIX: lambdas with 1 argument that has an explicit type did not pretty print correctly. Issue #972.
- BUGFIX: When using delombok, a source file with only
@NonNull
annotations on parameters as lombok feature would not get properly delomboked. Issue #950. - BUGFIX:
@Delegate
in javac would generate arrays instead of varargs parameters. Issue #932. - BUGFIX:
@Value
and@FieldDefaults
no longer make uninitialized static fields final. Issue #928. - ENHANCEMENT:
@Builder.ObtainVia
now has@Retention(SOURCE)
Issue #986. - ENHANCEMENT: Putting
@NonNull
on a parameter of an abstract method no longer generates a warning, to allow you to use this annotation to document intended behaviour Issue #807.
- FEATURE:
@Helper
can be placed on method-local inner classes to make all methods in the class accessible to the rest of the method. Full documentation. - FEATURE:
@Builder(toBuilder = true)
is now available. It produces an instance method that creates a new builder, initialized with all the values of that instance. For more, read the Feature page on Builder. - FEATURE: the
hashCode()
method generated by lombok via@EqualsAndHashCode
,@Data
, and@Value
is now smarter about nulls; they are treated as if they hash to a magic prime instead of 0, which reduces hash collisions. - FEATURE:
@NoArgsConstructor(force = true)
can be used to create no args constructors even if final fields are present. - BUGFIX: Parameterized static methods with
@Builder
would produce compiler errors in javac. Issue #828. - BUGFIX: The new annotations-on-types feature introduced in JDK8 did not delombok correctly. Issue #855.
- PERFORMANCE: the config system caused significant slowdowns in eclipse if the filesystem is very slow (network file system) or has a slow authentication system.
- BUGFIX: Various quickfixes in Eclipse Mars were broken. Issue #861 Issue #866 Issue #870.
- BUGFIX: Lombok now works with Eclipse Mars.
- BUGFIX: @UtilityClass could result in uninitialized static variables if compiled with ecj/eclipse. Issue #839
- BUGFIX: This version of lombok has a refactored launcher (the one introduced in v1.16.0), which fixes various bugs related to errors in eclipse concerning loading classes, failure to find lombok classes, and errors on ClassLoaders. Probably impacts issues Issue #767 and Issue #826.
- FEATURE: The config key
lombok.extern.findbugs.addSuppressFBWarnings
can now be used to add findbugs suppress warnings annotations to all code lombok generates. This addresses feature request Issue #737. - FEATURE: New lombok annotation:
@UtilityClass
, for making utility classes (not instantiable, contains only static 'function' methods). See the feature documentation for more information. - BUGFIX: The ant
delombok
task was broken starting with v1.16.0. Note that the task def class has been changed; taskdeflombok.delombok.ant.Tasks$Delombok
instead of the oldlombok.delombok.ant.DelombokTask
. Issue #810. - BUGFIX:
val
in javac would occasionally fail if used inside inner classes. This is (probably) fixed. Issue #729 and Issue #616. - BUGFIX: Starting with v1.16.0, lombok would fail to execute as an executable jar if it was in a path with spaces in it. Issue #812.
- BUGFIX: v1.16.0 did not work in old eclipse versions (such as eclipse indigo). Issue #818.
- BUGFIX:
@ExtensionMethod
was broken in Eclipse using java 8. Issue #777, Issue #782 - BUGFIX: delombok: Using exotic characters in your source files would overzealously backslash-u escape them. Now, all characters are printed unescaped, assuming your chosen encoding can support them. Otherwise, they are escaped. Issue #794
- PROMOTION:
@Builder
has graduated from experimental to the main package with a few changes (addition of@Singular
, removal of thefluent
andchain
options). The old one still exists and has been deprecated. - FEATURE:
@Builder
now supports adding the@Singular
annotation to any field/parameter that represents a collection, which results in a method in the generated builder that takes in one element of that collection and adds it. Lombok takes care of generating the appropriate code to produce a compacted immutable version of the appropriate type. In this version, java.util collections and guava's ImmutableCollections are supported. See the feature documentation for more information. - FEATURE: Added a launcher to the lombok boot process which removes the need for
-Xbootclasspath
to be in youreclipse.ini
file, and removes all non-public API and third party dependencies (such as ASM) from the lombok jar, thus removing them from your IDE's auto complete offerings in any project that uses lombok. For those debugging lombok, the launcher enables hot code replace which makes debugging a lot easier, as previously one was required to shut down the IDE, rebuild the jar, and relaunch. Add-Dshadow.override.lombok=/path/to/lombok/bin
to the launch target for hot code replace.
- PERFORMANCE: The configuration system typically hit the filesystem twice per read configuration key instead of hardly ever. This is a continuation of Issue #717.
- BUGFIX: Usage of
val
would break starting with JDK8 release1.8.0_20
. Issue #766 - BUGFIX: Depending on your eclipse project setup, releases v1.14.0 through v1.14.4 could noticably slow down your eclipse. Issue #717.
- BUGFIX: GWT produces errors in handlers on line 1 in any source files that use lombok; this has been fixed. Issue #734
- BUGFIX-IN-PROGRESS: Many pathfinder issues in eclipse (see the bugfix in progress in v1.14.2) have now been fixed. Issue #717
- BUGFIX: syntax highlighting in eclipse will become weird and auto-complete may stop working amongst other eclipse features in v1.14.0 (regression from v1.12.6). Issue #723
- FEATURE: Added
@Tolerate
; put this annotation on any method or constructor and lombok will skip it when considering whether or not to generate a method or constructor. This is useful if the types of the parameters of your method do not clash with what lombok would generate. - FEATURE: Added config key
lombok.getter.noIsPrefix
, which lets you disable use and generation ofisFoo()
, instead going withgetFoo()
, for {@code boolean} fields. - BUGFIX: Errors in the eclipse log with
IndexOutOfBound: 2
inASTConverter.convertType
. Issue #721 - BUGFIX-IN-PROGRESS: As yet unknown conditions in eclipse result in lots of
IllegalArgumentException
in the log with message "Path must include project and resource name". Also, 'invalid URL' or 'URI not absolute' errors can occur when using exotic file system abstractions such as Jazz. These bugs haven't been fixed, but instead of catastrophic failure, warning logs will be emitted instead. Issue #717 - BUGFIX: mvn builds fail with a 'URI not absolute' exception. Issue #718
- FEATURE: You can now configure aspects of lombok project wide (or even workspace wide, or just for a single package) via the configuration system. You can configure many things; run
java -jar lombok.jar config -gv
for the complete list. - DEPRECATION:
@Delegate
has been moved tolombok.experimental.Delegate
, and corner cases such as recursive delegation (delegating a type that itself has fields or methods annotated with@Delegate
) are now error conditions. See the feature documentation for more information. - FEATURE: It is now possible to put annotations, such as
@Nullable
, on the one parameter of generatedequals()
methods by specifying theonParam=
option on@EqualsAndHashCode
, similar to how that feature already exists for@Setter
. Issue #709 - CHANGE: suppressConstructorProperties should now be configured via lombok configuration. Issue #694
- CHANGE: The
canEqual
method generated by@EqualsAndHashCode
,@Value
and@Data
is nowprotected
instead ofpublic
. Issue #695 - BUGFIX: Major work on improving support for JDK8, both for javac and eclipse.
- BUGFIX: Deadlocks would occasionally occur in eclipse when using lazy getters Issue #625
- BUGFIX: Usage of
@SneakyThrows
with a javac from JDK8 with-target 1.8
would result in a post compiler error. Issue #690 - BUGFIX: Switching workspace on some versions of eclipse resulted in a 'duplicate field' error. Issue #701
- BUGFIX: Deadlocks would occasionally occur in eclipse during project builds, especially if using the gradle plugin. Issue #680
- PLATFORM: Added support for Eclipse Luna. Issue #644
- PLATFORM: Initial JDK8 support for eclipse's alpha support in kepler. Issue #632
- FEATURE: The various
@Log
annotations now support thetopic
parameter, which sets the logger's name. The default remains the fully qualified type name of the class itself. Issue #667. - BUGFIX: Using lombok with IntelliJ and the IBM JDK would result in NPEs during initialization. Issue #683.
- BUGFIX: Eclipse quickfix Surround with try/catch block didn't work inside
@SneakyThrows
annotated methods Issue #511. - BUGFIX: Eclipse refactoring Extract Local Variable didn't work inside
@SneakyThrows
annotated methods Issue #668. - BUGFIX: {Netbeans} @SneakyThrows would lead to unused import and break refactorings Issue #544.
- BUGFIX: Eclipse Organize Imports would generate error: AST must not be null Issue #666.
- BUGFIX: Copying javadoc to getters / setters / withers would copy non-relevant sections too. Issue #620.
- ENHANCEMENT: Lombok used to ship with JNA. It added over 800k to the size of lombok.jar and could mess with usage of JNA in your local environment, especially in eclipse. Issue #682
- DETAIL: {Delombok} Inside enum bodies the delombok formatter didn't respect the emptyLines directive Issue #664.
- DETAIL: Use smaller primes (<127) for generating hashcodes Issue #660
- BUGFIX: v1.12.2's delombok turns all operator+assignments into just assignment. Fixed. Issue #633
- BUGFIX: {Netbeans} v1.12.2 doesn't well with netbeans. Issue #626
- ENHANCEMENT: Delombok now supports varied options for how it formats the resulting source files. This includes scanning the source for things like the preferred indent. Use option
--format-help
for more information. Issue #643 - DETAIL: The primes lombok generates for use in generated hashCode() methods used to be direct copies from Effective Java. It turns out these particular primes are used so much, they tend to be a bit more collision-prone, so we switched them. Now, '277' is used instead of '31'. The primes for booleans have also been changed. Issue #660
- PLATFORM: Initial JDK8 support, without affecting existing support for JDK6 and 7. Issue #524. While lombok will now work on JDK8 / javac8, and netbeans 7.4 and up, lombok does not (yet) support new language features introduced with java8, such as lambda expressions. Support for these features will be added in a future version.
- PLATFORM: Running javac on IBM J9 VM would cause NullPointerExceptions when compiling with lombok. These issues should be fixed. Issue #589.
- CHANGE: [JDK8-related] The canonical way to write onMethod / onParameter / onConstructor annotation now uses a double underscore instead of a single underscore, so, now, the proper way to use this feature is
@RequiredArgsConstructor(onConstructor=@__(@Inject))
. The old way (single underscore) still works, but generates warnings on javac 8. - BUGFIX: Using
@NonNull
on an abstract method used to cause exceptions during compilation. Issue #594. - BUGFIX: Using
@NonNull
on methods that also have@SneakyThrows
or@Synchronized
caused arbitrary behaviour. Issue #623. - GERMANY: Major version bumped from 0 to 1, because allegedly this is important. Rest assured, this change is nevertheless backwards compatible.
- FEATURE: javadoc on fields will now be copied to generated getters / setters / withers. There are ways to specify separate javadoc for the field, the setter, and the getter, and
@param
and@return
are handled appropriately. Addresses feature request Issue #132. @Getter and @Setter documentation. @Wither documentation. - CHANGE: The desugaring of @Getter(lazy=true) is now less object creation intensive. Documentation has been updated to reflect what the new desugaring looks like. @Getter(lazy=true) documentation.
- PROMOTION:
@Value
has been promoted from experimental to the main package with no changes. The 'old' experimental one is still around but is deprecated, and is an alias for the new main package one. @Value documentation. - FEATURE: {Experimental}
@Builder
support. One of our earliest feature request issues, Issue #89, has finally been addressed. @Builder documentation. - FEATURE:
@NonNull
on a method or constructor parameter now generates a null-check statement at the start of your method. This nullcheck will throw aNullPointerException
with the name of the parameter as the message. Issue #549 - BUGFIX: Usage of
Lombok.sneakyThrow()
or@SneakyThrows
would sometimes result in invalid classes (classes which fail withVerifyError
). Issue #543 - BUGFIX: Using
val
in try-with-resources did not work for javac. Issue #555 - BUGFIX: When using
@Data
, warnings are not generated if certain aspects are not generated because you wrote explicit versions of them. However, this gets confusing withequals
/hashCode
/canEqual
, as nothing is generated if any one of those methods is present. Now, if one ofequals
orhashCode
is present but not the other one (orcanEqual
is present butequals
and/orhashCode
is missing), a warning is emitted to explain that lombok will not generate any of the equals / hashCode methods, and that you should either write them all yourself or remove them all. Issue #548 - BUGFIX: Possibly fixed a race condition in patcher Issue #566.
- FEATURE: Major performance improvements in eclipse by profiling the project clean process.
- CHANGE: {Experimental} The experimental
@Value
feature no longer implies the also experimental@Wither
. If you like your@Value
classes to make withers, add@Wither
to the class right next to@Value
. - FEATURE: {Experimental} Reintroduced
onMethod
,onConstructor
andonParam
to@Getter
,@Setter
,@Wither
, and@XArgsConstructor
. These parameters allow you to add annotations to the methods/constructors that lombok will generate. This is a workaround feature: The stability of the feature on future versions of javac is not guaranteed, and if a better way to implement this feature is found, this feature's current incarnation will be removed without a reasonable period of deprecation. Documentation on the onX feature - FEATURE: Added support for Log4j v2.0 via
@Log4j2
Issue #505 - ENHANCEMENT: The Lombok installer can now find and install lombok into JBoss Developer Studio. The installer will now also look for eclipse and eclipse variants in your home directory. Issue #507
- BUGFIX:
@ExtensionMethods
no longer causesVerifyError
exceptions when running eclipse-compiled code if extension methods are called on expressions which are method calls whose return type is a type variable. For example,someList.get(i).extensionMethod()
would fail that way. Issue #509 - BUGFIX: java 7's try-with-resources statement did not delombok correctly. Issue #532
- FEATURE: Lombok can be disabled entirely for any given compile run by using JVM switch
-Dlombok.disable
. This might be useful for code style checkers and such. - FEATURE: Added support for Slf4j extended logger Issue #494
- BUGFIX: {Delombok} Running delombok has been causing VerifyError errors when used with javac 1.7 since 0.11.0. Issue #495
- BUGFIX: A conflict between lombok and certain eclipse plugins would result in NullPointerExceptions in the log when using
@Delegate
. - BUGFIX:
NullPointerException in lombok.​javac.​handlers.​JavacHandlerUtil.​upToTypeNode​(JavacHandlerUtil.java:978)
when compiling with@ExtensionMethod
in javac and generated constructors are involved. Issue #496 - BUGFIX:
@Deprecated
on a field that gets a generated setter in eclipse would result inIllegalArgumentException
, which you wouldn't see unless you have the error log open. If you have save actions defined, you'd get a popup box with the exception. Now fixed. Issue #481
- FEATURE: {Experimental}
@Value
,@Wither
and@FieldDefaults
are now available. These are a lot like@Data
but geared towards immutable classes. Documentation on @Value, Documentation on @Wither and Documentation on @FieldDefaults. - BUGFIX: Eclipse would throw an OOME if using
@ExtensionMethod
. Issue #463 - BUGFIX: {Netbeans}
@Cleanup
and@Synchronized
cause far fewer issues in the netbeans editor. Issue #466 - BUGFIX: {Installer} Erroneous messages about the installer complaining about needing root access when installing or removing lombok from eclipse installs has been fixed. The installer edge of this problem was actually already fixed in v0.11.2. Issue #436
- BUGFIX:
@ExtensionMethod
had all sorts of issues in javac. Issue #472 - BUGFIX: Generating static constructors with javac when you have fields with generics, i.e.
Class<T>
, caused errors. Issue #469 - BUGFIX: Minor
@ExtensionMethod
issues in eclipse, such as the ability to call extension methods on asuper
reference which is now no longer possible. Issue #479
- FEATURE: {Experimental}
@ExtensionMethod
is now available to add extensions to any type in the form of static methods that take as first parameter an object of that type. Documentation on @ExtensionMethod - FEATURE: ONGOING: Fix for using lombok together with gwt-designer.
- ENHANCEMENT: Small performance enhancements in
equals
andhashCode
. Issue #439 - BUGFIX: Eclipse would display an error message regarding an invalid super constructor in the wrong location. Issue #409
- BUGFIX: Eclipse refactor script 'rename method arguments' should work more often with lombok-affected methods.
- BUGFIX: Using
val
in an enhanced for loop did not work if the iterable was a raw type. - BUGFIX: Using
@Getter(lazy=true)
when the data type is boolean, int, array, or some other type that requires special treatment for hashCode/equals, now works properly with@Data
,@EqualsHashCode
and@ToString
. Issue #449 - BUGFIX:
SneakyThrows
in constructor should not wrap this/super call in try-block Issue #454 - BUGFIX: Setting breakpoints on code above the first generated method was not possible. Issue #450
- FEATURE: {Experimental} 'fluent' getters and setters (using just
fieldName
as methodname instead ofgetFieldName
), setters that returnthis
instead ofvoid
, and support for fields with prefixes is introduced with this lombok version. Also, the number of parameters of any existing methods with the same name that lombok would generate are now taken into account; previously if you had any method namedsetX
regardless of how many parameters it has, lombok would avoid generating asetX
method. Now lombok generates the method if all presentsetX
methods have a number of parameters other than 1. documentation. - FEATURE: The combination of
@Delegate
and@Getter
or@Data
will now delegate to the result of a generated getter. Issue #401 - FEATURE: Developing android apps on eclipse with lombok is now possible by running
java -jar lombok.jar publicApi
and including the generated jar in your project. Documentation on using lombok for android development. - BUGFIX: In NetBeans the generated default constructor would still be generated even if Lombok also generated constructors. Issue #399
- BUGFIX: Some classes that contain @SneakyThrows would not compile (throw ClassFormatError). Issue #412
- BUGFIX: delombok: When
@Delegate
would generate a method with type parameters of the typeT extends package.Class
, a dot would be prepended to the type name. Issue #414 - BUGFIX: @Getter and @Setter now generate deprecated methods for deprecated fields. Fixes Issue #415
- BUGFIX: @Delegate would not generate @Deprecated on methods marked deprecated in javadoc. Fixes Issue #421
- BUGFIX: Using
val
with a type likeOuter<TypeArgs>.Inner
now works. Issue #416 - BUGFIX:
@Getter(lazy=true)
where the variable type is a primitive and the initializing expression is of a different primitive type that would type coerce implicitly, i.e. ints can be assigned to longs without a cast, didn't work before. Issue #418 - BUGFIX:
val
is no longer legal inside basic for loops (the old kind, not the foreach kind). These variables should rarely be final, and in practice it wasn't possible to delombok this code properly. Issue #419 - BUGFIX: PrettyCommentsPrinter now prints default clause of annotation methods. Fixes Issue #423
- FEATURE:
@Delegate
can now be used on a no-argument method, which works similarly to adding it to fields. See documentation. - BUGFIX: Eclipse refactoring Extract Interface was broken when using lombok annotation to generate methods. Issue #159
- BUGFIX: Eclipse action Sort Members was broken when using lombok annotations to generate methods or fields. Issue #338
- BUGFIX: Eclipse action Refactor/Rename on an inner type was broken when using lombok annotations. Issue #389
- BUGFIX: 0.10.6 causes ClassNotFoundErrors when using ecj (and thus, play framework, gwt, etc). Issue #393
- BUGFIX: Eclipse parsing was broken when using lombok annotations with parentheses. Issue #398
- ENHANCEMENT: Lombok now adds a line to the Eclipse About dialog about itself.
- PERFORMANCE: Performance issues (memory leaks) when using lombok in netbeans, introduced in 0.10, have been fixed. Issue #315
- BUGFIX: Eclipse quickfix "Add unimplemented methods" would sometimes insert the new method stubs in strange places, especially if
@Data
was present. Issue #124 - BUGFIX: Eclipse quickfix "Assign parameter to new field" would insert it outside the class body if
@Data
was present. Issue #295 - BUGFIX: Renaming a @Data-annotated class in eclipse using Alt+Shift+R no longer mangles the data annotation. Issue #359
- BUGFIX: Using save action 'Use this qualifier for field accesses, only if necessary' did not work together with
@Data
in certain cases. Issue #374 - BUGFIX: Organize imports, either run manually or as save action, would throw an exception. Issue #381
- BUGFIX: Extracted constants would be placed outside the class body when a logging annotation was present. Issue #388
- BUGFIX: Using the
log
field from@Log
, etc, now works in static initializers. Issue #368 - BUGFIX: Auto-formatting code containing lombok on eclipse, even via an auto-save action, now works. Issue #163
- BUGFIX: Letting eclipse generate various methods when a lombok annotation is present now works. Issue #211
- BUGFIX: Renaming a @Data-annotated class in eclipse no longer mangles the data annotation. Issue #359
- BUGFIX: Eclipse save action Add final modifier to private fields no longer adds final keyword to
@Setter
fields. Issue #336 - BUGFIX: Mixing labels and
lombok.val
would cause NPEs in javac. Issue #372 - BUGFIX: Writing
lombok.val
out in full (vs. using an import statement) did not work in eclipse. Issue #373
- BUGFIX: Delombok will no longer jumble up comments from different files when using -sourcepath option. Issue #357
- BUGFIX: Turns out treating
@NotNull
as an annotation that indicates lombok should generate nullcheck guards causes all sorts of problems. This has been removed again, and documentation has been updated to reflect this. Issue #360 - BUGFIX:
@EqualsAndHashCode
or@Data
did not work on non-static inner classes whose outer class has a type variable. It does now. Issue #362
- BUGFIX:
@Delegate
in eclipse could cause memory leaks in 0.10.0. Issue #337 - BUGFIX: Annotations on enum values were being deleted by delombok. Issue #342
- BUGFIX:
@AllArgsConstructor
was erroneously generating a parameter and an assignment for final variables already assigned in their declaration. Issue #351 - ENHANCEMENT:
@NotNull
is now also recognized as an annotation indicating that lombok should generate nullcheck guards in generated constructors and setters. Issue #344
- FEATURE: New annotation: @Delegate. This annotation lets lombok generate delegation methods for a given field. More…
- FEATURE: Added support for 'val'. Val is an immutable variable that infers its type from the right hand side of the initializing expression. More…
- FEATURE: Added support for several logging frameworks via the
@Log
,@Slf4j
, etc. annotation. More… - FEATURE: Lombok now supports post-compile transformers. Issue #217
- FEATURE: Using
@SneakyThrows
no longer requires a runtime dependency on lombok.jar. In fact, any call toLombok.sneakyThrows(ex)
is optimized at the bytecode level and no longer requires you to actually have lombok.jar or lombok-runtime.jar on the classpath. - FEATURE: @XArgsConstructor, @Getter, and @ToString can now be used on enum declarations. Previously, behaviour of these annotations on enums was undefined.
- FEATURE: @Getter/@Setter (and by extension, @Data) in v0.9.3 and earlier would generate getter and setter method names that did not conform to the beanspec, primarily when faced with boolean properties. This has been fixed. In practice this won't affect you unless you have properties named
isFoo
orhasFoo
. Now the setter generated for this will be calledsetFoo
(as the property name isfoo
) and notsetIsFoo
. Also,hasFoo
is now no longer special; the names would beisHasFoo
andsetHasFoo
. The java bean spec does not givehas
special meaning. - FEATURE:
@EqualsAndHashCode
(and by extension,@Data
) now add acanEqual
method which improves the sanity of equality amongst a hierarchy of classes. More… - FEATURE:
@Getter
now supports alazy=true
attribute. More… - ENHANCEMENT: The installer will now find Eclipse installations when they are located in a subdirectory of a directory containing the word 'eclipse' . Issue #283
- ENHANCEMENT: Add null check for
@Cleanup
Issue #227 - BUGFIX: Lombok is now compatible with javac 7.
- BUGFIX: Hard to reproduce
NullPointerException
in Eclipse on thegetTypeBinding
method in the error log has been fixed. Issue #237 - BUGFIX:
@Setter
and@Getter
can now be applied to static fields again (was broken in v0.9.3 only). Issue #209 - BUGFIX: delombok added type parameters to constructors that mirror the type's own type parameters. This resulted in delombok turning any generated constructor that takes at least 1 parameter of type 'T' into something that didn't compile, and to boot, a confusing error message ('T is not compatible with T'). This is now fixed. Issue #213
- BUGFIX: The Eclipse source generator would place the generated code outside the class Issue #228
- BUGFIX: When using m2eclipse, occasionally you'd see a ClassNotFoundError on JavacProcessingEnvironment. This has been fixed. Issue #250
- BUGFIX: Either all or none of
equals
,hashCode
andcanEqual
will be generated. Issue #313 - BUGFIX: Delombok in output-to-directory mode was generating very long paths on mac and linux. Issue #322
- BUGFIX: Various refactor scripts and save actions bugs have been fixed in eclipse, though most remain.
- FEATURE: Adding
@Getter
or@Setter
to a class is now legal and is like adding those annotations to every non-static field in it. Issue #202 - FEATURE: Three new annotations,
@NoArgsConstructor
,@RequiredArgsConstructor
and@AllArgsConstructor
have been added. These split off@Data
's ability to generate constructors, and also allow you to finetune what kind of constructor you want. In addition, by using these annotations, you can force generation of constructors even if you have your own. Issue #152 - FEATURE: Constructors generated by lombok now include a
@java.beans.ConstructorProperties
annotation. This does mean these constructors no longer work in java 1.5, as this is a java 1.6 feature. The annotation can be suppressed by settingsuppressConstructorProperties
totrue
in a@RequiredArgsConstructor
or@AllArgsConstructor
annotation. Issue #195 - FEATURE: generated
toString
,equals
andhashCode
methods will now usethis.getX()
andother.getX()
instead ofthis.x
andother.x
if a suitable getter is available. This behaviour is useful for proxied classes, such as the POJOs that hibernate makes. Usage of the getters can be suppressed with@ToString/@EqualsAndHashCode(doNotUseGetters = true)
. Issue #183 - ENHANCEMENT: FindBugs'
@CheckForNull
is now copied from a field to a setter's parameter and the getter method just like@Nullable
. Issue #201 - ENHANCEMENT: plugins and
@SneakyThrows
: Resolving types in annotations now works better especially for classes that aren't in the core java libraries. Issue #161 - ENHANCEMENT: If
tools.jar
isn't found (required when running delombok), now a useful error message is generated. The search fortools.jar
now also looks inJAVA_HOME
. - ENHANCEMENT: toString() on inner classes now lists the class name as
Outer.Inner
instead of justInner
. Issue #206 - ENHANCEMENT: All field accesses generated by lombok are now qualified (like so:
this.fieldName
). For those who have a warning configured for unqualified field access, those should no longer occur. Issue #121 - ENHANCEMENT: All fields and methods generated by lombok now get
@SuppressWarnings("all")
attached to avoid such warnings as missing javadoc, for those of you who have that warning enabled. Issue #120 - PLATFORMS: Lombok should now run in stand-alone ecj (Eclipse Compiler for Java). This isn't just useful for the few souls actually using this compiler day to day, but various eclipse build tools such as the RCP builder run ecj internally as well. Issue #145
- BUGFIX: Eclipse:
@Data
and other annotations now don't throw errors when you include fields with bounded wildcard generics, such asList<? extends Number>
. Issue #157 - BUGFIX: complex enums didn't get delomboked properly. Issue #169
- BUGFIX: delombok now no longer forgets to remove
import lombok.AccessLevel;
. In netbeans, that import will no longer be flagged erroneously as being unused. Issue #173 and Issue #176 - BUGFIX: While its discouraged,
import lombok.*;
is supposed to work in the vast majority of cases. In eclipse, however, it didn't. Now it does. Issue #175 - BUGFIX: When
@Getter
or@Setter
is applied to a multiple field declaration, such as@Getter int x, y;
, the annotation now applies to all fields, not just the first. Issue #127 - BUGFIX: delombok on most javacs would quit with a NoSuchFieldError if it contains
<?>
style wildcards anywhere in the source, as well as at least 1 lombok annotation. No longer. Issue #207 - BUILD: dependencies are now fetched automatically via ivy, and most dependencies now include sources by default, which is particularly handy for those working on the lombok sources themselves.
- preliminary support for lombok on NetBeans! - thanks go to Jan Lahoda from NetBeans. Issue #93
- lombok now ships with the delombok tool, which copies an entire directory filled with sources to a new directory, desugaring any java files to what it would look like without lombok's transformations. Compiling the sources in this new directory without lombok support should result in the same class files as compiling the original with lombok support. Great to double check on what lombok is doing, and for chaining the delombok-ed sources to source-based java tools such as Google Web Toolkit or javadoc. lombok.jar itself also provides an ant task for delombok. Full documentation of delombok.
- Lombok now works on openjdk7 (tested with JDK7m5)! For all the folks on the cutting edge, this should be very good news. Issue #134 - thanks go to Jan Lahoda from NetBeans.
- lombok now has various command-line accessible utilities bundled with it. Run
java -jar lombok.jar --help
to see them. Included (aside from the already mentioned delombok): - Ability to create a tiny jar named lombok-runtime.jar with runtime dependencies. The lombok transformations that have a runtime dependency on this jar can be listed as well. Run
java -jar lombok.jar createRuntime --help
for more information. - Scriptable command line install and uninstall options. Run
java -jar lombok.jar install --help
(oruninstall
, of course) for more information. Technically this support has been there in earlier versions, but the command line options are now much more lenient, not to mention more visible. - Lombok now works on Springsource Tool Suite. Issue #95
- Lombok now works on JDK 1.6.0_0, for those of us who have really old JDK1.6's installed on their system. Issue #156
- Erroneous use of lombok in Eclipse (adding it to a project as an annotation processor, which is not how lombok is to be used on Eclipse) now generates a useful warning message with helpful information, instead of a confusing error hidden in the logs. Issue #126
- FIXED: Regression bug where you would occasionally see errors with the gist 'loader constraint violation: when resolving...', such as when opening the help system, starting the diff editor, or, rarely, opening any java source file. Issue #141
- FIXED: @SneakyThrows without any parameters should default to
Throwable.class
but it didn't do anything in javac. Issue #146 - FIXED: Capitalization is now ignored when scanning for existing methods, so if
setURL
already exists, then a@Data
annotation on a class with a field namedurl
will no longer also generatesetUrl
. Issue #148
- The installer now works much better on linux, in that it auto-finds eclipse in most locations linux users tend to put their eclipse installs, and it can now handle apt-get installed eclipses, which previously didn't work well at all. There's also a hidden feature where the installer can work as a command-line only tool (
java -jar lombok.jar install eclipse path/to/eclipse
) which also supportsuninstall
of course. You can now also point ateclipse.ini
in case you have a really odd eclipse install, which should always work. - For lombok developers, the eclipse launch target now works out-of-the-box on snow leopard. Issue #139
- The lombok class patching system has been completely revamped; the core business of patching class files has been offloaded in an independent project called 'lombok.patcher', which is now used to patch lombok into eclipse.
- Many behind-the-scenes changes to improve lombok's stability and flexibility on eclipse.
- Changes to the lombok core API which aren't backwards compatible with lombok series v0.8 but which were necessary to make writing third party processors for lombok a lot easier.
- Minor version number bumped due to the above 3 issues.
- Eclipse's "rename" refactor script, invoked by pressing CMD/CTRL+SHIFT+R, now works on
@Data
annotated classes. - The windows installer would fail on boot if you have unformatted drives. Issue #138
- The static constructor that
@Data
can make was being generated as package private when compiling with javac. Issue #136
- There's now an
AccessLevel.NONE
that you can use for your@Getter
and@Setter
annotations to suppress generating setters and getters when you're using the@Data
annotation. Address Issue #110 - Both
@EqualsAndHashCode
and@ToString
now support explicitly specifying the fields to use, via the new 'of' parameter. Fields that begin with a '$' are now also excluded by default from equals, hashCode, and toString generation, unless of course you explicitly mention them in the 'of' parameter. Addresses Issue #105 - There's a commonly used
@NotNull
annotation, from javax.validation (and in earlier versions of hibernate, which is the origin of javax.validation) which does not quite mean what we want it to mean: It is not legal on parameters, and it is checked at runtime after an explicit request for validation. As a workaround, we've removed checking for any annotation namedNotNull
from the nonnull support of lombok's generated Getters, Setters, and constructors. Issue #116 - Fixed yet another issue with
@SneakyThrows
. This was reported fixed in v0.8.4. but it still didn't work quite as it should. Still falls under the bailiwick of Issue #103
- Fixed many issues with
@SneakyThrows
- in previous versions, using it would sometimes confuse the syntax colouring, and various constructs in the annotated method would cause outright eclipse errors, such as beginning the method with a try block. This also fixes Issue #103 - Fixed the David Lynch bug - in eclipse, classes with lombok features used in them would sometimes appear invisible from other source files. It's described in more detail on Issue #114. If you suffered from it, you'll know what this is about.
- Fixed the problem where eclipse's help system did not start up on lombokized eclipses. Issue #99
- All generated methods now make their parameters (if they have any) final. This should help avoid problems with the 'make all parameters final' save action in eclipse. Issue #113
- Okay, this time really added support for @NonNull and @NotNull annotations. It was reported for v0.8.3 but it wasn't actually in that release. @Nullable annotations are now also copied over to the getter's return type and the setter and constructor's parameters (but, obviously, no check is added). Any @NonNull annotated non-final fields that are not initialized are now also added to the generated constructor by @Data in order to ensure via an explicit null check that they contain a legal value.
- @ToString (and hence, @Data) now default to includeFieldNames=true. Issue #108
- @EqualsAndHashCode (and, indirectly, @Data) generate a warning when overriding a class other than java.lang.Object but not setting EqualsAndHashCode's callSuper to true. There are, however, legitimate reasons to do this, so this warning is now no longer generated if you explicitly set callSuper to false. The warning text now also refers to this action if not calling super is intentional.
- If your fields have @NonNull or @NotNull annotations, then generated setters are generated with a null check, and the annotation is copied to the setter's parameter, and the getter's method.
- An annoying bug that usually showed up if you had package-info.java files has been fixed. It would cause a
NullPointerException
at lombok.javac.apt.Processor.toUnit(Processor.java:143)
- @EqualsAndHashCode and @ToString created; these are subsets of what @Data does (namely: generate toString(), and generate equals() and hashCode() implementations). @Data will still generate these methods, but you can now generate them separately if you wish. As part of this split off, you can now specify for toString generation to include the field names in the produced toString method, and for all 3 methods: You can choose to involve the implementation of the superclass, and you can choose to exclude certain fields. Issue #81
- when compiling with javac: warnings on specific entries of an annotation parameter (such as non-existent fields in a @EqualsAndHashCode exclude parameter) now show up on the problematic parameter and not on the entire annotation. Issue #84
- Changelog tracking from this version on.
- Using eclipse's 'find callers' on a @Data annotation will now find callers of the static constructor if you generated it. If not, it still finds callers to hashCode() as before (it's not possible to make eclipse find callers to the normal constructor, though you can just use 'find callers' on the class name, which works fine). Issue #78
- If your field is called 'hasFoo' and its a boolean, and you use @Getter or @Data to generate a getter for it, that getter will now be called 'hasFoo' and not 'isHasFoo' as before. This rule holds for any field prefixed with 'has', 'is', or 'get', AND the character following the prefix is not lowercase (so that 'hashCodeGenerated' is not erroneously identified as already having a prefix!). Similar logic has been added to not generate a getter at all for a field named 'foo' or 'hasFoo' if there is already a method named 'isFoo'. Issue #77
- Starting the lombok installer on mac os X using soylatte instead of apple's JVM now correctly detects being on a mac, and using mac-specific code for finding and installing eclipses. Issue #80
- For non-mac, non-windows installations, the jar file in the
-javaagent
parameter is now written as an absolute path ineclipse.ini
instead of a relative one. For some reason, on at least 1 linux installation, an absolute path is required to make javaagent work. This 'fix' has the unfortunate side-effect of making it impossible to move your eclipse installation around without breaking the pointer to the lombok java agent, so this change has only been introduced for non-windows, non-mac. Thanks to WouterS for spotting this one and helping us out with some research on fixing it. Issue #79
- Initial release before announcements
- (note: There are a few different editions of lombok out there, all tagged with v0.8.)