aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/delombok/lombok/delombok/CommentCollectingScanner.java2
-rw-r--r--src/delombok/lombok/delombok/CommentPreservingParser.java170
-rw-r--r--src/delombok/lombok/delombok/Delombok.java190
-rw-r--r--src/delombok/lombok/delombok/DelombokResult.java62
-rw-r--r--src/delombok/lombok/delombok/PrettyCommentsPrinter.java16
-rw-r--r--src/delombok/lombok/delombok/ant/DelombokTask.java51
-rw-r--r--test/core/src/lombok/AbstractRunTests.java9
-rw-r--r--test/core/src/lombok/RunTestsViaDelombok.java5
-rw-r--r--test/pretty/resource/before/Annotation.java1
9 files changed, 287 insertions, 219 deletions
diff --git a/src/delombok/lombok/delombok/CommentCollectingScanner.java b/src/delombok/lombok/delombok/CommentCollectingScanner.java
index 2552cbf7..c930bc62 100644
--- a/src/delombok/lombok/delombok/CommentCollectingScanner.java
+++ b/src/delombok/lombok/delombok/CommentCollectingScanner.java
@@ -25,7 +25,7 @@ import java.nio.CharBuffer;
import lombok.delombok.Comment.EndConnection;
import lombok.delombok.Comment.StartConnection;
-import lombok.delombok.CommentPreservingParser.Comments;
+import lombok.delombok.Delombok.Comments;
import com.sun.tools.javac.parser.Scanner;
import com.sun.tools.javac.util.Context;
diff --git a/src/delombok/lombok/delombok/CommentPreservingParser.java b/src/delombok/lombok/delombok/CommentPreservingParser.java
deleted file mode 100644
index 87c02dcd..00000000
--- a/src/delombok/lombok/delombok/CommentPreservingParser.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * Copyright © 2009-2010 Reinier Zwitserloot and Roel Spilker.
- *
- * 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.delombok;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Collections;
-import java.util.Date;
-
-import javax.annotation.processing.Messager;
-import javax.lang.model.element.AnnotationMirror;
-import javax.lang.model.element.AnnotationValue;
-import javax.lang.model.element.Element;
-import javax.tools.DiagnosticListener;
-import javax.tools.JavaFileObject;
-import javax.tools.Diagnostic.Kind;
-
-import lombok.javac.DeleteLombokAnnotations;
-import lombok.javac.JavacTransformer;
-
-import com.sun.tools.javac.main.JavaCompiler;
-import com.sun.tools.javac.main.OptionName;
-import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
-import com.sun.tools.javac.util.Context;
-import com.sun.tools.javac.util.List;
-import com.sun.tools.javac.util.Options;
-
-public class CommentPreservingParser {
- private final String encoding;
- private boolean deleteLombokAnnotations = false;
- private DiagnosticListener<JavaFileObject> diagnostics = null;
-
- public CommentPreservingParser() {
- this("utf-8");
- }
-
- public CommentPreservingParser(String encoding) {
- this.encoding = encoding;
- }
-
- public void setDeleteLombokAnnotations(boolean deleteLombokAnnotations) {
- this.deleteLombokAnnotations = deleteLombokAnnotations;
- }
-
- public void setDiagnosticsListener(DiagnosticListener<JavaFileObject> diagnostics) {
- this.diagnostics = diagnostics;
- }
-
- public ParseResult parse(JavaFileObject source, boolean forceProcessing) throws IOException {
- return doParse(source, forceProcessing);
- }
-
- public ParseResult parse(String fileName, boolean forceProcessing) throws IOException {
- return doParse(fileName, forceProcessing);
- }
-
- private ParseResult doParse(Object source, boolean forceProcessing) throws IOException {
- Context context = new Context();
-
- Options.instance(context).put(OptionName.ENCODING, encoding);
-
- if (diagnostics != null) context.put(DiagnosticListener.class, diagnostics);
-
- CommentCollectingScanner.Factory.preRegister(context);
-
- JavaCompiler compiler = new JavaCompiler(context) {
- @Override
- protected boolean keepComments() {
- return true;
- }
- };
-
- compiler.genEndPos = true;
-
- Comments comments = new Comments();
- context.put(Comments.class, comments);
- if (deleteLombokAnnotations) context.put(DeleteLombokAnnotations.class, new DeleteLombokAnnotations(true));
-
- comments.comments = List.nil();
-
- JCCompilationUnit cu;
- if (source instanceof JavaFileObject) {
- cu = compiler.parse((JavaFileObject) source);
- } else {
- @SuppressWarnings("deprecation")
- JCCompilationUnit unit = compiler.parse((String)source);
- cu = unit;
- }
-
- boolean changed = new JavacTransformer(messager).transform(context, Collections.singleton(cu));
- return new ParseResult(comments.comments, cu, forceProcessing || changed);
- }
-
- private static final Messager messager = new Messager() {
- @Override public void printMessage(Kind kind, CharSequence msg) {
- System.out.printf("%s: %s\n", kind, msg);
- }
-
- @Override public void printMessage(Kind kind, CharSequence msg, Element e) {
- System.out.printf("%s: %s\n", kind, msg);
- }
-
- @Override public void printMessage(Kind kind, CharSequence msg, Element e, AnnotationMirror a) {
- System.out.printf("%s: %s\n", kind, msg);
- }
-
- @Override public void printMessage(Kind kind, CharSequence msg, Element e, AnnotationMirror a, AnnotationValue v) {
- System.out.printf("%s: %s\n", kind, msg);
- }
- };
-
- static class Comments {
- List<Comment> comments = List.nil();
-
- void add(Comment comment) {
- comments = comments.append(comment);
- }
- }
-
- public static class ParseResult {
- private final List<Comment> comments;
- private final JCCompilationUnit compilationUnit;
- private final boolean changed;
-
- private ParseResult(List<Comment> comments, JCCompilationUnit compilationUnit, boolean changed) {
- this.comments = comments;
- this.compilationUnit = compilationUnit;
- this.changed = changed;
- }
-
- public void print(Writer out) throws IOException {
- if (!changed) {
- JavaFileObject sourceFile = compilationUnit.getSourceFile();
- if (sourceFile != null) {
- out.write(sourceFile.getCharContent(true).toString());
- return;
- }
- }
-
- out.write("// Generated by delombok at ");
- out.write(String.valueOf(new Date()));
- out.write(System.getProperty("line.separator"));
-
- compilationUnit.accept(new PrettyCommentsPrinter(out, compilationUnit, comments));
- }
-
- public boolean isChanged() {
- return changed;
- }
- }
-}
diff --git a/src/delombok/lombok/delombok/Delombok.java b/src/delombok/lombok/delombok/Delombok.java
index 56994f78..6866d97f 100644
--- a/src/delombok/lombok/delombok/Delombok.java
+++ b/src/delombok/lombok/delombok/Delombok.java
@@ -30,16 +30,33 @@ import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.io.Writer;
+import java.net.URI;
import java.nio.charset.Charset;
import java.nio.charset.UnsupportedCharsetException;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.IdentityHashMap;
+import java.util.LinkedHashMap;
import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import javax.annotation.processing.Messager;
+import javax.lang.model.element.AnnotationMirror;
+import javax.lang.model.element.AnnotationValue;
+import javax.lang.model.element.Element;
import javax.tools.DiagnosticListener;
import javax.tools.JavaFileObject;
+import javax.tools.Diagnostic.Kind;
-import lombok.delombok.CommentPreservingParser.ParseResult;
+import lombok.javac.DeleteLombokAnnotations;
+import lombok.javac.JavacTransformer;
+import com.sun.tools.javac.main.JavaCompiler;
+import com.sun.tools.javac.main.OptionName;
+import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
+import com.sun.tools.javac.util.Context;
+import com.sun.tools.javac.util.Options;
import com.zwitserloot.cmdreader.CmdReader;
import com.zwitserloot.cmdreader.Description;
import com.zwitserloot.cmdreader.Excludes;
@@ -50,16 +67,24 @@ import com.zwitserloot.cmdreader.Shorthand;
public class Delombok {
private Charset charset = Charset.defaultCharset();
- private CommentPreservingParser parser = new CommentPreservingParser();
+ private Context context = new Context();
+ private Writer presetWriter;
- {
- parser.setDeleteLombokAnnotations(true);
+ public void setWriter(Writer writer) {
+ this.presetWriter = writer;
+ }
+
+ public Delombok() {
+ context.put(DeleteLombokAnnotations.class, new DeleteLombokAnnotations(true));
}
private PrintStream feedback = System.err;
private boolean verbose;
private boolean noCopy;
private boolean force = false;
+ private String classpath, sourcepath;
+ private LinkedHashMap<File, File> fileToBase = new LinkedHashMap<File, File>();
+ private List<File> filesToParse = new ArrayList<File>();
/** If null, output to standard out. */
private File output = null;
@@ -88,6 +113,14 @@ public class Delombok {
@Mandatory(onlyIfNot={"print", "help"})
private String target;
+ @Shorthand("c")
+ @Description("Classpath (analogous to javac -cp option)")
+ private String classpath;
+
+ @Shorthand("s")
+ @Description("Sourcepath (analogous to javac -sourcepath option)")
+ private String sourcepath;
+
@Description("Files to delombok. Provide either a file, or a directory. If you use a directory, all files in it (recursive) are delombok-ed")
@Sequential
private List<String> input = new ArrayList<String>();
@@ -138,21 +171,29 @@ public class Delombok {
if (args.verbose) delombok.setVerbose(true);
if (args.nocopy) delombok.setNoCopy(true);
- if (args.print) delombok.setOutputToStandardOut();
- else delombok.setOutput(new File(args.target));
+ if (args.print) {
+ delombok.setOutputToStandardOut();
+ } else {
+ delombok.setOutput(new File(args.target));
+ }
+
+ if (args.classpath != null) delombok.setClasspath(args.classpath);
+ if (args.sourcepath != null) delombok.setSourcepath(args.sourcepath);
for (String in : args.input) {
try {
File f = new File(in);
if (f.isFile()) {
- delombok.delombok(f.getParentFile(), f.getName());
+ delombok.addFile(f.getParentFile(), f.getName());
} else if (f.isDirectory()) {
- delombok.delombok(f);
+ delombok.addDirectory(f);
} else if (!f.exists()) {
if (!args.quiet) System.err.println("WARNING: does not exist - skipping: " + f);
} else {
if (!args.quiet) System.err.println("WARNING: not a standard file or directory - skipping: " + f);
}
+
+ delombok.delombok();
} catch (Exception e) {
if (!args.quiet) {
String msg = e.getMessage();
@@ -168,12 +209,12 @@ public class Delombok {
}
public void setCharset(String charsetName) throws UnsupportedCharsetException {
+
charset = Charset.forName(charsetName);
}
-
public void setDiagnosticsListener(DiagnosticListener<JavaFileObject> diagnostics) {
- parser.setDiagnosticsListener(diagnostics);
+ if (diagnostics != null) context.put(DiagnosticListener.class, diagnostics);
}
public void setForceProcess(boolean force) {
@@ -184,6 +225,14 @@ public class Delombok {
this.feedback = feedback;
}
+ public void setClasspath(String classpath) {
+ this.classpath = classpath;
+ }
+
+ public void setSourcepath(String sourcepath) {
+ this.sourcepath = sourcepath;
+ }
+
public void setVerbose(boolean verbose) {
this.verbose = verbose;
}
@@ -204,15 +253,15 @@ public class Delombok {
this.output = null;
}
- public void delombok(File base) throws IOException {
- delombok0(false, base, "", 0);
+ public void addDirectory(File base) throws IOException {
+ addDirectory0(false, base, "", 0);
}
- public void process(boolean copy, File base, String name) throws IOException {
+ public void addDirectory1(boolean copy, File base, String name) throws IOException {
File f = new File(base, name);
if (f.isFile()) {
String extension = getExtension(f);
- if (extension.equals("java")) delombok(base, name);
+ if (extension.equals("java")) addFile(base, name);
else if (extension.equals("class")) skipClass(name);
else copy(copy, base, name);
} else if (!f.exists()) {
@@ -222,7 +271,7 @@ public class Delombok {
}
}
- private void delombok0(boolean inHiddenDir, File base, String suffix, int loop) throws IOException {
+ private void addDirectory0(boolean inHiddenDir, File base, String suffix, int loop) throws IOException {
File dir = suffix.isEmpty() ? base : new File(base, suffix);
if (dir.isDirectory()) {
@@ -236,7 +285,7 @@ public class Delombok {
feedback.printf("Only processing java files (not copying non-java files) in %s because it's a hidden directory.\n", canonical(dir));
}
for (File f : list) {
- delombok0(inHiddenDir || thisDirIsHidden, base, suffix + (suffix.isEmpty() ? "" : File.separator) + f.getName(), loop + 1);
+ addDirectory0(inHiddenDir || thisDirIsHidden, base, suffix + (suffix.isEmpty() ? "" : File.separator) + f.getName(), loop + 1);
}
} else {
if (!thisDirIsHidden && !noCopy && !inHiddenDir && output != null && !suffix.isEmpty()) {
@@ -247,7 +296,7 @@ public class Delombok {
}
}
} else {
- process(!inHiddenDir && !noCopy, base, suffix);
+ addDirectory1(!inHiddenDir && !noCopy, base, suffix);
}
}
@@ -288,34 +337,96 @@ public class Delombok {
}
}
- public void delombok(JavaFileObject file, Writer writer) throws IOException {
- ParseResult result = parser.parse(file, force);
- result.print(writer);
+ public void addFile(File base, String fileName) throws IOException {
+ if (output != null && canonical(base).equals(canonical(output))) throw new IOException(
+ "DELOMBOK: Output file and input file refer to the same filesystem location. Specify a separate path for output.");
+
+ File f = new File(base, fileName);
+ filesToParse.add(f);
+ fileToBase.put(f, base);
}
- public void delombok(String file, Writer writer) throws IOException {
- ParseResult result = parser.parse(file, force);
- result.print(writer);
+ private static <T> com.sun.tools.javac.util.List<T> toJavacList(List<T> list) {
+ com.sun.tools.javac.util.List<T> out = com.sun.tools.javac.util.List.nil();
+ ListIterator<T> li = list.listIterator(list.size());
+ while (li.hasPrevious()) out = out.prepend(li.previous());
+ return out;
}
- public void delombok(File base, String fileName) throws IOException {
- if (output != null && canonical(base).equals(canonical(output))) throw new IOException(
- "DELOMBOK: Output file and input file refer to the same filesystem location. Specify a separate path for output.");
+ public boolean delombok() throws IOException {
+ Options options = Options.instance(context);
+ options.put(OptionName.ENCODING, charset.name());
+ if (classpath != null) options.put(OptionName.CLASSPATH, classpath);
+ if (sourcepath != null) options.put(OptionName.SOURCEPATH, sourcepath);
+ CommentCollectingScanner.Factory.preRegister(context);
- ParseResult result = parser.parse(new File(base, fileName).getAbsolutePath(), force);
+ JavaCompiler compiler = new JavaCompiler(context);
+ compiler.keepComments = true;
+ compiler.genEndPos = true;
- if (verbose) feedback.printf("File: %s [%s]\n", fileName, result.isChanged() ? "delombok-ed" : "unchanged");
+ List<JCCompilationUnit> roots = new ArrayList<JCCompilationUnit>();
+ Map<JCCompilationUnit, Comments> commentsMap = new IdentityHashMap<JCCompilationUnit, Comments>();
+ Map<JCCompilationUnit, File> baseMap = new IdentityHashMap<JCCompilationUnit, File>();
+ for (File fileToParse : filesToParse) {
+ Comments comments = new Comments();
+ context.put(Comments.class, comments);
+
+ @SuppressWarnings("deprecation")
+ JCCompilationUnit unit = compiler.parse(fileToParse.getAbsolutePath());
+
+ commentsMap.put(unit, comments);
+ baseMap.put(unit, fileToBase.get(fileToParse));
+ roots.add(unit);
+ }
- Writer rawWriter = output == null ? createStandardOutWriter() : createFileWriter(output, fileName);
- BufferedWriter writer = new BufferedWriter(rawWriter);
+ if (compiler.errorCount() > 0) return false;
+ compiler.enterTrees(toJavacList(roots));
- try {
- result.print(writer);
- } finally {
- writer.close();
+ for (JCCompilationUnit unit : roots) {
+ boolean changed = new JavacTransformer(messager).transform(context, Collections.singleton(unit));
+ DelombokResult result = new DelombokResult(commentsMap.get(unit).comments, unit, force || changed);
+ if (verbose) feedback.printf("File: %s [%s]\n", unit.sourcefile.getName(), result.isChanged() ? "delomboked" : "unchanged");
+ Writer rawWriter;
+ if (presetWriter != null) rawWriter = presetWriter;
+ else if (output == null) rawWriter = createStandardOutWriter();
+ else rawWriter = createFileWriter(output, baseMap.get(unit), unit.sourcefile.toUri());
+ BufferedWriter writer = new BufferedWriter(rawWriter);
+ try {
+ result.print(writer);
+ } finally {
+ writer.close();
+ }
+ }
+
+ return true;
+ }
+
+ public static class Comments {
+ public com.sun.tools.javac.util.List<Comment> comments = com.sun.tools.javac.util.List.nil();
+
+ void add(Comment comment) {
+ comments = comments.append(comment);
}
}
+ private static final Messager messager = new Messager() {
+ @Override public void printMessage(Kind kind, CharSequence msg) {
+ System.out.printf("%s: %s\n", kind, msg);
+ }
+
+ @Override public void printMessage(Kind kind, CharSequence msg, Element e) {
+ System.out.printf("%s: %s\n", kind, msg);
+ }
+
+ @Override public void printMessage(Kind kind, CharSequence msg, Element e, AnnotationMirror a) {
+ System.out.printf("%s: %s\n", kind, msg);
+ }
+
+ @Override public void printMessage(Kind kind, CharSequence msg, Element e, AnnotationMirror a, AnnotationValue v) {
+ System.out.printf("%s: %s\n", kind, msg);
+ }
+ };
+
private static String canonical(File dir) {
try {
return dir.getCanonicalPath();
@@ -330,8 +441,15 @@ public class Delombok {
return idx == -1 ? "" : name.substring(idx+1);
}
- private Writer createFileWriter(File base, String fileName) throws IOException {
- File outFile = new File(base, fileName);
+ private Writer createFileWriter(File outBase, File inBase, URI file) throws IOException {
+ URI relative = inBase.toURI().relativize(file);
+ File outFile;
+ if (relative.isAbsolute()) {
+ outFile = new File(outBase, new File(relative).getName());
+ } else {
+ outFile = new File(outBase, relative.getPath());
+ }
+
outFile.getParentFile().mkdirs();
FileOutputStream out = new FileOutputStream(outFile);
return createUnicodeEscapeWriter(out);
diff --git a/src/delombok/lombok/delombok/DelombokResult.java b/src/delombok/lombok/delombok/DelombokResult.java
new file mode 100644
index 00000000..717a3bf1
--- /dev/null
+++ b/src/delombok/lombok/delombok/DelombokResult.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright © 2009-2010 Reinier Zwitserloot and Roel Spilker.
+ *
+ * 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.delombok;
+
+import java.io.IOException;
+import java.io.Writer;
+import java.util.Date;
+
+import javax.tools.JavaFileObject;
+
+import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
+import com.sun.tools.javac.util.List;
+
+public class DelombokResult {
+ private final List<Comment> comments;
+ private final JCCompilationUnit compilationUnit;
+ private final boolean changed;
+
+ public DelombokResult(List<Comment> comments, JCCompilationUnit compilationUnit, boolean changed) {
+ this.comments = comments;
+ this.compilationUnit = compilationUnit;
+ this.changed = changed;
+ }
+
+ public void print(Writer out) throws IOException {
+ if (!changed) {
+ JavaFileObject sourceFile = compilationUnit.getSourceFile();
+ if (sourceFile != null) {
+ out.write(sourceFile.getCharContent(true).toString());
+ return;
+ }
+ }
+
+ out.write("// Generated by delombok at ");
+ out.write(String.valueOf(new Date()));
+ out.write(System.getProperty("line.separator"));
+
+ compilationUnit.accept(new PrettyCommentsPrinter(out, compilationUnit, comments));
+ }
+
+ public boolean isChanged() {
+ return changed;
+ }
+} \ No newline at end of file
diff --git a/src/delombok/lombok/delombok/PrettyCommentsPrinter.java b/src/delombok/lombok/delombok/PrettyCommentsPrinter.java
index 55c0e1bc..16c06f50 100644
--- a/src/delombok/lombok/delombok/PrettyCommentsPrinter.java
+++ b/src/delombok/lombok/delombok/PrettyCommentsPrinter.java
@@ -670,9 +670,11 @@ public class PrettyCommentsPrinter extends JCTree.Visitor {
public void visitMethodDef(JCMethodDecl tree) {
try {
+ boolean isConstructor = tree.name == tree.name.table.fromChars("<init>".toCharArray(), 0, 6);
// when producing source output, omit anonymous constructors
- if (tree.name == tree.name.table.fromChars("<init>".toCharArray(), 0, 6) &&
- enclClassName == null) return;
+ if (isConstructor && enclClassName == null) return;
+ boolean isGeneratedConstructor = isConstructor && ((tree.mods.flags & Flags.GENERATEDCONSTR) != 0);
+ if (isGeneratedConstructor) return;
println(); align();
printDocComment(tree);
printExpr(tree.mods);
@@ -1442,9 +1444,13 @@ public class PrettyCommentsPrinter extends JCTree.Visitor {
print("@");
printExpr(tree.annotationType);
if (tree.args.nonEmpty()) {
- print("(");
- printExprs(tree.args);
- print(")");
+ print("(");
+ if (tree.args.length() == 1 && tree.args.get(0) instanceof JCAssign) {
+ JCExpression lhs = ((JCAssign)tree.args.get(0)).lhs;
+ if (lhs instanceof JCIdent && ((JCIdent)lhs).name.toString().equals("value")) tree.args = List.of(((JCAssign)tree.args.get(0)).rhs);
+ }
+ printExprs(tree.args);
+ print(")");
}
} catch (IOException e) {
throw new UncheckedIOException(e);
diff --git a/src/delombok/lombok/delombok/ant/DelombokTask.java b/src/delombok/lombok/delombok/ant/DelombokTask.java
index 4a40b874..40c3c63e 100644
--- a/src/delombok/lombok/delombok/ant/DelombokTask.java
+++ b/src/delombok/lombok/delombok/ant/DelombokTask.java
@@ -32,14 +32,55 @@ import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.types.FileSet;
import org.apache.tools.ant.types.Path;
+import org.apache.tools.ant.types.Reference;
import org.apache.tools.ant.types.resources.FileResource;
public class DelombokTask extends Task {
private File fromDir, toDir;
+ private Path classpath;
+ private Path sourcepath;
private boolean verbose;
private String encoding;
private Path path;
+ public void setClasspath(Path classpath) {
+ if (this.classpath == null) {
+ this.classpath = classpath;
+ } else {
+ this.classpath.append(classpath);
+ }
+ }
+
+ public Path createClasspath() {
+ if (classpath == null) {
+ classpath = new Path(getProject());
+ }
+ return classpath.createPath();
+ }
+
+ public void setClasspathRef(Reference r) {
+ createClasspath().setRefid(r);
+ }
+
+ public void setSourcepath(Path sourcepath) {
+ if (this.sourcepath == null) {
+ this.sourcepath = sourcepath;
+ } else {
+ this.sourcepath.append(sourcepath);
+ }
+ }
+
+ public Path createSourcepath() {
+ if (sourcepath == null) {
+ sourcepath = new Path(getProject());
+ }
+ return sourcepath.createPath();
+ }
+
+ public void setSourcepathRef(Reference r) {
+ createSourcepath().setRefid(r);
+ }
+
public void setFrom(File dir) {
this.fromDir = dir;
}
@@ -75,9 +116,12 @@ public class DelombokTask extends Task {
throw new BuildException("Unknown charset: " + encoding, getLocation());
}
+ if (classpath != null) delombok.setClasspath(classpath.toString());
+ if (sourcepath != null) delombok.setSourcepath(sourcepath.toString());
+
delombok.setOutput(toDir);
try {
- if (fromDir != null) delombok.delombok(fromDir);
+ if (fromDir != null) delombok.addDirectory(fromDir);
else {
Iterator<?> it = path.iterator();
while (it.hasNext()) {
@@ -85,12 +129,13 @@ public class DelombokTask extends Task {
File baseDir = fileResource.getBaseDir();
if (baseDir == null) {
File file = fileResource.getFile();
- delombok.process(false, file.getParentFile(), file.getName());
+ delombok.addFile(file.getParentFile(), file.getName());
} else {
- delombok.process(false, baseDir, fileResource.getName());
+ delombok.addFile(baseDir, fileResource.getName());
}
}
}
+ delombok.delombok();
} catch (IOException e) {
throw new BuildException("I/O problem during delombok", e, getLocation());
}
diff --git a/test/core/src/lombok/AbstractRunTests.java b/test/core/src/lombok/AbstractRunTests.java
index 4241646b..7d5992be 100644
--- a/test/core/src/lombok/AbstractRunTests.java
+++ b/test/core/src/lombok/AbstractRunTests.java
@@ -37,12 +37,12 @@ public abstract class AbstractRunTests {
public void compareFile(DirectoryRunner.TestParams params, File file) throws Throwable {
StringBuilder messages = new StringBuilder();
- StringWriter result = new StringWriter();
- transformCode(messages, result, file);
+ StringWriter writer = new StringWriter();
+ transformCode(messages, writer, file);
compare(
file.getName(),
readFile(params.getAfterDirectory(), file, false),
- result.toString(),
+ writer.toString(),
readFile(params.getMessagesDirectory(), file, true),
messages.toString(),
params.printErrors());
@@ -111,6 +111,9 @@ public abstract class AbstractRunTests {
private static void compareContent(String name, String expectedFile, String actualFile) {
String[] expectedLines = expectedFile.split("(\\r?\\n)");
String[] actualLines = actualFile.split("(\\r?\\n)");
+ if (expectedLines[0].startsWith("// Generated by delombok at ")) {
+ expectedLines[0] = "";
+ }
if (actualLines[0].startsWith("// Generated by delombok at ")) {
actualLines[0] = "";
}
diff --git a/test/core/src/lombok/RunTestsViaDelombok.java b/test/core/src/lombok/RunTestsViaDelombok.java
index 50fad33e..59a0ee89 100644
--- a/test/core/src/lombok/RunTestsViaDelombok.java
+++ b/test/core/src/lombok/RunTestsViaDelombok.java
@@ -51,6 +51,9 @@ public class RunTestsViaDelombok extends AbstractRunTests {
}
});
- delombok.delombok(file.getAbsolutePath(), result);
+ delombok.addFile(file.getParentFile(), file.getName());
+ delombok.setSourcepath(file.getParentFile().getAbsolutePath());
+ delombok.setWriter(result);
+ delombok.delombok();
}
}
diff --git a/test/pretty/resource/before/Annotation.java b/test/pretty/resource/before/Annotation.java
index edd1a5e7..24868acd 100644
--- a/test/pretty/resource/before/Annotation.java
+++ b/test/pretty/resource/before/Annotation.java
@@ -1,3 +1,4 @@
+//ignore
@SuppressWarnings("all")
class Annotation {
@Override