aboutsummaryrefslogtreecommitdiff
path: root/src/core/lombok/eclipse
diff options
context:
space:
mode:
authorReinier Zwitserloot <reinier@zwitserloot.com>2010-12-31 01:09:07 +0100
committerReinier Zwitserloot <reinier@zwitserloot.com>2010-12-31 10:12:24 +0100
commit49100b43c084f6774d43d93eee98440253965047 (patch)
tree4e16b1d0f1407bc6cfdcd93d3c569380553fa663 /src/core/lombok/eclipse
parent52582dc10ea1b5ea4a1dbb71831a442056354990 (diff)
downloadlombok-49100b43c084f6774d43d93eee98440253965047.tar.gz
lombok-49100b43c084f6774d43d93eee98440253965047.tar.bz2
lombok-49100b43c084f6774d43d93eee98440253965047.zip
calls to canEqual and equals are now fored to go to the version that has 1 Object as parameter (creating new equals methods by giving them non-object parameterized is a _really_ bad idea, but if someone did do that, obviously lombok shouldn't call those!)
Fixes #165.
Diffstat (limited to 'src/core/lombok/eclipse')
-rw-r--r--src/core/lombok/eclipse/handlers/HandleEqualsAndHashCode.java15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/core/lombok/eclipse/handlers/HandleEqualsAndHashCode.java b/src/core/lombok/eclipse/handlers/HandleEqualsAndHashCode.java
index d906d85d..adcb8e6a 100644
--- a/src/core/lombok/eclipse/handlers/HandleEqualsAndHashCode.java
+++ b/src/core/lombok/eclipse/handlers/HandleEqualsAndHashCode.java
@@ -536,7 +536,7 @@ public class HandleEqualsAndHashCode implements EclipseAnnotationHandler<EqualsA
}
}
- /* if (!other.canEqual(this)) return false; */ {
+ /* if (!other.canEqual((java.lang.Object) this)) return false; */ {
if (needsCanEqual) {
MessageSend otherCanEqual = new MessageSend();
otherCanEqual.sourceStart = pS; otherCanEqual.sourceEnd = pE;
@@ -547,8 +547,11 @@ public class HandleEqualsAndHashCode implements EclipseAnnotationHandler<EqualsA
ThisReference thisReference = new ThisReference(pS, pE);
Eclipse.setGeneratedBy(thisReference, source);
+ CastExpression castThisRef = new CastExpression(thisReference, generateQualifiedNameRef(source, TypeConstants.JAVA_LANG_OBJECT));
+ Eclipse.setGeneratedBy(castThisRef, source);
+ castThisRef.sourceStart = pS; castThisRef.sourceEnd = pE;
- otherCanEqual.arguments = new Expression[] {thisReference};
+ otherCanEqual.arguments = new Expression[] {castThisRef};
Expression notOtherCanEqual = new UnaryExpression(otherCanEqual, OperatorIds.NOT);
Eclipse.setGeneratedBy(notOtherCanEqual, source);
@@ -621,7 +624,11 @@ public class HandleEqualsAndHashCode implements EclipseAnnotationHandler<EqualsA
Eclipse.setGeneratedBy(equalsCall, source);
equalsCall.receiver = createFieldAccessor(field, fieldAccess, source);
equalsCall.selector = "equals".toCharArray();
- equalsCall.arguments = new Expression[] { createFieldAccessor(field, fieldAccess, source, otherName) };
+ Expression equalsArg = createFieldAccessor(field, fieldAccess, source, otherName);
+ CastExpression castEqualsArg = new CastExpression(equalsArg, generateQualifiedNameRef(source, TypeConstants.JAVA_LANG_OBJECT));
+ Eclipse.setGeneratedBy(castEqualsArg, source);
+ castEqualsArg.sourceStart = pS; castEqualsArg.sourceEnd = pE;
+ equalsCall.arguments = new Expression[] { castEqualsArg };
UnaryExpression fieldsNotEqual = new UnaryExpression(equalsCall, OperatorIds.NOT);
fieldsNotEqual.sourceStart = pS; fieldsNotEqual.sourceEnd = pE;
Eclipse.setGeneratedBy(fieldsNotEqual, source);
@@ -673,7 +680,7 @@ public class HandleEqualsAndHashCode implements EclipseAnnotationHandler<EqualsA
private MethodDeclaration createCanEqual(EclipseNode type, ASTNode source) {
- /* public boolean canEquals(final java.lang.Object other) {
+ /* public boolean canEqual(final java.lang.Object other) {
* return other instanceof MyType;
* }
*/