aboutsummaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorReinier Zwitserloot <reinier@zwitserloot.com>2012-08-24 15:17:46 +0200
committerReinier Zwitserloot <reinier@zwitserloot.com>2012-08-24 15:17:46 +0200
commit4f5f689bf2be42bc2a6e331ae83bace35c9e86e9 (patch)
treeb520fa131af905616653ea038f2087e2a110fb05 /src/core
parent579e139c6cea831789fe28d0ecbd7e753870f456 (diff)
downloadlombok-4f5f689bf2be42bc2a6e331ae83bace35c9e86e9.tar.gz
lombok-4f5f689bf2be42bc2a6e331ae83bace35c9e86e9.tar.bz2
lombok-4f5f689bf2be42bc2a6e331ae83bace35c9e86e9.zip
There is now an 'override this method' alternative for
setting the annotation you handle for an XAnnotationHandler<T>; default behaviour still extracts the T part out of the signature.
Diffstat (limited to 'src/core')
-rw-r--r--src/core/lombok/eclipse/EclipseAnnotationHandler.java10
-rw-r--r--src/core/lombok/eclipse/HandlerLibrary.java3
-rw-r--r--src/core/lombok/javac/HandlerLibrary.java3
-rw-r--r--src/core/lombok/javac/JavacAnnotationHandler.java10
4 files changed, 22 insertions, 4 deletions
diff --git a/src/core/lombok/eclipse/EclipseAnnotationHandler.java b/src/core/lombok/eclipse/EclipseAnnotationHandler.java
index ca9cac83..84304339 100644
--- a/src/core/lombok/eclipse/EclipseAnnotationHandler.java
+++ b/src/core/lombok/eclipse/EclipseAnnotationHandler.java
@@ -22,6 +22,7 @@
package lombok.eclipse;
import lombok.core.AnnotationValues;
+import lombok.core.SpiLoadUtil;
/**
* Implement this interface if you want to be triggered for a specific annotation.
@@ -59,4 +60,13 @@ public abstract class EclipseAnnotationHandler<T extends java.lang.annotation.An
*/
public void preHandle(AnnotationValues<T> annotation, org.eclipse.jdt.internal.compiler.ast.Annotation ast, EclipseNode annotationNode) {
}
+
+ /**
+ * This handler is a handler for the given annotation; you don't normally need to override this class
+ * as the annotation type is extracted from your {@code extends EclipseAnnotationHandler<AnnotationTypeHere>}
+ * signature.
+ */
+ @SuppressWarnings("unchecked") public Class<T> getAnnotationHandledByThisHandler() {
+ return (Class<T>) SpiLoadUtil.findAnnotationClass(getClass(), EclipseAnnotationHandler.class);
+ }
}
diff --git a/src/core/lombok/eclipse/HandlerLibrary.java b/src/core/lombok/eclipse/HandlerLibrary.java
index 5f360f6f..bf01dc20 100644
--- a/src/core/lombok/eclipse/HandlerLibrary.java
+++ b/src/core/lombok/eclipse/HandlerLibrary.java
@@ -158,8 +158,7 @@ public class HandlerLibrary {
try {
for (EclipseAnnotationHandler<?> handler : SpiLoadUtil.findServices(EclipseAnnotationHandler.class, EclipseAnnotationHandler.class.getClassLoader())) {
try {
- Class<? extends Annotation> annotationClass =
- SpiLoadUtil.findAnnotationClass(handler.getClass(), EclipseAnnotationHandler.class);
+ Class<? extends Annotation> annotationClass = handler.getAnnotationHandledByThisHandler();
AnnotationHandlerContainer<?> container = new AnnotationHandlerContainer(handler, annotationClass);
String annotationClassName = container.annotationClass.getName().replace("$", ".");
if (lib.annotationHandlers.put(annotationClassName, container) != null) {
diff --git a/src/core/lombok/javac/HandlerLibrary.java b/src/core/lombok/javac/HandlerLibrary.java
index 81618070..2be84355 100644
--- a/src/core/lombok/javac/HandlerLibrary.java
+++ b/src/core/lombok/javac/HandlerLibrary.java
@@ -165,8 +165,7 @@ public class HandlerLibrary {
private static void loadAnnotationHandlers(HandlerLibrary lib) throws IOException {
//No, that seemingly superfluous reference to JavacAnnotationHandler's classloader is not in fact superfluous!
for (JavacAnnotationHandler handler : SpiLoadUtil.findServices(JavacAnnotationHandler.class, JavacAnnotationHandler.class.getClassLoader())) {
- Class<? extends Annotation> annotationClass =
- SpiLoadUtil.findAnnotationClass(handler.getClass(), JavacAnnotationHandler.class);
+ Class<? extends Annotation> annotationClass = handler.getAnnotationHandledByThisHandler();
AnnotationHandlerContainer<?> container = new AnnotationHandlerContainer(handler, annotationClass);
String annotationClassName = container.annotationClass.getName().replace("$", ".");
if (lib.annotationHandlers.put(annotationClassName, container) != null) {
diff --git a/src/core/lombok/javac/JavacAnnotationHandler.java b/src/core/lombok/javac/JavacAnnotationHandler.java
index 434eab46..169e2026 100644
--- a/src/core/lombok/javac/JavacAnnotationHandler.java
+++ b/src/core/lombok/javac/JavacAnnotationHandler.java
@@ -24,6 +24,7 @@ package lombok.javac;
import java.lang.annotation.Annotation;
import lombok.core.AnnotationValues;
+import lombok.core.SpiLoadUtil;
import com.sun.tools.javac.tree.JCTree.JCAnnotation;
@@ -53,4 +54,13 @@ public abstract class JavacAnnotationHandler<T extends Annotation> {
* as access useful methods such as generating warnings or errors focused on the annotation.
*/
public abstract void handle(AnnotationValues<T> annotation, JCAnnotation ast, JavacNode annotationNode);
+
+ /**
+ * This handler is a handler for the given annotation; you don't normally need to override this class
+ * as the annotation type is extracted from your {@code extends EclipseAnnotationHandler<AnnotationTypeHere>}
+ * signature.
+ */
+ @SuppressWarnings("unchecked") public Class<T> getAnnotationHandledByThisHandler() {
+ return (Class<T>) SpiLoadUtil.findAnnotationClass(getClass(), JavacAnnotationHandler.class);
+ }
}