aboutsummaryrefslogtreecommitdiff
path: root/src/core/lombok/eclipse
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/lombok/eclipse')
-rw-r--r--src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java22
-rw-r--r--src/core/lombok/eclipse/handlers/HandleGetter.java17
-rw-r--r--src/core/lombok/eclipse/handlers/HandleSetter.java17
3 files changed, 29 insertions, 27 deletions
diff --git a/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java b/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java
index 935aee14..12202e27 100644
--- a/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java
+++ b/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java
@@ -186,11 +186,23 @@ public class EclipseHandlerUtil {
GetterMethod getter = useFieldsDirectly ? null : findGetter(field);
if (getter == null) {
- FieldReference thisX = new FieldReference(field.getName().toCharArray(), p);
- Eclipse.setGeneratedBy(thisX, source);
- thisX.receiver = new ThisReference(pS, pE);
- Eclipse.setGeneratedBy(thisX.receiver, source);
- return thisX;
+ FieldDeclaration fieldDecl = (FieldDeclaration)field.get();
+ FieldReference ref = new FieldReference(field.getName().toCharArray(), p);
+ if ((fieldDecl.modifiers & ClassFileConstants.AccStatic) != 0) {
+ EclipseNode containerNode = field.up();
+ if (containerNode != null && containerNode.get() instanceof TypeDeclaration) {
+ ref.receiver = new SingleNameReference(((TypeDeclaration)containerNode.get()).name, p);
+ } else {
+ Expression smallRef = new FieldReference(field.getName().toCharArray(), p);
+ Eclipse.setGeneratedBy(smallRef, source);
+ return smallRef;
+ }
+ } else {
+ ref.receiver = new ThisReference(pS, pE);
+ }
+ Eclipse.setGeneratedBy(ref, source);
+ Eclipse.setGeneratedBy(ref.receiver, source);
+ return ref;
}
MessageSend call = new MessageSend();
diff --git a/src/core/lombok/eclipse/handlers/HandleGetter.java b/src/core/lombok/eclipse/handlers/HandleGetter.java
index 597e05ca..1a2a10ac 100644
--- a/src/core/lombok/eclipse/handlers/HandleGetter.java
+++ b/src/core/lombok/eclipse/handlers/HandleGetter.java
@@ -37,12 +37,11 @@ import lombok.eclipse.EclipseNode;
import org.eclipse.jdt.internal.compiler.ast.ASTNode;
import org.eclipse.jdt.internal.compiler.ast.Annotation;
+import org.eclipse.jdt.internal.compiler.ast.Expression;
import org.eclipse.jdt.internal.compiler.ast.FieldDeclaration;
-import org.eclipse.jdt.internal.compiler.ast.FieldReference;
import org.eclipse.jdt.internal.compiler.ast.MethodDeclaration;
import org.eclipse.jdt.internal.compiler.ast.ReturnStatement;
import org.eclipse.jdt.internal.compiler.ast.Statement;
-import org.eclipse.jdt.internal.compiler.ast.ThisReference;
import org.eclipse.jdt.internal.compiler.ast.TypeDeclaration;
import org.eclipse.jdt.internal.compiler.ast.TypeReference;
import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
@@ -172,7 +171,7 @@ public class HandleGetter implements EclipseAnnotationHandler<Getter> {
}
}
- MethodDeclaration method = generateGetter((TypeDeclaration) fieldNode.up().get(), field, getterName, modifier, source);
+ MethodDeclaration method = generateGetter((TypeDeclaration) fieldNode.up().get(), fieldNode, getterName, modifier, source);
Annotation[] copiedAnnotations = copyAnnotations(
findAnnotations(field, TransformationsUtil.NON_NULL_PATTERN),
findAnnotations(field, TransformationsUtil.NULLABLE_PATTERN), source);
@@ -185,8 +184,8 @@ public class HandleGetter implements EclipseAnnotationHandler<Getter> {
return true;
}
- private MethodDeclaration generateGetter(TypeDeclaration parent, FieldDeclaration field, String name,
- int modifier, ASTNode source) {
+ private MethodDeclaration generateGetter(TypeDeclaration parent, EclipseNode fieldNode, String name, int modifier, ASTNode source) {
+ FieldDeclaration field = (FieldDeclaration) fieldNode.get();
MethodDeclaration method = new MethodDeclaration(parent.compilationResult);
Eclipse.setGeneratedBy(method, source);
method.modifiers = modifier;
@@ -198,12 +197,8 @@ public class HandleGetter implements EclipseAnnotationHandler<Getter> {
method.thrownExceptions = null;
method.typeParameters = null;
method.bits |= ECLIPSE_DO_NOT_TOUCH_FLAG;
- long p = ((long)field.declarationSourceStart << 32) | field.declarationSourceEnd;
- FieldReference thisX = new FieldReference(field.name, p);
- Eclipse.setGeneratedBy(thisX, source);
- thisX.receiver = new ThisReference(source.sourceStart, source.sourceEnd);
- Eclipse.setGeneratedBy(thisX.receiver, source);
- Statement returnStatement = new ReturnStatement(thisX, field.sourceStart, field.sourceEnd);
+ Expression fieldRef = createFieldAccessor(fieldNode, true, source);
+ Statement returnStatement = new ReturnStatement(fieldRef, field.sourceStart, field.sourceEnd);
Eclipse.setGeneratedBy(returnStatement, source);
method.bodyStart = method.declarationSourceStart = method.sourceStart = source.sourceStart;
method.bodyEnd = method.declarationSourceEnd = method.sourceEnd = source.sourceEnd;
diff --git a/src/core/lombok/eclipse/handlers/HandleSetter.java b/src/core/lombok/eclipse/handlers/HandleSetter.java
index 1583de1b..7c4aaabb 100644
--- a/src/core/lombok/eclipse/handlers/HandleSetter.java
+++ b/src/core/lombok/eclipse/handlers/HandleSetter.java
@@ -40,13 +40,12 @@ import org.eclipse.jdt.internal.compiler.ast.ASTNode;
import org.eclipse.jdt.internal.compiler.ast.Annotation;
import org.eclipse.jdt.internal.compiler.ast.Argument;
import org.eclipse.jdt.internal.compiler.ast.Assignment;
+import org.eclipse.jdt.internal.compiler.ast.Expression;
import org.eclipse.jdt.internal.compiler.ast.FieldDeclaration;
-import org.eclipse.jdt.internal.compiler.ast.FieldReference;
import org.eclipse.jdt.internal.compiler.ast.MethodDeclaration;
import org.eclipse.jdt.internal.compiler.ast.NameReference;
import org.eclipse.jdt.internal.compiler.ast.SingleNameReference;
import org.eclipse.jdt.internal.compiler.ast.Statement;
-import org.eclipse.jdt.internal.compiler.ast.ThisReference;
import org.eclipse.jdt.internal.compiler.ast.TypeDeclaration;
import org.eclipse.jdt.internal.compiler.ast.TypeReference;
import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
@@ -168,16 +167,15 @@ public class HandleSetter implements EclipseAnnotationHandler<Setter> {
//continue with creating the setter
}
- MethodDeclaration method = generateSetter((TypeDeclaration) fieldNode.up().get(), field, setterName, modifier, pos);
+ MethodDeclaration method = generateSetter((TypeDeclaration) fieldNode.up().get(), fieldNode, setterName, modifier, pos);
injectMethod(fieldNode.up(), method);
return true;
}
- private MethodDeclaration generateSetter(TypeDeclaration parent, FieldDeclaration field, String name,
- int modifier, ASTNode source) {
-
+ private MethodDeclaration generateSetter(TypeDeclaration parent, EclipseNode fieldNode, String name, int modifier, ASTNode source) {
+ FieldDeclaration field = (FieldDeclaration) fieldNode.get();
int pS = source.sourceStart, pE = source.sourceEnd;
long p = (long)pS << 32 | pE;
MethodDeclaration method = new MethodDeclaration(parent.compilationResult);
@@ -196,13 +194,10 @@ public class HandleSetter implements EclipseAnnotationHandler<Setter> {
method.thrownExceptions = null;
method.typeParameters = null;
method.bits |= ECLIPSE_DO_NOT_TOUCH_FLAG;
- FieldReference thisX = new FieldReference(field.name, p);
- Eclipse.setGeneratedBy(thisX, source);
- thisX.receiver = new ThisReference(source.sourceStart, source.sourceEnd);
- Eclipse.setGeneratedBy(thisX.receiver, source);
+ Expression fieldRef = createFieldAccessor(fieldNode, true, source);
NameReference fieldNameRef = new SingleNameReference(field.name, p);
Eclipse.setGeneratedBy(fieldNameRef, source);
- Assignment assignment = new Assignment(thisX, fieldNameRef, (int)p);
+ Assignment assignment = new Assignment(fieldRef, fieldNameRef, (int)p);
assignment.sourceStart = pS; assignment.sourceEnd = pE;
Eclipse.setGeneratedBy(assignment, source);
method.bodyStart = method.declarationSourceStart = method.sourceStart = source.sourceStart;