mirror of
https://github.com/tiennm99/lombok.git
synced 2026-10-15 20:15:59 +00:00
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:
1 parent
274d5de571
commit
cea08d7799
4 files changed
+22
-8
No files matched your search
@@ -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;
|
||||
|
||||
Reference in new issue
Block a user