diff options
Diffstat (limited to 'src/utils/lombok/javac')
-rw-r--r-- | src/utils/lombok/javac/CommentCatcher.java | 17 | ||||
-rw-r--r-- | src/utils/lombok/javac/CommentInfo.java (renamed from src/utils/lombok/javac/Comment.java) | 24 | ||||
-rw-r--r-- | src/utils/lombok/javac/java6/CommentCollectingParser.java | 8 | ||||
-rw-r--r-- | src/utils/lombok/javac/java6/CommentCollectingParserFactory.java | 8 | ||||
-rw-r--r-- | src/utils/lombok/javac/java6/CommentCollectingScanner.java | 19 | ||||
-rw-r--r-- | src/utils/lombok/javac/java7/CommentCollectingParser.java | 8 | ||||
-rw-r--r-- | src/utils/lombok/javac/java7/CommentCollectingParserFactory.java | 8 | ||||
-rw-r--r-- | src/utils/lombok/javac/java7/CommentCollectingScanner.java | 19 |
8 files changed, 69 insertions, 42 deletions
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<JCCompilationUnit, List<Comment>> commentsMap; + private final Map<JCCompilationUnit, List<CommentInfo>> commentsMap; public static CommentCatcher create(Context context) { registerCommentsCollectingScannerFactory(context); JavaCompiler compiler = new JavaCompiler(context); - Map<JCCompilationUnit, List<Comment>> commentsMap = new WeakHashMap<JCCompilationUnit, List<Comment>>(); + Map<JCCompilationUnit, List<CommentInfo>> commentsMap = new WeakHashMap<JCCompilationUnit, List<CommentInfo>>(); setInCompiler(compiler, context, commentsMap); compiler.keepComments = true; @@ -47,7 +46,7 @@ public class CommentCatcher { return new CommentCatcher(compiler, commentsMap); } - private CommentCatcher(JavaCompiler compiler, Map<JCCompilationUnit, List<Comment>> commentsMap) { + private CommentCatcher(JavaCompiler compiler, Map<JCCompilationUnit, List<CommentInfo>> commentsMap) { this.compiler = compiler; this.commentsMap = commentsMap; } @@ -56,9 +55,9 @@ public class CommentCatcher { return compiler; } - public List<Comment> getComments(JCCompilationUnit ast) { - List<Comment> list = commentsMap.get(ast); - return list == null ? Collections.<Comment>emptyList() : list; + public List<CommentInfo> getComments(JCCompilationUnit ast) { + List<CommentInfo> list = commentsMap.get(ast); + return list == null ? List.<CommentInfo>nil() : list; } private static void registerCommentsCollectingScannerFactory(Context context) { @@ -74,7 +73,7 @@ public class CommentCatcher { } } - private static void setInCompiler(JavaCompiler compiler, Context context, Map<JCCompilationUnit, List<Comment>> commentsMap) { + private static void setInCompiler(JavaCompiler compiler, Context context, Map<JCCompilationUnit, List<CommentInfo>> commentsMap) { try { if (JavaCompiler.version().startsWith("1.6")) { diff --git a/src/utils/lombok/javac/Comment.java b/src/utils/lombok/javac/CommentInfo.java index 491f17c7..7375d51a 100644 --- a/src/utils/lombok/javac/Comment.java +++ b/src/utils/lombok/javac/CommentInfo.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009 The Project Lombok Authors. + * 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 @@ -21,17 +21,31 @@ */ package lombok.javac; -public final class Comment { +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 } @@ -42,7 +56,7 @@ public final class Comment { public final StartConnection start; public final EndConnection end; - public Comment(int prevEndPos, int pos, int endPos, String content, StartConnection start, 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; @@ -51,6 +65,10 @@ public final class Comment { 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<JCCompilationUnit, List<Comment>> commentsMap; + private final Map<JCCompilationUnit, List<CommentInfo>> commentsMap; private final Lexer lexer; - protected CommentCollectingParser(Parser.Factory fac, Lexer S, boolean keepDocComments, Map<JCCompilationUnit, List<Comment>> commentsMap) { + protected CommentCollectingParser(Parser.Factory fac, Lexer S, boolean keepDocComments, Map<JCCompilationUnit, List<CommentInfo>> 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<Comment> comments = ((CommentCollectingScanner)lexer).getComments(); + List<CommentInfo> 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<JCCompilationUnit, List<Comment>> commentsMap; + private final Map<JCCompilationUnit, List<CommentInfo>> commentsMap; static Context.Key<Parser.Factory> key() { return parserFactoryKey; } - protected CommentCollectingParserFactory(Context context, Map<JCCompilationUnit, List<Comment>> commentsMap) { + protected CommentCollectingParserFactory(Context context, Map<JCCompilationUnit, List<CommentInfo>> 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<JCCompilationUnit, List<Comment>> commentsMap) { + public static void setInCompiler(JavaCompiler compiler, Context context, Map<JCCompilationUnit, List<CommentInfo>> 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<Comment> comments = ListBuffer.lb(); + private final ListBuffer<CommentInfo> 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<Comment> getComments() { + public List<CommentInfo> 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<JCCompilationUnit, List<Comment>> commentsMap; + private final Map<JCCompilationUnit, List<CommentInfo>> commentsMap; private final Lexer lexer; protected CommentCollectingParser(ParserFactory fac, Lexer S, - boolean keepDocComments, boolean keepLineMap, Map<JCCompilationUnit, List<Comment>> commentsMap) { + boolean keepDocComments, boolean keepLineMap, Map<JCCompilationUnit, List<CommentInfo>> 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<Comment> comments = ((CommentCollectingScanner)lexer).getComments(); + List<CommentInfo> 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<JCCompilationUnit, List<Comment>> commentsMap; + private final Map<JCCompilationUnit, List<CommentInfo>> commentsMap; private final Context context; static Context.Key<ParserFactory> key() { return parserFactoryKey; } - protected CommentCollectingParserFactory(Context context, Map<JCCompilationUnit, List<Comment>> commentsMap) { + protected CommentCollectingParserFactory(Context context, Map<JCCompilationUnit, List<CommentInfo>> 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<JCCompilationUnit, List<Comment>> commentsMap) { + public static void setInCompiler(JavaCompiler compiler, Context context, Map<JCCompilationUnit, List<CommentInfo>> 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<Comment> comments = ListBuffer.lb(); + private final ListBuffer<CommentInfo> 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<Comment> getComments() { + public List<CommentInfo> getComments() { return comments.toList(); } } |