mirror of
https://github.com/tiennm99/lombok.git
synced 2026-10-11 12:19:00 +00:00
[fixes #1628] Lombok now marks the result field used in the generated hashCode method as final if it isn’t modified. This doesn’t change its behavior whatsoever, but some linters and especially eclipse save actions (specifically: ‘mark local variables final if possible’) cause issues when they try to mess with generated code. Of course, now any save action with ‘remove useless modifiers’ would cause an issue but those don’t (yet…) exist.
This commit is contained in:
1 parent
a685d0828c
commit
db19327cb4
25 files changed
+139
-32
No files matched your search
@@ -227,7 +227,7 @@ public class HandleEqualsAndHashCode extends EclipseAnnotationHandler<EqualsAndH
|
||||
|
||||
public MethodDeclaration createHashCode(EclipseNode type, Collection<Included<EclipseNode, EqualsAndHashCode.Include>> members, boolean callSuper, ASTNode source, FieldAccess fieldAccess) {
|
||||
int pS = source.sourceStart, pE = source.sourceEnd;
|
||||
long p = (long)pS << 32 | pE;
|
||||
long p = (long) pS << 32 | pE;
|
||||
|
||||
MethodDeclaration method = new MethodDeclaration(((CompilationUnitDeclaration) type.top().get()).compilationResult);
|
||||
setGeneratedBy(method, source);
|
||||
@@ -246,7 +246,14 @@ public class HandleEqualsAndHashCode extends EclipseAnnotationHandler<EqualsAndH
|
||||
|
||||
List<Statement> statements = new ArrayList<Statement>();
|
||||
|
||||
final boolean isEmpty = members.isEmpty();
|
||||
boolean isEmpty = true;
|
||||
for (Included<EclipseNode, EqualsAndHashCode.Include> member : members) {
|
||||
TypeReference fType = getFieldType(member.getNode(), fieldAccess);
|
||||
if (fType.getLastToken() != null) {
|
||||
isEmpty = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* final int PRIME = X; */ {
|
||||
/* Without members, PRIME isn't used, as that would trigger a 'local variable not used' warning. */
|
||||
@@ -282,6 +289,7 @@ public class HandleEqualsAndHashCode extends EclipseAnnotationHandler<EqualsAndH
|
||||
resultDecl.initialization = init;
|
||||
resultDecl.type = TypeReference.baseTypeReference(TypeIds.T_int, 0);
|
||||
resultDecl.type.sourceStart = pS; resultDecl.type.sourceEnd = pE;
|
||||
if (isEmpty) resultDecl.modifiers |= Modifier.FINAL;
|
||||
setGeneratedBy(resultDecl.type, source);
|
||||
statements.add(resultDecl);
|
||||
}
|
||||
@@ -303,6 +311,7 @@ public class HandleEqualsAndHashCode extends EclipseAnnotationHandler<EqualsAndH
|
||||
setGeneratedBy(intForBool, source);
|
||||
statements.add(createResultCalculation(source, intForBool));
|
||||
} else if (Arrays.equals(TypeConstants.LONG, token)) {
|
||||
/* (int)(ref >>> 32 ^ ref) */
|
||||
statements.add(createLocalDeclaration(source, dollarFieldName, TypeReference.baseTypeReference(TypeIds.T_long, 0), fieldAccessor));
|
||||
SingleNameReference copy1 = new SingleNameReference(dollarFieldName, p);
|
||||
setGeneratedBy(copy1, source);
|
||||
|
||||
@@ -210,8 +210,10 @@ public class HandleEqualsAndHashCode extends JavacAnnotationHandler<EqualsAndHas
|
||||
Name resultName = typeNode.toName(RESULT_NAME);
|
||||
long finalFlag = JavacHandlerUtil.addFinalIfNeeded(0L, typeNode.getContext());
|
||||
|
||||
boolean isEmpty = members.isEmpty();
|
||||
|
||||
/* final int PRIME = X; */ {
|
||||
if (!members.isEmpty()) {
|
||||
if (!isEmpty) {
|
||||
statements.append(maker.VarDef(maker.Modifiers(finalFlag), primeName, maker.TypeIdent(CTC_INT), maker.Literal(HandlerUtil.primeForHashcode())));
|
||||
}
|
||||
}
|
||||
@@ -227,7 +229,7 @@ public class HandleEqualsAndHashCode extends JavacAnnotationHandler<EqualsAndHas
|
||||
/* ... 1; */
|
||||
init = maker.Literal(1);
|
||||
}
|
||||
statements.append(maker.VarDef(maker.Modifiers(0), resultName, maker.TypeIdent(CTC_INT), init));
|
||||
statements.append(maker.VarDef(maker.Modifiers(isEmpty ? finalFlag : 0), resultName, maker.TypeIdent(CTC_INT), init));
|
||||
}
|
||||
|
||||
for (Included<JavacNode, EqualsAndHashCode.Include> member : members) {
|
||||
|
||||
@@ -15,7 +15,7 @@ class ConflictingStaticConstructorNames {
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public int hashCode() {
|
||||
int result = 1;
|
||||
final int result = 1;
|
||||
return result;
|
||||
}
|
||||
@java.lang.Override
|
||||
|
||||
@@ -210,7 +210,7 @@ class Data5 {
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public int hashCode() {
|
||||
int result = 1;
|
||||
final int result = 1;
|
||||
return result;
|
||||
}
|
||||
@java.lang.Override
|
||||
@@ -233,7 +233,7 @@ final class Data6 {
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public int hashCode() {
|
||||
int result = 1;
|
||||
final int result = 1;
|
||||
return result;
|
||||
}
|
||||
@java.lang.Override
|
||||
|
||||
@@ -92,7 +92,7 @@ final class EqualsAndHashCode3 extends EqualsAndHashCode {
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public int hashCode() {
|
||||
int result = 1;
|
||||
final int result = 1;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -114,7 +114,7 @@ class EqualsAndHashCode4 extends EqualsAndHashCode {
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public int hashCode() {
|
||||
int result = super.hashCode();
|
||||
final int result = super.hashCode();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -15,7 +15,7 @@ class EqualsAndHashCodeConfigKeys1Parent {
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public int hashCode() {
|
||||
int result = 1;
|
||||
final int result = 1;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ class EqualsAndHashCodeConfigKeys2Object extends Object {
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public int hashCode() {
|
||||
int result = 1;
|
||||
final int result = 1;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -36,7 +36,7 @@ class EqualsAndHashCodeConfigKeys2Parent {
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public int hashCode() {
|
||||
int result = 1;
|
||||
final int result = 1;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
class EqualsAndHashCodeEmpty {
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public boolean equals(final java.lang.Object o) {
|
||||
if (o == this) return true;
|
||||
if (!(o instanceof EqualsAndHashCodeEmpty)) return false;
|
||||
final EqualsAndHashCodeEmpty other = (EqualsAndHashCodeEmpty) o;
|
||||
if (!other.canEqual((java.lang.Object) this)) return false;
|
||||
return true;
|
||||
}
|
||||
@java.lang.SuppressWarnings("all")
|
||||
protected boolean canEqual(final java.lang.Object other) {
|
||||
return other instanceof EqualsAndHashCodeEmpty;
|
||||
}
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public int hashCode() {
|
||||
final int result = 1;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
class EqualsAndHashCodeEmptyWithSuper extends EqualsAndHashCodeEmpty {
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public boolean equals(final java.lang.Object o) {
|
||||
if (o == this) return true;
|
||||
if (!(o instanceof EqualsAndHashCodeEmptyWithSuper)) return false;
|
||||
final EqualsAndHashCodeEmptyWithSuper other = (EqualsAndHashCodeEmptyWithSuper) o;
|
||||
if (!other.canEqual((java.lang.Object) this)) return false;
|
||||
if (!super.equals(o)) return false;
|
||||
return true;
|
||||
}
|
||||
@java.lang.SuppressWarnings("all")
|
||||
protected boolean canEqual(final java.lang.Object other) {
|
||||
return other instanceof EqualsAndHashCodeEmptyWithSuper;
|
||||
}
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public int hashCode() {
|
||||
final int result = super.hashCode();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -16,7 +16,7 @@ class EqualsAndHashCodeExplicitInclude {
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public int hashCode() {
|
||||
int result = 1;
|
||||
final int result = 1;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -19,7 +19,7 @@ interface EqualsAndHashCodeNestedShadow {
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public int hashCode() {
|
||||
int result = 1;
|
||||
final int result = 1;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -42,7 +42,7 @@ interface EqualsAndHashCodeNestedShadow {
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public int hashCode() {
|
||||
int result = 1;
|
||||
final int result = 1;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -224,7 +224,7 @@ public class PrivateNoArgsConstructor {
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public int hashCode() {
|
||||
int result = 1;
|
||||
final int result = 1;
|
||||
return result;
|
||||
}
|
||||
@java.lang.Override
|
||||
|
||||
@@ -21,7 +21,7 @@ final class ValueCallSuper extends ValueParent {
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public int hashCode() {
|
||||
int result = super.hashCode();
|
||||
final int result = super.hashCode();
|
||||
return result;
|
||||
}
|
||||
@java.lang.Override
|
||||
|
||||
@@ -14,7 +14,7 @@ final class ValueStaticField {
|
||||
@java.lang.Override
|
||||
@java.lang.SuppressWarnings("all")
|
||||
public int hashCode() {
|
||||
int result = 1;
|
||||
final int result = 1;
|
||||
return result;
|
||||
}
|
||||
@java.lang.Override
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
return (other instanceof ConflictingStaticConstructorNames);
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") int hashCode() {
|
||||
int result = 1;
|
||||
final int result = 1;
|
||||
return result;
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") java.lang.String toString() {
|
||||
|
||||
@@ -188,7 +188,7 @@ final @Data @lombok.EqualsAndHashCode(callSuper = true) class Data4 extends java
|
||||
return (other instanceof Data5);
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") int hashCode() {
|
||||
int result = 1;
|
||||
final int result = 1;
|
||||
return result;
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") java.lang.String toString() {
|
||||
@@ -207,7 +207,7 @@ final @Data class Data6 {
|
||||
return true;
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") int hashCode() {
|
||||
int result = 1;
|
||||
final int result = 1;
|
||||
return result;
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") java.lang.String toString() {
|
||||
|
||||
@@ -105,7 +105,7 @@ final @lombok.EqualsAndHashCode(callSuper = false) class EqualsAndHashCode3 exte
|
||||
return (other instanceof EqualsAndHashCode3);
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") int hashCode() {
|
||||
int result = 1;
|
||||
final int result = 1;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -129,7 +129,7 @@ final @lombok.EqualsAndHashCode(callSuper = false) class EqualsAndHashCode3 exte
|
||||
return (other instanceof EqualsAndHashCode4);
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") int hashCode() {
|
||||
int result = super.hashCode();
|
||||
final int result = super.hashCode();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -16,7 +16,7 @@
|
||||
return (other instanceof EqualsAndHashCodeConfigKeys1Parent);
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") int hashCode() {
|
||||
int result = 1;
|
||||
final int result = 1;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
return (other instanceof EqualsAndHashCodeConfigKeys2Object);
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") int hashCode() {
|
||||
int result = 1;
|
||||
final int result = 1;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -38,7 +38,7 @@
|
||||
return (other instanceof EqualsAndHashCodeConfigKeys2Parent);
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") int hashCode() {
|
||||
int result = 1;
|
||||
final int result = 1;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
@lombok.EqualsAndHashCode class EqualsAndHashCodeEmpty {
|
||||
EqualsAndHashCodeEmpty() {
|
||||
super();
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") boolean equals(final java.lang.Object o) {
|
||||
if ((o == this))
|
||||
return true;
|
||||
if ((! (o instanceof EqualsAndHashCodeEmpty)))
|
||||
return false;
|
||||
final EqualsAndHashCodeEmpty other = (EqualsAndHashCodeEmpty) o;
|
||||
if ((! other.canEqual((java.lang.Object) this)))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
protected @java.lang.SuppressWarnings("all") boolean canEqual(final java.lang.Object other) {
|
||||
return (other instanceof EqualsAndHashCodeEmpty);
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") int hashCode() {
|
||||
final int result = 1;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@lombok.EqualsAndHashCode(callSuper = true) class EqualsAndHashCodeEmptyWithSuper extends EqualsAndHashCodeEmpty {
|
||||
EqualsAndHashCodeEmptyWithSuper() {
|
||||
super();
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") boolean equals(final java.lang.Object o) {
|
||||
if ((o == this))
|
||||
return true;
|
||||
if ((! (o instanceof EqualsAndHashCodeEmptyWithSuper)))
|
||||
return false;
|
||||
final EqualsAndHashCodeEmptyWithSuper other = (EqualsAndHashCodeEmptyWithSuper) o;
|
||||
if ((! other.canEqual((java.lang.Object) this)))
|
||||
return false;
|
||||
if ((! super.equals(o)))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
protected @java.lang.SuppressWarnings("all") boolean canEqual(final java.lang.Object other) {
|
||||
return (other instanceof EqualsAndHashCodeEmptyWithSuper);
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") int hashCode() {
|
||||
final int result = super.hashCode();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -17,7 +17,7 @@
|
||||
return (other instanceof EqualsAndHashCodeExplicitInclude);
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") int hashCode() {
|
||||
int result = 1;
|
||||
final int result = 1;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -20,7 +20,7 @@ interface EqualsAndHashCodeNestedShadow {
|
||||
return (other instanceof EqualsAndHashCodeNestedShadow.Bar.Foo);
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") int hashCode() {
|
||||
int result = 1;
|
||||
final int result = 1;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -47,7 +47,7 @@ interface EqualsAndHashCodeNestedShadow {
|
||||
return (other instanceof EqualsAndHashCodeNestedShadow.Baz.Foo);
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") int hashCode() {
|
||||
int result = 1;
|
||||
final int result = 1;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -203,7 +203,7 @@ public class PrivateNoArgsConstructor {
|
||||
return (other instanceof PrivateNoArgsConstructor.PrivateNoArgsConstructorNoFields);
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") int hashCode() {
|
||||
int result = 1;
|
||||
final int result = 1;
|
||||
return result;
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") java.lang.String toString() {
|
||||
|
||||
@@ -20,7 +20,7 @@ final @lombok.Value class ValueCallSuper extends ValueParent {
|
||||
return (other instanceof ValueCallSuper);
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") int hashCode() {
|
||||
int result = super.hashCode();
|
||||
final int result = super.hashCode();
|
||||
return result;
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") java.lang.String toString() {
|
||||
|
||||
@@ -12,7 +12,7 @@ final @Value class ValueStaticField {
|
||||
return true;
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") int hashCode() {
|
||||
int result = 1;
|
||||
final int result = 1;
|
||||
return result;
|
||||
}
|
||||
public @java.lang.Override @java.lang.SuppressWarnings("all") java.lang.String toString() {
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
@lombok.EqualsAndHashCode
|
||||
class EqualsAndHashCodeEmpty {
|
||||
}
|
||||
|
||||
@lombok.EqualsAndHashCode(callSuper = true)
|
||||
class EqualsAndHashCodeEmptyWithSuper extends EqualsAndHashCodeEmpty {
|
||||
}
|
||||
Reference in new issue
Block a user