mirror of
https://github.com/tiennm99/lombok.git
synced 2026-10-13 12:15:00 +00:00
Issue 366: don't call the getter twice, fixed for javac.
This commit is contained in:
1 parent
d8e933223f
commit
5a13db5dc9
10 files changed
+170
-93
No files matched your search
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2009-2011 The Project Lombok Authors.
|
||||
* Copyright (C) 2009-2012 The Project Lombok Authors.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
@@ -21,17 +21,19 @@
|
||||
*/
|
||||
package lombok.javac.handlers;
|
||||
|
||||
import static lombok.javac.handlers.JavacHandlerUtil.*;
|
||||
import static lombok.javac.Javac.getCtcInt;
|
||||
import static lombok.javac.handlers.JavacHandlerUtil.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.core.AnnotationValues;
|
||||
import lombok.core.AST.Kind;
|
||||
import lombok.core.AnnotationValues;
|
||||
import lombok.javac.JavacAnnotationHandler;
|
||||
import lombok.javac.JavacNode;
|
||||
import lombok.javac.handlers.JavacHandlerUtil.FieldAccess;
|
||||
import lombok.javac.handlers.JavacHandlerUtil.MemberExistsResult;
|
||||
|
||||
import org.mangosdk.spi.ProviderFor;
|
||||
|
||||
@@ -39,13 +41,13 @@ import com.sun.tools.javac.code.BoundKind;
|
||||
import com.sun.tools.javac.code.Flags;
|
||||
import com.sun.tools.javac.code.TypeTags;
|
||||
import com.sun.tools.javac.tree.JCTree;
|
||||
import com.sun.tools.javac.tree.TreeMaker;
|
||||
import com.sun.tools.javac.tree.JCTree.JCAnnotation;
|
||||
import com.sun.tools.javac.tree.JCTree.JCArrayTypeTree;
|
||||
import com.sun.tools.javac.tree.JCTree.JCBinary;
|
||||
import com.sun.tools.javac.tree.JCTree.JCBlock;
|
||||
import com.sun.tools.javac.tree.JCTree.JCClassDecl;
|
||||
import com.sun.tools.javac.tree.JCTree.JCExpression;
|
||||
import com.sun.tools.javac.tree.JCTree.JCExpressionStatement;
|
||||
import com.sun.tools.javac.tree.JCTree.JCMethodDecl;
|
||||
import com.sun.tools.javac.tree.JCTree.JCMethodInvocation;
|
||||
import com.sun.tools.javac.tree.JCTree.JCModifiers;
|
||||
@@ -54,6 +56,7 @@ import com.sun.tools.javac.tree.JCTree.JCStatement;
|
||||
import com.sun.tools.javac.tree.JCTree.JCTypeParameter;
|
||||
import com.sun.tools.javac.tree.JCTree.JCUnary;
|
||||
import com.sun.tools.javac.tree.JCTree.JCVariableDecl;
|
||||
import com.sun.tools.javac.tree.TreeMaker;
|
||||
import com.sun.tools.javac.util.List;
|
||||
import com.sun.tools.javac.util.ListBuffer;
|
||||
import com.sun.tools.javac.util.Name;
|
||||
@@ -63,6 +66,9 @@ import com.sun.tools.javac.util.Name;
|
||||
*/
|
||||
@ProviderFor(JavacAnnotationHandler.class)
|
||||
public class HandleEqualsAndHashCode extends JavacAnnotationHandler<EqualsAndHashCode> {
|
||||
private static final String RESULT_NAME = "result";
|
||||
private static final String PRIME_NAME = "PRIME";
|
||||
|
||||
private void checkForBogusFieldNames(JavacNode type, AnnotationValues<EqualsAndHashCode> annotation) {
|
||||
if (annotation.isExplicit("exclude")) {
|
||||
for (int i : createListOfNonExistentFields(List.from(annotation.getInstance().exclude()), type, true, true)) {
|
||||
@@ -214,8 +220,8 @@ public class HandleEqualsAndHashCode extends JavacAnnotationHandler<EqualsAndHas
|
||||
JCExpression returnType = maker.TypeIdent(getCtcInt(TypeTags.class, "INT"));
|
||||
ListBuffer<JCStatement> statements = ListBuffer.lb();
|
||||
|
||||
Name primeName = typeNode.toName("PRIME");
|
||||
Name resultName = typeNode.toName("result");
|
||||
Name primeName = typeNode.toName(PRIME_NAME);
|
||||
Name resultName = typeNode.toName(RESULT_NAME);
|
||||
/* final int PRIME = 31; */ {
|
||||
if (!fields.isEmpty() || callSuper) {
|
||||
statements.append(maker.VarDef(maker.Modifiers(Flags.FINAL),
|
||||
@@ -227,16 +233,14 @@ public class HandleEqualsAndHashCode extends JavacAnnotationHandler<EqualsAndHas
|
||||
statements.append(maker.VarDef(maker.Modifiers(0), resultName, maker.TypeIdent(getCtcInt(TypeTags.class, "INT")), maker.Literal(1)));
|
||||
}
|
||||
|
||||
ListBuffer<JCExpression> intoResult = ListBuffer.lb();
|
||||
|
||||
if (callSuper) {
|
||||
JCMethodInvocation callToSuper = maker.Apply(List.<JCExpression>nil(),
|
||||
maker.Select(maker.Ident(typeNode.toName("super")), typeNode.toName("hashCode")),
|
||||
List.<JCExpression>nil());
|
||||
intoResult.append(callToSuper);
|
||||
statements.append(createResultCalculation(typeNode, callToSuper));
|
||||
}
|
||||
|
||||
int tempCounter = 0;
|
||||
Name dollar = typeNode.toName("$");
|
||||
for (JavacNode fieldNode : fields) {
|
||||
JCExpression fType = getFieldType(fieldNode, fieldAccess);
|
||||
JCExpression fieldAccessor = createFieldAccessor(maker, fieldNode, fieldAccess);
|
||||
@@ -244,28 +248,31 @@ public class HandleEqualsAndHashCode extends JavacAnnotationHandler<EqualsAndHas
|
||||
switch (((JCPrimitiveTypeTree)fType).getPrimitiveTypeKind()) {
|
||||
case BOOLEAN:
|
||||
/* this.fieldName ? 1231 : 1237 */
|
||||
intoResult.append(maker.Conditional(fieldAccessor, maker.Literal(1231), maker.Literal(1237)));
|
||||
statements.append(createResultCalculation(typeNode, maker.Conditional(fieldAccessor, maker.Literal(1231), maker.Literal(1237))));
|
||||
break;
|
||||
case LONG:
|
||||
intoResult.append(longToIntForHashCode(maker, fieldAccessor, createFieldAccessor(maker, fieldNode, fieldAccess)));
|
||||
case LONG: {
|
||||
Name dollarFieldName = dollar.append(((JCVariableDecl)fieldNode.get()).name);
|
||||
statements.append(maker.VarDef(maker.Modifiers(Flags.FINAL), dollarFieldName, maker.TypeIdent(TypeTags.LONG), fieldAccessor));
|
||||
statements.append(createResultCalculation(typeNode, longToIntForHashCode(maker, maker.Ident(dollarFieldName), maker.Ident(dollarFieldName))));
|
||||
}
|
||||
break;
|
||||
case FLOAT:
|
||||
/* Float.floatToIntBits(this.fieldName) */
|
||||
intoResult.append(maker.Apply(
|
||||
statements.append(createResultCalculation(typeNode, maker.Apply(
|
||||
List.<JCExpression>nil(),
|
||||
chainDots(typeNode, "java", "lang", "Float", "floatToIntBits"),
|
||||
List.of(fieldAccessor)));
|
||||
List.of(fieldAccessor))));
|
||||
break;
|
||||
case DOUBLE:
|
||||
/* longToIntForHashCode(Double.doubleToLongBits(this.fieldName)) */
|
||||
Name tempVar = typeNode.toName("temp" + (++tempCounter));
|
||||
JCExpression init = maker.Apply(
|
||||
List.<JCExpression>nil(),
|
||||
chainDots(typeNode, "java", "lang", "Double", "doubleToLongBits"),
|
||||
List.of(fieldAccessor));
|
||||
statements.append(
|
||||
maker.VarDef(maker.Modifiers(Flags.FINAL), tempVar, maker.TypeIdent(TypeTags.LONG), init));
|
||||
intoResult.append(longToIntForHashCode(maker, maker.Ident(tempVar), maker.Ident(tempVar)));
|
||||
case DOUBLE: {
|
||||
/* longToIntForHashCode(Double.doubleToLongBits(this.fieldName)) */
|
||||
Name dollarFieldName = dollar.append(((JCVariableDecl)fieldNode.get()).name);
|
||||
JCExpression init = maker.Apply(
|
||||
List.<JCExpression>nil(),
|
||||
chainDots(typeNode, "java", "lang", "Double", "doubleToLongBits"),
|
||||
List.of(fieldAccessor));
|
||||
statements.append(maker.VarDef(maker.Modifiers(Flags.FINAL), dollarFieldName, maker.TypeIdent(TypeTags.LONG), init));
|
||||
statements.append(createResultCalculation(typeNode, longToIntForHashCode(maker, maker.Ident(dollarFieldName), maker.Ident(dollarFieldName))));
|
||||
}
|
||||
break;
|
||||
default:
|
||||
case BYTE:
|
||||
@@ -273,7 +280,7 @@ public class HandleEqualsAndHashCode extends JavacAnnotationHandler<EqualsAndHas
|
||||
case INT:
|
||||
case CHAR:
|
||||
/* just the field */
|
||||
intoResult.append(fieldAccessor);
|
||||
statements.append(createResultCalculation(typeNode, fieldAccessor));
|
||||
break;
|
||||
}
|
||||
} else if (fType instanceof JCArrayTypeTree) {
|
||||
@@ -283,26 +290,21 @@ public class HandleEqualsAndHashCode extends JavacAnnotationHandler<EqualsAndHas
|
||||
boolean useDeepHC = multiDim || !primitiveArray;
|
||||
|
||||
JCExpression hcMethod = chainDots(typeNode, "java", "util", "Arrays", useDeepHC ? "deepHashCode" : "hashCode");
|
||||
intoResult.append(
|
||||
maker.Apply(List.<JCExpression>nil(), hcMethod, List.of(fieldAccessor)));
|
||||
statements.append(createResultCalculation(typeNode, maker.Apply(List.<JCExpression>nil(), hcMethod, List.of(fieldAccessor))));
|
||||
} else /* objects */ {
|
||||
/* this.fieldName == null ? 0 : this.fieldName.hashCode() */
|
||||
JCExpression hcCall = maker.Apply(List.<JCExpression>nil(), maker.Select(createFieldAccessor(maker, fieldNode, fieldAccess), typeNode.toName("hashCode")),
|
||||
/* final java.lang.Object $fieldName = this.fieldName; */
|
||||
/* $fieldName == null ? 0 : $fieldName.hashCode() */
|
||||
|
||||
Name dollarFieldName = dollar.append(((JCVariableDecl)fieldNode.get()).name);
|
||||
statements.append(maker.VarDef(maker.Modifiers(Flags.FINAL), dollarFieldName, chainDots(typeNode, "java", "lang", "Object"), fieldAccessor));
|
||||
|
||||
JCExpression hcCall = maker.Apply(List.<JCExpression>nil(), maker.Select(maker.Ident(dollarFieldName), typeNode.toName("hashCode")),
|
||||
List.<JCExpression>nil());
|
||||
JCExpression thisEqualsNull = maker.Binary(getCtcInt(JCTree.class, "EQ"), fieldAccessor, maker.Literal(getCtcInt(TypeTags.class, "BOT"), null));
|
||||
intoResult.append(
|
||||
maker.Conditional(thisEqualsNull, maker.Literal(0), hcCall));
|
||||
JCExpression thisEqualsNull = maker.Binary(getCtcInt(JCTree.class, "EQ"), maker.Ident(dollarFieldName), maker.Literal(getCtcInt(TypeTags.class, "BOT"), null));
|
||||
statements.append(createResultCalculation(typeNode, maker.Conditional(thisEqualsNull, maker.Literal(0), hcCall)));
|
||||
}
|
||||
}
|
||||
|
||||
/* fold each intoResult entry into:
|
||||
result = result * PRIME + (item); */
|
||||
for (JCExpression expr : intoResult) {
|
||||
JCExpression mult = maker.Binary(getCtcInt(JCTree.class, "MUL"), maker.Ident(resultName), maker.Ident(primeName));
|
||||
JCExpression add = maker.Binary(getCtcInt(JCTree.class, "PLUS"), mult, expr);
|
||||
statements.append(maker.Exec(maker.Assign(maker.Ident(resultName), add)));
|
||||
}
|
||||
|
||||
/* return result; */ {
|
||||
statements.append(maker.Return(maker.Ident(resultName)));
|
||||
}
|
||||
@@ -311,6 +313,15 @@ public class HandleEqualsAndHashCode extends JavacAnnotationHandler<EqualsAndHas
|
||||
return recursiveSetGeneratedBy(maker.MethodDef(mods, typeNode.toName("hashCode"), returnType,
|
||||
List.<JCTypeParameter>nil(), List.<JCVariableDecl>nil(), List.<JCExpression>nil(), body, null), source);
|
||||
}
|
||||
|
||||
private JCExpressionStatement createResultCalculation(JavacNode typeNode, JCExpression expr) {
|
||||
/* result = result * PRIME + (expr); */
|
||||
TreeMaker maker = typeNode.getTreeMaker();
|
||||
Name resultName = typeNode.toName(RESULT_NAME);
|
||||
JCExpression mult = maker.Binary(getCtcInt(JCTree.class, "MUL"), maker.Ident(resultName), maker.Ident(typeNode.toName(PRIME_NAME)));
|
||||
JCExpression add = maker.Binary(getCtcInt(JCTree.class, "PLUS"), mult, expr);
|
||||
return maker.Exec(maker.Assign(maker.Ident(resultName), add));
|
||||
}
|
||||
|
||||
/** The 2 references must be clones of each other. */
|
||||
private JCExpression longToIntForHashCode(TreeMaker maker, JCExpression ref1, JCExpression ref2) {
|
||||
@@ -410,6 +421,8 @@ public class HandleEqualsAndHashCode extends JavacAnnotationHandler<EqualsAndHas
|
||||
statements.append(maker.If(superNotEqual, returnBool(maker, false), null));
|
||||
}
|
||||
|
||||
Name thisDollar = typeNode.toName("this$");
|
||||
Name otherDollar = typeNode.toName("other$");
|
||||
for (JavacNode fieldNode : fields) {
|
||||
JCExpression fType = getFieldType(fieldNode, fieldAccess);
|
||||
JCExpression thisFieldAccessor = createFieldAccessor(maker, fieldNode, fieldAccess);
|
||||
@@ -441,14 +454,21 @@ public class HandleEqualsAndHashCode extends JavacAnnotationHandler<EqualsAndHas
|
||||
statements.append(maker.If(maker.Unary(getCtcInt(JCTree.class, "NOT"),
|
||||
maker.Apply(List.<JCExpression>nil(), eqMethod, args)), returnBool(maker, false), null));
|
||||
} else /* objects */ {
|
||||
/* if (this.fieldName == null ? other.fieldName != null : !this.fieldName.equals(other.fieldName)) return false; */
|
||||
JCExpression thisEqualsNull = maker.Binary(getCtcInt(JCTree.class, "EQ"), thisFieldAccessor, maker.Literal(getCtcInt(TypeTags.class, "BOT"), null));
|
||||
JCExpression otherNotEqualsNull = maker.Binary(getCtcInt(JCTree.class, "NE"), otherFieldAccessor, maker.Literal(getCtcInt(TypeTags.class, "BOT"), null));
|
||||
JCExpression equalsArg = createFieldAccessor(maker, fieldNode, fieldAccess, maker.Ident(otherName));
|
||||
JCExpression castEqualsArg = maker.TypeCast(chainDots(typeNode, "java", "lang", "Object"), equalsArg);
|
||||
/* final java.lang.Object this$fieldName = this.fieldName; */
|
||||
/* final java.lang.Object other$fieldName = other.fieldName; */
|
||||
/* if (this$fieldName == null ? other$fieldName != null : !this$fieldName.equals(other$fieldName)) return false;; */
|
||||
Name fieldName = ((JCVariableDecl)fieldNode.get()).name;
|
||||
Name thisDollarFieldName = thisDollar.append(fieldName);
|
||||
Name otherDollarFieldName = otherDollar.append(fieldName);
|
||||
|
||||
statements.append(maker.VarDef(maker.Modifiers(Flags.FINAL), thisDollarFieldName, chainDots(typeNode, "java", "lang", "Object"), thisFieldAccessor));
|
||||
statements.append(maker.VarDef(maker.Modifiers(Flags.FINAL), otherDollarFieldName, chainDots(typeNode, "java", "lang", "Object"), otherFieldAccessor));
|
||||
|
||||
JCExpression thisEqualsNull = maker.Binary(getCtcInt(JCTree.class, "EQ"), maker.Ident(thisDollarFieldName), maker.Literal(getCtcInt(TypeTags.class, "BOT"), null));
|
||||
JCExpression otherNotEqualsNull = maker.Binary(getCtcInt(JCTree.class, "NE"), maker.Ident(otherDollarFieldName), maker.Literal(getCtcInt(TypeTags.class, "BOT"), null));
|
||||
JCExpression thisEqualsThat = maker.Apply(List.<JCExpression>nil(),
|
||||
maker.Select(createFieldAccessor(maker, fieldNode, fieldAccess), typeNode.toName("equals")),
|
||||
List.of(castEqualsArg));
|
||||
maker.Select(maker.Ident(thisDollarFieldName), typeNode.toName("equals")),
|
||||
List.<JCExpression>of(maker.Ident(otherDollarFieldName)));
|
||||
JCExpression fieldsAreNotEqual = maker.Conditional(thisEqualsNull, otherNotEqualsNull, maker.Unary(getCtcInt(JCTree.class, "NOT"), thisEqualsThat));
|
||||
statements.append(maker.If(fieldsAreNotEqual, returnBool(maker, false), null));
|
||||
}
|
||||
|
||||
@@ -1,89 +1,70 @@
|
||||
class AccessorsFluent {
|
||||
private String fieldName = "";
|
||||
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public String fieldName() {
|
||||
return this.fieldName;
|
||||
}
|
||||
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public AccessorsFluent fieldName(final String fieldName) {
|
||||
this.fieldName = fieldName;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
class AccessorsFluentOnClass {
|
||||
private String fieldName = "";
|
||||
private String otherFieldWithOverride = "";
|
||||
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public String fieldName() {
|
||||
return this.fieldName;
|
||||
}
|
||||
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public String getOtherFieldWithOverride() {
|
||||
return this.otherFieldWithOverride;
|
||||
}
|
||||
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public AccessorsFluentOnClass fieldName(final String fieldName) {
|
||||
this.fieldName = fieldName;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
class AccessorsChain {
|
||||
private boolean isRunning;
|
||||
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public AccessorsChain setRunning(final boolean isRunning) {
|
||||
this.isRunning = isRunning;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
class AccessorsPrefix {
|
||||
|
||||
private String fieldName;
|
||||
private String fActualField;
|
||||
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public void setActualField(final String fActualField) {
|
||||
this.fActualField = fActualField;
|
||||
}
|
||||
}
|
||||
|
||||
class AccessorsPrefix2 {
|
||||
|
||||
private String fieldName;
|
||||
private String fActualField;
|
||||
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public void setFieldName(final String fieldName) {
|
||||
this.fieldName = fieldName;
|
||||
}
|
||||
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public void setActualField(final String fActualField) {
|
||||
this.fActualField = fActualField;
|
||||
}
|
||||
}
|
||||
|
||||
class AccessorsPrefix3 {
|
||||
private String fName;
|
||||
|
||||
private String getName() {
|
||||
return fName;
|
||||
}
|
||||
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public java.lang.String toString() {
|
||||
return "AccessorsPrefix3(fName=" + this.getName() + ")";
|
||||
}
|
||||
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public boolean equals(final java.lang.Object o) {
|
||||
@@ -91,21 +72,22 @@ class AccessorsPrefix3 {
|
||||
if (!(o instanceof AccessorsPrefix3)) return false;
|
||||
final AccessorsPrefix3 other = (AccessorsPrefix3)o;
|
||||
if (!other.canEqual((java.lang.Object)this)) return false;
|
||||
if (this.getName() == null ? other.getName() != null : !this.getName().equals((java.lang.Object)other.getName())) return false;
|
||||
final java.lang.Object this$fName = this.getName();
|
||||
final java.lang.Object other$fName = other.getName();
|
||||
if (this$fName == null ? other$fName != null : !this$fName.equals(other$fName)) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public boolean canEqual(final java.lang.Object other) {
|
||||
return other instanceof AccessorsPrefix3;
|
||||
}
|
||||
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public int hashCode() {
|
||||
final int PRIME = 31;
|
||||
int result = 1;
|
||||
result = result * PRIME + (this.getName() == null ? 0 : this.getName().hashCode());
|
||||
final java.lang.Object $fName = this.getName();
|
||||
result = result * PRIME + ($fName == null ? 0 : $fName.hashCode());
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,7 +27,9 @@ class DataOnLocalClass1 {
|
||||
final Local other = (Local)o;
|
||||
if (!other.canEqual((java.lang.Object)this)) return false;
|
||||
if (this.getX() != other.getX()) return false;
|
||||
if (this.getName() == null ? other.getName() != null : !this.getName().equals((java.lang.Object)other.getName())) return false;
|
||||
final java.lang.Object this$name = this.getName();
|
||||
final java.lang.Object other$name = other.getName();
|
||||
if (this$name == null ? other$name != null : !this$name.equals(other$name)) return false;
|
||||
return true;
|
||||
}
|
||||
@java.lang.SuppressWarnings("all")
|
||||
@@ -40,7 +42,8 @@ class DataOnLocalClass1 {
|
||||
final int PRIME = 31;
|
||||
int result = 1;
|
||||
result = result * PRIME + this.getX();
|
||||
result = result * PRIME + (this.getName() == null ? 0 : this.getName().hashCode());
|
||||
final java.lang.Object $name = this.getName();
|
||||
result = result * PRIME + ($name == null ? 0 : $name.hashCode());
|
||||
return result;
|
||||
}
|
||||
@java.lang.Override
|
||||
@@ -80,7 +83,9 @@ class DataOnLocalClass2 {
|
||||
if (!(o instanceof Local.InnerLocal)) return false;
|
||||
final InnerLocal other = (InnerLocal)o;
|
||||
if (!other.canEqual((java.lang.Object)this)) return false;
|
||||
if (this.getName() == null ? other.getName() != null : !this.getName().equals((java.lang.Object)other.getName())) return false;
|
||||
final java.lang.Object this$name = this.getName();
|
||||
final java.lang.Object other$name = other.getName();
|
||||
if (this$name == null ? other$name != null : !this$name.equals(other$name)) return false;
|
||||
return true;
|
||||
}
|
||||
@java.lang.SuppressWarnings("all")
|
||||
@@ -92,7 +97,8 @@ class DataOnLocalClass2 {
|
||||
public int hashCode() {
|
||||
final int PRIME = 31;
|
||||
int result = 1;
|
||||
result = result * PRIME + (this.getName() == null ? 0 : this.getName().hashCode());
|
||||
final java.lang.Object $name = this.getName();
|
||||
result = result * PRIME + ($name == null ? 0 : $name.hashCode());
|
||||
return result;
|
||||
}
|
||||
@java.lang.Override
|
||||
|
||||
@@ -26,7 +26,9 @@ class Data1 {
|
||||
final Data1 other = (Data1)o;
|
||||
if (!other.canEqual((java.lang.Object)this)) return false;
|
||||
if (this.getX() != other.getX()) return false;
|
||||
if (this.getName() == null ? other.getName() != null : !this.getName().equals((java.lang.Object)other.getName())) return false;
|
||||
final java.lang.Object this$name = this.getName();
|
||||
final java.lang.Object other$name = other.getName();
|
||||
if (this$name == null ? other$name != null : !this$name.equals(other$name)) return false;
|
||||
return true;
|
||||
}
|
||||
@java.lang.SuppressWarnings("all")
|
||||
@@ -39,7 +41,8 @@ class Data1 {
|
||||
final int PRIME = 31;
|
||||
int result = 1;
|
||||
result = result * PRIME + this.getX();
|
||||
result = result * PRIME + (this.getName() == null ? 0 : this.getName().hashCode());
|
||||
final java.lang.Object $name = this.getName();
|
||||
result = result * PRIME + ($name == null ? 0 : $name.hashCode());
|
||||
return result;
|
||||
}
|
||||
@java.lang.Override
|
||||
@@ -76,7 +79,9 @@ class Data2 {
|
||||
final Data2 other = (Data2)o;
|
||||
if (!other.canEqual((java.lang.Object)this)) return false;
|
||||
if (this.getX() != other.getX()) return false;
|
||||
if (this.getName() == null ? other.getName() != null : !this.getName().equals((java.lang.Object)other.getName())) return false;
|
||||
final java.lang.Object this$name = this.getName();
|
||||
final java.lang.Object other$name = other.getName();
|
||||
if (this$name == null ? other$name != null : !this$name.equals(other$name)) return false;
|
||||
return true;
|
||||
}
|
||||
@java.lang.SuppressWarnings("all")
|
||||
@@ -89,7 +94,8 @@ class Data2 {
|
||||
final int PRIME = 31;
|
||||
int result = 1;
|
||||
result = result * PRIME + this.getX();
|
||||
result = result * PRIME + (this.getName() == null ? 0 : this.getName().hashCode());
|
||||
final java.lang.Object $name = this.getName();
|
||||
result = result * PRIME + ($name == null ? 0 : $name.hashCode());
|
||||
return result;
|
||||
}
|
||||
@java.lang.Override
|
||||
@@ -125,7 +131,9 @@ final class Data3 {
|
||||
if (!(o instanceof Data3)) return false;
|
||||
final Data3 other = (Data3)o;
|
||||
if (this.getX() != other.getX()) return false;
|
||||
if (this.getName() == null ? other.getName() != null : !this.getName().equals((java.lang.Object)other.getName())) return false;
|
||||
final java.lang.Object this$name = this.getName();
|
||||
final java.lang.Object other$name = other.getName();
|
||||
if (this$name == null ? other$name != null : !this$name.equals(other$name)) return false;
|
||||
return true;
|
||||
}
|
||||
@java.lang.Override
|
||||
@@ -134,7 +142,8 @@ final class Data3 {
|
||||
final int PRIME = 31;
|
||||
int result = 1;
|
||||
result = result * PRIME + this.getX();
|
||||
result = result * PRIME + (this.getName() == null ? 0 : this.getName().hashCode());
|
||||
final java.lang.Object $name = this.getName();
|
||||
result = result * PRIME + ($name == null ? 0 : $name.hashCode());
|
||||
return result;
|
||||
}
|
||||
@java.lang.Override
|
||||
|
||||
@@ -24,7 +24,9 @@ class DataWithGetter {
|
||||
if (!other.canEqual((java.lang.Object)this)) return false;
|
||||
if (this.getX() != other.getX()) return false;
|
||||
if (this.getY() != other.getY()) return false;
|
||||
if (this.getZ() == null ? other.getZ() != null : !this.getZ().equals((java.lang.Object)other.getZ())) return false;
|
||||
final java.lang.Object this$z = this.getZ();
|
||||
final java.lang.Object other$z = other.getZ();
|
||||
if (this$z == null ? other$z != null : !this$z.equals(other$z)) return false;
|
||||
return true;
|
||||
}
|
||||
@java.lang.SuppressWarnings("all")
|
||||
@@ -38,7 +40,8 @@ class DataWithGetter {
|
||||
int result = 1;
|
||||
result = result * PRIME + this.getX();
|
||||
result = result * PRIME + this.getY();
|
||||
result = result * PRIME + (this.getZ() == null ? 0 : this.getZ().hashCode());
|
||||
final java.lang.Object $z = this.getZ();
|
||||
result = result * PRIME + ($z == null ? 0 : $z.hashCode());
|
||||
return result;
|
||||
}
|
||||
@java.lang.Override
|
||||
|
||||
@@ -24,7 +24,9 @@ class DataWithGetterNone {
|
||||
if (!other.canEqual((java.lang.Object)this)) return false;
|
||||
if (this.x != other.x) return false;
|
||||
if (this.y != other.y) return false;
|
||||
if (this.z == null ? other.z != null : !this.z.equals((java.lang.Object)other.z)) return false;
|
||||
final java.lang.Object this$z = this.z;
|
||||
final java.lang.Object other$z = other.z;
|
||||
if (this$z == null ? other$z != null : !this$z.equals(other$z)) return false;
|
||||
return true;
|
||||
}
|
||||
@java.lang.SuppressWarnings("all")
|
||||
@@ -38,7 +40,8 @@ class DataWithGetterNone {
|
||||
int result = 1;
|
||||
result = result * PRIME + this.x;
|
||||
result = result * PRIME + this.y;
|
||||
result = result * PRIME + (this.z == null ? 0 : this.z.hashCode());
|
||||
final java.lang.Object $z = this.z;
|
||||
result = result * PRIME + ($z == null ? 0 : $z.hashCode());
|
||||
return result;
|
||||
}
|
||||
@java.lang.Override
|
||||
|
||||
@@ -3,6 +3,7 @@ class EqualsAndHashCode {
|
||||
boolean[] y;
|
||||
Object[] z;
|
||||
String a;
|
||||
String b;
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public boolean equals(final java.lang.Object o) {
|
||||
@@ -13,7 +14,12 @@ class EqualsAndHashCode {
|
||||
if (this.x != other.x) return false;
|
||||
if (!java.util.Arrays.equals(this.y, other.y)) return false;
|
||||
if (!java.util.Arrays.deepEquals(this.z, other.z)) return false;
|
||||
if (this.a == null ? other.a != null : !this.a.equals((java.lang.Object)other.a)) return false;
|
||||
final java.lang.Object this$a = this.a;
|
||||
final java.lang.Object other$a = other.a;
|
||||
if (this$a == null ? other$a != null : !this$a.equals(other$a)) return false;
|
||||
final java.lang.Object this$b = this.b;
|
||||
final java.lang.Object other$b = other.b;
|
||||
if (this$b == null ? other$b != null : !this$b.equals(other$b)) return false;
|
||||
return true;
|
||||
}
|
||||
@java.lang.SuppressWarnings("all")
|
||||
@@ -28,12 +34,18 @@ class EqualsAndHashCode {
|
||||
result = result * PRIME + this.x;
|
||||
result = result * PRIME + java.util.Arrays.hashCode(this.y);
|
||||
result = result * PRIME + java.util.Arrays.deepHashCode(this.z);
|
||||
result = result * PRIME + (this.a == null ? 0 : this.a.hashCode());
|
||||
final java.lang.Object $a = this.a;
|
||||
result = result * PRIME + ($a == null ? 0 : $a.hashCode());
|
||||
final java.lang.Object $b = this.b;
|
||||
result = result * PRIME + ($b == null ? 0 : $b.hashCode());
|
||||
return result;
|
||||
}
|
||||
}
|
||||
final class EqualsAndHashCode2 {
|
||||
int x;
|
||||
long y;
|
||||
float f;
|
||||
double d;
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public boolean equals(final java.lang.Object o) {
|
||||
@@ -41,6 +53,9 @@ final class EqualsAndHashCode2 {
|
||||
if (!(o instanceof EqualsAndHashCode2)) return false;
|
||||
final EqualsAndHashCode2 other = (EqualsAndHashCode2)o;
|
||||
if (this.x != other.x) return false;
|
||||
if (this.y != other.y) return false;
|
||||
if (java.lang.Float.compare(this.f, other.f) != 0) return false;
|
||||
if (java.lang.Double.compare(this.d, other.d) != 0) return false;
|
||||
return true;
|
||||
}
|
||||
@java.lang.Override
|
||||
@@ -49,6 +64,11 @@ final class EqualsAndHashCode2 {
|
||||
final int PRIME = 31;
|
||||
int result = 1;
|
||||
result = result * PRIME + this.x;
|
||||
final long $y = this.y;
|
||||
result = result * PRIME + (int)($y >>> 32 ^ $y);
|
||||
result = result * PRIME + java.lang.Float.floatToIntBits(this.f);
|
||||
final long $d = java.lang.Double.doubleToLongBits(this.d);
|
||||
result = result * PRIME + (int)($d >>> 32 ^ $d);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,8 +10,12 @@ class GetterLazyEahcToString {
|
||||
if (!(o instanceof GetterLazyEahcToString)) return false;
|
||||
final GetterLazyEahcToString other = (GetterLazyEahcToString)o;
|
||||
if (!other.canEqual((java.lang.Object)this)) return false;
|
||||
if (this.getValue() == null ? other.getValue() != null : !this.getValue().equals((java.lang.Object)other.getValue())) return false;
|
||||
if (this.value2 == null ? other.value2 != null : !this.value2.equals((java.lang.Object)other.value2)) return false;
|
||||
final java.lang.Object this$value = this.getValue();
|
||||
final java.lang.Object other$value = other.getValue();
|
||||
if (this$value == null ? other$value != null : !this$value.equals(other$value)) return false;
|
||||
final java.lang.Object this$value2 = this.value2;
|
||||
final java.lang.Object other$value2 = other.value2;
|
||||
if (this$value2 == null ? other$value2 != null : !this$value2.equals(other$value2)) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -25,8 +29,10 @@ class GetterLazyEahcToString {
|
||||
public int hashCode() {
|
||||
final int PRIME = 31;
|
||||
int result = 1;
|
||||
result = result * PRIME + (this.getValue() == null ? 0 : this.getValue().hashCode());
|
||||
result = result * PRIME + (this.value2 == null ? 0 : this.value2.hashCode());
|
||||
final java.lang.Object $value = this.getValue();
|
||||
result = result * PRIME + ($value == null ? 0 : $value.hashCode());
|
||||
final java.lang.Object $value2 = this.value2;
|
||||
result = result * PRIME + ($value2 == null ? 0 : $value2.hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
boolean[] y;
|
||||
Object[] z;
|
||||
String a;
|
||||
String b;
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") boolean equals(final java.lang.Object o) {
|
||||
if ((o == this))
|
||||
return true;
|
||||
@@ -17,8 +18,14 @@
|
||||
return false;
|
||||
if ((! java.util.Arrays.deepEquals(this.z, other.z)))
|
||||
return false;
|
||||
if (((this.a == null) ? (other.a != null) : (! this.a.equals((java.lang.Object) other.a))))
|
||||
final java.lang.Object this$a = this.a;
|
||||
final java.lang.Object other$a = other.a;
|
||||
if (((this$a == null) ? (other$a != null) : (! this$a.equals(other$a))))
|
||||
return false;
|
||||
final java.lang.Object this$b = this.b;
|
||||
final java.lang.Object other$b = other.b;
|
||||
if (((this$b == null) ? (other$b != null) : (! this$b.equals(other$b))))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
public @java.lang.SuppressWarnings("all") boolean canEqual(final java.lang.Object other) {
|
||||
@@ -30,7 +37,10 @@
|
||||
result = ((result * PRIME) + this.x);
|
||||
result = ((result * PRIME) + java.util.Arrays.hashCode(this.y));
|
||||
result = ((result * PRIME) + java.util.Arrays.deepHashCode(this.z));
|
||||
result = ((result * PRIME) + ((this.a == null) ? 0 : this.a.hashCode()));
|
||||
final java.lang.Object $a = this.a;
|
||||
result = ((result * PRIME) + (($a == null) ? 0 : $a.hashCode()));
|
||||
final java.lang.Object $b = this.b;
|
||||
result = ((result * PRIME) + (($b == null) ? 0 : $b.hashCode()));
|
||||
return result;
|
||||
}
|
||||
EqualsAndHashCode() {
|
||||
@@ -39,6 +49,9 @@
|
||||
}
|
||||
final @lombok.EqualsAndHashCode class EqualsAndHashCode2 {
|
||||
int x;
|
||||
long y;
|
||||
float f;
|
||||
double d;
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") boolean equals(final java.lang.Object o) {
|
||||
if ((o == this))
|
||||
return true;
|
||||
@@ -47,12 +60,23 @@ final @lombok.EqualsAndHashCode class EqualsAndHashCode2 {
|
||||
final @java.lang.SuppressWarnings("all") EqualsAndHashCode2 other = (EqualsAndHashCode2) o;
|
||||
if ((this.x != other.x))
|
||||
return false;
|
||||
if ((this.y != other.y))
|
||||
return false;
|
||||
if ((java.lang.Float.compare(this.f, other.f) != 0))
|
||||
return false;
|
||||
if ((java.lang.Double.compare(this.d, other.d) != 0))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") int hashCode() {
|
||||
final int PRIME = 31;
|
||||
int result = 1;
|
||||
result = ((result * PRIME) + this.x);
|
||||
final long $y = this.y;
|
||||
result = ((result * PRIME) + (int) ($y ^ ($y >>> 32)));
|
||||
result = ((result * PRIME) + java.lang.Float.floatToIntBits(this.f));
|
||||
final long $d = java.lang.Double.doubleToLongBits(this.d);
|
||||
result = ((result * PRIME) + (int) ($d ^ ($d >>> 32)));
|
||||
return result;
|
||||
}
|
||||
EqualsAndHashCode2() {
|
||||
|
||||
@@ -4,11 +4,15 @@ class EqualsAndHashCode {
|
||||
boolean[] y;
|
||||
Object[] z;
|
||||
String a;
|
||||
String b;
|
||||
}
|
||||
|
||||
@lombok.EqualsAndHashCode
|
||||
final class EqualsAndHashCode2 {
|
||||
int x;
|
||||
long y;
|
||||
float f;
|
||||
double d;
|
||||
}
|
||||
|
||||
@lombok.EqualsAndHashCode(callSuper=false)
|
||||
|
||||
Reference in new issue
Block a user