diff --git a/AUTHORS b/AUTHORS index 810efce9..f2e13ec6 100755 --- a/AUTHORS +++ b/AUTHORS @@ -19,6 +19,7 @@ Jacob Middag Jan Matèrne Jan Rieke Jappe van der Hel +John Paul Taylor II Kevin Chirls Liu DongMiao Luan Nico diff --git a/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java b/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java index 65e2c5c8..c313cf51 100644 --- a/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java +++ b/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java @@ -2608,6 +2608,13 @@ public class EclipseHandlerUtil { applyAnnotationToVarDecl(typeNode, arg, lib.getNullableAnnotation(), lib.isTypeUse()); } + public static void createRelevantNullableAnnotation(EclipseNode typeNode, Argument arg, List applied) { + NullAnnotationLibrary lib = typeNode.getAst().readConfiguration(ConfigurationKeys.ADD_NULL_ANNOTATIONS); + if (lib == null || applied.contains(lib)) return; + + applyAnnotationToVarDecl(typeNode, arg, lib.getNullableAnnotation(), lib.isTypeUse()); + } + public static void createRelevantNonNullAnnotation(EclipseNode typeNode, Argument arg) { NullAnnotationLibrary lib = typeNode.getAst().readConfiguration(ConfigurationKeys.ADD_NULL_ANNOTATIONS); if (lib == null) return; diff --git a/src/core/lombok/eclipse/handlers/HandleEqualsAndHashCode.java b/src/core/lombok/eclipse/handlers/HandleEqualsAndHashCode.java index a5e8dfb5..940612e7 100755 --- a/src/core/lombok/eclipse/handlers/HandleEqualsAndHashCode.java +++ b/src/core/lombok/eclipse/handlers/HandleEqualsAndHashCode.java @@ -44,6 +44,7 @@ import lombok.core.handlers.InclusionExclusionUtils.Included; import lombok.core.AnnotationValues; import lombok.core.configuration.CallSuperType; import lombok.core.configuration.CheckerFrameworkVersion; +import lombok.core.configuration.NullAnnotationLibrary; import lombok.eclipse.Eclipse; import lombok.eclipse.EclipseAnnotationHandler; import lombok.eclipse.EclipseNode; @@ -606,19 +607,20 @@ public class HandleEqualsAndHashCode extends EclipseAnnotationHandler applied = new ArrayList(); + Annotation[] onParamNullable = null; String nearest = scanForNearestAnnotation(type, "javax.annotation.ParametersAreNullableByDefault", "javax.annotation.ParametersAreNonnullByDefault"); if ("javax.annotation.ParametersAreNonnullByDefault".equals(nearest)) { - onParamType = new Annotation[1]; - onParamType[0] = new MarkerAnnotation(generateQualifiedTypeRef(source, JAVAX_ANNOTATION_NULLABLE), 0); + onParamNullable = new Annotation[] { new MarkerAnnotation(generateQualifiedTypeRef(source, JAVAX_ANNOTATION_NULLABLE), 0) }; + applied.add(NullAnnotationLibrary.JAVAX); } + Annotation[] onParamTypeNullable = null; nearest = scanForNearestAnnotation(type, "org.eclipse.jdt.annotation.NonNullByDefault"); if (nearest != null) { - Annotation a = new MarkerAnnotation(generateQualifiedTypeRef(source, ORG_ECLIPSE_JDT_ANNOTATION_NULLABLE), 0); - if (onParamType != null) onParamType = new Annotation[] {onParamType[0], a}; - else onParamType = new Annotation[] {a}; + onParamTypeNullable = new Annotation[] { new MarkerAnnotation(generateQualifiedTypeRef(source, ORG_ECLIPSE_JDT_ANNOTATION_NULLABLE), 0) }; + applied.add(NullAnnotationLibrary.ECLIPSE); } MethodDeclaration method = new MethodDeclaration(((CompilationUnitDeclaration) type.top().get()).compilationResult); @@ -640,12 +642,13 @@ public class HandleEqualsAndHashCode extends EclipseAnnotationHandler statements = new ArrayList(); diff --git a/test/transform/resource/after-delombok/EqualsAndHashCodeWithNonNullByDefault.java b/test/transform/resource/after-delombok/EqualsAndHashCodeWithNonNullByDefault.java new file mode 100644 index 00000000..37711004 --- /dev/null +++ b/test/transform/resource/after-delombok/EqualsAndHashCodeWithNonNullByDefault.java @@ -0,0 +1,23 @@ +import javax.annotation.ParametersAreNonnullByDefault; +@ParametersAreNonnullByDefault +class EqualsAndHashCodeWithNonNullByDefault { + @java.lang.Override + @java.lang.SuppressWarnings("all") + public boolean equals(@javax.annotation.Nullable final java.lang.Object o) { + if (o == this) return true; + if (!(o instanceof EqualsAndHashCodeWithNonNullByDefault)) return false; + final EqualsAndHashCodeWithNonNullByDefault other = (EqualsAndHashCodeWithNonNullByDefault) o; + if (!other.canEqual((java.lang.Object) this)) return false; + return true; + } + @java.lang.SuppressWarnings("all") + protected boolean canEqual(@javax.annotation.Nullable final java.lang.Object other) { + return other instanceof EqualsAndHashCodeWithNonNullByDefault; + } + @java.lang.Override + @java.lang.SuppressWarnings("all") + public int hashCode() { + final int result = 1; + return result; + } +} diff --git a/test/transform/resource/after-ecj/EqualsAndHashCodeWithNonNullByDefault.java b/test/transform/resource/after-ecj/EqualsAndHashCodeWithNonNullByDefault.java new file mode 100644 index 00000000..0cd170b4 --- /dev/null +++ b/test/transform/resource/after-ecj/EqualsAndHashCodeWithNonNullByDefault.java @@ -0,0 +1,23 @@ +import javax.annotation.ParametersAreNonnullByDefault; +@lombok.EqualsAndHashCode @ParametersAreNonnullByDefault class EqualsAndHashCodeWithNonNullByDefault { + EqualsAndHashCodeWithNonNullByDefault() { + super(); + } + public @java.lang.Override @java.lang.SuppressWarnings("all") boolean equals(final @javax.annotation.Nullable java.lang.Object o) { + if ((o == this)) + return true; + if ((! (o instanceof EqualsAndHashCodeWithNonNullByDefault))) + return false; + final EqualsAndHashCodeWithNonNullByDefault other = (EqualsAndHashCodeWithNonNullByDefault) o; + if ((! other.canEqual((java.lang.Object) this))) + return false; + return true; + } + protected @java.lang.SuppressWarnings("all") boolean canEqual(final @javax.annotation.Nullable java.lang.Object other) { + return (other instanceof EqualsAndHashCodeWithNonNullByDefault); + } + public @java.lang.Override @java.lang.SuppressWarnings("all") int hashCode() { + final int result = 1; + return result; + } +} \ No newline at end of file diff --git a/test/transform/resource/before/EqualsAndHashCodeWithNonNullByDefault.java b/test/transform/resource/before/EqualsAndHashCodeWithNonNullByDefault.java new file mode 100644 index 00000000..f91bce3c --- /dev/null +++ b/test/transform/resource/before/EqualsAndHashCodeWithNonNullByDefault.java @@ -0,0 +1,6 @@ +//CONF: lombok.addNullAnnotations = javax +import javax.annotation.ParametersAreNonnullByDefault; +@lombok.EqualsAndHashCode +@ParametersAreNonnullByDefault +class EqualsAndHashCodeWithNonNullByDefault { +} \ No newline at end of file