From cea08d77998acce659c6ffc712045b9772ad9c65 Mon Sep 17 00:00:00 2001 From: Reinier Zwitserloot Date: Mon, 13 Jun 2011 22:07:30 +0200 Subject: Fixed PrintAST, and separately SneakyThrows/Synchronized which failed because the 'isFullParse' boolean was erronously set on a full rebuild, forced by HandleDelegate. HandleDelegate has also been updated to not do so much work if there's no @Delegate in a source file. --- src/core/lombok/eclipse/EclipseAST.java | 8 ++++---- src/core/lombok/eclipse/TransformEclipseAST.java | 2 +- src/core/lombok/eclipse/handlers/HandlePrintAST.java | 4 +--- src/eclipseAgent/lombok/eclipse/agent/PatchDelegate.java | 16 ++++++++++++++++ 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/core/lombok/eclipse/EclipseAST.java b/src/core/lombok/eclipse/EclipseAST.java index 7c816c50..91db0baa 100644 --- a/src/core/lombok/eclipse/EclipseAST.java +++ b/src/core/lombok/eclipse/EclipseAST.java @@ -197,16 +197,16 @@ public class EclipseAST extends AST { * with filled in method bodies and such. Also propagates problems and errors, which in diet parse * mode can't be reliably added to the problems/warnings view. */ - public void reparse(boolean forceRebuild) { + public void rebuild(boolean force) { propagateProblems(); - if (completeParse && !forceRebuild) return; + if (completeParse && !force) return; boolean changed = isChanged(); boolean newCompleteParse = isComplete(compilationUnitDeclaration); - if (!newCompleteParse && !forceRebuild) return; + if (!newCompleteParse && !force) return; top().rebuild(); - this.completeParse = true; + this.completeParse = newCompleteParse; if (!changed) clearChanged(); } diff --git a/src/core/lombok/eclipse/TransformEclipseAST.java b/src/core/lombok/eclipse/TransformEclipseAST.java index e260604b..7ef06fca 100644 --- a/src/core/lombok/eclipse/TransformEclipseAST.java +++ b/src/core/lombok/eclipse/TransformEclipseAST.java @@ -101,7 +101,7 @@ public class TransformEclipseAST { } catch (Exception ignore) { } } else { - existing.reparse(forceRebuild); + existing.rebuild(forceRebuild); } return existing; diff --git a/src/core/lombok/eclipse/handlers/HandlePrintAST.java b/src/core/lombok/eclipse/handlers/HandlePrintAST.java index 24a3f687..6fa7b938 100644 --- a/src/core/lombok/eclipse/handlers/HandlePrintAST.java +++ b/src/core/lombok/eclipse/handlers/HandlePrintAST.java @@ -41,12 +41,10 @@ import lombok.eclipse.EclipseNode; @ProviderFor(EclipseAnnotationHandler.class) public class HandlePrintAST implements EclipseAnnotationHandler { @Override public boolean deferUntilPostDiet() { - return false; + return true; } public void handle(AnnotationValues annotation, Annotation ast, EclipseNode annotationNode) { - if (!annotationNode.isCompleteParse()) return; - PrintStream stream = System.out; String fileName = annotation.getInstance().outfile(); if (fileName.length() > 0) try { diff --git a/src/eclipseAgent/lombok/eclipse/agent/PatchDelegate.java b/src/eclipseAgent/lombok/eclipse/agent/PatchDelegate.java index 71fa1dc5..9929de2a 100644 --- a/src/eclipseAgent/lombok/eclipse/agent/PatchDelegate.java +++ b/src/eclipseAgent/lombok/eclipse/agent/PatchDelegate.java @@ -103,8 +103,24 @@ public class PatchDelegate { return new String(decl.name); } + private static boolean hasDelegateMarkedFields(TypeDeclaration decl) { + if (decl.fields != null) for (FieldDeclaration field : decl.fields) { + if (field.annotations == null) continue; + for (Annotation ann : field.annotations) { + if (ann.type == null) continue; + TypeBinding tb = ann.type.resolveType(decl.initializerScope); + if (!charArrayEquals("lombok", tb.qualifiedPackageName())) continue; + if (!charArrayEquals("Delegate", tb.qualifiedSourceName())) continue; + return true; + } + } + + return false; + } + public static boolean handleDelegateForType(ClassScope scope) { if (TransformEclipseAST.disableLombok) return false; + if (!hasDelegateMarkedFields(scope.referenceContext)) return false; List stack = visited.get(); StringBuilder corrupted = null; -- cgit