From db19327cb4b9f5a08665b85d4cb953118ce69c13 Mon Sep 17 00:00:00 2001 From: Reinier Zwitserloot Date: Thu, 8 Nov 2018 15:51:08 +0100 Subject: [fixes #1628] Lombok now marks the `result` field used in the generated hashCode method as final if it isn’t modified. This doesn’t change its behavior whatsoever, but some linters and especially eclipse save actions (specifically: ‘mark local variables final if possible’) cause issues when they try to mess with generated code. Of course, now any save action with ‘remove useless modifiers’ would cause an issue but those don’t (yet…) exist. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lombok/eclipse/handlers/HandleEqualsAndHashCode.java | 13 +++++++++++-- src/core/lombok/javac/handlers/HandleEqualsAndHashCode.java | 6 ++++-- 2 files changed, 15 insertions(+), 4 deletions(-) (limited to 'src/core/lombok') diff --git a/src/core/lombok/eclipse/handlers/HandleEqualsAndHashCode.java b/src/core/lombok/eclipse/handlers/HandleEqualsAndHashCode.java index 6945e5d9..84e5185d 100644 --- a/src/core/lombok/eclipse/handlers/HandleEqualsAndHashCode.java +++ b/src/core/lombok/eclipse/handlers/HandleEqualsAndHashCode.java @@ -227,7 +227,7 @@ public class HandleEqualsAndHashCode extends EclipseAnnotationHandler> members, boolean callSuper, ASTNode source, FieldAccess fieldAccess) { int pS = source.sourceStart, pE = source.sourceEnd; - long p = (long)pS << 32 | pE; + long p = (long) pS << 32 | pE; MethodDeclaration method = new MethodDeclaration(((CompilationUnitDeclaration) type.top().get()).compilationResult); setGeneratedBy(method, source); @@ -246,7 +246,14 @@ public class HandleEqualsAndHashCode extends EclipseAnnotationHandler statements = new ArrayList(); - final boolean isEmpty = members.isEmpty(); + boolean isEmpty = true; + for (Included member : members) { + TypeReference fType = getFieldType(member.getNode(), fieldAccess); + if (fType.getLastToken() != null) { + isEmpty = false; + break; + } + } /* final int PRIME = X; */ { /* Without members, PRIME isn't used, as that would trigger a 'local variable not used' warning. */ @@ -282,6 +289,7 @@ public class HandleEqualsAndHashCode extends EclipseAnnotationHandler>> 32 ^ ref) */ statements.add(createLocalDeclaration(source, dollarFieldName, TypeReference.baseTypeReference(TypeIds.T_long, 0), fieldAccessor)); SingleNameReference copy1 = new SingleNameReference(dollarFieldName, p); setGeneratedBy(copy1, source); diff --git a/src/core/lombok/javac/handlers/HandleEqualsAndHashCode.java b/src/core/lombok/javac/handlers/HandleEqualsAndHashCode.java index aa0fe633..cb12bd4e 100644 --- a/src/core/lombok/javac/handlers/HandleEqualsAndHashCode.java +++ b/src/core/lombok/javac/handlers/HandleEqualsAndHashCode.java @@ -210,8 +210,10 @@ public class HandleEqualsAndHashCode extends JavacAnnotationHandler member : members) { -- cgit