diff options
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<EclipseAST, EclipseNode, ASTNode> { * 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<PrintAST> { @Override public boolean deferUntilPostDiet() { - return false; + return true; } public void handle(AnnotationValues<PrintAST> 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<ClassScopeEntry> stack = visited.get(); StringBuilder corrupted = null; |