mirror of
https://github.com/tiennm99/lombok.git
synced 2026-10-16 00:15:01 +00:00
Merge pull request #886 from balta3/annotationarrays
implemented support for annotation arrays as annotation attributes in javac
This commit is contained in:
2 files changed
+25
-2
No files matched your search
@@ -298,6 +298,10 @@ public class AnnotationValues<A extends Annotation> {
|
||||
}
|
||||
}
|
||||
|
||||
if (guess instanceof AnnotationValues) {
|
||||
return ((AnnotationValues) guess).getInstance();
|
||||
}
|
||||
|
||||
throw new AnnotationValueDecodeFail(v,
|
||||
"Can't translate a " + guess.getClass() + " to the expected " + expected, pos);
|
||||
}
|
||||
|
||||
@@ -321,8 +321,19 @@ public class JavacHandlerUtil {
|
||||
* @param node A Lombok AST node representing an annotation in source code.
|
||||
*/
|
||||
public static <A extends Annotation> AnnotationValues<A> createAnnotation(Class<A> type, final JavacNode node) {
|
||||
return createAnnotation(type, (JCAnnotation) node.get(), node);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an instance of {@code AnnotationValues} for the provided AST Node
|
||||
* and Annotation expression.
|
||||
*
|
||||
* @param type An annotation class type, such as {@code lombok.Getter.class}.
|
||||
* @param anno the annotation expression
|
||||
* @param node A Lombok AST node representing an annotation in source code.
|
||||
*/
|
||||
public static <A extends Annotation> AnnotationValues<A> createAnnotation(Class<A> type, JCAnnotation anno, final JavacNode node) {
|
||||
Map<String, AnnotationValue> values = new HashMap<String, AnnotationValue>();
|
||||
JCAnnotation anno = (JCAnnotation) node.get();
|
||||
List<JCExpression> arguments = anno.getArguments();
|
||||
|
||||
for (JCExpression arg : arguments) {
|
||||
@@ -347,7 +358,15 @@ public class JavacHandlerUtil {
|
||||
for (JCExpression inner : elems) {
|
||||
raws.add(inner.toString());
|
||||
expressions.add(inner);
|
||||
guesses.add(calculateGuess(inner));
|
||||
if (inner instanceof JCAnnotation) {
|
||||
try {
|
||||
guesses.add(createAnnotation((Class<A>) Class.forName(inner.type.toString()), (JCAnnotation) inner, node));
|
||||
} catch (ClassNotFoundException ex) {
|
||||
throw new IllegalStateException(ex);
|
||||
}
|
||||
} else {
|
||||
guesses.add(calculateGuess(inner));
|
||||
}
|
||||
positions.add(inner.pos());
|
||||
}
|
||||
} else {
|
||||
|
||||
Reference in new issue
Block a user