aboutsummaryrefslogtreecommitdiff
path: root/src/core/lombok/javac/handlers
diff options
context:
space:
mode:
authorReinier Zwitserloot <reinier@zwitserloot.com>2010-07-28 19:06:46 +0200
committerReinier Zwitserloot <reinier@zwitserloot.com>2010-07-28 19:06:46 +0200
commit357fd954e535943a79224c851784e22b6e3b4c90 (patch)
tree07173c86be3120c605dafea02df7b611cb72a91a /src/core/lombok/javac/handlers
parent83b4dd86136cad95026f1f2543732e0e39ed6676 (diff)
downloadlombok-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.java5
-rw-r--r--src/core/lombok/javac/handlers/HandleSetter.java5
-rw-r--r--src/core/lombok/javac/handlers/JavacHandlerUtil.java18
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;