[fixes #3346] Add jakarta Nonnull/Nullable annotations

This commit is contained in:
Rawi01 authored and Roel Spilker committed 2023-03-21 17:38:04 +01:00
1 parent 984cd1d5cf
commit e64c6b5879
9 files changed
+141 -4

No files matched your search

+2 -1
View File
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2013-2022 The Project Lombok Authors.
* Copyright (C) 2013-2023 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
@@ -103,6 +103,7 @@ public class ConfigurationKeys {
* Lombok generally copies relevant nullity annotations from your source code to the right places. However, sometimes lombok generates code where the nullability of some node is not dependent on something in your source code. You can configure lombok to add an appropriate nullity annotation in this case.<ul>
* <li>{@code none} (the default) - no annotations are added.</li>
* <li>{@code javax} - The annotations {@code javax.annotation.NonNull} and {@code javax.annotation.Nullable} are used.</li>
* <li>{@code jakarta} - The annotations {@code jakarta.annotation.NonNull} and {@code jakarta.annotation.Nullable} are used.</li>
* <li>{@code eclipse} - The annotations {@code org.eclipse.jdt.annotation.NonNull} and {@code org.eclipse.jdt.annotation.Nullable} are used.</li>
* <li>{@code jetbrains} - The annotations {@code org.jetbrains.annotations.NotNull} and {@code org.jetbrains.annotations.Nullable} are used.</li>
* <li>{@code netbeans} - The annotations {@code org.netbeans.api.annotations.common.NonNull} and {@code org.netbeans.api.annotations.common.NullAllowed} are used.</li>
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2020 The Project Lombok Authors.
* Copyright (C) 2020-2023 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
@@ -63,6 +63,7 @@ public final class NullAnnotationLibrary implements ConfigurationValueType {
public static final NullAnnotationLibrary NONE = new NullAnnotationLibrary("none", null, null, false);
public static final NullAnnotationLibrary JAVAX = new NullAnnotationLibrary("javax", "javax.annotation.Nonnull", "javax.annotation.Nullable", false);
public static final NullAnnotationLibrary JAKARTA = new NullAnnotationLibrary("jakarta", "jakarta.annotation.Nonnull", "jakarta.annotation.Nullable", false);
public static final NullAnnotationLibrary ECLIPSE = new NullAnnotationLibrary("eclipse", "org.eclipse.jdt.annotation.NonNull", "org.eclipse.jdt.annotation.Nullable", true);
public static final NullAnnotationLibrary JETBRAINS = new NullAnnotationLibrary("jetbrains", "org.jetbrains.annotations.NotNull", "org.jetbrains.annotations.Nullable", false);
public static final NullAnnotationLibrary NETBEANS = new NullAnnotationLibrary("netbeans", "org.netbeans.api.annotations.common.NonNull", "org.netbeans.api.annotations.common.NullAllowed", false);
@@ -103,6 +103,7 @@ public class HandlerUtil {
"io.micrometer.core.lang.NonNull",
"io.reactivex.annotations.NonNull",
"io.reactivex.rxjava3.annotations.NonNull",
"jakarta.annotation.Nonnull",
"javax.annotation.Nonnull",
// "javax.validation.constraints.NotNull", // The field might contain a null value until it is persisted.
"libcore.util.NonNull",
@@ -160,9 +161,10 @@ public class HandlerUtil {
"io.reactivex.annotations.Nullable",
"io.reactivex.rxjava3.annotations.NonNull",
"io.reactivex.rxjava3.annotations.Nullable",
"jakarta.annotation.Nonnull",
"jakarta.annotation.Nullable",
"javax.annotation.CheckForNull",
"javax.annotation.Nonnull",
"javax.annotation.Nonnull",
"javax.annotation.Nullable",
// "javax.validation.constraints.NotNull", // - this should definitely not be included; validation is not about language-level nullity, therefore should not be in this core list.
"libcore.util.NonNull",
@@ -0,0 +1,9 @@
package jakarta.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface Nonnull {}
@@ -0,0 +1,9 @@
package jakarta.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface Nullable {}
@@ -0,0 +1,59 @@
public class NullLibrary3 {
@jakarta.annotation.Nonnull
String foo;
@java.lang.Override
@java.lang.SuppressWarnings("all")
public boolean equals(@jakarta.annotation.Nullable final java.lang.Object o) {
if (o == this) return true;
if (!(o instanceof NullLibrary3)) return false;
final NullLibrary3 other = (NullLibrary3) o;
if (!other.canEqual((java.lang.Object) this)) return false;
final java.lang.Object this$foo = this.foo;
final java.lang.Object other$foo = other.foo;
if (this$foo == null ? other$foo != null : !this$foo.equals(other$foo)) return false;
return true;
}
@java.lang.SuppressWarnings("all")
protected boolean canEqual(@jakarta.annotation.Nullable final java.lang.Object other) {
return other instanceof NullLibrary3;
}
@java.lang.Override
@java.lang.SuppressWarnings("all")
public int hashCode() {
final int PRIME = 59;
int result = 1;
final java.lang.Object $foo = this.foo;
result = result * PRIME + ($foo == null ? 43 : $foo.hashCode());
return result;
}
@jakarta.annotation.Nonnull
@java.lang.Override
@java.lang.SuppressWarnings("all")
public java.lang.String toString() {
return "NullLibrary3(foo=" + this.foo + ")";
}
@java.lang.SuppressWarnings("all")
public NullLibrary3(@jakarta.annotation.Nonnull final String foo) {
if (foo == null) {
throw new java.lang.NullPointerException("foo is marked non-null but is null");
}
this.foo = foo;
}
/**
* @return a clone of this object, except with this updated property (returns {@code this} if an identical value is passed).
*/
@jakarta.annotation.Nonnull
@java.lang.SuppressWarnings("all")
public NullLibrary3 withFoo(@jakarta.annotation.Nonnull final String foo) {
if (foo == null) {
throw new java.lang.NullPointerException("foo is marked non-null but is null");
}
return this.foo == foo ? this : new NullLibrary3(foo);
}
}
@@ -0,0 +1,48 @@
public @lombok.EqualsAndHashCode @lombok.ToString @lombok.AllArgsConstructor class NullLibrary3 {
@jakarta.annotation.Nonnull @lombok.With String foo;
/**
* @return a clone of this object, except with this updated property (returns {@code this} if an identical value is passed).
*/
public @jakarta.annotation.Nonnull @java.lang.SuppressWarnings("all") NullLibrary3 withFoo(final @jakarta.annotation.Nonnull String foo) {
if ((foo == null))
{
throw new java.lang.NullPointerException("foo is marked non-null but is null");
}
return ((this.foo == foo) ? this : new NullLibrary3(foo));
}
public @java.lang.Override @java.lang.SuppressWarnings("all") boolean equals(final @jakarta.annotation.Nullable java.lang.Object o) {
if ((o == this))
return true;
if ((! (o instanceof NullLibrary3)))
return false;
final NullLibrary3 other = (NullLibrary3) o;
if ((! other.canEqual((java.lang.Object) this)))
return false;
final java.lang.Object this$foo = this.foo;
final java.lang.Object other$foo = other.foo;
if (((this$foo == null) ? (other$foo != null) : (! this$foo.equals(other$foo))))
return false;
return true;
}
protected @java.lang.SuppressWarnings("all") boolean canEqual(final @jakarta.annotation.Nullable java.lang.Object other) {
return (other instanceof NullLibrary3);
}
public @java.lang.Override @java.lang.SuppressWarnings("all") int hashCode() {
final int PRIME = 59;
int result = 1;
final java.lang.Object $foo = this.foo;
result = ((result * PRIME) + (($foo == null) ? 43 : $foo.hashCode()));
return result;
}
public @java.lang.Override @jakarta.annotation.Nonnull @java.lang.SuppressWarnings("all") java.lang.String toString() {
return (("NullLibrary3(foo=" + this.foo) + ")");
}
public @java.lang.SuppressWarnings("all") NullLibrary3(final @jakarta.annotation.Nonnull String foo) {
super();
if ((foo == null))
{
throw new java.lang.NullPointerException("foo is marked non-null but is null");
}
this.foo = foo;
}
}
@@ -0,0 +1,8 @@
//CONF: lombok.addNullAnnotations = jakarta
@lombok.EqualsAndHashCode
@lombok.ToString
@lombok.AllArgsConstructor
public class NullLibrary3 {
@jakarta.annotation.Nonnull
@lombok.With String foo;
}
@@ -87,7 +87,7 @@
<ol class="snippet example oneliner">
<li><code>lombok.addNullAnnotations = <em>&lt;flavor&gt;</em></code></li>
</ol>
Many <em>flavors</em> are available: <code>javax</code> (=JSR305; not recommended), <code>eclipse</code>, <code>jetbrains</code>, <code>netbeans</code>, <code>androidx</code>, <code>android.support</code> (deprecated within android), <code>checkerframework</code> (recommended), <code>findbugs</code>, <code>spring</code>, <code>jml</code>, or define your own via <code>CUSTOM:fully.qualified.NonNullAnnotation:fully.qualified.NullableAnnotation</code>; if your nullity annotation is solely of the type use style (it annotates types, such as eclipse's and checkerframework's offerings, versus annotating methods and parameters), the format is <code>CUSTOM:TYPE_USE:nonnullanno:nullableanno</code>.<br />
Many <em>flavors</em> are available: <code>javax</code> (=JSR305; not recommended), <code>jakarta</code>, <code>eclipse</code>, <code>jetbrains</code>, <code>netbeans</code>, <code>androidx</code>, <code>android.support</code> (deprecated within android), <code>checkerframework</code> (recommended), <code>findbugs</code>, <code>spring</code>, <code>jml</code>, or define your own via <code>CUSTOM:fully.qualified.NonNullAnnotation:fully.qualified.NullableAnnotation</code>; if your nullity annotation is solely of the type use style (it annotates types, such as eclipse's and checkerframework's offerings, versus annotating methods and parameters), the format is <code>CUSTOM:TYPE_USE:nonnullanno:nullableanno</code>.<br />
<em>This feature was added in lombok v1.18.12</em>.<br />
</p><p>
Lombok can be configured to add <code>@lombok.Generated</code> annotations to all generated nodes where possible; useful for JaCoCo (which has built in support),