mirror of
https://github.com/tiennm99/lombok.git
synced 2026-10-13 20:15:09 +00:00
[JDK9] fixing delombok’s comment integration in JDK9.
This commit is contained in:
1 parent
a92117574e
commit
ab8e14736f
10 files changed
+149
-2
No files matched your search
@@ -29,6 +29,7 @@ import java.util.regex.Pattern;
|
||||
|
||||
import lombok.javac.CommentInfo;
|
||||
import lombok.javac.Javac;
|
||||
import lombok.javac.PackageName;
|
||||
import lombok.javac.handlers.JavacHandlerUtil;
|
||||
|
||||
import com.sun.tools.javac.parser.Tokens.Comment;
|
||||
@@ -120,7 +121,8 @@ public class DocCommentIntegrator {
|
||||
}
|
||||
|
||||
private JCTree findJavadocableNodeOnOrAfter(JCCompilationUnit unit, int endPos) {
|
||||
if (unit.pid != null && endPos <= unit.pid.pos) return null;
|
||||
JCTree pid = PackageName.getPackageNode(unit);
|
||||
if (pid != null && endPos <= pid.pos) return null;
|
||||
Iterator<JCTree> it = unit.defs.iterator();
|
||||
|
||||
while (it.hasNext()) {
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
/*
|
||||
* These are stub versions of various bits of javac-internal API (for various different versions of javac). Lombok is compiled against these.
|
||||
*/
|
||||
package com.sun.tools.javac.parser;
|
||||
|
||||
import com.sun.tools.javac.tree.JCTree;
|
||||
@@ -6,6 +9,9 @@ public class JavacParser {
|
||||
protected JavacParser(ParserFactory fac, Lexer S, boolean keepDocComments, boolean keepLineMap, boolean keepEndPositions) {
|
||||
}
|
||||
|
||||
protected JavacParser(ParserFactory fac, Lexer S, boolean keepDocComments, boolean keepLineMap, boolean keepEndPositions, boolean parseModuleInfo) {
|
||||
}
|
||||
|
||||
public JCTree.JCCompilationUnit parseCompilationUnit() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -95,8 +95,10 @@ public class CommentCatcher {
|
||||
parserFactory = Class.forName("lombok.javac.java6.CommentCollectingParserFactory");
|
||||
} else if (javaCompilerVersion == 7) {
|
||||
parserFactory = Class.forName("lombok.javac.java7.CommentCollectingParserFactory");
|
||||
} else {
|
||||
} else if (javaCompilerVersion == 8) {
|
||||
parserFactory = Class.forName("lombok.javac.java8.CommentCollectingParserFactory");
|
||||
} else {
|
||||
parserFactory = Class.forName("lombok.javac.java9.CommentCollectingParserFactory");
|
||||
}
|
||||
parserFactory.getMethod("setInCompiler", JavaCompiler.class, Context.class).invoke(null, compiler, context);
|
||||
} catch (InvocationTargetException e) {
|
||||
|
||||
@@ -52,6 +52,16 @@ public class CommentCollectingParserFactory extends ParserFactory {
|
||||
//Either way this will work out.
|
||||
}
|
||||
|
||||
public JavacParser newParser(CharSequence input, boolean keepDocComments, boolean keepEndPos, boolean keepLineMap, boolean parseModuleInfo) {
|
||||
ScannerFactory scannerFactory = ScannerFactory.instance(context);
|
||||
Lexer lexer = scannerFactory.newScanner(input, true);
|
||||
Object x = new CommentCollectingParser(this, lexer, true, keepLineMap, keepEndPos);
|
||||
return (JavacParser) x;
|
||||
// CCP is based on a stub which extends nothing, but at runtime the stub is replaced with either
|
||||
//javac6's EndPosParser which extends Parser, or javac8's JavacParser which implements Parser.
|
||||
//Either way this will work out.
|
||||
}
|
||||
|
||||
public static void setInCompiler(JavaCompiler compiler, Context context) {
|
||||
context.put(CommentCollectingParserFactory.key(), (ParserFactory) null);
|
||||
Field field;
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* Copyright (C) 2013-2017 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.java9;
|
||||
|
||||
import static lombok.javac.CommentCatcher.JCCompilationUnit_comments;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import lombok.javac.CommentInfo;
|
||||
import lombok.javac.java8.CommentCollectingScanner;
|
||||
|
||||
import com.sun.tools.javac.parser.JavacParser;
|
||||
import com.sun.tools.javac.parser.Lexer;
|
||||
import com.sun.tools.javac.parser.ParserFactory;
|
||||
import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
|
||||
|
||||
class CommentCollectingParser extends JavacParser {
|
||||
private final Lexer lexer;
|
||||
|
||||
protected CommentCollectingParser(ParserFactory fac, Lexer S,
|
||||
boolean keepDocComments, boolean keepLineMap, boolean keepEndPositions, boolean parseModuleInfo) {
|
||||
super(fac, S, keepDocComments, keepLineMap, keepEndPositions, parseModuleInfo);
|
||||
lexer = S;
|
||||
}
|
||||
|
||||
public JCCompilationUnit parseCompilationUnit() {
|
||||
JCCompilationUnit result = super.parseCompilationUnit();
|
||||
if (lexer instanceof CommentCollectingScanner) {
|
||||
List<CommentInfo> comments = ((CommentCollectingScanner)lexer).getComments();
|
||||
JCCompilationUnit_comments.set(result, comments);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
/*
|
||||
* Copyright (C) 2013-2017 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.java9;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
import com.sun.tools.javac.main.JavaCompiler;
|
||||
import com.sun.tools.javac.parser.JavacParser;
|
||||
import com.sun.tools.javac.parser.Lexer;
|
||||
import com.sun.tools.javac.parser.ParserFactory;
|
||||
import com.sun.tools.javac.parser.ScannerFactory;
|
||||
import com.sun.tools.javac.util.Context;
|
||||
|
||||
public class CommentCollectingParserFactory extends ParserFactory {
|
||||
private final Context context;
|
||||
|
||||
static Context.Key<ParserFactory> key() {
|
||||
return parserFactoryKey;
|
||||
}
|
||||
|
||||
protected CommentCollectingParserFactory(Context context) {
|
||||
super(context);
|
||||
this.context = context;
|
||||
}
|
||||
|
||||
public JavacParser newParser(CharSequence input, boolean keepDocComments, boolean keepEndPos, boolean keepLineMap) {
|
||||
return newParser(input, keepDocComments, keepEndPos, keepLineMap, false);
|
||||
}
|
||||
|
||||
public JavacParser newParser(CharSequence input, boolean keepDocComments, boolean keepEndPos, boolean keepLineMap, boolean parseModuleInfo) {
|
||||
ScannerFactory scannerFactory = ScannerFactory.instance(context);
|
||||
Lexer lexer = scannerFactory.newScanner(input, true);
|
||||
Object x = new CommentCollectingParser(this, lexer, true, keepLineMap, keepEndPos, parseModuleInfo);
|
||||
return (JavacParser) x;
|
||||
// CCP is based on a stub which extends nothing, but at runtime the stub is replaced with either
|
||||
//javac6's EndPosParser which extends Parser, or javac-9's JavacParser which implements Parser.
|
||||
//Either way this will work out.
|
||||
}
|
||||
|
||||
public static void setInCompiler(JavaCompiler compiler, Context context) {
|
||||
context.put(CommentCollectingParserFactory.key(), (ParserFactory) null);
|
||||
Field field;
|
||||
try {
|
||||
field = JavaCompiler.class.getDeclaredField("parserFactory");
|
||||
field.setAccessible(true);
|
||||
field.set(compiler, new CommentCollectingParserFactory(context));
|
||||
} catch (Exception e) {
|
||||
throw new IllegalStateException("Could not set comment sensitive parser in the compiler", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
//version :8
|
||||
class GeneratedJavaxOnLombokOn {
|
||||
int x;
|
||||
@java.lang.SuppressWarnings("all")
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
//version :8
|
||||
class GeneratedOffJavaxOn {
|
||||
int x;
|
||||
@java.lang.SuppressWarnings("all")
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
//CONF: lombok.addJavaxGeneratedAnnotation = true
|
||||
//CONF: lombok.addLombokGeneratedAnnotation = true
|
||||
//version :8
|
||||
class GeneratedJavaxOnLombokOn {
|
||||
@lombok.Getter
|
||||
int x;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
//CONF: lombok.addGeneratedAnnotation = false
|
||||
//CONF: lombok.addJavaxGeneratedAnnotation = true
|
||||
//version :8
|
||||
class GeneratedOffJavaxOn {
|
||||
@lombok.Getter
|
||||
int x;
|
||||
|
||||
Reference in new issue
Block a user