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.
This commit is contained in:
Reinier Zwitserloot committed 2011-06-13 22:07:30 +02:00
1 parent 274d5de571
commit cea08d7799
4 files changed
+22 -8

No files matched your search

+4 -4
View File
@@ -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();
}
@@ -101,7 +101,7 @@ public class TransformEclipseAST {
} catch (Exception ignore) {
}
} else {
existing.reparse(forceRebuild);
existing.rebuild(forceRebuild);
}
return existing;
@@ -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 {
@@ -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;