| From 3f580c8bf7bc692f640accb8f6edad0165768519 Mon Sep 17 00:00:00 2001 |
| From: Tor Norbye <tnorbye@google.com> |
| Date: Wed, 1 Jan 2014 19:28:00 -0800 |
| Subject: [PATCH] Add support for ecj 4.2, and update version to 0.2.2 |
| |
| This changeset updates Lombok AST's ECJ converter to work with ECJ 4.2 |
| (it was using 3.6.2), and in particular it no longer aborts when it |
| encounters a multi-catch statement. (Note that it doesn't actually |
| support the Java 7 syntax; for that, the Lombok AST API itself will |
| have to be enhanced (and the other parsers and parse tree converters |
| updated as well). It does however mean that rather than abort with a |
| fatal error encountering an unknown ECJ AST node, it will simply use |
| the first multi catch type reference instead. |
| |
| Also updates the version number to Lombok AST 0.2.2, and stores native |
| nodes from ECJ on the Node native field. |
| |
| Finally, some build script tweaks used in the Android version of |
| Lombok AST are included, to basically strip out the bundled (and |
| repackaged) parboiled (and thereby ASM 3.3) bits, as well as the |
| command line reader and the repackaged Guava r09 version. Clients |
| using these portions of Lombok should add these libraries on their |
| own, which lint already does. |
| --- |
| .gitignore | 2 ++ |
| build.xml | 6 +++--- |
| buildScripts/ivy-repo/org.eclipse.custom-ecj-3.6.2.xml | 14 -------------- |
| buildScripts/ivy.xml | 4 ++-- |
| src/ecjTransformer/lombok/ast/ecj/EcjTreeBuilder.java | 14 ++++++-------- |
| src/ecjTransformer/lombok/ast/ecj/EcjTreeConverter.java | 16 ++++++++++++++++ |
| src/ecjTransformer/lombok/ast/ecj/EcjTreeVisitor.java | 10 +++++++++- |
| src/main/lombok/ast/Version.java | 2 +- |
| 8 files changed, 39 insertions(+), 29 deletions(-) |
| delete mode 100644 buildScripts/ivy-repo/org.eclipse.custom-ecj-3.6.2.xml |
| |
| diff --git a/.gitignore b/.gitignore |
| index 486c70c..679717f 100644 |
| --- a/.gitignore |
| +++ b/.gitignore |
| @@ -2,6 +2,8 @@ |
| /.project |
| /.classpath |
| /.factorypath |
| +/.idea |
| +/*.iml |
| /bin |
| /build |
| /dist |
| diff --git a/build.xml b/build.xml |
| index c1fd965..24c13d0 100644 |
| --- a/build.xml |
| +++ b/build.xml |
| @@ -241,6 +241,9 @@ |
| <unjar dest="build/lombok.ast"> |
| <path refid="runtime.path" /> |
| </unjar> |
| + <delete dir="build/lombok.ast/com/google" /> |
| + <delete dir="build/lombok.ast/org/parboiled" /> |
| + <delete dir="build/lombok.ast/com/zwitserloot" /> |
| </target> |
| |
| <target name="dist" depends="compile, version, unpackLibs" description="Creates distributable."> |
| @@ -250,9 +253,6 @@ |
| <fileset dir="build/lombok.ast" /> |
| <fileset dir="." includes="LICENSE" /> |
| <fileset dir="." includes="AUTHORS" /> |
| - <rule pattern="com.google.common.**" result="lombok.ast.libs.com.google.common.@1" /> |
| - <rule pattern="org.parboiled.**" result="lombok.ast.libs.org.parboiled.@1" /> |
| - <rule pattern="com.zwitserloot.cmdreader.**" result="lombok.ast.libs.com.zwitserloot.cmdreader.@1" /> |
| <manifest> |
| <attribute name="Main-Class" value="lombok.ast.app.Main" /> |
| <attribute name="Lombok-Ast-Version" value="${lombok.ast.version}" /> |
| diff --git a/buildScripts/ivy-repo/org.eclipse.custom-ecj-3.6.2.xml b/buildScripts/ivy-repo/org.eclipse.custom-ecj-3.6.2.xml |
| deleted file mode 100644 |
| index fc9fa66..0000000 |
| --- a/buildScripts/ivy-repo/org.eclipse.custom-ecj-3.6.2.xml |
| +++ /dev/null |
| @@ -1,14 +0,0 @@ |
| -<ivy-module version="2.0"> |
| - <info organisation="org.eclipse.custom" module="ecj" revision="3.6.2" publication="20110401190400"> |
| - <license name="Eclipse Public Licence v1.0" url="http://www.eclipse.org/org/documents/epl-v10.php" /> |
| - <description homepage="http://www.eclipse.org/eclipse/" /> |
| - </info> |
| - <configurations> |
| - <conf name="default" /> |
| - <conf name="sources" /> |
| - </configurations> |
| - <publications> |
| - <artifact conf="default" url="http://projectlombok.org/ivyrepo/eclipse/ecj-3.6.2.jar" /> |
| - <artifact type="zip" conf="sources" url="http://projectlombok.org/ivyrepo/eclipse/ecjsrc-3.6.2.zip" /> |
| - </publications> |
| -</ivy-module> |
| diff --git a/buildScripts/ivy.xml b/buildScripts/ivy.xml |
| index d95fd1c..5865aa2 100644 |
| --- a/buildScripts/ivy.xml |
| +++ b/buildScripts/ivy.xml |
| @@ -11,10 +11,10 @@ |
| <dependency org="org.projectlombok" name="lombok" rev="0.10.8" conf="build->default" /> |
| <dependency org="org.projectlombok" name="lombok-utils" rev="0.10.8" conf="runtime->default" /> |
| <dependency org="com.github.parboiled.custom" name="parboiled" rev="0.9.7.2" conf="build; runtime; contrib->sources" /> |
| - <dependency org="com.google.guava" name="guava" rev="r09" conf="runtime->default; build->default; contrib->sources" /> |
| + <dependency org="com.google.guava" name="guava" rev="15.0" conf="runtime->default; build->default; contrib->sources" /> |
| <dependency org="junit" name="junit" rev="4.8.2" conf="test->default" /> |
| <dependency org="net.java.openjdk.custom" name="javac6" rev="1.6.0.18" conf="build->default; contrib->sources" /> |
| - <dependency org="org.eclipse.custom" name="ecj" rev="3.6.2" conf="build->default; contrib->sources" /> |
| + <dependency org="org.eclipse.jdt.core.compiler" name="ecj" rev="4.2.2" conf="build->default; contrib->sources" /> |
| <dependency org="net.sourceforge.cobertura" name="cobertura" rev="1.9.4.1" conf="test->runtime" /> |
| <dependency org="net.sourceforge.cobertura" name="cobertura-runtime" rev="1.9.4.1" conf="test->runtime" /> |
| <dependency org="com.googlecode.jarjar" name="jarjar" rev="1.1" conf="build->default" /> |
| diff --git a/src/ecjTransformer/lombok/ast/ecj/EcjTreeBuilder.java b/src/ecjTransformer/lombok/ast/ecj/EcjTreeBuilder.java |
| index 5d0ce70..8df0205 100644 |
| --- a/src/ecjTransformer/lombok/ast/ecj/EcjTreeBuilder.java |
| +++ b/src/ecjTransformer/lombok/ast/ecj/EcjTreeBuilder.java |
| @@ -1117,15 +1117,13 @@ public class EcjTreeBuilder { |
| if (node.astOperand() instanceof lombok.ast.IntegralLiteral && node.astOperand().getParens() == 0) { |
| lombok.ast.IntegralLiteral lit = (lombok.ast.IntegralLiteral)node.astOperand(); |
| if (!lit.astMarkedAsLong() && lit.astIntValue() == Integer.MIN_VALUE) { |
| - IntLiteralMinValue minLiteral = new IntLiteralMinValue(); |
| - minLiteral.sourceStart = start(node); |
| - minLiteral.sourceEnd = end(node); |
| + IntLiteralMinValue minLiteral = new IntLiteralMinValue( |
| + lit.rawValue().toCharArray(), null, start(node), end(node)); |
| return set(node, minLiteral); |
| } |
| if (lit.astMarkedAsLong() && lit.astLongValue() == Long.MIN_VALUE) { |
| - LongLiteralMinValue minLiteral = new LongLiteralMinValue(); |
| - minLiteral.sourceStart = start(node); |
| - minLiteral.sourceEnd = end(node); |
| + LongLiteralMinValue minLiteral = new LongLiteralMinValue( |
| + lit.rawValue().toCharArray(), null, start(node), end(node)); |
| return set(node, minLiteral); |
| } |
| } |
| @@ -1419,9 +1417,9 @@ public class EcjTreeBuilder { |
| @Override |
| public boolean visitIntegralLiteral(lombok.ast.IntegralLiteral node) { |
| if (node.astMarkedAsLong()) { |
| - return set(node, new LongLiteral(node.rawValue().toCharArray(), start(node), end(node))); |
| + return set(node, LongLiteral.buildLongLiteral(node.rawValue().toCharArray(), start(node), end(node))); |
| } |
| - return set(node, new IntLiteral(node.rawValue().toCharArray(), start(node), end(node))); |
| + return set(node, IntLiteral.buildIntLiteral(node.rawValue().toCharArray(), start(node), end(node))); |
| } |
| |
| @Override |
| diff --git a/src/ecjTransformer/lombok/ast/ecj/EcjTreeConverter.java b/src/ecjTransformer/lombok/ast/ecj/EcjTreeConverter.java |
| index b825771..b0f6e88 100644 |
| --- a/src/ecjTransformer/lombok/ast/ecj/EcjTreeConverter.java |
| +++ b/src/ecjTransformer/lombok/ast/ecj/EcjTreeConverter.java |
| @@ -128,6 +128,7 @@ import org.eclipse.jdt.internal.compiler.ast.TypeDeclaration; |
| import org.eclipse.jdt.internal.compiler.ast.TypeParameter; |
| import org.eclipse.jdt.internal.compiler.ast.TypeReference; |
| import org.eclipse.jdt.internal.compiler.ast.UnaryExpression; |
| +import org.eclipse.jdt.internal.compiler.ast.UnionTypeReference; |
| import org.eclipse.jdt.internal.compiler.ast.WhileStatement; |
| import org.eclipse.jdt.internal.compiler.ast.Wildcard; |
| import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants; |
| @@ -208,6 +209,7 @@ public class EcjTreeConverter { |
| List<Node> result = Lists.newArrayList(); |
| if (value != null) result.add(value); |
| this.result = result; |
| + if (value != null) value.setNativeNode(node); |
| } |
| |
| @SuppressWarnings("unused") |
| @@ -216,6 +218,9 @@ public class EcjTreeConverter { |
| |
| if (result != null) throw new IllegalStateException("result is already set"); |
| this.result = values; |
| + for (Node value : values) { |
| + value.setNativeNode(node); |
| + } |
| } |
| |
| private Node toTree(ASTNode node, FlagKey... keys) { |
| @@ -1306,6 +1311,17 @@ public class EcjTreeConverter { |
| set(node, setPosition(node, element)); |
| } |
| |
| + @Override public void visitUnionTypeReference(UnionTypeReference node) { |
| + // For now, just use the FIRST type reference; we need the Lombok AST API |
| + // enhanced in order to properly hold all these |
| + if (node.typeReferences.length > 0) { |
| + TypeReference ref = node.typeReferences[0]; |
| + if (ref != null) { |
| + visitEcjNode(ref); |
| + } |
| + } |
| + } |
| + |
| @Override public void visitJavadoc(Javadoc node) { |
| if (node == null) { |
| set(node, (Node)null); |
| diff --git a/src/ecjTransformer/lombok/ast/ecj/EcjTreeVisitor.java b/src/ecjTransformer/lombok/ast/ecj/EcjTreeVisitor.java |
| index 1504543..361b4b6 100644 |
| --- a/src/ecjTransformer/lombok/ast/ecj/EcjTreeVisitor.java |
| +++ b/src/ecjTransformer/lombok/ast/ecj/EcjTreeVisitor.java |
| @@ -356,6 +356,10 @@ public abstract class EcjTreeVisitor { |
| visitJavadoc((Javadoc) node); |
| return; |
| } |
| + if (clazz == UnionTypeReference.class) { |
| + visitUnionTypeReference((UnionTypeReference) node); |
| + return; |
| + } |
| |
| visitOther(node); |
| } |
| @@ -695,4 +699,8 @@ public abstract class EcjTreeVisitor { |
| public void visitJavadoc(Javadoc node) { |
| visitAny(node); |
| } |
| -} |
| \ No newline at end of file |
| + |
| + public void visitUnionTypeReference(UnionTypeReference node) { |
| + visitAny(node); |
| + } |
| +} |
| diff --git a/src/main/lombok/ast/Version.java b/src/main/lombok/ast/Version.java |
| index e188bd3..88f51c0 100644 |
| --- a/src/main/lombok/ast/Version.java |
| +++ b/src/main/lombok/ast/Version.java |
| @@ -28,7 +28,7 @@ public class Version { |
| // ** CAREFUL ** - this class must always compile with 0 dependencies (it must not refer to any other sources or libraries). |
| // Note: In 'X.Y.Z', if Z is odd, its a snapshot build built from the repository, so many different 0.10.3 versions can exist, for example. |
| // Official builds always end in an even number. |
| - private static final String VERSION = "0.2.1"; |
| + private static final String VERSION = "0.2.2"; |
| |
| private Version() { |
| //Prevent instantiation |
| -- |
| 1.8.4.3 |
| |