From 16661be2d99359c94569620e1daf2362d5356341 Mon Sep 17 00:00:00 2001 From: Reinier Zwitserloot Date: Tue, 25 Oct 2011 19:39:08 +0200 Subject: Fixed issue 289: non-static inner classes whose outer class has generics can't be @EqualsAndHashCode marked. --- .../javac/handlers/HandleEqualsAndHashCode.java | 29 ++++++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) (limited to 'src/core/lombok/javac') diff --git a/src/core/lombok/javac/handlers/HandleEqualsAndHashCode.java b/src/core/lombok/javac/handlers/HandleEqualsAndHashCode.java index 50bcdd3e..2d4adbdb 100644 --- a/src/core/lombok/javac/handlers/HandleEqualsAndHashCode.java +++ b/src/core/lombok/javac/handlers/HandleEqualsAndHashCode.java @@ -320,6 +320,26 @@ public class HandleEqualsAndHashCode extends JavacAnnotationHandler list = new ArrayList(); + list.add(type.getName()); + JavacNode tNode = type.up(); + while (tNode != null && tNode.getKind() == Kind.TYPE) { + list.add(tNode.getName()); + tNode = tNode.up(); + } + Collections.reverse(list); + + TreeMaker maker = type.getTreeMaker(); + JCExpression chain = maker.Ident(type.toName(list.get(0))); + + for (int i = 1; i < list.size(); i++) { + chain = maker.Select(chain, type.toName(list.get(i))); + } + + return chain; + } + private JCMethodDecl createEquals(JavacNode typeNode, List fields, boolean callSuper, FieldAccess fieldAccess, boolean needsCanEqual, JCTree source) { TreeMaker maker = typeNode.getTreeMaker(); JCClassDecl type = (JCClassDecl) typeNode.get(); @@ -341,8 +361,8 @@ public class HandleEqualsAndHashCode extends JavacAnnotationHandlernil()); JCExpression returnType = maker.TypeIdent(getCtcInt(TypeTags.class, "BOOLEAN")); @@ -458,7 +477,7 @@ public class HandleEqualsAndHashCode extends JavacAnnotationHandler params = List.of(maker.VarDef(maker.Modifiers(Flags.FINAL), otherName, objectType, null)); JCBlock body = maker.Block(0, List.of( - maker.Return(maker.TypeTest(maker.Ident(otherName), maker.Ident(type.name))))); + maker.Return(maker.TypeTest(maker.Ident(otherName), createTypeReference(typeNode))))); return recursiveSetGeneratedBy(maker.MethodDef(mods, canEqualName, returnType, List.nil(), params, List.nil(), body, null), source); } -- cgit