From d713dab0c36889846a7445bf965b567e9b9a7b9b Mon Sep 17 00:00:00 2001 From: Reinier Zwitserloot Date: Mon, 12 Dec 2011 21:18:24 +0100 Subject: Renamed Comment to CommentInfo. --- src/delombok/lombok/delombok/DelombokResult.java | 12 ++-- .../lombok/delombok/PrettyCommentsPrinter.java | 16 ++--- src/utils/lombok/javac/Comment.java | 58 ----------------- src/utils/lombok/javac/CommentCatcher.java | 17 +++-- src/utils/lombok/javac/CommentInfo.java | 76 ++++++++++++++++++++++ .../javac/java6/CommentCollectingParser.java | 8 +-- .../java6/CommentCollectingParserFactory.java | 8 +-- .../javac/java6/CommentCollectingScanner.java | 19 ++++-- .../javac/java7/CommentCollectingParser.java | 8 +-- .../java7/CommentCollectingParserFactory.java | 8 +-- .../javac/java7/CommentCollectingScanner.java | 19 ++++-- 11 files changed, 138 insertions(+), 111 deletions(-) delete mode 100644 src/utils/lombok/javac/Comment.java create mode 100644 src/utils/lombok/javac/CommentInfo.java (limited to 'src') diff --git a/src/delombok/lombok/delombok/DelombokResult.java b/src/delombok/lombok/delombok/DelombokResult.java index 0ed39607..6fd62bf6 100644 --- a/src/delombok/lombok/delombok/DelombokResult.java +++ b/src/delombok/lombok/delombok/DelombokResult.java @@ -27,16 +27,16 @@ import java.util.List; import javax.tools.JavaFileObject; -import lombok.javac.Comment; +import lombok.javac.CommentInfo; import com.sun.tools.javac.tree.JCTree.JCCompilationUnit; public class DelombokResult { - private final List comments; + private final List comments; private final JCCompilationUnit compilationUnit; private final boolean changed; - public DelombokResult(List comments, JCCompilationUnit compilationUnit, boolean changed) { + public DelombokResult(List comments, JCCompilationUnit compilationUnit, boolean changed) { this.comments = comments; this.compilationUnit = compilationUnit; this.changed = changed; @@ -55,9 +55,9 @@ public class DelombokResult { out.write(String.valueOf(new Date())); out.write(System.getProperty("line.separator")); - com.sun.tools.javac.util.List comments_; - if (comments instanceof com.sun.tools.javac.util.List) comments_ = (com.sun.tools.javac.util.List) comments; - else comments_ = com.sun.tools.javac.util.List.from(comments.toArray(new Comment[0])); + com.sun.tools.javac.util.List comments_; + if (comments instanceof com.sun.tools.javac.util.List) comments_ = (com.sun.tools.javac.util.List) comments; + else comments_ = com.sun.tools.javac.util.List.from(comments.toArray(new CommentInfo[0])); compilationUnit.accept(new PrettyCommentsPrinter(out, compilationUnit, comments_)); } diff --git a/src/delombok/lombok/delombok/PrettyCommentsPrinter.java b/src/delombok/lombok/delombok/PrettyCommentsPrinter.java index 387938c6..9b3b7eb8 100644 --- a/src/delombok/lombok/delombok/PrettyCommentsPrinter.java +++ b/src/delombok/lombok/delombok/PrettyCommentsPrinter.java @@ -39,10 +39,10 @@ import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; -import lombok.javac.Comment; +import lombok.javac.CommentInfo; import lombok.javac.Javac; -import lombok.javac.Comment.EndConnection; -import lombok.javac.Comment.StartConnection; +import lombok.javac.CommentInfo.EndConnection; +import lombok.javac.CommentInfo.StartConnection; import com.sun.source.tree.Tree; import com.sun.tools.javac.code.BoundKind; @@ -199,7 +199,7 @@ public class PrettyCommentsPrinter extends JCTree.Visitor { } } - private List comments; + private List comments; private final JCCompilationUnit cu; private boolean onNewLine = true; private boolean aligned = false; @@ -209,7 +209,7 @@ public class PrettyCommentsPrinter extends JCTree.Visitor { private boolean needsNewLine = false; private boolean needsAlign = false; - public PrettyCommentsPrinter(Writer out, JCCompilationUnit cu, List comments) { + public PrettyCommentsPrinter(Writer out, JCCompilationUnit cu, List comments) { this.out = out; this.comments = comments; this.cu = cu; @@ -222,7 +222,7 @@ public class PrettyCommentsPrinter extends JCTree.Visitor { private void consumeComments(int till) throws IOException { boolean prevNewLine = onNewLine; boolean found = false; - Comment head = comments.head; + CommentInfo head = comments.head; while (comments.nonEmpty() && head.pos < till) { printComment(head); comments = comments.tail; @@ -235,7 +235,7 @@ public class PrettyCommentsPrinter extends JCTree.Visitor { private void consumeTrailingComments(int from) throws IOException { boolean prevNewLine = onNewLine; - Comment head = comments.head; + CommentInfo head = comments.head; boolean stop = false; while (comments.nonEmpty() && head.prevEndPos == from && !stop && !(head.start == StartConnection.ON_NEXT_LINE || head.start == StartConnection.START_OF_LINE)) { from = head.endPos; @@ -249,7 +249,7 @@ public class PrettyCommentsPrinter extends JCTree.Visitor { } } - private void printComment(Comment comment) throws IOException { + private void printComment(CommentInfo comment) throws IOException { prepareComment(comment.start); print(comment.content); switch (comment.end) { diff --git a/src/utils/lombok/javac/Comment.java b/src/utils/lombok/javac/Comment.java deleted file mode 100644 index 491f17c7..00000000 --- a/src/utils/lombok/javac/Comment.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 2009 The Project Lombok Authors. - * - * 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.javac; - -public final class Comment { - public enum StartConnection { - START_OF_LINE, - ON_NEXT_LINE, - DIRECT_AFTER_PREVIOUS, - AFTER_PREVIOUS - } - - public enum EndConnection { - DIRECT_AFTER_COMMENT, - AFTER_COMMENT, - ON_NEXT_LINE - } - - public final int pos; - public final int prevEndPos; - public final String content; - public final int endPos; - public final StartConnection start; - public final EndConnection end; - - public Comment(int prevEndPos, int pos, int endPos, String content, StartConnection start, EndConnection end) { - this.pos = pos; - this.prevEndPos = prevEndPos; - this.endPos = endPos; - this.content = content; - this.start = start; - this.end = end; - } - - @Override - public String toString() { - return String.format("%d: %s (%s,%s)", pos, content, start, end); - } -} diff --git a/src/utils/lombok/javac/CommentCatcher.java b/src/utils/lombok/javac/CommentCatcher.java index 3bd64ec7..474dc43d 100644 --- a/src/utils/lombok/javac/CommentCatcher.java +++ b/src/utils/lombok/javac/CommentCatcher.java @@ -21,24 +21,23 @@ */ package lombok.javac; -import java.util.Collections; -import java.util.List; import java.util.Map; import java.util.WeakHashMap; import com.sun.tools.javac.main.JavaCompiler; import com.sun.tools.javac.tree.JCTree.JCCompilationUnit; import com.sun.tools.javac.util.Context; +import com.sun.tools.javac.util.List; public class CommentCatcher { private final JavaCompiler compiler; - private final Map> commentsMap; + private final Map> commentsMap; public static CommentCatcher create(Context context) { registerCommentsCollectingScannerFactory(context); JavaCompiler compiler = new JavaCompiler(context); - Map> commentsMap = new WeakHashMap>(); + Map> commentsMap = new WeakHashMap>(); setInCompiler(compiler, context, commentsMap); compiler.keepComments = true; @@ -47,7 +46,7 @@ public class CommentCatcher { return new CommentCatcher(compiler, commentsMap); } - private CommentCatcher(JavaCompiler compiler, Map> commentsMap) { + private CommentCatcher(JavaCompiler compiler, Map> commentsMap) { this.compiler = compiler; this.commentsMap = commentsMap; } @@ -56,9 +55,9 @@ public class CommentCatcher { return compiler; } - public List getComments(JCCompilationUnit ast) { - List list = commentsMap.get(ast); - return list == null ? Collections.emptyList() : list; + public List getComments(JCCompilationUnit ast) { + List list = commentsMap.get(ast); + return list == null ? List.nil() : list; } private static void registerCommentsCollectingScannerFactory(Context context) { @@ -74,7 +73,7 @@ public class CommentCatcher { } } - private static void setInCompiler(JavaCompiler compiler, Context context, Map> commentsMap) { + private static void setInCompiler(JavaCompiler compiler, Context context, Map> commentsMap) { try { if (JavaCompiler.version().startsWith("1.6")) { diff --git a/src/utils/lombok/javac/CommentInfo.java b/src/utils/lombok/javac/CommentInfo.java new file mode 100644 index 00000000..7375d51a --- /dev/null +++ b/src/utils/lombok/javac/CommentInfo.java @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2009-2011 The Project Lombok Authors. + * + * 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.javac; + +public final class CommentInfo { + public enum StartConnection { + /* Comment's start immediately follows a newline. */ + START_OF_LINE, + + /* Comment's start does not immediately follow a newline, but there is a newline between this + * and the previous comment (or pos 0 if first comment). */ + ON_NEXT_LINE, + + /* Comment's start immediately follows previous comment's end (or pos 0 if first comment). */ + DIRECT_AFTER_PREVIOUS, + + /* Comment's start does not immediately follow previous comment's end, but there is no newline in + * between this and previous comment (or pos 0 if first comment). */ + AFTER_PREVIOUS + } + + public enum EndConnection { + /* Comment is followed immediately by another node (not whitespace, not newline). */ + DIRECT_AFTER_COMMENT, + + /* Comment is followed by some non-newline whitespace then by another node. */ + AFTER_COMMENT, + + /* Comment is followed by optionally some whitespace then a newline. */ + ON_NEXT_LINE + } + + public final int pos; + public final int prevEndPos; + public final String content; + public final int endPos; + public final StartConnection start; + public final EndConnection end; + + public CommentInfo(int prevEndPos, int pos, int endPos, String content, StartConnection start, EndConnection end) { + this.pos = pos; + this.prevEndPos = prevEndPos; + this.endPos = endPos; + this.content = content; + this.start = start; + this.end = end; + } + + public boolean isJavadoc() { + return content.startsWith("/**"); + } + + @Override + public String toString() { + return String.format("%d: %s (%s,%s)", pos, content, start, end); + } +} diff --git a/src/utils/lombok/javac/java6/CommentCollectingParser.java b/src/utils/lombok/javac/java6/CommentCollectingParser.java index 0915bbb8..94a85e55 100644 --- a/src/utils/lombok/javac/java6/CommentCollectingParser.java +++ b/src/utils/lombok/javac/java6/CommentCollectingParser.java @@ -2,7 +2,7 @@ package lombok.javac.java6; import java.util.Map; -import lombok.javac.Comment; +import lombok.javac.CommentInfo; import com.sun.tools.javac.parser.EndPosParser; import com.sun.tools.javac.parser.Lexer; @@ -12,10 +12,10 @@ import com.sun.tools.javac.util.List; class CommentCollectingParser extends EndPosParser { - private final Map> commentsMap; + private final Map> commentsMap; private final Lexer lexer; - protected CommentCollectingParser(Parser.Factory fac, Lexer S, boolean keepDocComments, Map> commentsMap) { + protected CommentCollectingParser(Parser.Factory fac, Lexer S, boolean keepDocComments, Map> commentsMap) { super(fac, S, keepDocComments); lexer = S; this.commentsMap = commentsMap; @@ -24,7 +24,7 @@ class CommentCollectingParser extends EndPosParser { @Override public JCCompilationUnit compilationUnit() { JCCompilationUnit result = super.compilationUnit(); if (lexer instanceof CommentCollectingScanner) { - List comments = ((CommentCollectingScanner)lexer).getComments(); + List comments = ((CommentCollectingScanner)lexer).getComments(); commentsMap.put(result, comments); } return result; diff --git a/src/utils/lombok/javac/java6/CommentCollectingParserFactory.java b/src/utils/lombok/javac/java6/CommentCollectingParserFactory.java index 074f956e..b2a248c8 100644 --- a/src/utils/lombok/javac/java6/CommentCollectingParserFactory.java +++ b/src/utils/lombok/javac/java6/CommentCollectingParserFactory.java @@ -3,7 +3,7 @@ package lombok.javac.java6; import java.lang.reflect.Field; import java.util.Map; -import lombok.javac.Comment; +import lombok.javac.CommentInfo; import com.sun.tools.javac.main.JavaCompiler; import com.sun.tools.javac.parser.Lexer; @@ -13,13 +13,13 @@ import com.sun.tools.javac.util.Context; import com.sun.tools.javac.util.List; public class CommentCollectingParserFactory extends Parser.Factory { - private final Map> commentsMap; + private final Map> commentsMap; static Context.Key key() { return parserFactoryKey; } - protected CommentCollectingParserFactory(Context context, Map> commentsMap) { + protected CommentCollectingParserFactory(Context context, Map> commentsMap) { super(context); this.commentsMap = commentsMap; } @@ -32,7 +32,7 @@ public class CommentCollectingParserFactory extends Parser.Factory { //Either way this will work out. } - public static void setInCompiler(JavaCompiler compiler, Context context, Map> commentsMap) { + public static void setInCompiler(JavaCompiler compiler, Context context, Map> commentsMap) { context.put(CommentCollectingParserFactory.key(), (Parser.Factory)null); Field field; try { diff --git a/src/utils/lombok/javac/java6/CommentCollectingScanner.java b/src/utils/lombok/javac/java6/CommentCollectingScanner.java index a33b4055..66e1514d 100644 --- a/src/utils/lombok/javac/java6/CommentCollectingScanner.java +++ b/src/utils/lombok/javac/java6/CommentCollectingScanner.java @@ -23,9 +23,9 @@ package lombok.javac.java6; import java.nio.CharBuffer; -import lombok.javac.Comment; -import lombok.javac.Comment.EndConnection; -import lombok.javac.Comment.StartConnection; +import lombok.javac.CommentInfo; +import lombok.javac.CommentInfo.EndConnection; +import lombok.javac.CommentInfo.StartConnection; import com.sun.tools.javac.parser.Scanner; import com.sun.tools.javac.util.List; @@ -33,7 +33,7 @@ import com.sun.tools.javac.util.ListBuffer; public class CommentCollectingScanner extends Scanner { - private final ListBuffer comments = ListBuffer.lb(); + private final ListBuffer comments = ListBuffer.lb(); private int endComment = 0; public CommentCollectingScanner(CommentCollectingScannerFactory factory, CharBuffer charBuffer) { @@ -54,14 +54,19 @@ public class CommentCollectingScanner extends Scanner { StartConnection start = determineStartConnection(prevEndPos, pos); EndConnection end = determineEndConnection(endPos); - Comment comment = new Comment(prevEndPos, pos, endPos, content, start, end); + CommentInfo comment = new CommentInfo(prevEndPos, pos, endPos, content, start, end); comments.append(comment); } private EndConnection determineEndConnection(int pos) { boolean first = true; for (int i = pos;; i++) { - char c = getRawCharacters(i, i + 1)[0]; + char c; + try { + c = getRawCharacters(i, i + 1)[0]; + } catch (IndexOutOfBoundsException e) { + c = '\n'; + } if (isNewLine(c)) { return EndConnection.ON_NEXT_LINE; } @@ -93,7 +98,7 @@ public class CommentCollectingScanner extends Scanner { return c == '\n' || c == '\r'; } - public List getComments() { + public List getComments() { return comments.toList(); } } diff --git a/src/utils/lombok/javac/java7/CommentCollectingParser.java b/src/utils/lombok/javac/java7/CommentCollectingParser.java index 54cdb6a9..82f19c42 100644 --- a/src/utils/lombok/javac/java7/CommentCollectingParser.java +++ b/src/utils/lombok/javac/java7/CommentCollectingParser.java @@ -3,7 +3,7 @@ package lombok.javac.java7; import java.util.List; import java.util.Map; -import lombok.javac.Comment; +import lombok.javac.CommentInfo; import com.sun.tools.javac.parser.EndPosParser; import com.sun.tools.javac.parser.Lexer; @@ -11,11 +11,11 @@ import com.sun.tools.javac.parser.ParserFactory; import com.sun.tools.javac.tree.JCTree.JCCompilationUnit; class CommentCollectingParser extends EndPosParser { - private final Map> commentsMap; + private final Map> commentsMap; private final Lexer lexer; protected CommentCollectingParser(ParserFactory fac, Lexer S, - boolean keepDocComments, boolean keepLineMap, Map> commentsMap) { + boolean keepDocComments, boolean keepLineMap, Map> commentsMap) { super(fac, S, keepDocComments, keepLineMap); lexer = S; this.commentsMap = commentsMap; @@ -24,7 +24,7 @@ class CommentCollectingParser extends EndPosParser { public JCCompilationUnit parseCompilationUnit() { JCCompilationUnit result = super.parseCompilationUnit(); if (lexer instanceof CommentCollectingScanner) { - List comments = ((CommentCollectingScanner)lexer).getComments(); + List comments = ((CommentCollectingScanner)lexer).getComments(); commentsMap.put(result, comments); } return result; diff --git a/src/utils/lombok/javac/java7/CommentCollectingParserFactory.java b/src/utils/lombok/javac/java7/CommentCollectingParserFactory.java index 7d8c9537..e361a5bd 100644 --- a/src/utils/lombok/javac/java7/CommentCollectingParserFactory.java +++ b/src/utils/lombok/javac/java7/CommentCollectingParserFactory.java @@ -4,7 +4,7 @@ import java.lang.reflect.Field; import java.util.List; import java.util.Map; -import lombok.javac.Comment; +import lombok.javac.CommentInfo; import com.sun.tools.javac.main.JavaCompiler; import com.sun.tools.javac.parser.Lexer; @@ -15,14 +15,14 @@ import com.sun.tools.javac.tree.JCTree.JCCompilationUnit; import com.sun.tools.javac.util.Context; public class CommentCollectingParserFactory extends ParserFactory { - private final Map> commentsMap; + private final Map> commentsMap; private final Context context; static Context.Key key() { return parserFactoryKey; } - protected CommentCollectingParserFactory(Context context, Map> commentsMap) { + protected CommentCollectingParserFactory(Context context, Map> commentsMap) { super(context); this.context = context; this.commentsMap = commentsMap; @@ -38,7 +38,7 @@ public class CommentCollectingParserFactory extends ParserFactory { //Either way this will work out. } - public static void setInCompiler(JavaCompiler compiler, Context context, Map> commentsMap) { + public static void setInCompiler(JavaCompiler compiler, Context context, Map> commentsMap) { context.put(CommentCollectingParserFactory.key(), (ParserFactory)null); Field field; try { diff --git a/src/utils/lombok/javac/java7/CommentCollectingScanner.java b/src/utils/lombok/javac/java7/CommentCollectingScanner.java index b13973b1..e2d040f2 100644 --- a/src/utils/lombok/javac/java7/CommentCollectingScanner.java +++ b/src/utils/lombok/javac/java7/CommentCollectingScanner.java @@ -23,16 +23,16 @@ package lombok.javac.java7; import java.nio.CharBuffer; -import lombok.javac.Comment; -import lombok.javac.Comment.EndConnection; -import lombok.javac.Comment.StartConnection; +import lombok.javac.CommentInfo; +import lombok.javac.CommentInfo.EndConnection; +import lombok.javac.CommentInfo.StartConnection; import com.sun.tools.javac.util.List; import com.sun.tools.javac.util.ListBuffer; import com.sun.tools.javac.parser.Scanner; public class CommentCollectingScanner extends Scanner { - private final ListBuffer comments = ListBuffer.lb(); + private final ListBuffer comments = ListBuffer.lb(); private int endComment = 0; public CommentCollectingScanner(CommentCollectingScannerFactory factory, CharBuffer charBuffer) { @@ -53,14 +53,19 @@ public class CommentCollectingScanner extends Scanner { StartConnection start = determineStartConnection(prevEndPos, pos); EndConnection end = determineEndConnection(endPos); - Comment comment = new Comment(prevEndPos, pos, endPos, content, start, end); + CommentInfo comment = new CommentInfo(prevEndPos, pos, endPos, content, start, end); comments.append(comment); } private EndConnection determineEndConnection(int pos) { boolean first = true; for (int i = pos;; i++) { - char c = getRawCharacters(i, i + 1)[0]; + char c; + try { + c = getRawCharacters(i, i + 1)[0]; + } catch (IndexOutOfBoundsException e) { + c = '\n'; + } if (isNewLine(c)) { return EndConnection.ON_NEXT_LINE; } @@ -92,7 +97,7 @@ public class CommentCollectingScanner extends Scanner { return c == '\n' || c == '\r'; } - public List getComments() { + public List getComments() { return comments.toList(); } } -- cgit