From d8d47c687d7ec22e481cf10782f1f889485c39fa Mon Sep 17 00:00:00 2001 From: Reinier Zwitserloot Date: Mon, 15 Aug 2011 22:11:25 +0200 Subject: [PATCH] Integrated Philipp's proof-of-concept delombok in javac7 fix, and used some creative stubbing to ensure both the javac7 and the javac6 source file can be loaded in the same project in eclipse without dependency warnings. --- build.xml | 17 +++-- .../sun/tools/javac/file/BaseFileObject.java | 41 ------------ .../tools/javac/file/JavacFileManager.java | 41 ------------ src/delombok/lombok/delombok/DelombokApp.java | 2 +- .../delombok/PrettyCommentsPrinter.java | 4 +- .../CommentCollectingScannerFactory.java | 4 ++ .../java7/CommentCollectingScanner.java | 2 +- .../CommentCollectingScannerFactory.java | 4 ++ src/stubs/ABOUT | 1 + .../sun/tools/javac/file/BaseFileObject.java | 10 +++ .../tools/javac/file/JavacFileManager.java | 6 ++ .../com/sun/tools/javac/parser/Scanner.java | 62 +++++++++++++++++++ .../tools/javac/parser/ScannerFactory.java | 21 +++++++ .../com/sun/tools/javac/util/Context.java | 31 ++++++++++ 14 files changed, 151 insertions(+), 95 deletions(-) delete mode 100644 src/contrib/com/sun/tools/javac/file/BaseFileObject.java delete mode 100644 src/contrib/com/sun/tools/javac/file/JavacFileManager.java rename {experimental/delombok_java7/src/main => src/delombok}/lombok/delombok/java7/CommentCollectingScanner.java (99%) rename {experimental/delombok_java7/src/main => src/delombok}/lombok/delombok/java7/CommentCollectingScannerFactory.java (95%) create mode 100644 src/stubs/ABOUT create mode 100644 src/stubs/com/sun/tools/javac/file/BaseFileObject.java create mode 100644 src/stubs/com/sun/tools/javac/file/JavacFileManager.java create mode 100644 src/stubs/com/sun/tools/javac/parser/Scanner.java create mode 100644 src/stubs/com/sun/tools/javac/parser/ScannerFactory.java create mode 100644 src/stubs/com/sun/tools/javac/util/Context.java diff --git a/build.xml b/build.xml index 055a75d0..9d06674d 100644 --- a/build.xml +++ b/build.xml @@ -130,7 +130,12 @@ the common tasks and can be called on to run the main aspects of all the sub-scr anymore until you 'ant clean'. That's very much not desired, so we kill the processor, which stops lombok from running. We re-create the file at the end of this target. --> + + + + + @@ -138,7 +143,7 @@ the common tasks and can be called on to run the main aspects of all the sub-scr - + @@ -147,12 +152,6 @@ the common tasks and can be called on to run the main aspects of all the sub-scr - - - - - - lombok.core.AnnotationProcessor @@ -191,7 +190,7 @@ the common tasks and can be called on to run the main aspects of all the sub-scr - + @@ -210,7 +209,7 @@ the common tasks and can be called on to run the main aspects of all the sub-scr - + diff --git a/src/contrib/com/sun/tools/javac/file/BaseFileObject.java b/src/contrib/com/sun/tools/javac/file/BaseFileObject.java deleted file mode 100644 index 2437226a..00000000 --- a/src/contrib/com/sun/tools/javac/file/BaseFileObject.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2005, 2009, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * The lombok team has removed the implementation - */ -package com.sun.tools.javac.file; - -import javax.tools.JavaFileObject; - -/** - *

This is NOT part of any supported API. - * If you write code that depends on this, you do so at your own risk. - * This code and its internal interfaces are subject to change or - * deletion without notice. -*/ -public abstract class BaseFileObject implements JavaFileObject { - protected BaseFileObject(JavacFileManager fileManager) {} -} diff --git a/src/contrib/com/sun/tools/javac/file/JavacFileManager.java b/src/contrib/com/sun/tools/javac/file/JavacFileManager.java deleted file mode 100644 index 9d5208c7..00000000 --- a/src/contrib/com/sun/tools/javac/file/JavacFileManager.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * The lombok team has removed the implementation - */ -package com.sun.tools.javac.file; - - -/** - * This class provides access to the source, class and other files - * used by the compiler and related tools. - * - *

This is NOT part of any supported API. - * If you write code that depends on this, you do so at your own risk. - * This code and its internal interfaces are subject to change or - * deletion without notice. - */ -public class JavacFileManager {} diff --git a/src/delombok/lombok/delombok/DelombokApp.java b/src/delombok/lombok/delombok/DelombokApp.java index e529d0f3..b4c89197 100644 --- a/src/delombok/lombok/delombok/DelombokApp.java +++ b/src/delombok/lombok/delombok/DelombokApp.java @@ -87,7 +87,7 @@ public class DelombokApp implements LombokApp { final JarFile toolsJarFile = new JarFile(toolsJar); ClassLoader loader = new ClassLoader() { - private ClassloadStreamAsClass(String name, boolean resolve, InputStream in) throws ClassNotFoundException { + private Class loadStreamAsClass(String name, boolean resolve, InputStream in) throws ClassNotFoundException { try { try { byte[] b = new byte[65536]; diff --git a/src/delombok/lombok/delombok/PrettyCommentsPrinter.java b/src/delombok/lombok/delombok/PrettyCommentsPrinter.java index d3710bab..fdc9ad5f 100644 --- a/src/delombok/lombok/delombok/PrettyCommentsPrinter.java +++ b/src/delombok/lombok/delombok/PrettyCommentsPrinter.java @@ -663,9 +663,9 @@ public class PrettyCommentsPrinter extends JCTree.Visitor { else print("class " + tree.name); printTypeParameters(tree.typarams); - if (tree.extending != null) { + if (tree.getExtendsClause() != null) { print(" extends "); - printExpr(tree.extending); + printExpr(tree.getExtendsClause()); } if (tree.implementing.nonEmpty()) { print(" implements "); diff --git a/src/delombok/lombok/delombok/java6/CommentCollectingScannerFactory.java b/src/delombok/lombok/delombok/java6/CommentCollectingScannerFactory.java index 80806f57..46d00551 100644 --- a/src/delombok/lombok/delombok/java6/CommentCollectingScannerFactory.java +++ b/src/delombok/lombok/delombok/java6/CommentCollectingScannerFactory.java @@ -36,6 +36,10 @@ public class CommentCollectingScannerFactory extends Scanner.Factory { public CommentCollectingScanner.Factory make() { return new CommentCollectingScannerFactory(context); } + + public CommentCollectingScanner.Factory make(Context c) { + return new CommentCollectingScannerFactory(c); + } }); } diff --git a/experimental/delombok_java7/src/main/lombok/delombok/java7/CommentCollectingScanner.java b/src/delombok/lombok/delombok/java7/CommentCollectingScanner.java similarity index 99% rename from experimental/delombok_java7/src/main/lombok/delombok/java7/CommentCollectingScanner.java rename to src/delombok/lombok/delombok/java7/CommentCollectingScanner.java index 51ec9e74..a6301143 100644 --- a/experimental/delombok_java7/src/main/lombok/delombok/java7/CommentCollectingScanner.java +++ b/src/delombok/lombok/delombok/java7/CommentCollectingScanner.java @@ -32,7 +32,7 @@ import com.sun.tools.javac.parser.Scanner; public class CommentCollectingScanner extends Scanner { private final Comments comments; - private int endComment = 0; + private int endComment = 0; public CommentCollectingScanner(CommentCollectingScannerFactory factory, CharBuffer charBuffer, Comments comments) { super(factory, charBuffer); diff --git a/experimental/delombok_java7/src/main/lombok/delombok/java7/CommentCollectingScannerFactory.java b/src/delombok/lombok/delombok/java7/CommentCollectingScannerFactory.java similarity index 95% rename from experimental/delombok_java7/src/main/lombok/delombok/java7/CommentCollectingScannerFactory.java rename to src/delombok/lombok/delombok/java7/CommentCollectingScannerFactory.java index 0e282de8..ce6ee71c 100644 --- a/experimental/delombok_java7/src/main/lombok/delombok/java7/CommentCollectingScannerFactory.java +++ b/src/delombok/lombok/delombok/java7/CommentCollectingScannerFactory.java @@ -37,6 +37,10 @@ public class CommentCollectingScannerFactory extends ScannerFactory { public ScannerFactory make() { return new CommentCollectingScannerFactory(context); } + + @Override public ScannerFactory make(Context c) { + return new CommentCollectingScannerFactory(c); + } }); } diff --git a/src/stubs/ABOUT b/src/stubs/ABOUT new file mode 100644 index 00000000..3479d247 --- /dev/null +++ b/src/stubs/ABOUT @@ -0,0 +1 @@ +These are stub versions of various bits of javac-internal API (for various different versions of javac). Lombok is compiled against these. diff --git a/src/stubs/com/sun/tools/javac/file/BaseFileObject.java b/src/stubs/com/sun/tools/javac/file/BaseFileObject.java new file mode 100644 index 00000000..d072fc33 --- /dev/null +++ b/src/stubs/com/sun/tools/javac/file/BaseFileObject.java @@ -0,0 +1,10 @@ +/* + * 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.file; + +import javax.tools.JavaFileObject; + +public abstract class BaseFileObject implements JavaFileObject { + protected BaseFileObject(JavacFileManager fileManager) {} +} diff --git a/src/stubs/com/sun/tools/javac/file/JavacFileManager.java b/src/stubs/com/sun/tools/javac/file/JavacFileManager.java new file mode 100644 index 00000000..ba5f428a --- /dev/null +++ b/src/stubs/com/sun/tools/javac/file/JavacFileManager.java @@ -0,0 +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.file; + +public class JavacFileManager {} diff --git a/src/stubs/com/sun/tools/javac/parser/Scanner.java b/src/stubs/com/sun/tools/javac/parser/Scanner.java new file mode 100644 index 00000000..f6f1d25d --- /dev/null +++ b/src/stubs/com/sun/tools/javac/parser/Scanner.java @@ -0,0 +1,62 @@ +/* + * 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 java.nio.CharBuffer; + +import com.sun.tools.javac.util.Context; + +public class Scanner { + protected Scanner(Factory fac, CharBuffer buffer) { + } + + protected Scanner(Factory fac, char[] input, int inputLength) { + } + + protected Scanner(ScannerFactory fac, CharBuffer buffer) { + } + + protected Scanner(ScannerFactory fac, char[] input, int inputLength) { + } + + public static class Factory { + public static final Context.Key scannerFactoryKey = null; + + protected Factory(Context context) { + } + + public Scanner newScanner(CharSequence input) { + return null; + } + + public Scanner newScanner(char[] input, int inputLength) { + return null; + } + } + + public enum CommentStyle { + LINE, + BLOCK, + JAVADOC, + } + + protected void processComment(CommentStyle style) { + } + + public int prevEndPos() { + return -1; + } + + public int endPos() { + return -1; + } + + public int pos() { + return -1; + } + + public char[] getRawCharacters(int beginIndex, int endIndex) { + return null; + } +} diff --git a/src/stubs/com/sun/tools/javac/parser/ScannerFactory.java b/src/stubs/com/sun/tools/javac/parser/ScannerFactory.java new file mode 100644 index 00000000..26483db3 --- /dev/null +++ b/src/stubs/com/sun/tools/javac/parser/ScannerFactory.java @@ -0,0 +1,21 @@ +/* + * 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.util.Context; + +public class ScannerFactory { + public static final Context.Key scannerFactoryKey = null; + + protected ScannerFactory(Context c) { + } + + public Scanner newScanner(CharSequence input, boolean keepDocComments) { + return null; + } + + public Scanner newScanner(char[] input, int inputLength, boolean keepDocComments) { + return null; + } +} diff --git a/src/stubs/com/sun/tools/javac/util/Context.java b/src/stubs/com/sun/tools/javac/util/Context.java new file mode 100644 index 00000000..06b8ff4d --- /dev/null +++ b/src/stubs/com/sun/tools/javac/util/Context.java @@ -0,0 +1,31 @@ +/* + * 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.util; + +public class Context { + public static class Key { + } + + public interface Factory { + T make(Context c); + T make(); + } + + public void put(Key key, Factory fac) { + } + + public void put(Key key, T data) { + } + + public void put(Class clazz, T data) { + } + + public T get(Key key) { + return null; + } + + public T get(Class clazz) { + return null; + } +}