diff options
author | Reinier Zwitserloot <reinier@zwitserloot.com> | 2010-07-28 19:06:46 +0200 |
---|---|---|
committer | Reinier Zwitserloot <reinier@zwitserloot.com> | 2010-07-28 19:06:46 +0200 |
commit | 357fd954e535943a79224c851784e22b6e3b4c90 (patch) | |
tree | 07173c86be3120c605dafea02df7b611cb72a91a /src/core/lombok/javac/handlers | |
parent | 83b4dd86136cad95026f1f2543732e0e39ed6676 (diff) | |
download | lombok-357fd954e535943a79224c851784e22b6e3b4c90.tar.gz lombok-357fd954e535943a79224c851784e22b6e3b4c90.tar.bz2 lombok-357fd954e535943a79224c851784e22b6e3b4c90.zip |
Fix for issue #136: @Getter and @Setter now work on static fields again.
Diffstat (limited to 'src/core/lombok/javac/handlers')
-rw-r--r-- | src/core/lombok/javac/handlers/HandleGetter.java | 5 | ||||
-rw-r--r-- | src/core/lombok/javac/handlers/HandleSetter.java | 5 | ||||
-rw-r--r-- | src/core/lombok/javac/handlers/JavacHandlerUtil.java | 18 |
3 files changed, 20 insertions, 8 deletions
diff --git a/src/core/lombok/javac/handlers/HandleGetter.java b/src/core/lombok/javac/handlers/HandleGetter.java index 28402346..ac3a16a1 100644 --- a/src/core/lombok/javac/handlers/HandleGetter.java +++ b/src/core/lombok/javac/handlers/HandleGetter.java @@ -42,7 +42,6 @@ import com.sun.tools.javac.tree.JCTree.JCAnnotation; import com.sun.tools.javac.tree.JCTree.JCBlock; import com.sun.tools.javac.tree.JCTree.JCClassDecl; import com.sun.tools.javac.tree.JCTree.JCExpression; -import com.sun.tools.javac.tree.JCTree.JCFieldAccess; import com.sun.tools.javac.tree.JCTree.JCMethodDecl; import com.sun.tools.javac.tree.JCTree.JCStatement; import com.sun.tools.javac.tree.JCTree.JCTypeParameter; @@ -186,8 +185,8 @@ public class HandleGetter implements JavacAnnotationHandler<Getter> { private JCMethodDecl createGetter(long access, JavacNode field, TreeMaker treeMaker) { JCVariableDecl fieldNode = (JCVariableDecl) field.get(); - JCFieldAccess thisX = treeMaker.Select(treeMaker.Ident(field.toName("this")), fieldNode.name); - JCStatement returnStatement = treeMaker.Return(thisX); + JCExpression fieldRef = createFieldAccessor(treeMaker, field, true); + JCStatement returnStatement = treeMaker.Return(fieldRef); JCBlock methodBody = treeMaker.Block(0, List.of(returnStatement)); Name methodName = field.toName(toGetterName(fieldNode)); diff --git a/src/core/lombok/javac/handlers/HandleSetter.java b/src/core/lombok/javac/handlers/HandleSetter.java index 0c248527..98b68e4a 100644 --- a/src/core/lombok/javac/handlers/HandleSetter.java +++ b/src/core/lombok/javac/handlers/HandleSetter.java @@ -49,7 +49,6 @@ import com.sun.tools.javac.tree.JCTree.JCAssign; import com.sun.tools.javac.tree.JCTree.JCBlock; import com.sun.tools.javac.tree.JCTree.JCClassDecl; import com.sun.tools.javac.tree.JCTree.JCExpression; -import com.sun.tools.javac.tree.JCTree.JCFieldAccess; import com.sun.tools.javac.tree.JCTree.JCMethodDecl; import com.sun.tools.javac.tree.JCTree.JCStatement; import com.sun.tools.javac.tree.JCTree.JCTypeParameter; @@ -189,8 +188,8 @@ public class HandleSetter implements JavacAnnotationHandler<Setter> { private JCMethodDecl createSetter(long access, JavacNode field, TreeMaker treeMaker) { JCVariableDecl fieldDecl = (JCVariableDecl) field.get(); - JCFieldAccess thisX = treeMaker.Select(treeMaker.Ident(field.toName("this")), fieldDecl.name); - JCAssign assign = treeMaker.Assign(thisX, treeMaker.Ident(fieldDecl.name)); + JCExpression fieldRef = createFieldAccessor(treeMaker, field, true); + JCAssign assign = treeMaker.Assign(fieldRef, treeMaker.Ident(fieldDecl.name)); List<JCStatement> statements; List<JCAnnotation> nonNulls = findAnnotations(field, TransformationsUtil.NON_NULL_PATTERN); diff --git a/src/core/lombok/javac/handlers/JavacHandlerUtil.java b/src/core/lombok/javac/handlers/JavacHandlerUtil.java index 09d5c3fe..79436327 100644 --- a/src/core/lombok/javac/handlers/JavacHandlerUtil.java +++ b/src/core/lombok/javac/handlers/JavacHandlerUtil.java @@ -361,16 +361,30 @@ public class JavacHandlerUtil { * Creates an expression that reads the field. Will either be {@code this.field} or {@code this.getField()} depending on whether or not there's a getter. */ static JCExpression createFieldAccessor(TreeMaker maker, JavacNode field, boolean useFieldsDirectly) { - return createFieldAccessor(maker, field, useFieldsDirectly, maker.Ident(field.toName("this"))); + return createFieldAccessor(maker, field, useFieldsDirectly, null); } static JCExpression createFieldAccessor(TreeMaker maker, JavacNode field, boolean useFieldsDirectly, JCExpression receiver) { GetterMethod getter = useFieldsDirectly ? null : findGetter(field); + JCVariableDecl fieldDecl = (JCVariableDecl) field.get(); if (getter == null) { - return maker.Select(receiver, ((JCVariableDecl)field.get()).name); + if (receiver == null) { + if ((fieldDecl.mods.flags & Flags.STATIC) == 0) { + receiver = maker.Ident(field.toName("this")); + } else { + JavacNode containerNode = field.up(); + if (containerNode != null && containerNode.get() instanceof JCClassDecl) { + JCClassDecl container = (JCClassDecl) field.up().get(); + receiver = maker.Ident(container.name); + } + } + } + + return receiver == null ? maker.Ident(fieldDecl.name) : maker.Select(receiver, fieldDecl.name); } + if (receiver == null) receiver = maker.Ident(field.toName("this")); JCMethodInvocation call = maker.Apply(List.<JCExpression>nil(), maker.Select(receiver, getter.name), List.<JCExpression>nil()); return call; |