aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lombok/eclipse/handlers/HandleData.java26
-rw-r--r--src/lombok/javac/handlers/HandleData.java24
2 files changed, 28 insertions, 22 deletions
diff --git a/src/lombok/eclipse/handlers/HandleData.java b/src/lombok/eclipse/handlers/HandleData.java
index 5542dd58..f6072137 100644
--- a/src/lombok/eclipse/handlers/HandleData.java
+++ b/src/lombok/eclipse/handlers/HandleData.java
@@ -129,6 +129,22 @@ public class HandleData implements EclipseAnnotationHandler<Data> {
injectMethod(typeNode, toString);
}
+ if ( methodExists("equals", typeNode) == MemberExistsResult.NOT_EXISTS ) {
+ MethodDeclaration equals = createEquals(typeNode, nodesForEquality, ast);
+ injectMethod(typeNode, equals);
+ }
+
+ if ( methodExists("hashCode", typeNode) == MemberExistsResult.NOT_EXISTS ) {
+ MethodDeclaration hashCode = createHashCode(typeNode, nodesForEquality, ast);
+ injectMethod(typeNode, hashCode);
+ }
+
+ //Careful: Generate the public static constructor (if there is one) LAST, so that any attempt to
+ //'find callers' on the annotation node will find callers of the constructor, which is by far the
+ //most useful of the many methods built by @Data. This trick won't work for the non-static constructor,
+ //for whatever reason, though you can find callers of that one by focussing on the class name itself
+ //and hitting 'find callers'.
+
if ( constructorExists(typeNode) == MemberExistsResult.NOT_EXISTS ) {
ConstructorDeclaration constructor = createConstructor(
ann.staticConstructor().length() == 0, typeNode, nodesForConstructor, ast);
@@ -143,16 +159,6 @@ public class HandleData implements EclipseAnnotationHandler<Data> {
}
}
- if ( methodExists("equals", typeNode) == MemberExistsResult.NOT_EXISTS ) {
- MethodDeclaration equals = createEquals(typeNode, nodesForEquality, ast);
- injectMethod(typeNode, equals);
- }
-
- if ( methodExists("hashCode", typeNode) == MemberExistsResult.NOT_EXISTS ) {
- MethodDeclaration hashCode = createHashCode(typeNode, nodesForEquality, ast);
- injectMethod(typeNode, hashCode);
- }
-
return false;
}
diff --git a/src/lombok/javac/handlers/HandleData.java b/src/lombok/javac/handlers/HandleData.java
index 97a90d85..e2754d59 100644
--- a/src/lombok/javac/handlers/HandleData.java
+++ b/src/lombok/javac/handlers/HandleData.java
@@ -92,18 +92,6 @@ public class HandleData implements JavacAnnotationHandler<Data> {
if ( !isFinal ) new HandleSetter().generateSetterForField(child, annotationNode.get());
}
- String staticConstructorName = annotation.getInstance().staticConstructor();
-
- if ( constructorExists(typeNode) == MemberExistsResult.NOT_EXISTS ) {
- JCMethodDecl constructor = createConstructor(staticConstructorName.equals(""), typeNode, nodesForConstructor);
- injectMethod(typeNode, constructor);
- }
-
- if ( !staticConstructorName.isEmpty() && methodExists("of", typeNode) == MemberExistsResult.NOT_EXISTS ) {
- JCMethodDecl staticConstructor = createStaticConstructor(staticConstructorName, typeNode, nodesForConstructor);
- injectMethod(typeNode, staticConstructor);
- }
-
if ( methodExists("equals", typeNode) == MemberExistsResult.NOT_EXISTS ) {
JCMethodDecl method = createEquals(typeNode, nodesForEquality);
injectMethod(typeNode, method);
@@ -119,6 +107,18 @@ public class HandleData implements JavacAnnotationHandler<Data> {
injectMethod(typeNode, method);
}
+ String staticConstructorName = annotation.getInstance().staticConstructor();
+
+ if ( constructorExists(typeNode) == MemberExistsResult.NOT_EXISTS ) {
+ JCMethodDecl constructor = createConstructor(staticConstructorName.equals(""), typeNode, nodesForConstructor);
+ injectMethod(typeNode, constructor);
+ }
+
+ if ( !staticConstructorName.isEmpty() && methodExists("of", typeNode) == MemberExistsResult.NOT_EXISTS ) {
+ JCMethodDecl staticConstructor = createStaticConstructor(staticConstructorName, typeNode, nodesForConstructor);
+ injectMethod(typeNode, staticConstructor);
+ }
+
return true;
}