Lombok Changelog

What's new in Lombok 1.16.6

Aug 19, 2015
  • 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.

New in Lombok 1.16.4 (Apr 15, 2015)

  • BUG FIX: Lombok now works with Eclipse Mars.
  • BUG FIX: @UtilityClass could result in uninitialized static variables if compiled with ecj/eclipse. Issue #804
  • BUG FIX: 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 #732 and #791.

New in Lombok 1.16.2 (Feb 12, 2015)

  • 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 #702.
  • 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; taskdef lombok.delombok.ant.Tasks$Delombok instead of the old lombok.delombok.ant.DelombokTask. Issue #775.
  • BUGFIX: val in javac would occasionally fail if used inside inner classes. This is (probably) fixed. Issue #694 and Issue #581.
  • BUGFIX: Starting with v1.16.0, lombok would fail to execute as an executable jar if it was in a path was spaced in it. Issue #777.
  • BUGFIX: v1.16.0 did not work in old eclipse versions (such as eclipse indigo). Issue #783.

New in Lombok 1.16.0 (Jan 27, 2015)

  • BUGFIX: @ExtensionMethod was broken in Eclipse using java 8. Issue #742, Issue #747
  • 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 #759
  • PROMOTION: @Builder has graduated from experimental to the main package with a few changes (addition of @Singular, removal of the fluent and chain 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 your eclipse.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.

New in Lombok 1.14.8 (Sep 16, 2014)

  • PERFORMANCE: The configuration system typically hit the filesystem twice per read configuration key instead of hardly ever. This is a continuation of Issue #682.

New in Lombok 1.14.6 (Sep 3, 2014)

  • SPECIAL NOTE: If you still notice significant slowdowns in eclipse, try adding: -Dlombok.timeConfig to your eclipse.ini (after the -vmargs line) and send us the timing report that will show up in your eclipse error log at Issue #682. Then, to continue working with eclipse without the slowdowns, replace -Dlombok.timeConfig with -Dlombok.disableConfig. We believe this issue has already been fixed, but if not, please let us know!
  • BUG FIX: Usage of val would break starting with JDK8 release 1.8.0_20. Issue #731
  • BUG FIX: Depending on your eclipse project setup, releases v1.14.0 through v1.14.4 could noticeably slow down your eclipse. Issue #682.

New in Lombok 1.14.4 (Jul 9, 2014)

  • BUGFIX: GWT produces errors in handlers on line 1 in any source files that use lombok; this has been fixed. Issue #699
  • BUGFIX-IN-PROGRESS: Many pathfinder issues in eclipse (see the bugfix in progress in v1.14.2) have now been fixed. Issue #682

New in Lombok 1.14.2 (Jun 10, 2014)

  • 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 #688
  • 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 of isFoo(), instead going with getFoo(), for {@code boolean} fields.
  • BUGFIX: Errors in the eclipse log with IndexOutOfBound: 2 in ASTConverter.convertType. Issue #686
  • 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 #682
  • BUGFIX: mvn builds fail with a 'URI not absolute' exception. Issue #683

New in Lombok 1.14.0 (May 28, 2014)

  • 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 to lombok.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 generated equals() methods by specifying the onParam= option on @EqualsAndHashCode, similar to how that feature already exists for @Setter. Issue #674
  • CHANGE: suppressConstructorProperties should now be configured via lombok configuration. Issue #659
  • CHANGE: The canEqual method generated by @EqualsAndHashCode, @Value and @Data is now protected instead of public. Issue #660
  • 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 #590
  • BUGFIX: Usage of @SneakyThrows with a javac from JDK8 with -target 1.8 would result in a post compiler error. Issue #655
  • BUGFIX: Switching workspace on some versions of eclipse resulted in a 'duplicate field' error. Issue #666

New in Lombok 1.12.6 (Mar 17, 2014)

  • BUGFIX: Deadlocks would occasionally occur in eclipse during project builds, especially if using the gradle plugin. Issue #645
  • PLATFORM: Added support for Eclipse Luna. Issue #609
  • PLATFORM: Initial JDK8 support for eclipse's alpha support in kepler. Issue #597
  • FEATURE: The various @Log annotations now support the topic parameter, which sets the logger's name. The default remains the fully qualified type name of the class itself. Issue #632.
  • BUGFIX: Using lombok with IntelliJ and the IBM JDK would result in NPEs during initialization. Issue #648, IntelliJ plugin issue #74.
  • BUGFIX: Eclipse quickfix Surround with try/catch block didn't work inside @SneakyThrows annotated methods Issue #438.
  • BUGFIX: Eclipse refactoring Extract Local Variable didn't work inside @SneakyThrows annotated methods Issue #633.
  • BUGFIX: {Netbeans} @SneakyThrows would lead to unused import and break refactorings Issue #471.
  • BUGFIX: Eclipse Organize Imports would generate error: AST must not be null Issue #631.
  • BUGFIX: Copying javadoc to getters / setters / withers would copy non-relevant sections too. Issue #585.
  • 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 #647
  • DETAIL: {Delombok} Inside enum bodies the delombok formatter didn't respect the emptyLines directive Issue #629.
  • DETAIL: Use smaller primes (

New in Lombok 0.12.5 (Jan 22, 2014)

  • DETAIL: {Delombok} Inside enum bodies the delombok formatter didn't respect the emptyLines directive Issue #629.
  • DETAIL: Use smaller primes (

New in Lombok 0.12.4 (Jan 17, 2014)

  • BUGFIX: v1.12.2's delombok turns all operator+assignments into just assignment. Fixed. Issue #598
  • BUGFIX: {Netbeans} v1.12.2 doesn't well with netbeans. Issue #591
  • 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 #608
  • 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 #625

New in Lombok 0.12.2 (Oct 11, 2013)

  • PLATFORM: Initial JDK8 support, without affecting existing support for JDK6 and 7. Issue #451. 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 #554.
  • 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 #559.
  • BUGFIX: Using @NonNull on methods that also have @SneakyThrows or @Synchronized caused arbitrary behaviour. Issue #588.
  • GERMANY: Major version bumped from 0 to 1, because allegedly this is important. Rest assured, this change is nevertheless backwards compatible.

New in Lombok 0.12.0 (Jul 16, 2013)

  • 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 #59. @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 #16, 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 a NullPointerException with the name of the parameter as the message. Issue #514
  • BUGFIX: Usage of Lombok.sneakyThrow() or @SneakyThrows would sometimes result in invalid classes (classes which fail with VerifyError). Issue #470
  • BUGFIX: Using val in try-with-resources did not work for javac. Issue #520
  • 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 with equals / hashCode / canEqual, as nothing is generated if any one of those methods is present. Now, if one of equals or hashCode is present but not the other one (or canEqual is present but equals and/or hashCode 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 #513
  • BUGFIX: Possibly fixed a race condition in patcher Issue #531.

New in Lombok 0.11.8 (Apr 23, 2013)

  • 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 and onParam 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 #432
  • 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 #434
  • BUGFIX: @ExtensionMethods no longer causes VerifyError 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 #436
  • BUGFIX: java 7's try-with-resources statement did not delombok correctly. Issue #459

New in Lombok 0.11.6 (Oct 31, 2012)

  • 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 #421
  • BUGFIX: {Delombok} Running delombok has been causing VerifyError errors when used with javac 1.7 since 0.11.0. Issue #422
  • 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 #423
  • BUGFIX: @Deprecated on a field that gets a generated setter in eclipse would result in IllegalArgumentException, 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 #408

New in Lombok 0.11.4 (Aug 16, 2012)

  • 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 #390
  • BUGFIX: {Netbeans} @Cleanup and @Synchronized cause far fewer issues in the netbeans editor. Issue #393
  • 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 #363
  • BUGFIX: @ExtensionMethod had all sorts of issues in javac. Issue #399
  • BUGFIX: Generating static constructors with javac when you have fields with generics, i.e. Class, caused errors. Issue #396
  • BUGFIX: Minor @ExtensionMethod issues in eclipse, such as the ability to call extension methods on a super reference which is now no longer possible. Issue #406

New in Lombok 0.11.2 (Jul 20, 2012)

  • 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 and hashCode. Issue #366
  • BUGFIX: Eclipse would display an error message regarding an invalid super constructor in the wrong location. Issue #336
  • 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 #376
  • BUGFIX: SneakyThrows in constructor should not wrap this/super call in try-block Issue #381
  • BUGFIX: Setting breakpoints on code above the first generated method was not possible. Issue #377

New in Lombok 0.9.3 (Oct 18, 2010)

  • 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 #129
  • 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 #79
  • 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 setting suppressConstructorProperties to true in a @RequiredArgsConstructor or @AllArgsConstructor annotation. Issue #122
  • FEATURE: generated toString, equals and hashCode methods will now use this.getX() and other.getX() instead of this.x and other.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 #110
  • ENHANCEMENT: FindBugs' @CheckForNull is now copied from a field to a setter's parameter and the getter method just like @Nullable. Issue #128
  • ENHANCEMENT: plugins and @SneakyThrows: Resolving types in annotations now works better especially for classes that aren't in the core java libraries. Issue #88
  • ENHANCEMENT: If tools.jar isn't found (required when running delombok), now a useful error message is generated. The search for tools.jar now also looks in JAVA_HOME.
  • ENHANCEMENT: toString() on inner classes now lists the class name as Outer.Inner instead of just Inner. Addresses issue #133(http://code.google.com/p/projectlombok/issues/detail?id=133)
  • 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 #48
  • 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 #47
  • 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 #72
  • BUGFIX: Eclipse: @Data and other annotations now don't throw errors when you include fields with bounded wildcard generics, such as List