aboutsummaryrefslogtreecommitdiff
path: root/src/lombok/eclipse/handlers
diff options
context:
space:
mode:
authorReinier Zwitserloot <reinier@tipit.to>2009-06-12 09:54:24 +0200
committerReinier Zwitserloot <reinier@tipit.to>2009-06-12 09:54:24 +0200
commit637298300039a4b943e49c654cb4d2b26161ba60 (patch)
treedfe03dd68e2b961f67260b72e6fb130e8e05bb94 /src/lombok/eclipse/handlers
parent40e35d6f79f456fb868c95d764f5d0c9869ea6e4 (diff)
downloadlombok-637298300039a4b943e49c654cb4d2b26161ba60.tar.gz
lombok-637298300039a4b943e49c654cb4d2b26161ba60.tar.bz2
lombok-637298300039a4b943e49c654cb4d2b26161ba60.zip
Now everything works; handlers are called via SPI, and annotations are being parsed. w00t!
Diffstat (limited to 'src/lombok/eclipse/handlers')
-rw-r--r--src/lombok/eclipse/handlers/HandleGetter_ecj.java32
1 files changed, 27 insertions, 5 deletions
diff --git a/src/lombok/eclipse/handlers/HandleGetter_ecj.java b/src/lombok/eclipse/handlers/HandleGetter_ecj.java
index e61eb64b..9ce8d2d9 100644
--- a/src/lombok/eclipse/handlers/HandleGetter_ecj.java
+++ b/src/lombok/eclipse/handlers/HandleGetter_ecj.java
@@ -2,6 +2,9 @@ package lombok.eclipse.handlers;
import java.lang.reflect.Modifier;
+import lombok.AccessLevel;
+import lombok.Getter;
+import lombok.eclipse.EclipseAnnotationHandler;
import lombok.eclipse.EclipseAST.Node;
import lombok.transformations.TransformationsUtil;
@@ -17,9 +20,12 @@ import org.eclipse.jdt.internal.compiler.ast.Statement;
import org.eclipse.jdt.internal.compiler.ast.TypeDeclaration;
import org.eclipse.jdt.internal.compiler.ast.TypeReference;
import org.eclipse.jdt.internal.compiler.lookup.MethodScope;
+import org.mangosdk.spi.ProviderFor;
-public class HandleGetter_ecj {
- public void apply(Annotation annotation, Node node, FieldDeclaration field) {
+@ProviderFor(EclipseAnnotationHandler.class)
+public class HandleGetter_ecj implements EclipseAnnotationHandler<Getter> {
+ @Override public void handle(Getter annotation, Annotation ast, Node node) {
+ FieldDeclaration field = (FieldDeclaration) node.getEclipseNode();
TypeReference fieldType = field.type;
String getterName = TransformationsUtil.toGetterName(
new String(field.name), nameEquals(fieldType.getTypeName(), "boolean"));
@@ -30,7 +36,7 @@ public class HandleGetter_ecj {
}
MethodDeclaration method = new MethodDeclaration(parent.compilationResult);
- method.modifiers = Modifier.PUBLIC;
+ method.modifiers = toModifier(annotation.value());
method.returnType = field.type;
method.annotations = null;
method.arguments = null;
@@ -42,8 +48,8 @@ public class HandleGetter_ecj {
method.bits |= ASTNode.Bit24;
Expression fieldExpression = new SingleNameReference(field.name, (field.declarationSourceStart << 32) | field.declarationSourceEnd);
Statement returnStatement = new ReturnStatement(fieldExpression, field.sourceStart, field.sourceEnd);
- method.bodyStart = method.declarationSourceStart = method.sourceStart = annotation.sourceStart;
- method.bodyEnd = method.declarationSourceEnd = method.sourceEnd = annotation.sourceEnd;
+ method.bodyStart = method.declarationSourceStart = method.sourceStart = ast.sourceStart;
+ method.bodyEnd = method.declarationSourceEnd = method.sourceEnd = ast.sourceEnd;
method.statements = new Statement[] { returnStatement };
if ( parent.methods == null ) {
parent.methods = new AbstractMethodDeclaration[1];
@@ -56,6 +62,21 @@ public class HandleGetter_ecj {
}
}
+ private int toModifier(AccessLevel value) {
+ switch ( value ) {
+ case MODULE:
+ case PACKAGE:
+ return 0;
+ default:
+ case PUBLIC:
+ return Modifier.PUBLIC;
+ case PROTECTED:
+ return Modifier.PROTECTED;
+ case PRIVATE:
+ return Modifier.PRIVATE;
+ }
+ }
+
private boolean nameEquals(char[][] typeName, String string) {
StringBuilder sb = new StringBuilder();
boolean first = true;
@@ -67,4 +88,5 @@ public class HandleGetter_ecj {
return string.contentEquals(sb);
}
+
}