diff options
author | Reinier Zwitserloot <reinier@zwitserloot.com> | 2012-04-02 22:56:47 +0200 |
---|---|---|
committer | Reinier Zwitserloot <reinier@zwitserloot.com> | 2012-04-03 00:04:31 +0200 |
commit | c900526ebf620dcf4f92e7d6c8f7d529900ee666 (patch) | |
tree | ecc3c5f1803f41b361b66ce041eff651f1aaf740 /src/core/lombok/javac | |
parent | b041b355d64cf0c3ec17f360a1cee27a8fe0ea3f (diff) | |
download | lombok-c900526ebf620dcf4f92e7d6c8f7d529900ee666.tar.gz lombok-c900526ebf620dcf4f92e7d6c8f7d529900ee666.tar.bz2 lombok-c900526ebf620dcf4f92e7d6c8f7d529900ee666.zip |
Philipp Eichhorn's patch to use marker annotations instead of boolean-returning interface methods for eclipse's postdiet and javac's isResolutionBased.
Diffstat (limited to 'src/core/lombok/javac')
-rw-r--r-- | src/core/lombok/javac/HandlerLibrary.java | 9 | ||||
-rw-r--r-- | src/core/lombok/javac/JavacASTAdapter.java | 7 | ||||
-rw-r--r-- | src/core/lombok/javac/JavacASTVisitor.java | 12 | ||||
-rw-r--r-- | src/core/lombok/javac/JavacAnnotationHandler.java | 9 | ||||
-rw-r--r-- | src/core/lombok/javac/ResolutionBased.java | 36 | ||||
-rw-r--r-- | src/core/lombok/javac/handlers/HandleDelegate.java | 6 | ||||
-rw-r--r-- | src/core/lombok/javac/handlers/HandleVal.java | 6 |
7 files changed, 48 insertions, 37 deletions
diff --git a/src/core/lombok/javac/HandlerLibrary.java b/src/core/lombok/javac/HandlerLibrary.java index cba318e2..35abac6f 100644 --- a/src/core/lombok/javac/HandlerLibrary.java +++ b/src/core/lombok/javac/HandlerLibrary.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2011 The Project Lombok Authors. + * Copyright (C) 2009-2012 The Project Lombok Authors. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -74,7 +74,7 @@ public class HandlerLibrary { } public boolean isResolutionBased() { - return handler.isResolutionBased(); + return handler.getClass().isAnnotationPresent(ResolutionBased.class); } public void handle(final JavacNode node) { @@ -205,8 +205,9 @@ public class HandlerLibrary { */ public void callASTVisitors(JavacAST ast) { for (JavacASTVisitor visitor : visitorHandlers) try { - if (!visitor.isResolutionBased() && phase == 0) ast.traverse(visitor); - if (visitor.isResolutionBased() && phase == 1) ast.traverse(visitor); + boolean isResolutionBased = visitor.getClass().isAnnotationPresent(ResolutionBased.class); + if (!isResolutionBased && phase == 0) ast.traverse(visitor); + if (isResolutionBased && phase == 1) ast.traverse(visitor); } catch (Throwable t) { javacError(String.format("Lombok visitor handler %s failed", visitor.getClass()), t); } diff --git a/src/core/lombok/javac/JavacASTAdapter.java b/src/core/lombok/javac/JavacASTAdapter.java index e15ed04c..5d120a77 100644 --- a/src/core/lombok/javac/JavacASTAdapter.java +++ b/src/core/lombok/javac/JavacASTAdapter.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009 The Project Lombok Authors. + * Copyright (C) 2009-2012 The Project Lombok Authors. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -35,11 +35,6 @@ import com.sun.tools.javac.tree.JCTree.JCVariableDecl; */ public class JavacASTAdapter implements JavacASTVisitor { /** {@inheritDoc} */ - @Override public boolean isResolutionBased() { - return false; - } - - /** {@inheritDoc} */ @Override public void visitCompilationUnit(JavacNode top, JCCompilationUnit unit) {} /** {@inheritDoc} */ diff --git a/src/core/lombok/javac/JavacASTVisitor.java b/src/core/lombok/javac/JavacASTVisitor.java index e406340e..c57e657a 100644 --- a/src/core/lombok/javac/JavacASTVisitor.java +++ b/src/core/lombok/javac/JavacASTVisitor.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009 The Project Lombok Authors. + * Copyright (C) 2009-2012 The Project Lombok Authors. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -38,12 +38,6 @@ import com.sun.tools.javac.tree.JCTree.JCVariableDecl; */ public interface JavacASTVisitor { /** - * If true, you'll be called after all the non-resolution based visitors. - * NB: Temporary solution - will be rewritten to a different style altogether in a future release. - */ - boolean isResolutionBased(); - - /** * Called at the very beginning and end. */ void visitCompilationUnit(JavacNode top, JCCompilationUnit unit); @@ -107,10 +101,6 @@ public interface JavacASTVisitor { private int disablePrinting = 0; private int indent = 0; - @Override public boolean isResolutionBased() { - return false; - } - /** * @param printContent if true, bodies are printed directly, as java code, * instead of a tree listing of every AST node inside it. diff --git a/src/core/lombok/javac/JavacAnnotationHandler.java b/src/core/lombok/javac/JavacAnnotationHandler.java index 5a2305b0..434eab46 100644 --- a/src/core/lombok/javac/JavacAnnotationHandler.java +++ b/src/core/lombok/javac/JavacAnnotationHandler.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2011 The Project Lombok Authors. + * Copyright (C) 2009-2012 The Project Lombok Authors. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -53,11 +53,4 @@ 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); - - /** - * Return true if this handler requires resolution. - */ - public boolean isResolutionBased() { - return false; - } } diff --git a/src/core/lombok/javac/ResolutionBased.java b/src/core/lombok/javac/ResolutionBased.java new file mode 100644 index 00000000..556e3736 --- /dev/null +++ b/src/core/lombok/javac/ResolutionBased.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2012 The Project Lombok Authors. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package lombok.javac; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Marker to indicate a handler is to be called after all the non-resolution based visitors. + * NB: Temporary solution - will be rewritten to a different style altogether in a future release. + */ +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface ResolutionBased { +} diff --git a/src/core/lombok/javac/handlers/HandleDelegate.java b/src/core/lombok/javac/handlers/HandleDelegate.java index 18817d49..50a2f1bb 100644 --- a/src/core/lombok/javac/handlers/HandleDelegate.java +++ b/src/core/lombok/javac/handlers/HandleDelegate.java @@ -47,6 +47,7 @@ import lombok.javac.FindTypeVarScanner; import lombok.javac.JavacAnnotationHandler; import lombok.javac.JavacNode; import lombok.javac.JavacResolution; +import lombok.javac.ResolutionBased; import lombok.javac.JavacResolution.TypeNotConvertibleException; import org.mangosdk.spi.ProviderFor; @@ -74,11 +75,8 @@ import com.sun.tools.javac.util.ListBuffer; import com.sun.tools.javac.util.Name; @ProviderFor(JavacAnnotationHandler.class) +@ResolutionBased public class HandleDelegate extends JavacAnnotationHandler<Delegate> { - @Override public boolean isResolutionBased() { - return true; - } - private static final List<String> METHODS_IN_OBJECT = Collections.unmodifiableList(Arrays.asList( "hashCode()", "canEqual(java.lang.Object)", //Not in j.l.Object, but it goes with hashCode and equals so if we ignore those two, we should ignore this one. diff --git a/src/core/lombok/javac/handlers/HandleVal.java b/src/core/lombok/javac/handlers/HandleVal.java index 4feaa3ac..52d2ed13 100644 --- a/src/core/lombok/javac/handlers/HandleVal.java +++ b/src/core/lombok/javac/handlers/HandleVal.java @@ -28,6 +28,7 @@ import lombok.javac.JavacASTAdapter; import lombok.javac.JavacASTVisitor; import lombok.javac.JavacNode; import lombok.javac.JavacResolution; +import lombok.javac.ResolutionBased; import org.mangosdk.spi.ProviderFor; @@ -43,11 +44,8 @@ import com.sun.tools.javac.tree.JCTree.JCVariableDecl; import com.sun.tools.javac.util.List; @ProviderFor(JavacASTVisitor.class) +@ResolutionBased public class HandleVal extends JavacASTAdapter { - @Override public boolean isResolutionBased() { - return true; - } - @Override public void visitLocal(JavacNode localNode, JCVariableDecl local) { if (local.vartype == null || (!local.vartype.toString().equals("val") && !local.vartype.toString().equals("lombok.val"))) return; |