aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReinier Zwitserloot <reinier@zwitserloot.com>2011-08-15 22:11:25 +0200
committerReinier Zwitserloot <reinier@zwitserloot.com>2011-08-15 22:11:25 +0200
commitd8d47c687d7ec22e481cf10782f1f889485c39fa (patch)
tree5cb3477583effdd1073d5bb66439dc5549a7e107
parent7773bd4e60784b9018e9eed82a5a41e0b51c3024 (diff)
downloadlombok-d8d47c687d7ec22e481cf10782f1f889485c39fa.tar.gz
lombok-d8d47c687d7ec22e481cf10782f1f889485c39fa.tar.bz2
lombok-d8d47c687d7ec22e481cf10782f1f889485c39fa.zip
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.
-rw-r--r--build.xml17
-rw-r--r--src/contrib/com/sun/tools/javac/file/BaseFileObject.java41
-rw-r--r--src/contrib/com/sun/tools/javac/file/JavacFileManager.java41
-rw-r--r--src/delombok/lombok/delombok/DelombokApp.java2
-rw-r--r--src/delombok/lombok/delombok/PrettyCommentsPrinter.java4
-rw-r--r--src/delombok/lombok/delombok/java6/CommentCollectingScannerFactory.java4
-rw-r--r--src/delombok/lombok/delombok/java7/CommentCollectingScanner.java (renamed from experimental/delombok_java7/src/main/lombok/delombok/java7/CommentCollectingScanner.java)2
-rw-r--r--src/delombok/lombok/delombok/java7/CommentCollectingScannerFactory.java (renamed from experimental/delombok_java7/src/main/lombok/delombok/java7/CommentCollectingScannerFactory.java)4
-rw-r--r--src/stubs/ABOUT1
-rw-r--r--src/stubs/com/sun/tools/javac/file/BaseFileObject.java10
-rw-r--r--src/stubs/com/sun/tools/javac/file/JavacFileManager.java6
-rw-r--r--src/stubs/com/sun/tools/javac/parser/Scanner.java62
-rw-r--r--src/stubs/com/sun/tools/javac/parser/ScannerFactory.java21
-rw-r--r--src/stubs/com/sun/tools/javac/util/Context.java31
14 files changed, 151 insertions, 95 deletions
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. -->
<delete file="build/lombok/META-INF/services/javax.annotation.processing.Processor" quiet="true" />
+ <ivy:compile destdir="build/stubs" source="1.5" target="1.5" includeantruntime="false">
+ <src path="src/stubs" />
+ </ivy:compile>
+
<ivy:compile destdir="build/lombok" source="1.5" target="1.5" includeantruntime="false">
+ <compilerarg value="-Xbootclasspath/p:build/stubs" />
<src path="src/core" />
<src path="src/installer" />
<src path="src/eclipseAgent" />
@@ -138,7 +143,7 @@ the common tasks and can be called on to run the main aspects of all the sub-scr
<classpath refid="build.path" />
</ivy:compile>
<ivy:compile destdir="build/lombok" source="1.6" target="1.6" includeantruntime="false">
- <src path="src/contrib" />
+ <compilerarg value="-Xbootclasspath/p:build/stubs" />
<src path="src/core" />
<src path="src/delombok" />
<include name="com/sun/**" />
@@ -147,12 +152,6 @@ the common tasks and can be called on to run the main aspects of all the sub-scr
<classpath location="build/lombok" />
<classpath refid="build.path" />
</ivy:compile>
- <ivy:compile destdir="build/lombok" source="1.6" target="1.6" includeantruntime="false">
- <src path="experimental/delombok_java7/src/main" />
- <include name="lombok/delombok/**" />
- <classpath location="build/lombok" />
- <classpath location="experimental/delombok_java7/lib/javac7.jar" />
- </ivy:compile>
<mkdir dir="build/lombok/META-INF" />
<mkdir dir="build/lombok/META-INF/services" />
<echo file="build/lombok/META-INF/services/javax.annotation.processing.Processor">lombok.core.AnnotationProcessor</echo>
@@ -191,7 +190,7 @@ the common tasks and can be called on to run the main aspects of all the sub-scr
<srcdir dir="src/eclipseAgent" />
<srcdir dir="src/installer" />
<srcdir dir="src/delombok" />
- <srcdir dir="src/contrib" />
+ <srcdir dir="src/stubs" />
<srcdir dir="experimental/src" />
<srcdir dir="test/transform/src" test="true" />
<srcdir dir="test/core/src" test="true" />
@@ -210,7 +209,7 @@ the common tasks and can be called on to run the main aspects of all the sub-scr
<srcdir dir="src/eclipseAgent" />
<srcdir dir="src/installer" />
<srcdir dir="src/delombok" />
- <srcdir dir="src/contrib" />
+ <srcdir dir="src/stubs" />
<srcdir dir="experimental/src" />
<srcdir dir="test/transform/src" />
<srcdir dir="test/core/src" />
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;
-
-/**
- * <p><b>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.</b>
-*/
-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.
- *
- * <p><b>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.</b>
- */
-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 Class<?>loadStreamAsClass(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
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
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<Scanner.Factory> 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<ScannerFactory> 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<T> {
+ }
+
+ public interface Factory<T> {
+ T make(Context c);
+ T make();
+ }
+
+ public <T> void put(Key<T> key, Factory<T> fac) {
+ }
+
+ public <T> void put(Key<T> key, T data) {
+ }
+
+ public <T> void put(Class<T> clazz, T data) {
+ }
+
+ public <T> T get(Key<T> key) {
+ return null;
+ }
+
+ public <T> T get(Class<T> clazz) {
+ return null;
+ }
+}