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

