diff options
author | Reinier Zwitserloot <reinier@tipit.to> | 2009-06-19 16:24:10 +0200 |
---|---|---|
committer | Reinier Zwitserloot <reinier@tipit.to> | 2009-06-19 16:24:10 +0200 |
commit | ff306fa5d97a09d69332c76a33596bb053222855 (patch) | |
tree | 00124b2190b36f13381d9513717e558aacbad973 /src/lombok/javac/HandlerLibrary.java | |
parent | e56ab6c2457531c0ce8556097f945b6e7946f6f2 (diff) | |
download | lombok-ff306fa5d97a09d69332c76a33596bb053222855.tar.gz lombok-ff306fa5d97a09d69332c76a33596bb053222855.tar.bz2 lombok-ff306fa5d97a09d69332c76a33596bb053222855.zip |
Added initial support for the @Data annotation. Currently produces getters and setters only,
not yet a constructor, toString, hashCode, or equals.
HandleGetter and HandleSetter have been updated to handle static (theoretic; you can't put annotations on static fields normally).
You can now make AnnotationValue objects using just an annotationNode and a target type, as well as check if a given annotationNode is likely to represent a target annotation type. This is in Javac and Eclipse classes.
HandleGetter and HandleSetter can now be asked to make a getter/setter, and will grab access level off of a Getter/Setter annotation, if present.
Diffstat (limited to 'src/lombok/javac/HandlerLibrary.java')
-rw-r--r-- | src/lombok/javac/HandlerLibrary.java | 64 |
1 files changed, 1 insertions, 63 deletions
diff --git a/src/lombok/javac/HandlerLibrary.java b/src/lombok/javac/HandlerLibrary.java index 05aebf20..f9404668 100644 --- a/src/lombok/javac/HandlerLibrary.java +++ b/src/lombok/javac/HandlerLibrary.java @@ -1,13 +1,10 @@ package lombok.javac; import java.lang.annotation.Annotation; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; -import java.util.List; import java.util.Map; import java.util.ServiceConfigurationError; import java.util.ServiceLoader; @@ -16,22 +13,13 @@ import javax.annotation.processing.Messager; import javax.lang.model.element.TypeElement; import javax.tools.Diagnostic; -import lombok.core.AnnotationValues; import lombok.core.SpiLoadUtil; import lombok.core.TypeLibrary; import lombok.core.TypeResolver; -import lombok.core.AnnotationValues.AnnotationValue; import lombok.core.AnnotationValues.AnnotationValueDecodeFail; import com.sun.tools.javac.tree.JCTree.JCAnnotation; -import com.sun.tools.javac.tree.JCTree.JCAssign; import com.sun.tools.javac.tree.JCTree.JCCompilationUnit; -import com.sun.tools.javac.tree.JCTree.JCExpression; -import com.sun.tools.javac.tree.JCTree.JCFieldAccess; -import com.sun.tools.javac.tree.JCTree.JCIdent; -import com.sun.tools.javac.tree.JCTree.JCLiteral; -import com.sun.tools.javac.tree.JCTree.JCNewArray; -import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition; public class HandlerLibrary { @@ -53,58 +41,8 @@ public class HandlerLibrary { this.annotationClass = annotationClass; } - private Object calculateGuess(JCExpression expr) { - if ( expr instanceof JCLiteral ) { - return ((JCLiteral)expr).value; - } else if ( expr instanceof JCIdent || expr instanceof JCFieldAccess ) { - String x = expr.toString(); - if ( x.endsWith(".class") ) x = x.substring(0, x.length() - 6); - else { - int idx = x.lastIndexOf('.'); - if ( idx > -1 ) x = x.substring(idx + 1); - } - return x; - } else return null; - } - public boolean handle(final JavacAST.Node node) { - Map<String, AnnotationValue> values = new HashMap<String, AnnotationValue>(); - JCAnnotation anno = (JCAnnotation) node.get(); - List<JCExpression> arguments = anno.getArguments(); - for ( Method m : annotationClass.getDeclaredMethods() ) { - if ( !Modifier.isPublic(m.getModifiers()) ) continue; - String name = m.getName(); - List<String> raws = new ArrayList<String>(); - List<Object> guesses = new ArrayList<Object>(); - final List<DiagnosticPosition> positions = new ArrayList<DiagnosticPosition>(); - - for ( JCExpression arg : arguments ) { - JCAssign assign = (JCAssign) arg; - String mName = assign.lhs.toString(); - if ( !mName.equals(name) ) continue; - JCExpression rhs = assign.rhs; - if ( rhs instanceof JCNewArray ) { - List<JCExpression> elems = ((JCNewArray)rhs).elems; - for ( JCExpression inner : elems ) { - raws.add(inner.toString()); - guesses.add(calculateGuess(inner)); - positions.add(inner.pos()); - } - } else { - raws.add(rhs.toString()); - guesses.add(calculateGuess(rhs)); - positions.add(rhs.pos()); - } - } - - values.put(name, new AnnotationValue(node, raws, guesses) { - @Override public void setError(String message, int valueIdx) { - node.addError(message, positions.get(valueIdx)); - } - }); - } - - return handler.handle(new AnnotationValues<T>(annotationClass, values, node), (JCAnnotation)node.get(), node); + return handler.handle(Javac.createAnnotation(annotationClass, node), (JCAnnotation)node.get(), node); } } |