aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoel Spilker <r.spilker@gmail.com>2010-11-06 16:41:17 +0100
committerRoel Spilker <r.spilker@gmail.com>2010-11-06 16:41:17 +0100
commit0c7b29f8e7009d1433e2386f710c78801f119ebb (patch)
tree00c83f4ea3113cb07f4ce84cfd957dbc1f66124c
parenta48c335c7d8f1b361b134110219af8b0d3610101 (diff)
downloadlombok-0c7b29f8e7009d1433e2386f710c78801f119ebb.tar.gz
lombok-0c7b29f8e7009d1433e2386f710c78801f119ebb.tar.bz2
lombok-0c7b29f8e7009d1433e2386f710c78801f119ebb.zip
Create Clinit if you create a static field and it doesn't yet exist
-rw-r--r--src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java17
-rw-r--r--test/transform/resource/after-ecj/LoggerCommons.java6
-rw-r--r--test/transform/resource/after-ecj/LoggerJul.java6
-rw-r--r--test/transform/resource/after-ecj/LoggerLog4j.java6
-rw-r--r--test/transform/resource/after-ecj/LoggerSlf4j.java4
-rw-r--r--test/transform/resource/after-ecj/LoggerSlf4jClassOfArray.java2
-rw-r--r--test/transform/resource/after-ecj/LoggerSlf4jTypes.java2
-rw-r--r--test/transform/resource/after-ecj/LoggerSlf4jWithClass.java8
-rw-r--r--test/transform/resource/after-ecj/LoggerSlf4jWithPackage.java4
-rw-r--r--test/transform/resource/after-ecj/SynchronizedPlain.java2
10 files changed, 57 insertions, 0 deletions
diff --git a/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java b/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java
index 29937279..c37de8ea 100644
--- a/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java
+++ b/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java
@@ -23,6 +23,7 @@ package lombok.eclipse.handlers;
import static lombok.eclipse.Eclipse.*;
+import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -42,6 +43,7 @@ import org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration;
import org.eclipse.jdt.internal.compiler.ast.AbstractVariableDeclaration;
import org.eclipse.jdt.internal.compiler.ast.AllocationExpression;
import org.eclipse.jdt.internal.compiler.ast.Annotation;
+import org.eclipse.jdt.internal.compiler.ast.Clinit;
import org.eclipse.jdt.internal.compiler.ast.ConstructorDeclaration;
import org.eclipse.jdt.internal.compiler.ast.EqualExpression;
import org.eclipse.jdt.internal.compiler.ast.Expression;
@@ -429,9 +431,24 @@ public class EclipseHandlerUtil {
parent.fields = newArray;
}
+ if ((field.modifiers & Modifier.STATIC) != 0) {
+ if (!hasClinit(parent)) {
+ parent.addClinit();
+ }
+ }
+
type.add(field, Kind.FIELD).recursiveSetHandled();
}
+ private static boolean hasClinit(TypeDeclaration parent) {
+ if (parent.methods == null) return false;
+
+ for (AbstractMethodDeclaration method : parent.methods) {
+ if (method instanceof Clinit) return true;
+ }
+ return false;
+ }
+
/**
* Inserts a method into an existing type. The type must represent a {@code TypeDeclaration}.
*/
diff --git a/test/transform/resource/after-ecj/LoggerCommons.java b/test/transform/resource/after-ecj/LoggerCommons.java
index 1d21fb66..e5a3bf35 100644
--- a/test/transform/resource/after-ecj/LoggerCommons.java
+++ b/test/transform/resource/after-ecj/LoggerCommons.java
@@ -1,17 +1,23 @@
@lombok.commons.Log class LoggerCommons {
private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LoggerCommons.class);
+ <clinit>() {
+ }
LoggerCommons() {
super();
}
}
@lombok.commons.Log(String.class) class LoggerCommonsString {
private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(String.class);
+ <clinit>() {
+ }
LoggerCommonsString() {
super();
}
}
@lombok.commons.Log(java.lang.String.class) class LoggerCommonsJavaLangString {
private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(java.lang.String.class);
+ <clinit>() {
+ }
LoggerCommonsJavaLangString() {
super();
}
diff --git a/test/transform/resource/after-ecj/LoggerJul.java b/test/transform/resource/after-ecj/LoggerJul.java
index 86405ebd..734d0dac 100644
--- a/test/transform/resource/after-ecj/LoggerJul.java
+++ b/test/transform/resource/after-ecj/LoggerJul.java
@@ -1,17 +1,23 @@
@lombok.jul.Log class LoggerJul {
private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger("LoggerJul");
+ <clinit>() {
+ }
LoggerJul() {
super();
}
}
@lombok.jul.Log(String.class) class LoggerJulString {
private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger("String");
+ <clinit>() {
+ }
LoggerJulString() {
super();
}
}
@lombok.jul.Log(java.lang.String.class) class LoggerJulJavaLangString {
private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger("java.lang.String");
+ <clinit>() {
+ }
LoggerJulJavaLangString() {
super();
}
diff --git a/test/transform/resource/after-ecj/LoggerLog4j.java b/test/transform/resource/after-ecj/LoggerLog4j.java
index 27ad6b9c..64445b96 100644
--- a/test/transform/resource/after-ecj/LoggerLog4j.java
+++ b/test/transform/resource/after-ecj/LoggerLog4j.java
@@ -1,17 +1,23 @@
@lombok.log4j.Log class LoggerLog4j {
private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LoggerLog4j.class);
+ <clinit>() {
+ }
LoggerLog4j() {
super();
}
}
@lombok.log4j.Log(String.class) class LoggerLog4jString {
private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(String.class);
+ <clinit>() {
+ }
LoggerLog4jString() {
super();
}
}
@lombok.log4j.Log(java.lang.String.class) class LoggerLog4jJavaLangString {
private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(java.lang.String.class);
+ <clinit>() {
+ }
LoggerLog4jJavaLangString() {
super();
}
diff --git a/test/transform/resource/after-ecj/LoggerSlf4j.java b/test/transform/resource/after-ecj/LoggerSlf4j.java
index 6a611c2b..2e4d65a5 100644
--- a/test/transform/resource/after-ecj/LoggerSlf4j.java
+++ b/test/transform/resource/after-ecj/LoggerSlf4j.java
@@ -1,5 +1,7 @@
@lombok.slf4j.Log class LoggerSlf4j {
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LoggerSlf4j.class);
+ <clinit>() {
+ }
LoggerSlf4j() {
super();
}
@@ -7,6 +9,8 @@
class LoggerSlf4jOuter {
static @lombok.slf4j.Log class Inner {
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LoggerSlf4jOuter.Inner.class);
+ <clinit>() {
+ }
Inner() {
super();
}
diff --git a/test/transform/resource/after-ecj/LoggerSlf4jClassOfArray.java b/test/transform/resource/after-ecj/LoggerSlf4jClassOfArray.java
index c8f8069d..ffec7e66 100644
--- a/test/transform/resource/after-ecj/LoggerSlf4jClassOfArray.java
+++ b/test/transform/resource/after-ecj/LoggerSlf4jClassOfArray.java
@@ -1,5 +1,7 @@
@lombok.slf4j.Log(String[].class) class LoggerSlf4jClassOfArray {
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(String[].class);
+ <clinit>() {
+ }
LoggerSlf4jClassOfArray() {
super();
}
diff --git a/test/transform/resource/after-ecj/LoggerSlf4jTypes.java b/test/transform/resource/after-ecj/LoggerSlf4jTypes.java
index 88bcdae8..2e860ed2 100644
--- a/test/transform/resource/after-ecj/LoggerSlf4jTypes.java
+++ b/test/transform/resource/after-ecj/LoggerSlf4jTypes.java
@@ -22,6 +22,8 @@
interface LoggerSlf4jTypesInterfaceOuter {
@lombok.slf4j.Log class Inner {
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LoggerSlf4jTypesInterfaceOuter.Inner.class);
+ <clinit>() {
+ }
Inner() {
super();
}
diff --git a/test/transform/resource/after-ecj/LoggerSlf4jWithClass.java b/test/transform/resource/after-ecj/LoggerSlf4jWithClass.java
index 2839cdef..fbb4b2d2 100644
--- a/test/transform/resource/after-ecj/LoggerSlf4jWithClass.java
+++ b/test/transform/resource/after-ecj/LoggerSlf4jWithClass.java
@@ -1,23 +1,31 @@
@lombok.slf4j.Log(String.class) class LoggerSlf4jWithClass {
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(String.class);
+ <clinit>() {
+ }
LoggerSlf4jWithClass() {
super();
}
}
@lombok.slf4j.Log(java.util.List.class) class LoggerSlf4jWithClassList {
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(java.util.List.class);
+ <clinit>() {
+ }
LoggerSlf4jWithClassList() {
super();
}
}
@lombok.slf4j.Log(value = java.lang.String.class) class LoggerSlf4jWithClassValue {
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(java.lang.String.class);
+ <clinit>() {
+ }
LoggerSlf4jWithClassValue() {
super();
}
}
@lombok.slf4j.Log(void.class) class LoggerSlf4jWithClassVoid {
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LoggerSlf4jWithClassVoid.class);
+ <clinit>() {
+ }
LoggerSlf4jWithClassVoid() {
super();
}
diff --git a/test/transform/resource/after-ecj/LoggerSlf4jWithPackage.java b/test/transform/resource/after-ecj/LoggerSlf4jWithPackage.java
index efd43685..76d19bc3 100644
--- a/test/transform/resource/after-ecj/LoggerSlf4jWithPackage.java
+++ b/test/transform/resource/after-ecj/LoggerSlf4jWithPackage.java
@@ -1,6 +1,8 @@
package before;
@lombok.slf4j.Log class LoggerSlf4jWithPackage {
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(before.LoggerSlf4jWithPackage.class);
+ <clinit>() {
+ }
LoggerSlf4jWithPackage() {
super();
}
@@ -8,6 +10,8 @@ package before;
class LoggerSlf4jWithPackageOuter {
static @lombok.slf4j.Log class Inner {
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(before.LoggerSlf4jWithPackageOuter.Inner.class);
+ <clinit>() {
+ }
Inner() {
super();
}
diff --git a/test/transform/resource/after-ecj/SynchronizedPlain.java b/test/transform/resource/after-ecj/SynchronizedPlain.java
index b9f032c5..8e5b6297 100644
--- a/test/transform/resource/after-ecj/SynchronizedPlain.java
+++ b/test/transform/resource/after-ecj/SynchronizedPlain.java
@@ -19,6 +19,8 @@ class SynchronizedPlain1 {
}
class SynchronizedPlain2 {
private static final @java.lang.SuppressWarnings("all") java.lang.Object $LOCK = new java.lang.Object[0];
+ <clinit>() {
+ }
SynchronizedPlain2() {
super();
}