aboutsummaryrefslogtreecommitdiff
path: root/src/lombok/eclipse/HandlerLibrary.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/lombok/eclipse/HandlerLibrary.java')
-rw-r--r--src/lombok/eclipse/HandlerLibrary.java90
1 files changed, 2 insertions, 88 deletions
diff --git a/src/lombok/eclipse/HandlerLibrary.java b/src/lombok/eclipse/HandlerLibrary.java
index 86efd53e..39864e8e 100644
--- a/src/lombok/eclipse/HandlerLibrary.java
+++ b/src/lombok/eclipse/HandlerLibrary.java
@@ -3,13 +3,10 @@ package lombok.eclipse;
import static lombok.eclipse.Eclipse.toQualifiedName;
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;
@@ -18,20 +15,11 @@ 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 lombok.eclipse.EclipseAST.Node;
-import org.eclipse.jdt.internal.compiler.ast.ArrayInitializer;
-import org.eclipse.jdt.internal.compiler.ast.ClassLiteralAccess;
import org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration;
-import org.eclipse.jdt.internal.compiler.ast.Expression;
-import org.eclipse.jdt.internal.compiler.ast.Literal;
-import org.eclipse.jdt.internal.compiler.ast.MemberValuePair;
-import org.eclipse.jdt.internal.compiler.ast.QualifiedNameReference;
-import org.eclipse.jdt.internal.compiler.ast.SingleNameReference;
import org.eclipse.jdt.internal.compiler.ast.TypeReference;
-import org.eclipse.jdt.internal.compiler.lookup.TypeIds;
public class HandlerLibrary {
private TypeLibrary typeLibrary = new TypeLibrary();
@@ -47,54 +35,8 @@ public class HandlerLibrary {
public boolean handle(org.eclipse.jdt.internal.compiler.ast.Annotation annotation,
final Node annotationNode) {
- Map<String, AnnotationValue> values = new HashMap<String, AnnotationValue>();
-
- final MemberValuePair[] pairs = annotation.memberValuePairs();
- 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>();
- Expression fullExpression = null;
- Expression[] expressions = null;
-
- if ( pairs != null ) for ( MemberValuePair pair : pairs ) {
- char[] n = pair.name;
- String mName = n == null ? "value" : new String(name);
- if ( !mName.equals(name) ) continue;
- fullExpression = pair.value;
- }
-
- if ( fullExpression != null ) {
- if ( fullExpression instanceof ArrayInitializer ) {
- expressions = ((ArrayInitializer)fullExpression).expressions;
- } else expressions = new Expression[] { fullExpression };
- for ( Expression ex : expressions ) {
- StringBuffer sb = new StringBuffer();
- ex.print(0, sb);
- raws.add(sb.toString());
- guesses.add(calculateValue(ex));
- }
- }
-
- final Expression fullExpr = fullExpression;
- final Expression[] exprs = expressions;
-
- values.put(name, new AnnotationValue(annotationNode, raws, guesses) {
- @Override public void setError(String message, int valueIdx) {
- Expression ex;
- if ( valueIdx == -1 ) ex = fullExpr;
- else ex = exprs[valueIdx];
-
- int sourceStart = ex.sourceStart;
- int sourceEnd = ex.sourceEnd;
-
- annotationNode.addError(message, sourceStart, sourceEnd);
- }
- });
- }
-
- return handler.handle(new AnnotationValues<T>(annotationClass, values, annotationNode), annotation, annotationNode);
+ AnnotationValues<T> annValues = Eclipse.createAnnotation(annotationClass, annotationNode);
+ return handler.handle(annValues, annotation, annotationNode);
}
}
@@ -103,34 +45,6 @@ public class HandlerLibrary {
private Collection<EclipseASTVisitor> visitorHandlers = new ArrayList<EclipseASTVisitor>();
- private static Object calculateValue(Expression e) {
- if ( e instanceof Literal ) {
- ((Literal)e).computeConstant();
- switch ( e.constant.typeID() ) {
- case TypeIds.T_int: return e.constant.intValue();
- case TypeIds.T_byte: return e.constant.byteValue();
- case TypeIds.T_short: return e.constant.shortValue();
- case TypeIds.T_char: return e.constant.charValue();
- case TypeIds.T_float: return e.constant.floatValue();
- case TypeIds.T_double: return e.constant.doubleValue();
- case TypeIds.T_boolean: return e.constant.booleanValue();
- case TypeIds.T_long: return e.constant.longValue();
- case TypeIds.T_JavaLangString: return e.constant.stringValue();
- default: return null;
- }
- } else if ( e instanceof ClassLiteralAccess ) {
- return Eclipse.toQualifiedName(((ClassLiteralAccess)e).type.getTypeName());
- } else if ( e instanceof SingleNameReference ) {
- return new String(((SingleNameReference)e).token);
- } else if ( e instanceof QualifiedNameReference ) {
- String qName = Eclipse.toQualifiedName(((QualifiedNameReference)e).tokens);
- int idx = qName.lastIndexOf('.');
- return idx == -1 ? qName : qName.substring(idx+1);
- }
-
- return null;
- }
-
public static HandlerLibrary load() {
HandlerLibrary lib = new HandlerLibrary();