diff options
-rw-r--r-- | LICENSE | 2 | ||||
-rw-r--r-- | build.xml | 1 | ||||
-rw-r--r-- | doc/changelog.markdown | 1 | ||||
-rw-r--r-- | src/core/lombok/core/runtimeDependencies/CreateLombokRuntimeApp.java | 4 | ||||
-rw-r--r-- | src/core/lombok/javac/handlers/JavacHandlerUtil.java | 8 | ||||
-rw-r--r-- | src/delombok/lombok/delombok/DelombokResult.java | 12 | ||||
-rw-r--r-- | src/delombok/lombok/delombok/PrettyCommentsPrinter.java | 16 | ||||
-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 | ||||
-rw-r--r-- | website/features/SneakyThrows.html | 6 |
16 files changed, 97 insertions, 64 deletions
@@ -1,4 +1,4 @@ -Copyright (C) 2009-2010 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 @@ -188,6 +188,7 @@ the common tasks and can be called on to run the main aspects of all the sub-scr </fileset> <fileset dir="build" includes="changelog.txt" /> <fileset dir="." includes="LICENSE" /> + <fileset dir="." includes="AUTHORS" /> <rule pattern="com.zwitserloot.cmdreader.**" result="lombok.libs.com.zwitserloot.cmdreader.@1" /> <rule pattern="org.objectweb.asm.**" result="lombok.libs.org.objectweb.asm.@1" /> <manifest> diff --git a/doc/changelog.markdown b/doc/changelog.markdown index 04917001..74930b33 100644 --- a/doc/changelog.markdown +++ b/doc/changelog.markdown @@ -2,6 +2,7 @@ Lombok Changelog ---------------- ### v0.10.5 (EDGE) +* BUGFIX: Performance issues (memory leaks) when using lombok in netbeans, introduced in 0.10, have been fixed. [Issue #242](http://code.google.com/p/projectlombok/issues/detail?id=242) * BUGFIX: Eclipse quickfix "Add unimplemented methods" would sometimes insert the new method stubs in strange places, especially if `@Data` was present. [Issue #51](http://code.google.com/p/projectlombok/issues/detail?id=51) * BUGFIX: Using save action 'Use this qualifier for field accesses, only if necessary' did not work together with `@Data` in certain cases. [Issue #301](http://code.google.com/p/projectlombok/issues/detail?id=301) diff --git a/src/core/lombok/core/runtimeDependencies/CreateLombokRuntimeApp.java b/src/core/lombok/core/runtimeDependencies/CreateLombokRuntimeApp.java index 28d8d687..6815f5d9 100644 --- a/src/core/lombok/core/runtimeDependencies/CreateLombokRuntimeApp.java +++ b/src/core/lombok/core/runtimeDependencies/CreateLombokRuntimeApp.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 @@ -160,6 +160,8 @@ public class CreateLombokRuntimeApp implements LombokApp { boolean success = false; try { JarOutputStream jar = new JarOutputStream(out); + deps.put("LICENSE", CreateLombokRuntimeApp.class); + deps.put("AUTHORS", CreateLombokRuntimeApp.class); for (Entry<String, Class<?>> dep : deps.entrySet()) { InputStream in = dep.getValue().getResourceAsStream("/" + dep.getKey()); try { diff --git a/src/core/lombok/javac/handlers/JavacHandlerUtil.java b/src/core/lombok/javac/handlers/JavacHandlerUtil.java index fc9435d8..2bf6c4ec 100644 --- a/src/core/lombok/javac/handlers/JavacHandlerUtil.java +++ b/src/core/lombok/javac/handlers/JavacHandlerUtil.java @@ -24,6 +24,7 @@ package lombok.javac.handlers; import static lombok.javac.Javac.*; import java.lang.annotation.Annotation; +import java.lang.ref.WeakReference; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.ArrayList; @@ -89,11 +90,12 @@ public class JavacHandlerUtil { } } - private static Map<JCTree, JCTree> generatedNodes = new WeakHashMap<JCTree, JCTree>(); + private static Map<JCTree, WeakReference<JCTree>> generatedNodes = new WeakHashMap<JCTree, WeakReference<JCTree>>(); public static JCTree getGeneratedBy(JCTree node) { synchronized (generatedNodes) { - return generatedNodes.get(node); + WeakReference<JCTree> ref = generatedNodes.get(node); + return ref == null ? null : ref.get(); } } @@ -111,7 +113,7 @@ public class JavacHandlerUtil { public static <T extends JCTree> T setGeneratedBy(T node, JCTree source) { synchronized (generatedNodes) { if (source == null) generatedNodes.remove(node); - else generatedNodes.put(node, source); + else generatedNodes.put(node, new WeakReference<JCTree>(source)); } return node; } 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<Comment> comments; + private final List<CommentInfo> comments; private final JCCompilationUnit compilationUnit; private final boolean changed; - public DelombokResult(List<Comment> comments, JCCompilationUnit compilationUnit, boolean changed) { + public DelombokResult(List<CommentInfo> 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<Comment> comments_; - if (comments instanceof com.sun.tools.javac.util.List) comments_ = (com.sun.tools.javac.util.List<Comment>) comments; - else comments_ = com.sun.tools.javac.util.List.from(comments.toArray(new Comment[0])); + com.sun.tools.javac.util.List<CommentInfo> comments_; + if (comments instanceof com.sun.tools.javac.util.List) comments_ = (com.sun.tools.javac.util.List<CommentInfo>) 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<Comment> comments; + private List<CommentInfo> 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<Comment> comments) { + public PrettyCommentsPrinter(Writer out, JCCompilationUnit cu, List<CommentInfo> 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/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(); } } diff --git a/website/features/SneakyThrows.html b/website/features/SneakyThrows.html index 583dc40d..b88c726d 100644 --- a/website/features/SneakyThrows.html +++ b/website/features/SneakyThrows.html @@ -20,9 +20,6 @@ or otherwise modify the thrown checked exception; it simply fakes out the compiler. On the JVM (class file) level, all exceptions, checked or not, can be thrown regardless of the <code>throws</code> clause of your methods, which is why this works. </p><p> - <em><strong>CAREFUL: </strong></em>Unlike other lombok transformations, you need to put <strong>lombok.jar</strong> on your classpath when - you run your program. - </p><p> Common use cases for when you want to opt out of the checked exception mechanism center around 2 situations:<br /><ul> <li>A needlessly strict interface, such as <code>Runnable</code> - whatever exception propagates out of your <code>run()</code> method, checked or not, it will be passed to the <code>Thread</code>'s unhandled exception handler. Catching a checked exception and wrapping it @@ -38,6 +35,9 @@ </p><p> You can pass any number of exceptions to the <code>@SneakyThrows</code> annotation. If you pass no exceptions, you may throw any exception sneakily. + </p><p> + <em>NOTE: </em> with lombok versions older than 0.10, unlike other lombok transformations, you need to put <strong>lombok.jar</strong> on your + classpath when you run your program. </div> <div class="snippets"> <div class="pre"> |