From 186b16c28cf461f88a3b5eecd2fa4523af2949d9 Mon Sep 17 00:00:00 2001
From: Reinier Zwitserloot <reinier@zwitserloot.com>
Date: Tue, 9 Nov 2010 23:52:54 +0100
Subject: EqualsAndHashCode no longer worked right when working on a class with
 0 fileds. Fixed. Thanks to Philipp Eichhorn for spotting this problem!

---
 .../eclipse/handlers/HandleEqualsAndHashCode.java  |  2 +-
 .../javac/handlers/HandleEqualsAndHashCode.java    | 36 ++++++++++++----------
 2 files changed, 20 insertions(+), 18 deletions(-)

(limited to 'src/core')

diff --git a/src/core/lombok/eclipse/handlers/HandleEqualsAndHashCode.java b/src/core/lombok/eclipse/handlers/HandleEqualsAndHashCode.java
index 23d24fb0..2b830241 100644
--- a/src/core/lombok/eclipse/handlers/HandleEqualsAndHashCode.java
+++ b/src/core/lombok/eclipse/handlers/HandleEqualsAndHashCode.java
@@ -505,7 +505,7 @@ public class HandleEqualsAndHashCode implements EclipseAnnotationHandler<EqualsA
 		char[] otherName = "other".toCharArray();
 		
 		/* MyType<?> other = (MyType<?>) o; */ {
-			if (!fields.isEmpty()) {
+			if (!fields.isEmpty() || needsCanEqual) {
 				LocalDeclaration other = new LocalDeclaration(otherName, pS, pE);
 				other.modifiers |= ClassFileConstants.AccFinal;
 				Eclipse.setGeneratedBy(other, source);
diff --git a/src/core/lombok/javac/handlers/HandleEqualsAndHashCode.java b/src/core/lombok/javac/handlers/HandleEqualsAndHashCode.java
index f824986c..8d524964 100644
--- a/src/core/lombok/javac/handlers/HandleEqualsAndHashCode.java
+++ b/src/core/lombok/javac/handlers/HandleEqualsAndHashCode.java
@@ -356,24 +356,26 @@ public class HandleEqualsAndHashCode implements JavacAnnotationHandler<EqualsAnd
 		}
 		
 		/* MyType<?> other = (MyType<?>) o; */ {
-			final JCExpression selfType1, selfType2;
-			List<JCExpression> wildcards1 = List.nil();
-			List<JCExpression> wildcards2 = List.nil();
-			for (int i = 0 ; i < type.typarams.length() ; i++) {
-				wildcards1 = wildcards1.append(maker.Wildcard(maker.TypeBoundKind(BoundKind.UNBOUND), null));
-				wildcards2 = wildcards2.append(maker.Wildcard(maker.TypeBoundKind(BoundKind.UNBOUND), null));
-			}
-			
-			if (type.typarams.isEmpty()) {
-				selfType1 = maker.Ident(type.name);
-				selfType2 = maker.Ident(type.name);
-			} else {
-				selfType1 = maker.TypeApply(maker.Ident(type.name), wildcards1);
-				selfType2 = maker.TypeApply(maker.Ident(type.name), wildcards2);
+			if (!fields.isEmpty() || needsCanEqual) {
+				final JCExpression selfType1, selfType2;
+				List<JCExpression> wildcards1 = List.nil();
+				List<JCExpression> wildcards2 = List.nil();
+				for (int i = 0 ; i < type.typarams.length() ; i++) {
+					wildcards1 = wildcards1.append(maker.Wildcard(maker.TypeBoundKind(BoundKind.UNBOUND), null));
+					wildcards2 = wildcards2.append(maker.Wildcard(maker.TypeBoundKind(BoundKind.UNBOUND), null));
+				}
+				
+				if (type.typarams.isEmpty()) {
+					selfType1 = maker.Ident(type.name);
+					selfType2 = maker.Ident(type.name);
+				} else {
+					selfType1 = maker.TypeApply(maker.Ident(type.name), wildcards1);
+					selfType2 = maker.TypeApply(maker.Ident(type.name), wildcards2);
+				}
+				
+				statements = statements.append(
+						maker.VarDef(maker.Modifiers(Flags.FINAL), otherName, selfType1, maker.TypeCast(selfType2, maker.Ident(oName))));
 			}
-			
-			statements = statements.append(
-					maker.VarDef(maker.Modifiers(Flags.FINAL), otherName, selfType1, maker.TypeCast(selfType2, maker.Ident(oName))));
 		}
 		
 		/* if (!other.canEqual(this)) return false; */ {
-- 
cgit