235 lines
11 KiB
Diff
235 lines
11 KiB
Diff
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
|
|
|