aboutsummaryrefslogtreecommitdiff
path: root/src/delombok/lombok
diff options
context:
space:
mode:
authorReinier Zwitserloot <reinier@zwitserloot.com>2013-07-22 23:23:46 +0200
committerReinier Zwitserloot <reinier@zwitserloot.com>2013-07-22 23:23:46 +0200
commit45697b50816df79475a8bb69dc89ff68747fbfe6 (patch)
tree25cb023eec1f74baf5063cc5a58a5351ee43d6f0 /src/delombok/lombok
parent4c03e3d220900431085897878d4888bf530b31ec (diff)
parentdeed98be16e5099af52d951fc611f86a82a42858 (diff)
downloadlombok-45697b50816df79475a8bb69dc89ff68747fbfe6.tar.gz
lombok-45697b50816df79475a8bb69dc89ff68747fbfe6.tar.bz2
lombok-45697b50816df79475a8bb69dc89ff68747fbfe6.zip
Merge branch 'master' into jdk8. Also added some major fixes whilst merging.
Conflicts: src/core/lombok/javac/handlers/JavacHandlerUtil.java src/utils/lombok/javac/CommentCatcher.java src/utils/lombok/javac/Javac.java
Diffstat (limited to 'src/delombok/lombok')
-rw-r--r--src/delombok/lombok/delombok/LombokOptionsFactory.java15
-rw-r--r--src/delombok/lombok/delombok/PrettyCommentsPrinter.java67
2 files changed, 66 insertions, 16 deletions
diff --git a/src/delombok/lombok/delombok/LombokOptionsFactory.java b/src/delombok/lombok/delombok/LombokOptionsFactory.java
index 8d3b2528..e581593f 100644
--- a/src/delombok/lombok/delombok/LombokOptionsFactory.java
+++ b/src/delombok/lombok/delombok/LombokOptionsFactory.java
@@ -21,17 +21,16 @@
*/
package lombok.delombok;
+import lombok.javac.Javac;
import lombok.javac.Javac6BasedLombokOptions;
import lombok.javac.Javac8BasedLombokOptions;
import lombok.javac.LombokOptions;
-import com.sun.tools.javac.main.JavaCompiler;
import com.sun.tools.javac.util.Context;
public class LombokOptionsFactory {
-
enum LombokOptionCompilerVersion {
- JDK6_7 {
+ JDK7_AND_LOWER {
@Override LombokOptions createAndRegisterOptions(Context context) {
return Javac6BasedLombokOptions.replaceWithDelombokOptions(context);
}
@@ -46,17 +45,13 @@ public class LombokOptionsFactory {
abstract LombokOptions createAndRegisterOptions(Context context);
}
-
public static LombokOptions getDelombokOptions(Context context) {
LombokOptions options;
- if (JavaCompiler.version().startsWith("1.6") || JavaCompiler.version().startsWith("1.7")) {
- options = LombokOptionCompilerVersion.JDK6_7.createAndRegisterOptions(context);
- } else if (JavaCompiler.version().startsWith("1.8")) {
- options = LombokOptionCompilerVersion.JDK8.createAndRegisterOptions(context);
+ if (Javac.getJavaCompilerVersion() < 8) {
+ options = LombokOptionCompilerVersion.JDK7_AND_LOWER.createAndRegisterOptions(context);
} else {
- throw new IllegalStateException("No support for compiler version " + JavaCompiler.version() + " for delombok");
+ options = LombokOptionCompilerVersion.JDK8.createAndRegisterOptions(context);
}
return options;
-
}
}
diff --git a/src/delombok/lombok/delombok/PrettyCommentsPrinter.java b/src/delombok/lombok/delombok/PrettyCommentsPrinter.java
index 9817f050..075cc64f 100644
--- a/src/delombok/lombok/delombok/PrettyCommentsPrinter.java
+++ b/src/delombok/lombok/delombok/PrettyCommentsPrinter.java
@@ -22,6 +22,11 @@
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
+
+/*
+ * Code derived from com.sun.tools.javac.tree.Pretty, from the langtools project.
+ * A version can be found at, for example, http://hg.openjdk.java.net/jdk7/build/langtools
+ */
package lombok.delombok;
import static com.sun.tools.javac.code.Flags.ANNOTATION;
@@ -220,12 +225,21 @@ public class PrettyCommentsPrinter extends JCTree.Visitor {
return tree.getEndPosition(cu.endPositions);
}
- private void consumeComments(int till) throws IOException {
+ private void consumeComments(int until) throws IOException {
+ consumeComments(until, null);
+ }
+ private void consumeComments(int until, JCTree tree) throws IOException {
boolean prevNewLine = onNewLine;
boolean found = false;
CommentInfo head = comments.head;
- while (comments.nonEmpty() && head.pos < till) {
- printComment(head);
+ while (comments.nonEmpty() && head.pos < until) {
+ if (tree != null && docComments != null && docComments.containsKey(tree) && head.isJavadoc() && noFurtherJavadocForthcoming(until)) {
+ // This is (presumably) the exact same javadoc that has already been associated with the node that we're just about to
+ // print. These javadoc can be modified by lombok handlers, and as such we should NOT print them from the consumed comments db,
+ // and instead print the actual javadoc associated with the upcoming node (which the visit method for that node will take care of).
+ } else {
+ printComment(head);
+ }
comments = comments.tail;
head = comments.head;
}
@@ -233,6 +247,17 @@ public class PrettyCommentsPrinter extends JCTree.Visitor {
println();
}
}
+
+ private boolean noFurtherJavadocForthcoming(int until) {
+ List<CommentInfo> c = comments;
+ if (c.nonEmpty()) c = c.tail;
+ while (c.nonEmpty()) {
+ if (c.head.pos >= until) return true;
+ if (c.head.isJavadoc()) return false;
+ c = c.tail;
+ }
+ return true;
+ }
private void consumeTrailingComments(int from) throws IOException {
boolean prevNewLine = onNewLine;
@@ -404,7 +429,7 @@ public class PrettyCommentsPrinter extends JCTree.Visitor {
this.prec = prec;
if (tree == null) print("/*missing*/");
else {
- consumeComments(tree.pos);
+ consumeComments(tree.pos, tree);
tree.accept(this);
int endPos = endPos(tree);
consumeTrailingComments(endPos);
@@ -506,7 +531,14 @@ public class PrettyCommentsPrinter extends JCTree.Visitor {
print("/**"); println();
int pos = 0;
int endpos = lineEndPos(dc, pos);
+ boolean atStart = true;
while (pos < dc.length()) {
+ String line = dc.substring(pos, endpos);
+ if (line.trim().isEmpty() && atStart) {
+ atStart = false;
+ continue;
+ }
+ atStart = false;
align();
print(" *");
if (pos < dc.length() && dc.charAt(pos) > ' ') print(" ");
@@ -616,7 +648,7 @@ public class PrettyCommentsPrinter extends JCTree.Visitor {
docComments = tree.docComments;
printDocComment(tree);
if (tree.pid != null) {
- consumeComments(tree.pos);
+ consumeComments(tree.pos, tree);
print("package ");
printExpr(tree.pid);
print(";");
@@ -690,7 +722,7 @@ public class PrettyCommentsPrinter extends JCTree.Visitor {
public void visitClassDef(JCClassDecl tree) {
try {
- consumeComments(tree.pos);
+ consumeComments(tree.pos, tree);
println(); align();
printDocComment(tree);
printAnnotations(tree.mods.annotations);
@@ -982,6 +1014,29 @@ public class PrettyCommentsPrinter extends JCTree.Visitor {
public void visitTry(JCTry tree) {
try {
print("try ");
+ List<?> resources = null;
+ try {
+ Field f = JCTry.class.getField("resources");
+ resources = (List<?>) f.get(tree);
+ } catch (Exception ignore) {
+ // In JDK6 and down this field does not exist; resources will retain its initializer value which is what we want.
+ }
+
+ if (resources != null && resources.nonEmpty()) {
+ boolean first = true;
+ print("(");
+ for (Object var0 : resources) {
+ JCTree var = (JCTree) var0;
+ if (!first) {
+ println();
+ indent();
+ }
+ printStat(var);
+ first = false;
+ }
+ print(") ");
+ }
+
printStat(tree.body);
for (List<JCCatch> l = tree.catchers; l.nonEmpty(); l = l.tail) {
printStat(l.head);