diff --git a/docs/src/main/java/io/jooby/adoc/DocPostprocessor.java b/docs/src/main/java/io/jooby/adoc/DocPostprocessor.java index 5a1edf228a..c1fd69182f 100644 --- a/docs/src/main/java/io/jooby/adoc/DocPostprocessor.java +++ b/docs/src/main/java/io/jooby/adoc/DocPostprocessor.java @@ -8,7 +8,6 @@ import java.util.Set; import java.util.UUID; -import edu.umd.cs.findbugs.annotations.NonNull; import org.asciidoctor.extension.Postprocessor; import org.jcodings.util.Hash; import org.jsoup.Jsoup; @@ -145,7 +144,6 @@ private static void headerIds(Document doc, int level) { }); } - @NonNull private static String cleanId(String id) { return id.replaceAll("-\\d+$", ""); } diff --git a/jooby/pom.xml b/jooby/pom.xml index c2049712bb..5854d207be 100644 --- a/jooby/pom.xml +++ b/jooby/pom.xml @@ -14,8 +14,8 @@ - com.github.spotbugs - spotbugs-annotations + org.jspecify + jspecify diff --git a/jooby/src/main/java/io/jooby/AttachedFile.java b/jooby/src/main/java/io/jooby/AttachedFile.java index a01c089581..049ba9ffc4 100644 --- a/jooby/src/main/java/io/jooby/AttachedFile.java +++ b/jooby/src/main/java/io/jooby/AttachedFile.java @@ -9,8 +9,6 @@ import java.io.InputStream; import java.nio.file.Path; -import edu.umd.cs.findbugs.annotations.NonNull; - /** * Represents a file attachment response. * @@ -26,7 +24,7 @@ public class AttachedFile extends FileDownload { * @param fileName Filename. * @param fileSize File size or -1 if unknown. */ - public AttachedFile(@NonNull InputStream content, @NonNull String fileName, long fileSize) { + public AttachedFile(InputStream content, String fileName, long fileSize) { super(Mode.ATTACHMENT, content, fileName, fileSize); } @@ -36,7 +34,7 @@ public AttachedFile(@NonNull InputStream content, @NonNull String fileName, long * @param content File content. * @param fileName Filename. */ - public AttachedFile(@NonNull InputStream content, @NonNull String fileName) { + public AttachedFile(InputStream content, String fileName) { super(Mode.ATTACHMENT, content, fileName); } @@ -47,7 +45,7 @@ public AttachedFile(@NonNull InputStream content, @NonNull String fileName) { * @param fileName Filename. * @throws IOException For IO exception while reading file. */ - public AttachedFile(@NonNull Path file, @NonNull String fileName) throws IOException { + public AttachedFile(Path file, String fileName) throws IOException { super(Mode.ATTACHMENT, file, fileName); } @@ -57,7 +55,7 @@ public AttachedFile(@NonNull Path file, @NonNull String fileName) throws IOExcep * @param file File content. * @throws IOException For IO exception while reading file. */ - public AttachedFile(@NonNull Path file) throws IOException { + public AttachedFile(Path file) throws IOException { super(Mode.ATTACHMENT, file); } } diff --git a/jooby/src/main/java/io/jooby/Body.java b/jooby/src/main/java/io/jooby/Body.java index ba354beee2..96199d408d 100644 --- a/jooby/src/main/java/io/jooby/Body.java +++ b/jooby/src/main/java/io/jooby/Body.java @@ -14,8 +14,8 @@ import java.util.List; import java.util.Set; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.exception.MissingValueException; import io.jooby.internal.ByteArrayBody; import io.jooby.internal.FileBody; @@ -39,7 +39,7 @@ public interface Body extends Value { * @param charset Charset. * @return Body as string. */ - default String value(@NonNull Charset charset) { + default String value(Charset charset) { byte[] bytes = bytes(); if (bytes.length == 0) { throw new MissingValueException("body"); @@ -99,7 +99,7 @@ default Iterator iterator() { InputStream stream(); @Override - default List toList(@NonNull Class type) { + default List toList(Class type) { return to(Reified.list(type).getType()); } @@ -112,11 +112,11 @@ default List toList(@NonNull Class type) { } @Override - default T to(@NonNull Class type) { + default T to(Class type) { return to((Type) type); } - default @Nullable @Override T toNullable(@NonNull Class type) { + default @Nullable @Override T toNullable(Class type) { return toNullable((Type) type); } @@ -127,7 +127,7 @@ default T to(@NonNull Class type) { * @param Generic type. * @return Converted value. */ - T to(@NonNull Type type); + T to(Type type); /** * Convert this body into the given type. @@ -136,7 +136,7 @@ default T to(@NonNull Class type) { * @param Generic type. * @return Converted value or null. */ - @Nullable T toNullable(@NonNull Type type); + @Nullable T toNullable(Type type); /* ********************************************************************************************** * Factory methods: @@ -149,7 +149,7 @@ default T to(@NonNull Class type) { * @param ctx Current context. * @return Empty body. */ - static Body empty(@NonNull Context ctx) { + static Body empty(Context ctx) { return ByteArrayBody.empty(ctx); } @@ -161,7 +161,7 @@ static Body empty(@NonNull Context ctx) { * @param size Size in bytes or -1. * @return A new body. */ - static Body of(@NonNull Context ctx, @NonNull InputStream stream, long size) { + static Body of(Context ctx, InputStream stream, long size) { return new InputStreamBody(ctx, stream, size); } @@ -172,7 +172,7 @@ static Body of(@NonNull Context ctx, @NonNull InputStream stream, long size) { * @param bytes byte array. * @return A new body. */ - static Body of(@NonNull Context ctx, @NonNull byte[] bytes) { + static Body of(Context ctx, byte[] bytes) { return new ByteArrayBody(ctx, bytes); } @@ -183,7 +183,7 @@ static Body of(@NonNull Context ctx, @NonNull byte[] bytes) { * @param file File. * @return A new body. */ - static Body of(@NonNull Context ctx, @NonNull Path file) { + static Body of(Context ctx, Path file) { return new FileBody(ctx, file); } } diff --git a/jooby/src/main/java/io/jooby/ByteRange.java b/jooby/src/main/java/io/jooby/ByteRange.java index d996834cc3..37bc47bf65 100644 --- a/jooby/src/main/java/io/jooby/ByteRange.java +++ b/jooby/src/main/java/io/jooby/ByteRange.java @@ -8,8 +8,8 @@ import java.io.IOException; import java.io.InputStream; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.internal.NoByteRange; import io.jooby.internal.NotSatisfiableByteRange; import io.jooby.internal.SingleByteRange; @@ -44,7 +44,7 @@ public interface ByteRange { * @param contentLength Content length. * @return Byte range instance. */ - static @NonNull ByteRange parse(@Nullable String value, long contentLength) { + static ByteRange parse(@Nullable String value, long contentLength) { if (contentLength <= 0 || value == null) { // NOOP return new NoByteRange(contentLength); @@ -129,7 +129,7 @@ public interface ByteRange { * * @return Value for Content-Range response header. */ - @NonNull String getContentRange(); + String getContentRange(); /** * For partial requests this method returns {@link StatusCode#PARTIAL_CONTENT}. @@ -141,7 +141,7 @@ public interface ByteRange { * * @return Status code. */ - @NonNull StatusCode getStatusCode(); + StatusCode getStatusCode(); /** * For partial request this method set the following byte range response headers: @@ -157,7 +157,7 @@ public interface ByteRange { * @param ctx Web context. * @return This byte range request. */ - @NonNull ByteRange apply(@NonNull Context ctx); + ByteRange apply(Context ctx); /** * For partial requests this method generates a new truncated input stream. @@ -170,5 +170,5 @@ public interface ByteRange { * @return A truncated input stream for partial request or same input stream. * @throws IOException When truncation fails. */ - @NonNull InputStream apply(@NonNull InputStream input) throws IOException; + InputStream apply(InputStream input) throws IOException; } diff --git a/jooby/src/main/java/io/jooby/CompletionListeners.java b/jooby/src/main/java/io/jooby/CompletionListeners.java index 50338449b8..71641b85d6 100644 --- a/jooby/src/main/java/io/jooby/CompletionListeners.java +++ b/jooby/src/main/java/io/jooby/CompletionListeners.java @@ -9,8 +9,6 @@ import java.util.List; import java.util.stream.Stream; -import edu.umd.cs.findbugs.annotations.NonNull; - /** * Utility class that group one or more completion listeners and execute them in reverse order. * @@ -28,7 +26,7 @@ public CompletionListeners() {} * * @param listener Listener. */ - public void addListener(@NonNull Route.Complete listener) { + public void addListener(Route.Complete listener) { if (listeners == null) { listeners = new ArrayList<>(); } @@ -40,7 +38,7 @@ public void addListener(@NonNull Route.Complete listener) { * * @param ctx Listeners. */ - public void run(@NonNull Context ctx) { + public void run(Context ctx) { if (listeners != null) { Throwable cause = null; for (int i = listeners.size() - 1; i >= 0; i--) { diff --git a/jooby/src/main/java/io/jooby/Context.java b/jooby/src/main/java/io/jooby/Context.java index 5017687243..5e77835ede 100644 --- a/jooby/src/main/java/io/jooby/Context.java +++ b/jooby/src/main/java/io/jooby/Context.java @@ -27,8 +27,8 @@ import java.util.concurrent.Executor; import java.util.function.BiFunction; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.internal.LocaleUtils; import io.jooby.internal.ReadOnlyContext; import io.jooby.internal.WebSocketSender; @@ -130,7 +130,7 @@ private static Selector single(Jooby defaultApp) { * @param Attribute type. * @return Attribute value or null. */ - @Nullable T getAttribute(@NonNull String key); + @Nullable T getAttribute(String key); /** * Set an application attribute. @@ -139,7 +139,7 @@ private static Selector single(Jooby defaultApp) { * @param value Attribute value. * @return This router. */ - Context setAttribute(@NonNull String key, Object value); + Context setAttribute(String key, Object value); /** * Get the HTTP router (usually this represents an instance of {@link Jooby}. @@ -163,7 +163,7 @@ private static Selector single(Jooby defaultApp) { * @param path Path to forward the request. * @return Forward result. */ - Object forward(@NonNull String path); + Object forward(String path); /* * ********************************************************************************************** @@ -198,7 +198,7 @@ private static Selector single(Jooby defaultApp) { * @param name Attribute's name. * @return Flash attribute. */ - Value flash(@NonNull String name); + Value flash(String name); /** * Get a flash attribute. @@ -207,7 +207,7 @@ private static Selector single(Jooby defaultApp) { * @param defaultValue Default's value. Value won't be persisted to flash context. * @return Flash attribute. */ - Value flash(@NonNull String name, @NonNull String defaultValue); + Value flash(String name, String defaultValue); /** * Find a session or creates a new session. @@ -223,7 +223,7 @@ private static Selector single(Jooby defaultApp) { * @param name Attribute's name. * @return Session's attribute or missing. */ - Value session(@NonNull String name); + Value session(String name); /** * Find a session attribute using the given name. If there is no session or attribute under that @@ -233,7 +233,7 @@ private static Selector single(Jooby defaultApp) { * @param defaultValue Default's value. Value won't be persisted to session context. * @return Session's attribute or missing. */ - Value session(@NonNull String name, @NonNull String defaultValue); + Value session(String name, String defaultValue); /** * Find an existing session. @@ -248,7 +248,7 @@ private static Selector single(Jooby defaultApp) { * @param name Cookie's name. * @return Cookie value. */ - Value cookie(@NonNull String name); + Value cookie(String name); /** * Get a cookie matching the given name. @@ -257,7 +257,7 @@ private static Selector single(Jooby defaultApp) { * @param defaultValue Default's value. Value won't be persisted to response context. * @return Cookie value. */ - Value cookie(@NonNull String name, @NonNull String defaultValue); + Value cookie(String name, String defaultValue); /** * Request cookies. @@ -279,7 +279,7 @@ private static Selector single(Jooby defaultApp) { * @param method HTTP method in upper-case form. * @return This context. */ - Context setMethod(@NonNull String method); + Context setMethod(String method); /** * Matching route. @@ -294,7 +294,7 @@ private static Selector single(Jooby defaultApp) { * @param pattern Pattern to use. * @return True if request path matches the pattern. */ - boolean matches(@NonNull String pattern); + boolean matches(String pattern); /** * Set matching route. This is part of public API, but shouldn't be use by application code. @@ -302,7 +302,7 @@ private static Selector single(Jooby defaultApp) { * @param route Matching route. * @return This context. */ - Context setRoute(@NonNull Route route); + Context setRoute(Route route); /** * Get application context path (a.k.a as base path). @@ -326,7 +326,7 @@ default String getContextPath() { * @param path Request path. * @return This context. */ - Context setRequestPath(@NonNull String path); + Context setRequestPath(String path); /** * Path variable. Value is decoded. @@ -334,7 +334,7 @@ default String getContextPath() { * @param name Path key. * @return Associated value or a missing value, but never a null reference. */ - Value path(@NonNull String name); + Value path(String name); /** * Convert the {@link #pathMap()} to the given type. @@ -343,7 +343,7 @@ default String getContextPath() { * @param Target type. * @return Instance of target type. */ - T path(@NonNull Class type); + T path(Class type); /** * Convert {@link #pathMap()} to a {@link Value} object. @@ -377,7 +377,7 @@ default String getContextPath() { * @param pathMap Path map. * @return This context. */ - Context setPathMap(@NonNull Map pathMap); + Context setPathMap(Map pathMap); /* ********************************************************************************************** * Query String API @@ -407,7 +407,7 @@ default String getContextPath() { * @param name Parameter name. * @return A query value. */ - Value query(@NonNull String name); + Value query(String name); /** * Get a query parameter that matches the given name. @@ -426,7 +426,7 @@ default String getContextPath() { * @param defaultValue Default value. * @return A query value. */ - Value query(@NonNull String name, @NonNull String defaultValue); + Value query(String name, String defaultValue); /** * Query string with the leading ? or empty string. This is the raw query string, @@ -444,7 +444,7 @@ default String getContextPath() { * @param Target type. * @return Query string converted to target type. */ - T query(@NonNull Class type); + T query(Class type); /** * Query string as simple map. @@ -477,7 +477,7 @@ default String getContextPath() { * @param name Header name. Case insensitive. * @return A header value or missing value, never a null reference. */ - Value header(@NonNull String name); + Value header(String name); /** * Get a header that matches the given name. @@ -486,7 +486,7 @@ default String getContextPath() { * @param defaultValue Default value. * @return A header value or missing value, never a null reference. */ - Value header(@NonNull String name, @NonNull String defaultValue); + Value header(String name, String defaultValue); /** * Header as single-value map. @@ -502,7 +502,7 @@ default String getContextPath() { * @param contentType Content type to match. * @return True for matching type or if content header is absent. */ - boolean accept(@NonNull MediaType contentType); + boolean accept(MediaType contentType); /** * Check if the accept type list matches the given produces list and return the most specific @@ -511,7 +511,7 @@ default String getContextPath() { * @param produceTypes Produced types. * @return The most specific produces type. */ - @Nullable MediaType accept(@NonNull List produceTypes); + @Nullable MediaType accept(List produceTypes); /** * Request Content-Type header or null when missing. @@ -659,7 +659,7 @@ default Locale locale() { * @param path Path or suffix to use, can also include query string parameters. * @return Full/entire request url using the Host header. */ - String getRequestURL(@NonNull String path); + String getRequestURL(String path); /** * The IP address of the client or last proxy that sent the request. @@ -679,7 +679,7 @@ default Locale locale() { * @param remoteAddress Remote Address. * @return This context. */ - Context setRemoteAddress(@NonNull String remoteAddress); + Context setRemoteAddress(String remoteAddress); /** * Return the host that this request was sent to, in general this will be the value of the Host @@ -703,7 +703,7 @@ default Locale locale() { * @param host Host value. * @return This context. */ - Context setHost(@NonNull String host); + Context setHost(String host); /** * Return the host and port that this request was sent to, in general this will be the value of @@ -788,7 +788,7 @@ default Locale locale() { * @param scheme HTTP scheme in lower case. * @return This context. */ - Context setScheme(@NonNull String scheme); + Context setScheme(String scheme); /* ********************************************************************************************** * Form/Multipart API @@ -815,7 +815,7 @@ default Locale locale() { * @param name Field name. * @return Multipart value. */ - Value form(@NonNull String name); + Value form(String name); /** * Get a form field that matches the given name. @@ -828,7 +828,7 @@ default Locale locale() { * @param defaultValue Default value. * @return Multipart value. */ - Value form(@NonNull String name, @NonNull String defaultValue); + Value form(String name, String defaultValue); /** * Convert form data to the given type. @@ -840,7 +840,7 @@ default Locale locale() { * @param Target type. * @return Target value. */ - T form(@NonNull Class type); + T form(Class type); /** * Form data as single-value map. @@ -867,7 +867,7 @@ default Locale locale() { * @param name Field name. Please note this is the form field name, not the actual file name. * @return All file uploads. */ - List files(@NonNull String name); + List files(String name); /** * A file upload that matches the given field name. @@ -877,7 +877,7 @@ default Locale locale() { * @param name Field name. Please note this is the form field name, not the actual file name. * @return A file upload. */ - FileUpload file(@NonNull String name); + FileUpload file(String name); /* ********************************************************************************************** * Parameter Lookup @@ -909,7 +909,7 @@ default Value lookup(String name) { * none found. * @throws IllegalArgumentException If no {@link ParamSource}s are specified. */ - Value lookup(@NonNull String name, ParamSource... sources); + Value lookup(String name, ParamSource... sources); /** * Returns a {@link ParamLookup} instance which is a fluent interface covering the functionality @@ -947,7 +947,7 @@ default Value lookup(String name) { * @param Conversion type. * @return Instance of conversion type. */ - T body(@NonNull Class type); + T body(Class type); /** * Convert the HTTP body to the given type. @@ -956,7 +956,7 @@ default Value lookup(String name) { * @param Conversion type. * @return Instance of conversion type. */ - T body(@NonNull Type type); + T body(Type type); /** * Convert the HTTP body to the given type. @@ -966,7 +966,7 @@ default Value lookup(String name) { * @param Conversion type. * @return Instance of conversion type. */ - T decode(@NonNull Type type, @NonNull MediaType contentType); + T decode(Type type, MediaType contentType); /* ********************************************************************************************** * Body MessageDecoder @@ -979,7 +979,7 @@ default Value lookup(String name) { * @param contentType Content type. * @return MessageDecoder. */ - MessageDecoder decoder(@NonNull MediaType contentType); + MessageDecoder decoder(MediaType contentType); /* ********************************************************************************************** * Dispatch methods @@ -1014,7 +1014,7 @@ default Value lookup(String name) { * @param action Application code. * @return This context. */ - Context dispatch(@NonNull Runnable action); + Context dispatch(Runnable action); /** * Dispatch context to the given executor. @@ -1037,7 +1037,7 @@ default Value lookup(String name) { * @param action Application code. * @return This context. */ - Context dispatch(@NonNull Executor executor, @NonNull Runnable action); + Context dispatch(Executor executor, Runnable action); /** * Perform a websocket handsahke and upgrade a HTTP GET into a websocket protocol. @@ -1047,7 +1047,7 @@ default Value lookup(String name) { * @param handler Web socket initializer. * @return This context. */ - Context upgrade(@NonNull WebSocket.Initializer handler); + Context upgrade(WebSocket.Initializer handler); /** * Perform a server-sent event handshake and upgrade HTTP GET into a Server-Sent protocol. @@ -1057,7 +1057,7 @@ default Value lookup(String name) { * @param handler Server-Sent event handler. * @return This context. */ - Context upgrade(@NonNull ServerSentEmitter.Handler handler); + Context upgrade(ServerSentEmitter.Handler handler); /* * ********************************************************************************************** @@ -1072,7 +1072,7 @@ default Value lookup(String name) { * @param value Header value. * @return This context. */ - Context setResponseHeader(@NonNull String name, @NonNull Date value); + Context setResponseHeader(String name, Date value); /** * Set response header. @@ -1081,7 +1081,7 @@ default Value lookup(String name) { * @param value Header value. * @return This context. */ - Context setResponseHeader(@NonNull String name, @NonNull Instant value); + Context setResponseHeader(String name, Instant value); /** * Set response header. @@ -1090,7 +1090,7 @@ default Value lookup(String name) { * @param value Header value. * @return This context. */ - Context setResponseHeader(@NonNull String name, @NonNull Object value); + Context setResponseHeader(String name, Object value); /** * Set response header. @@ -1099,7 +1099,7 @@ default Value lookup(String name) { * @param value Header value. * @return This context. */ - Context setResponseHeader(@NonNull String name, @NonNull String value); + Context setResponseHeader(String name, String value); /** * Remove a response header. @@ -1107,7 +1107,7 @@ default Value lookup(String name) { * @param name Header's name. * @return This context. */ - Context removeResponseHeader(@NonNull String name); + Context removeResponseHeader(String name); /** * Clear/reset all the headers, including cookies. @@ -1130,7 +1130,7 @@ default Value lookup(String name) { * @param name Header's name. * @return Header's value (if set previously) or null. */ - @Nullable String getResponseHeader(@NonNull String name); + @Nullable String getResponseHeader(String name); /** * Get response content length or -1 when none was set. @@ -1145,7 +1145,7 @@ default Value lookup(String name) { * @param cookie Cookie to add. * @return This context. */ - Context setResponseCookie(@NonNull Cookie cookie); + Context setResponseCookie(Cookie cookie); /** * Set response content type header. @@ -1153,7 +1153,7 @@ default Value lookup(String name) { * @param contentType Content type. * @return This context. */ - Context setResponseType(@NonNull String contentType); + Context setResponseType(String contentType); /** * Set response content type header. @@ -1161,7 +1161,7 @@ default Value lookup(String name) { * @param contentType Content type. * @return This context. */ - Context setResponseType(@NonNull MediaType contentType); + Context setResponseType(MediaType contentType); /** * Set the default response content type header. It is used if the response content type header @@ -1170,7 +1170,7 @@ default Value lookup(String name) { * @param contentType Content type. * @return This context. */ - Context setDefaultResponseType(@NonNull MediaType contentType); + Context setDefaultResponseType(MediaType contentType); /** * Get response content type. @@ -1185,7 +1185,7 @@ default Value lookup(String name) { * @param statusCode Status code. * @return This context. */ - Context setResponseCode(@NonNull StatusCode statusCode); + Context setResponseCode(StatusCode statusCode); /** * Set response status code. @@ -1208,7 +1208,7 @@ default Value lookup(String name) { * @param value Object value. * @return This context. */ - Context render(@NonNull Object value); + Context render(Object value); /** * HTTP response channel as output stream. Usually for chunked responses. @@ -1223,7 +1223,7 @@ default Value lookup(String name) { * @param contentType Media type. * @return HTTP channel as output stream. Usually for chunked responses. */ - OutputStream responseStream(@NonNull MediaType contentType); + OutputStream responseStream(MediaType contentType); /** * HTTP response channel as output stream. Usually for chunked responses. @@ -1233,8 +1233,7 @@ default Value lookup(String name) { * @return HTTP channel as output stream. Usually for chunked responses. * @throws Exception Is something goes wrong. */ - Context responseStream( - MediaType contentType, @NonNull SneakyThrows.Consumer consumer) + Context responseStream(MediaType contentType, SneakyThrows.Consumer consumer) throws Exception; /** @@ -1244,7 +1243,7 @@ Context responseStream( * @return HTTP channel as output stream. Usually for chunked responses. * @throws Exception Is something goes wrong. */ - Context responseStream(@NonNull SneakyThrows.Consumer consumer) throws Exception; + Context responseStream(SneakyThrows.Consumer consumer) throws Exception; /** * HTTP response channel as chunker. @@ -1266,7 +1265,7 @@ Context responseStream( * @param contentType Content type. * @return HTTP channel as response writer. Usually for chunked response. */ - PrintWriter responseWriter(@NonNull MediaType contentType); + PrintWriter responseWriter(MediaType contentType); /** * HTTP response channel as response writer. @@ -1275,7 +1274,7 @@ Context responseStream( * @return This context. * @throws Exception Is something goes wrong. */ - Context responseWriter(@NonNull SneakyThrows.Consumer consumer) throws Exception; + Context responseWriter(SneakyThrows.Consumer consumer) throws Exception; /** * HTTP response channel as response writer. @@ -1285,8 +1284,8 @@ Context responseStream( * @return This context. * @throws Exception Is something goes wrong. */ - Context responseWriter( - MediaType contentType, @NonNull SneakyThrows.Consumer consumer) throws Exception; + Context responseWriter(MediaType contentType, SneakyThrows.Consumer consumer) + throws Exception; /** * Send a 302 response. @@ -1294,7 +1293,7 @@ Context responseWriter( * @param location Location. * @return This context. */ - Context sendRedirect(@NonNull String location); + Context sendRedirect(String location); /** * Send a redirect response. @@ -1303,7 +1302,7 @@ Context responseWriter( * @param location Location. * @return This context. */ - Context sendRedirect(@NonNull StatusCode redirect, @NonNull String location); + Context sendRedirect(StatusCode redirect, String location); /** * Send response data. @@ -1311,7 +1310,7 @@ Context responseWriter( * @param data Response. Use UTF-8 charset. * @return This context. */ - Context send(@NonNull String data); + Context send(String data); /** * Send response data. @@ -1320,7 +1319,7 @@ Context responseWriter( * @param charset Charset. * @return This context. */ - Context send(@NonNull String data, @NonNull Charset charset); + Context send(String data, Charset charset); /** * Send response data. @@ -1328,7 +1327,7 @@ Context responseWriter( * @param data Response. * @return This context. */ - Context send(@NonNull byte[] data); + Context send(byte[] data); /** * Send response data. @@ -1336,7 +1335,7 @@ Context responseWriter( * @param data Response. * @return This context. */ - Context send(@NonNull ByteBuffer data); + Context send(ByteBuffer data); /** * Send response data. @@ -1344,7 +1343,7 @@ Context responseWriter( * @param output Output. * @return This context. */ - Context send(@NonNull Output output); + Context send(Output output); /** * Send response data. @@ -1352,7 +1351,7 @@ Context responseWriter( * @param data Response. * @return This context. */ - Context send(@NonNull byte[]... data); + Context send(byte[]... data); /** * Send response data. @@ -1360,7 +1359,7 @@ Context responseWriter( * @param data Response. * @return This context. */ - Context send(@NonNull ByteBuffer[] data); + Context send(ByteBuffer[] data); /** * Send response data. @@ -1368,7 +1367,7 @@ Context responseWriter( * @param channel Response input. * @return This context. */ - Context send(@NonNull ReadableByteChannel channel); + Context send(ReadableByteChannel channel); /** * Send response data. @@ -1376,7 +1375,7 @@ Context responseWriter( * @param input Response. * @return This context. */ - Context send(@NonNull InputStream input); + Context send(InputStream input); /** * Send a file download response. @@ -1384,7 +1383,7 @@ Context responseWriter( * @param file File download. * @return This context. */ - Context send(@NonNull FileDownload file); + Context send(FileDownload file); /** * Send a file response. @@ -1392,7 +1391,7 @@ Context responseWriter( * @param file File response. * @return This context. */ - Context send(@NonNull Path file); + Context send(Path file); /** * Send a file response. @@ -1400,7 +1399,7 @@ Context responseWriter( * @param file File response. * @return This context. */ - Context send(@NonNull FileChannel file); + Context send(FileChannel file); /** * Send an empty response with the given status code. @@ -1408,7 +1407,7 @@ Context responseWriter( * @param statusCode Status code. * @return This context. */ - Context send(@NonNull StatusCode statusCode); + Context send(StatusCode statusCode); /** * Send an error response. Status code is computed via {@link Router#errorCode(Throwable)}. @@ -1416,7 +1415,7 @@ Context responseWriter( * @param cause Error. If this is a fatal error it is going to be rethrow it. * @return This context. */ - Context sendError(@NonNull Throwable cause); + Context sendError(Throwable cause); /** * Send an error response. @@ -1425,7 +1424,7 @@ Context responseWriter( * @param statusCode Status code. * @return This context. */ - Context sendError(@NonNull Throwable cause, @NonNull StatusCode statusCode); + Context sendError(Throwable cause, StatusCode statusCode); /** * True if response already started. @@ -1459,7 +1458,7 @@ Context responseWriter( * @param task Task to execute. * @return This context. */ - Context onComplete(@NonNull Route.Complete task); + Context onComplete(Route.Complete task); /* ********************************************************************************************** * Factory methods @@ -1473,7 +1472,7 @@ Context responseWriter( * @param ctx Originating context. * @return Read only context. */ - static Context readOnly(@NonNull Context ctx) { + static Context readOnly(Context ctx) { return new ReadOnlyContext(ctx); } diff --git a/jooby/src/main/java/io/jooby/Cookie.java b/jooby/src/main/java/io/jooby/Cookie.java index 8d8f1aa558..0cd0a15f08 100644 --- a/jooby/src/main/java/io/jooby/Cookie.java +++ b/jooby/src/main/java/io/jooby/Cookie.java @@ -26,9 +26,9 @@ import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; +import org.jspecify.annotations.Nullable; + import com.typesafe.config.Config; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; /** * Response cookie implementation. Response are send it back to client using {@link @@ -84,7 +84,7 @@ public class Cookie { * @param name Cookie's name. * @param value Cookie's value or null. */ - public Cookie(@NonNull String name, @Nullable String value) { + public Cookie(String name, @Nullable String value) { this.name = name; this.value = value; } @@ -94,11 +94,11 @@ public Cookie(@NonNull String name, @Nullable String value) { * * @param name Cookie's name. */ - public Cookie(@NonNull String name) { + public Cookie(String name) { this(name, null); } - private Cookie(@NonNull Cookie cookie) { + private Cookie(Cookie cookie) { this.domain = cookie.domain; this.value = cookie.value; this.name = cookie.name; @@ -114,7 +114,7 @@ private Cookie(@NonNull Cookie cookie) { * * @return New cookie. */ - public @NonNull Cookie clone() { + public Cookie clone() { return new Cookie(this); } @@ -123,7 +123,7 @@ private Cookie(@NonNull Cookie cookie) { * * @return Cookie's name. */ - public @NonNull String getName() { + public String getName() { return name; } @@ -133,7 +133,7 @@ private Cookie(@NonNull Cookie cookie) { * @param name Cookie's name. * @return This cookie. */ - public @NonNull Cookie setName(@NonNull String name) { + public Cookie setName(String name) { this.name = name; return this; } @@ -153,7 +153,7 @@ private Cookie(@NonNull Cookie cookie) { * @param value Cookie's value. * @return This cookie. */ - public @NonNull Cookie setValue(@NonNull String value) { + public Cookie setValue(String value) { this.value = value; return this; } @@ -173,7 +173,7 @@ private Cookie(@NonNull Cookie cookie) { * @param domain Defaults cookie's domain. * @return Cookie's domain.. */ - public @NonNull String getDomain(@NonNull String domain) { + public String getDomain(String domain) { return this.domain == null ? domain : this.domain; } @@ -183,7 +183,7 @@ private Cookie(@NonNull Cookie cookie) { * @param domain Cookie's domain. * @return This cookie. */ - public @NonNull Cookie setDomain(@NonNull String domain) { + public Cookie setDomain(String domain) { this.domain = domain; return this; } @@ -203,7 +203,7 @@ private Cookie(@NonNull Cookie cookie) { * @param path Defaults path. * @return Cookie's path. */ - public @NonNull String getPath(@NonNull String path) { + public String getPath(String path) { return this.path == null ? path : this.path; } @@ -213,7 +213,7 @@ private Cookie(@NonNull Cookie cookie) { * @param path Cookie's path. * @return This cookie. */ - public @NonNull Cookie setPath(@NonNull String path) { + public Cookie setPath(String path) { this.path = path; return this; } @@ -255,7 +255,7 @@ public boolean isSecure() { * @throws IllegalArgumentException if {@code false} is specified and the 'SameSite' attribute * value requires a secure cookie. */ - public @NonNull Cookie setSecure(boolean secure) { + public Cookie setSecure(boolean secure) { if (sameSite != null && sameSite.requiresSecure() && !secure) { throw new IllegalArgumentException( "Cookies with SameSite=" @@ -292,7 +292,7 @@ public long getMaxAge() { * @param maxAge Cookie max age. * @return This options. */ - public @NonNull Cookie setMaxAge(@NonNull Duration maxAge) { + public Cookie setMaxAge(Duration maxAge) { return setMaxAge(maxAge.getSeconds()); } @@ -307,7 +307,7 @@ public long getMaxAge() { * @param maxAge Cookie max age, in seconds. * @return This options. */ - public @NonNull Cookie setMaxAge(long maxAge) { + public Cookie setMaxAge(long maxAge) { if (maxAge >= 0) { this.maxAge = maxAge; } else { @@ -389,7 +389,7 @@ public String toString() { * * @return Cookie string. */ - public @NonNull String toCookieString() { + public String toCookieString() { StringBuilder sb = new StringBuilder(); // name = value @@ -456,7 +456,7 @@ public String toString() { * @param secret A secret key. * @return A signed value. */ - public static @NonNull String sign(final @NonNull String value, final @NonNull String secret) { + public static String sign(final String value, final String secret) { try { Mac mac = Mac.getInstance(HMAC_SHA256); mac.init(new SecretKeySpec(secret.getBytes(), HMAC_SHA256)); @@ -475,7 +475,7 @@ public String toString() { * @param secret A secret key. * @return A new signed value or null. */ - public static @Nullable String unsign(final @NonNull String value, final @NonNull String secret) { + public static @Nullable String unsign(final String value, final String secret) { int sep = value.indexOf("|"); if (sep <= 0) { return null; @@ -491,7 +491,7 @@ public String toString() { * @param attributes Map to encode. * @return URL encoded from map attributes. */ - public static @NonNull String encode(@Nullable Map attributes) { + public static String encode(@Nullable Map attributes) { if (attributes == null || attributes.size() == 0) { return ""; } @@ -522,7 +522,7 @@ public String toString() { * @param value URL encoded value. * @return Decoded as map. */ - public static @NonNull Map decode(@Nullable String value) { + public static Map decode(@Nullable String value) { if (value == null || value.length() == 0) { return Collections.emptyMap(); } @@ -565,7 +565,7 @@ public String toString() { * @param conf Configuration object. * @return Parsed cookie or empty. */ - public static @NonNull Optional create(@NonNull String namespace, @NonNull Config conf) { + public static Optional create(String namespace, Config conf) { if (conf.hasPath(namespace)) { Cookie cookie = new Cookie(conf.getString(namespace + ".name")); value(conf, namespace + ".value", Config::getString, cookie::setValue); @@ -595,7 +595,7 @@ public String toString() { * @param sid Session ID. * @return Session's cookie. */ - public static Cookie session(@NonNull String sid) { + public static Cookie session(String sid) { return new Cookie(sid).setMaxAge(-1).setHttpOnly(true).setPath("/"); } diff --git a/jooby/src/main/java/io/jooby/DefaultContext.java b/jooby/src/main/java/io/jooby/DefaultContext.java index eec97ffd45..7fd465d200 100644 --- a/jooby/src/main/java/io/jooby/DefaultContext.java +++ b/jooby/src/main/java/io/jooby/DefaultContext.java @@ -21,10 +21,9 @@ import java.time.Instant; import java.util.*; +import org.jspecify.annotations.Nullable; import org.slf4j.Logger; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; import io.jooby.exception.RegistryException; import io.jooby.internal.*; import io.jooby.output.OutputFactory; @@ -40,27 +39,27 @@ public interface DefaultContext extends Context { @Override - default T require(@NonNull Class type, @NonNull String name) throws RegistryException { + default T require(Class type, String name) throws RegistryException { return getRouter().require(type, name); } @Override - default T require(@NonNull Class type) throws RegistryException { + default T require(Class type) throws RegistryException { return getRouter().require(type); } @Override - default T require(@NonNull Reified type) throws RegistryException { + default T require(Reified type) throws RegistryException { return getRouter().require(type); } @Override - default T require(@NonNull Reified type, @NonNull String name) throws RegistryException { + default T require(Reified type, String name) throws RegistryException { return getRouter().require(type, name); } @Override - default T require(@NonNull ServiceKey key) throws RegistryException { + default T require(ServiceKey key) throws RegistryException { return getRouter().require(key); } @@ -77,7 +76,7 @@ default Context setUser(@Nullable Object user) { } @Override - default boolean matches(@NonNull String pattern) { + default boolean matches(String pattern) { return getRouter().match(pattern, getRequestPath()); } @@ -90,7 +89,7 @@ default boolean matches(@NonNull String pattern) { * @return Attribute value. */ @Override - @Nullable default T getAttribute(@NonNull String key) { + @Nullable default T getAttribute(String key) { T attribute = (T) getAttributes().get(key); if (attribute == null) { Map globals = getRouter().getAttributes(); @@ -100,7 +99,7 @@ default boolean matches(@NonNull String pattern) { } @Override - default Context setAttribute(@NonNull String key, Object value) { + default Context setAttribute(String key, Object value) { getAttributes().put(key, value); return this; } @@ -126,18 +125,18 @@ default FlashMap flashOrNull() { * @return Flash attribute. */ @Override - default Value flash(@NonNull String name) { + default Value flash(String name) { return Value.create(getValueFactory(), name, flash().get(name)); } @Override - default Value flash(@NonNull String name, @NonNull String defaultValue) { + default Value flash(String name, String defaultValue) { var value = flash(name); return value.isMissing() ? Value.value(getValueFactory(), name, defaultValue) : value; } @Override - default Value session(@NonNull String name) { + default Value session(String name) { Session session = sessionOrNull(); if (session != null) { return session.get(name); @@ -146,7 +145,7 @@ default Value session(@NonNull String name) { } @Override - default Value session(@NonNull String name, @NonNull String defaultValue) { + default Value session(String name, String defaultValue) { var value = session(name); return value.isMissing() ? Value.value(getValueFactory(), name, defaultValue) : value; } @@ -177,7 +176,7 @@ default Session session() { } @Override - default Object forward(@NonNull String path) { + default Object forward(String path) { try { setRequestPath(path); Router.Match match = getRouter().match(this); @@ -188,13 +187,13 @@ default Object forward(@NonNull String path) { } @Override - default Value cookie(@NonNull String name) { + default Value cookie(String name) { var value = cookieMap().get(name); return Value.create(getValueFactory(), name, value); } @Override - default Value cookie(@NonNull String name, @NonNull String defaultValue) { + default Value cookie(String name, String defaultValue) { var value = cookie(name); return value.isMissing() ? Value.value(getValueFactory(), name, defaultValue) : value; } @@ -230,7 +229,7 @@ default ParamLookup lookup() { * none found. * @throws IllegalArgumentException If no {@link ParamSource}s are specified. */ - default Value lookup(@NonNull String name, ParamSource... sources) { + default Value lookup(String name, ParamSource... sources) { if (sources.length == 0) { throw new IllegalArgumentException("No parameter sources were specified."); } @@ -243,7 +242,7 @@ default Value lookup(@NonNull String name, ParamSource... sources) { } @Override - default Value path(@NonNull String name) { + default Value path(String name) { String value = pathMap().get(name); return value == null ? new MissingValue(getValueFactory(), name) @@ -251,7 +250,7 @@ default Value path(@NonNull String name) { } @Override - default T path(@NonNull Class type) { + default T path(Class type) { return path().to(type); } @@ -265,12 +264,12 @@ default Value path() { } @Override - default Value query(@NonNull String name) { + default Value query(String name) { return query().get(name); } @Override - default Value query(@NonNull String name, @NonNull String defaultValue) { + default Value query(String name, String defaultValue) { return query().getOrDefault(name, defaultValue); } @@ -280,7 +279,7 @@ default String queryString() { } @Override - default T query(@NonNull Class type) { + default T query(Class type) { return query().toEmpty(type); } @@ -290,12 +289,12 @@ default Map queryMap() { } @Override - default Value header(@NonNull String name) { + default Value header(String name) { return header().get(name); } @Override - default Value header(@NonNull String name, @NonNull String defaultValue) { + default Value header(String name, String defaultValue) { return header().getOrDefault(name, defaultValue); } @@ -305,12 +304,12 @@ default Map headerMap() { } @Override - default boolean accept(@NonNull MediaType contentType) { + default boolean accept(MediaType contentType) { return Objects.equals(accept(singletonList(contentType)), contentType); } @Override - default @Nullable MediaType accept(@NonNull List produceTypes) { + default @Nullable MediaType accept(List produceTypes) { var accept = header(ACCEPT); if (accept.isMissing()) { // NO header? Pick first, which is the default. @@ -349,7 +348,7 @@ default String getRequestURL() { } @Override - default String getRequestURL(@NonNull String path) { + default String getRequestURL(String path) { var scheme = getScheme(); var host = getHost(); int port = getPort(); @@ -448,17 +447,17 @@ default boolean isSecure() { } @Override - default Value form(@NonNull String name) { + default Value form(String name) { return form().get(name); } @Override - default Value form(@NonNull String name, @NonNull String defaultValue) { + default Value form(String name, String defaultValue) { return form().getOrDefault(name, defaultValue); } @Override - default T form(@NonNull Class type) { + default T form(Class type) { return form().to(type); } @@ -473,22 +472,22 @@ default List files() { } @Override - default List files(@NonNull String name) { + default List files(String name) { return form().files(name); } @Override - default FileUpload file(@NonNull String name) { + default FileUpload file(String name) { return form().file(name); } @Override - default T body(@NonNull Class type) { + default T body(Class type) { return body().to(type); } @Override - default T body(@NonNull Type type) { + default T body(Type type) { return body().to(type); } @@ -497,7 +496,7 @@ default ValueFactory getValueFactory() { } @Override - default T decode(@NonNull Type type, @NonNull MediaType contentType) { + default T decode(Type type, MediaType contentType) { try { if (MediaType.text.equals(contentType)) { return getValueFactory().convert(type, body()); @@ -510,22 +509,22 @@ default T decode(@NonNull Type type, @NonNull MediaType contentType) { } @Override - default MessageDecoder decoder(@NonNull MediaType contentType) { + default MessageDecoder decoder(MediaType contentType) { return getRoute().decoder(contentType); } @Override - default Context setResponseHeader(@NonNull String name, @NonNull Date value) { + default Context setResponseHeader(String name, Date value) { return setResponseHeader(name, RFC1123.format(Instant.ofEpochMilli(value.getTime()))); } @Override - default Context setResponseHeader(@NonNull String name, @NonNull Instant value) { + default Context setResponseHeader(String name, Instant value) { return setResponseHeader(name, RFC1123.format(value)); } @Override - default Context setResponseHeader(@NonNull String name, @NonNull Object value) { + default Context setResponseHeader(String name, Object value) { if (value instanceof Date) { return setResponseHeader(name, (Date) value); } @@ -536,12 +535,12 @@ default Context setResponseHeader(@NonNull String name, @NonNull Object value) { } @Override - default Context setResponseCode(@NonNull StatusCode statusCode) { + default Context setResponseCode(StatusCode statusCode) { return setResponseCode(statusCode.value()); } @Override - default Context render(@NonNull Object value) { + default Context render(Object value) { try { var route = getRoute(); var encoder = route.getEncoder(); @@ -560,22 +559,20 @@ default Context render(@NonNull Object value) { } @Override - default OutputStream responseStream(@NonNull MediaType contentType) { + default OutputStream responseStream(MediaType contentType) { setResponseType(contentType); return responseStream(); } @Override default Context responseStream( - @NonNull MediaType contentType, @NonNull SneakyThrows.Consumer consumer) - throws Exception { + MediaType contentType, SneakyThrows.Consumer consumer) throws Exception { setResponseType(contentType); return responseStream(consumer); } @Override - default Context responseStream(@NonNull SneakyThrows.Consumer consumer) - throws Exception { + default Context responseStream(SneakyThrows.Consumer consumer) throws Exception { try (OutputStream out = responseStream()) { consumer.accept(out); } @@ -588,14 +585,12 @@ default PrintWriter responseWriter() { } @Override - default Context responseWriter(@NonNull SneakyThrows.Consumer consumer) - throws Exception { + default Context responseWriter(SneakyThrows.Consumer consumer) throws Exception { return responseWriter(MediaType.text, consumer); } @Override - default Context responseWriter( - @NonNull MediaType contentType, @NonNull SneakyThrows.Consumer consumer) + default Context responseWriter(MediaType contentType, SneakyThrows.Consumer consumer) throws Exception { try (PrintWriter writer = responseWriter(contentType)) { consumer.accept(writer); @@ -604,18 +599,18 @@ default Context responseWriter( } @Override - default Context sendRedirect(@NonNull String location) { + default Context sendRedirect(String location) { return sendRedirect(StatusCode.FOUND, location); } @Override - default Context sendRedirect(@NonNull StatusCode redirect, @NonNull String location) { + default Context sendRedirect(StatusCode redirect, String location) { setResponseHeader("location", location); return send(redirect); } @Override - default Context send(@NonNull byte[]... data) { + default Context send(byte[]... data) { ByteBuffer[] buffer = new ByteBuffer[data.length]; for (int i = 0; i < data.length; i++) { buffer[i] = ByteBuffer.wrap(data[i]); @@ -624,12 +619,12 @@ default Context send(@NonNull byte[]... data) { } @Override - default Context send(@NonNull String data) { + default Context send(String data) { return send(data, StandardCharsets.UTF_8); } @Override - default Context send(@NonNull FileDownload file) { + default Context send(FileDownload file) { setResponseHeader("Content-Disposition", file.getContentDisposition()); InputStream content = file.stream(); long length = file.getFileSize(); @@ -646,7 +641,7 @@ default Context send(@NonNull FileDownload file) { } @Override - default Context send(@NonNull Path file) { + default Context send(Path file) { try { setDefaultResponseType(MediaType.byFile(file)); return send(FileChannel.open(file)); @@ -656,7 +651,7 @@ default Context send(@NonNull Path file) { } @Override - default Context sendError(@NonNull Throwable cause) { + default Context sendError(Throwable cause) { sendError(cause, getRouter().errorCode(cause)); return this; } @@ -669,7 +664,7 @@ default Context sendError(@NonNull Throwable cause) { * @return This context. */ @Override - default Context sendError(@NonNull Throwable cause, @NonNull StatusCode code) { + default Context sendError(Throwable cause, StatusCode code) { Router router = getRouter(); Logger log = router.getLog(); if (isResponseStarted()) { diff --git a/jooby/src/main/java/io/jooby/DefaultErrorHandler.java b/jooby/src/main/java/io/jooby/DefaultErrorHandler.java index a807f116ef..b971afd899 100644 --- a/jooby/src/main/java/io/jooby/DefaultErrorHandler.java +++ b/jooby/src/main/java/io/jooby/DefaultErrorHandler.java @@ -13,8 +13,6 @@ import org.slf4j.Logger; -import edu.umd.cs.findbugs.annotations.NonNull; - /** * Default error handler with content negotiation support and optionally mute log statement base on * status code or exception types. @@ -37,7 +35,7 @@ public DefaultErrorHandler() {} * @param statusCodes Status codes to mute. * @return This error handler. */ - public DefaultErrorHandler mute(@NonNull StatusCode... statusCodes) { + public DefaultErrorHandler mute(StatusCode... statusCodes) { muteCodes.addAll(List.of(statusCodes)); return this; } @@ -48,7 +46,7 @@ public DefaultErrorHandler mute(@NonNull StatusCode... statusCodes) { * @param exceptionTypes Exception types to mute. * @return This error handler. */ - public DefaultErrorHandler mute(@NonNull Class... exceptionTypes) { + public DefaultErrorHandler mute(Class... exceptionTypes) { muteTypes.addAll(List.of(exceptionTypes)); return this; } @@ -63,7 +61,7 @@ protected void log(Context ctx, Throwable cause, StatusCode code) { } @Override - public void apply(@NonNull Context ctx, @NonNull Throwable cause, @NonNull StatusCode code) { + public void apply(Context ctx, Throwable cause, StatusCode code) { log(ctx, cause, code); MediaType type = ctx.accept(Arrays.asList(html, json, text)); if (json.equals(type)) { diff --git a/jooby/src/main/java/io/jooby/Environment.java b/jooby/src/main/java/io/jooby/Environment.java index e27402976f..51d2e7684b 100644 --- a/jooby/src/main/java/io/jooby/Environment.java +++ b/jooby/src/main/java/io/jooby/Environment.java @@ -16,12 +16,12 @@ import java.util.stream.Collectors; import java.util.stream.Stream; +import org.jspecify.annotations.Nullable; + import com.typesafe.config.Config; import com.typesafe.config.ConfigException; import com.typesafe.config.ConfigFactory; import com.typesafe.config.ConfigParseOptions; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; /** * Application environment contains configuration object and active environment names. @@ -51,8 +51,7 @@ public class Environment { * @param config Application configuration. * @param actives Active environment names. */ - public Environment( - @NonNull ClassLoader classLoader, @NonNull Config config, @NonNull String... actives) { + public Environment(ClassLoader classLoader, Config config, String... actives) { this(classLoader, config, List.of(actives)); } @@ -63,8 +62,7 @@ public Environment( * @param config Application configuration. * @param actives Active environment names. */ - public Environment( - @NonNull ClassLoader classLoader, @NonNull Config config, @NonNull List actives) { + public Environment(ClassLoader classLoader, Config config, List actives) { this.classLoader = classLoader; this.actives = actives.stream().map(String::trim).map(String::toLowerCase).collect(Collectors.toList()); @@ -78,7 +76,7 @@ public Environment( * @param defaults Default value. * @return Property or default value. */ - public @NonNull String getProperty(@NonNull String key, @NonNull String defaults) { + public String getProperty(String key, String defaults) { if (hasPath(config, key)) { return config.getString(key); } @@ -91,7 +89,7 @@ public Environment( * @param key Property key. * @return Property value or null when missing. */ - public @Nullable String getProperty(@NonNull String key) { + public @Nullable String getProperty(String key) { if (hasPath(config, key)) { return config.getString(key); } @@ -112,7 +110,7 @@ public Environment( * @param key Key. * @return Properties under that key or empty map. */ - public @NonNull Map getProperties(@NonNull String key) { + public Map getProperties(String key) { return getProperties(key, key); } @@ -131,7 +129,7 @@ public Environment( * @param prefix Prefix to use or null for none. * @return Properties under that key or empty map. */ - public @NonNull Map getProperties(@NonNull String key, @Nullable String prefix) { + public Map getProperties(String key, @Nullable String prefix) { if (hasPath(config, key)) { Map settings = new HashMap<>(); String p = prefix == null || prefix.isEmpty() ? "" : prefix + "."; @@ -157,7 +155,7 @@ public Environment( * * @return Application configuration. */ - public @NonNull Config getConfig() { + public Config getConfig() { return config; } @@ -168,7 +166,7 @@ public Environment( * @param config Configuration properties. * @return This environment. */ - public Environment setConfig(@NonNull Config config) { + public Environment setConfig(Config config) { this.config = config; return this; } @@ -178,7 +176,7 @@ public Environment setConfig(@NonNull Config config) { * * @return Active environment names. */ - public @NonNull List getActiveNames() { + public List getActiveNames() { return Collections.unmodifiableList(actives); } @@ -189,7 +187,7 @@ public Environment setConfig(@NonNull Config config) { * @param names Optional environment names. * @return True if any of the given names is active. */ - public boolean isActive(@NonNull String name, String... names) { + public boolean isActive(String name, String... names) { return this.actives.contains(name.toLowerCase()) || Stream.of(names).map(String::toLowerCase).anyMatch(this.actives::contains); } @@ -199,7 +197,7 @@ public boolean isActive(@NonNull String name, String... names) { * * @return Application class loader. */ - public @NonNull ClassLoader getClassLoader() { + public ClassLoader getClassLoader() { return classLoader; } @@ -209,7 +207,7 @@ public boolean isActive(@NonNull String name, String... names) { * @param className Class name. * @return Load a class or get an empty value. */ - public @NonNull Optional loadClass(@NonNull String className) { + public Optional loadClass(String className) { try { return Optional.of(classLoader.loadClass(className)); } catch (ClassNotFoundException x) { @@ -245,7 +243,7 @@ private static boolean hasPath(Config config, String key) { * * @return Configuration object. */ - public static @NonNull Config systemProperties() { + public static Config systemProperties() { return ConfigFactory.parseProperties( System.getProperties(), ConfigParseOptions.defaults().setOriginDescription("system properties")); @@ -256,7 +254,7 @@ private static boolean hasPath(Config config, String key) { * * @return Configuration object. */ - public static @NonNull Config systemEnv() { + public static Config systemEnv() { return ConfigFactory.systemEnvironment(); } @@ -286,7 +284,7 @@ private static boolean hasPath(Config config, String key) { * @param options Options like basedir, filename, etc. * @return A new environment. */ - public static @NonNull Environment loadEnvironment(@NonNull EnvironmentOptions options) { + public static Environment loadEnvironment(EnvironmentOptions options) { Config sys = systemProperties().withFallback(systemEnv()); List actives = options.getActiveNames(); @@ -328,8 +326,7 @@ private static boolean hasPath(Config config, String key) { return new Environment(options.getClassLoader(), result, actives); } - private static Config resolveConfig( - @NonNull EnvironmentOptions options, Path userdir, String... names) { + private static Config resolveConfig(EnvironmentOptions options, Path userdir, String... names) { Config application = ConfigFactory.empty(); String basedir = options.getBasedir(); @@ -363,7 +360,7 @@ private static Config resolveConfig( * * @return A configuration object. */ - public static @NonNull Config defaults() { + public static Config defaults() { Path tmpdir = Paths.get(System.getProperty("user.dir"), "tmp"); Map defaultMap = new HashMap<>(); defaultMap.put(AvailableSettings.TMP_DIR, tmpdir.toString()); diff --git a/jooby/src/main/java/io/jooby/EnvironmentOptions.java b/jooby/src/main/java/io/jooby/EnvironmentOptions.java index 6d16662306..794e84de25 100644 --- a/jooby/src/main/java/io/jooby/EnvironmentOptions.java +++ b/jooby/src/main/java/io/jooby/EnvironmentOptions.java @@ -9,8 +9,7 @@ import java.util.Arrays; import java.util.List; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; /** * Available environment options. @@ -50,7 +49,7 @@ public List getActiveNames() { * @param activeNames Active environment names. * @return This options. */ - public @NonNull EnvironmentOptions setActiveNames(@NonNull String... activeNames) { + public EnvironmentOptions setActiveNames(String... activeNames) { this.activeNames = activeNames; return this; } @@ -61,12 +60,12 @@ public List getActiveNames() { * @param activeNames Active environment names. * @return This options. */ - public @NonNull EnvironmentOptions setActiveNames(@NonNull List activeNames) { + public EnvironmentOptions setActiveNames(List activeNames) { this.activeNames = activeNames.toArray(new String[0]); return this; } - static @NonNull List defaultEnvironmentNames() { + static List defaultEnvironmentNames() { return Arrays.asList( System.getProperty( AvailableSettings.ENV, System.getenv().getOrDefault(AvailableSettings.ENV, "dev")) @@ -78,7 +77,7 @@ public List getActiveNames() { * * @return Class loader. */ - public @NonNull ClassLoader getClassLoader() { + public ClassLoader getClassLoader() { return classLoader == null ? getClass().getClassLoader() : classLoader; } @@ -88,7 +87,7 @@ public List getActiveNames() { * @param defaultClassLoader Default classloader is none was set. * @return Class loader. */ - public @NonNull ClassLoader getClassLoader(@NonNull ClassLoader defaultClassLoader) { + public ClassLoader getClassLoader(ClassLoader defaultClassLoader) { return classLoader == null ? defaultClassLoader : classLoader; } @@ -98,7 +97,7 @@ public List getActiveNames() { * @param classLoader Class loader. * @return This options. */ - public @NonNull EnvironmentOptions setClassLoader(@NonNull ClassLoader classLoader) { + public EnvironmentOptions setClassLoader(ClassLoader classLoader) { this.classLoader = classLoader; return this; } @@ -117,7 +116,7 @@ public List getActiveNames() { * * @return Configuration file name. */ - public @NonNull String getFilename() { + public String getFilename() { return filename; } @@ -127,7 +126,7 @@ public List getActiveNames() { * @param basedir Base dir. Classpath folder or file system directory. * @return This options. */ - public @NonNull EnvironmentOptions setBasedir(@Nullable String basedir) { + public EnvironmentOptions setBasedir(@Nullable String basedir) { this.basedir = basedir; return this; } @@ -138,7 +137,7 @@ public List getActiveNames() { * @param basedir Base dir. * @return This options. */ - public @NonNull EnvironmentOptions setBasedir(@Nullable Path basedir) { + public EnvironmentOptions setBasedir(@Nullable Path basedir) { this.basedir = basedir.toAbsolutePath().toString(); return this; } @@ -150,7 +149,7 @@ public List getActiveNames() { * .conf and .json. * @return This environment. */ - public @NonNull EnvironmentOptions setFilename(@NonNull String filename) { + public EnvironmentOptions setFilename(String filename) { this.filename = filename; return this; } diff --git a/jooby/src/main/java/io/jooby/ErrorHandler.java b/jooby/src/main/java/io/jooby/ErrorHandler.java index 2b4f2626e5..275e0cffac 100644 --- a/jooby/src/main/java/io/jooby/ErrorHandler.java +++ b/jooby/src/main/java/io/jooby/ErrorHandler.java @@ -5,8 +5,6 @@ */ package io.jooby; -import edu.umd.cs.findbugs.annotations.NonNull; - /** * Catch and encode application errors. * @@ -22,7 +20,7 @@ public interface ErrorHandler { * @param cause Application error. * @param code Status code. */ - void apply(@NonNull Context ctx, @NonNull Throwable cause, @NonNull StatusCode code); + void apply(Context ctx, Throwable cause, StatusCode code); /** * Chain this error handler with next and produces a new error handler. @@ -30,7 +28,7 @@ public interface ErrorHandler { * @param next Next error handler. * @return A new error handler. */ - @NonNull default ErrorHandler then(@NonNull ErrorHandler next) { + default ErrorHandler then(ErrorHandler next) { return (ctx, cause, statusCode) -> { apply(ctx, cause, statusCode); if (!ctx.isResponseStarted()) { @@ -48,7 +46,7 @@ public interface ErrorHandler { * @param statusCode Status code. * @return Single line message. */ - static @NonNull String errorMessage(@NonNull Context ctx, @NonNull StatusCode statusCode) { + static String errorMessage(Context ctx, StatusCode statusCode) { return ctx.getMethod() + " " + ctx.getRequestPath() @@ -63,7 +61,7 @@ public interface ErrorHandler { * * @return Default error handler. */ - static @NonNull DefaultErrorHandler create() { + static DefaultErrorHandler create() { return new DefaultErrorHandler(); } } diff --git a/jooby/src/main/java/io/jooby/Extension.java b/jooby/src/main/java/io/jooby/Extension.java index 91ba62a4a2..7c304304f9 100644 --- a/jooby/src/main/java/io/jooby/Extension.java +++ b/jooby/src/main/java/io/jooby/Extension.java @@ -5,8 +5,6 @@ */ package io.jooby; -import edu.umd.cs.findbugs.annotations.NonNull; - /** * Simple extension contract for adding and reusing commons application infrastructure components * and/or integrate with external libraries. @@ -35,5 +33,5 @@ default boolean lateinit() { * @param application Jooby application. * @throws Exception If something goes wrong. */ - void install(@NonNull Jooby application) throws Exception; + void install(Jooby application) throws Exception; } diff --git a/jooby/src/main/java/io/jooby/FileDownload.java b/jooby/src/main/java/io/jooby/FileDownload.java index bdd3c23f2f..9666764468 100644 --- a/jooby/src/main/java/io/jooby/FileDownload.java +++ b/jooby/src/main/java/io/jooby/FileDownload.java @@ -15,8 +15,7 @@ import java.nio.file.Path; import java.nio.file.Paths; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; /** * Represents a file download. @@ -73,8 +72,7 @@ public enum Mode { * @param fileName Filename. * @param fileSize File size or -1 if unknown. */ - public FileDownload( - Mode mode, @NonNull InputStream content, @NonNull String fileName, long fileSize) { + public FileDownload(Mode mode, InputStream content, String fileName, long fileSize) { try { this.fileName = Paths.get(fileName).getFileName().toString(); this.contentType = MediaType.byFile(this.fileName); @@ -100,7 +98,7 @@ public FileDownload( * @param content File content. * @param fileName Filename. */ - public FileDownload(Mode mode, @NonNull InputStream content, @NonNull String fileName) { + public FileDownload(Mode mode, InputStream content, String fileName) { this(mode, content, fileName, -1); } @@ -111,7 +109,7 @@ public FileDownload(Mode mode, @NonNull InputStream content, @NonNull String fil * @param content File content. * @param fileName Filename. */ - public FileDownload(Mode mode, @NonNull byte[] content, @NonNull String fileName) { + public FileDownload(Mode mode, byte[] content, String fileName) { this(mode, new ByteArrayInputStream(content), fileName, content.length); } @@ -123,7 +121,7 @@ public FileDownload(Mode mode, @NonNull byte[] content, @NonNull String fileName * @param fileName Filename. * @throws IOException For IO exception while reading file. */ - public FileDownload(Mode mode, @NonNull Path file, @NonNull String fileName) throws IOException { + public FileDownload(Mode mode, Path file, String fileName) throws IOException { this(mode, new FileInputStream(file.toFile()), fileName, Files.size(file)); this.file = file; } @@ -135,7 +133,7 @@ public FileDownload(Mode mode, @NonNull Path file, @NonNull String fileName) thr * @param file File content. * @throws IOException For IO exception while reading file. */ - public FileDownload(Mode mode, @NonNull Path file) throws IOException { + public FileDownload(Mode mode, Path file) throws IOException { this(mode, file, file.getFileName().toString()); this.file = file; } @@ -262,8 +260,7 @@ public interface BuilderExt extends Builder { * @param fileSize File size or -1 if unknown. * @return a {@link Builder} with the specified content */ - public static Builder build( - @NonNull InputStream content, @NonNull String fileName, long fileSize) { + public static Builder build(InputStream content, String fileName, long fileSize) { return mode -> new FileDownload(mode, content, fileName, fileSize); } @@ -275,7 +272,7 @@ public static Builder build( * @param fileName Filename. * @return a {@link Builder} with the specified content */ - public static Builder build(@NonNull InputStream content, @NonNull String fileName) { + public static Builder build(InputStream content, String fileName) { return mode -> new FileDownload(mode, content, fileName); } @@ -287,7 +284,7 @@ public static Builder build(@NonNull InputStream content, @NonNull String fileNa * @param fileName Filename. * @return a {@link Builder} with the specified content */ - public static Builder build(@NonNull byte[] content, @NonNull String fileName) { + public static Builder build(byte[] content, String fileName) { return mode -> new FileDownload(mode, content, fileName); } @@ -299,7 +296,7 @@ public static Builder build(@NonNull byte[] content, @NonNull String fileName) { * @param fileName Filename. * @return a {@link Builder} with the specified content */ - public static BuilderExt build(@NonNull Path file, @NonNull String fileName) { + public static BuilderExt build(Path file, String fileName) { return new BuilderExt() { private boolean deleteOnComplete; @@ -329,7 +326,7 @@ public Builder deleteOnComplete() { * @param file File content. * @return a {@link Builder} with the specified content */ - public static BuilderExt build(@NonNull Path file) { + public static BuilderExt build(Path file) { return build(file, file.getFileName().toString()); } } diff --git a/jooby/src/main/java/io/jooby/FileUpload.java b/jooby/src/main/java/io/jooby/FileUpload.java index 576fc18b7c..34d3382df2 100644 --- a/jooby/src/main/java/io/jooby/FileUpload.java +++ b/jooby/src/main/java/io/jooby/FileUpload.java @@ -8,8 +8,7 @@ import java.io.InputStream; import java.nio.file.Path; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; /** * File upload class, file upload are available when request body is encoded as {@link @@ -37,14 +36,14 @@ public interface FileUpload extends java.io.Closeable { * * @return File key. That's the field form name, not the file name. */ - @NonNull String getName(); + String getName(); /** * Name of file upload. * * @return Name of file upload. */ - @NonNull String getFileName(); + String getFileName(); /** * Content type of file upload. @@ -58,21 +57,21 @@ public interface FileUpload extends java.io.Closeable { * * @return Content as input stream. */ - @NonNull InputStream stream(); + InputStream stream(); /** * Content as byte array. * * @return Content as byte array. */ - @NonNull byte[] bytes(); + byte[] bytes(); /** * File system path to access file content. * * @return File system path to access file content. */ - @NonNull Path path(); + Path path(); /** * File size or -1 when unknown. diff --git a/jooby/src/main/java/io/jooby/FlashMap.java b/jooby/src/main/java/io/jooby/FlashMap.java index 8293c1b2a2..fc94a29c37 100644 --- a/jooby/src/main/java/io/jooby/FlashMap.java +++ b/jooby/src/main/java/io/jooby/FlashMap.java @@ -7,7 +7,6 @@ import java.util.Map; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.internal.FlashMapImpl; /** @@ -28,7 +27,7 @@ public interface FlashMap extends Map { * @param template Cookie template. * @return A new flash map. */ - static @NonNull FlashMap create(@NonNull Context ctx, @NonNull Cookie template) { + static FlashMap create(Context ctx, Cookie template) { return new FlashMapImpl(ctx, template); } @@ -37,5 +36,5 @@ public interface FlashMap extends Map { * * @return This flash map. */ - @NonNull FlashMap keep(); + FlashMap keep(); } diff --git a/jooby/src/main/java/io/jooby/Formdata.java b/jooby/src/main/java/io/jooby/Formdata.java index c2bed23c49..433ae917c7 100644 --- a/jooby/src/main/java/io/jooby/Formdata.java +++ b/jooby/src/main/java/io/jooby/Formdata.java @@ -8,7 +8,6 @@ import java.util.Collection; import java.util.List; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.internal.MultipartNode; import io.jooby.value.Value; import io.jooby.value.ValueFactory; @@ -30,8 +29,7 @@ public interface Formdata extends Value { * @param path Form name/path. * @param value Form value. */ - @NonNull - void put(@NonNull String path, @NonNull Value value); + void put(String path, Value value); /** * Add a form field. @@ -39,8 +37,7 @@ public interface Formdata extends Value { * @param path Form name/path. * @param value Form value. */ - @NonNull - void put(@NonNull String path, @NonNull String value); + void put(String path, String value); /** * Add a form field. @@ -48,8 +45,7 @@ public interface Formdata extends Value { * @param path Form name/path. * @param values Form values. */ - @NonNull - void put(@NonNull String path, @NonNull Collection values); + void put(String path, Collection values); /** * Put/Add a file into this multipart request. @@ -57,14 +53,14 @@ public interface Formdata extends Value { * @param name HTTP name. * @param file File upload. */ - void put(@NonNull String name, @NonNull FileUpload file); + void put(String name, FileUpload file); /** * All file uploads. Only for multipart/form-data request. * * @return All file uploads. */ - @NonNull List files(); + List files(); /** * All file uploads that matches the given field name. @@ -74,7 +70,7 @@ public interface Formdata extends Value { * @param name Field name. Please note this is the form field name, not the actual file name. * @return All file uploads. */ - @NonNull List files(@NonNull String name); + List files(String name); /** * A file upload that matches the given field name. @@ -84,7 +80,7 @@ public interface Formdata extends Value { * @param name Field name. Please note this is the form field name, not the actual file name. * @return A file upload. */ - @NonNull FileUpload file(@NonNull String name); + FileUpload file(String name); /** * Creates a new multipart object. @@ -92,7 +88,7 @@ public interface Formdata extends Value { * @param valueFactory Current context. * @return Multipart instance. */ - static @NonNull Formdata create(@NonNull ValueFactory valueFactory) { + static Formdata create(ValueFactory valueFactory) { return new MultipartNode(valueFactory); } } diff --git a/jooby/src/main/java/io/jooby/ForwardingContext.java b/jooby/src/main/java/io/jooby/ForwardingContext.java index f271c61d11..805bf7d13e 100644 --- a/jooby/src/main/java/io/jooby/ForwardingContext.java +++ b/jooby/src/main/java/io/jooby/ForwardingContext.java @@ -21,8 +21,8 @@ import java.util.function.Consumer; import java.util.function.Function; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.exception.RegistryException; import io.jooby.output.Output; import io.jooby.output.OutputFactory; @@ -51,7 +51,7 @@ public ForwardingBody(Body body) { } @Override - public String value(@NonNull Charset charset) { + public String value(Charset charset) { return delegate.value(charset); } @@ -81,7 +81,7 @@ public InputStream stream() { } @Override - public List toList(@NonNull Class type) { + public List toList(Class type) { return delegate.toList(type); } @@ -96,22 +96,22 @@ public Set toSet() { } @Override - public T to(@NonNull Class type) { + public T to(Class type) { return delegate.to(type); } @Override - @Nullable public T toNullable(@NonNull Class type) { + @Nullable public T toNullable(Class type) { return delegate.toNullable(type); } @Override - public T to(@NonNull Type type) { + public T to(Type type) { return delegate.to(type); } @Override - @Nullable public T toNullable(@NonNull Type type) { + @Nullable public T toNullable(Type type) { return delegate.toNullable(type); } @@ -121,12 +121,12 @@ public Value get(int index) { } @Override - public Value get(@NonNull String name) { + public Value get(String name) { return delegate.get(name); } @Override - public Value getOrDefault(@NonNull String name, @NonNull String defaultValue) { + public Value getOrDefault(String name, String defaultValue) { return delegate.getOrDefault(name, defaultValue); } @@ -141,27 +141,23 @@ public Iterator iterator() { } @Override - public String resolve(@NonNull String expression) { + public String resolve(String expression) { return delegate.resolve(expression); } @Override - public String resolve(@NonNull String expression, boolean ignoreMissing) { + public String resolve(String expression, boolean ignoreMissing) { return delegate.resolve(expression, ignoreMissing); } @Override - public String resolve( - @NonNull String expression, @NonNull String startDelim, @NonNull String endDelim) { + public String resolve(String expression, String startDelim, String endDelim) { return delegate.resolve(expression, startDelim, endDelim); } @Override public String resolve( - @NonNull String expression, - boolean ignoreMissing, - @NonNull String startDelim, - @NonNull String endDelim) { + String expression, boolean ignoreMissing, String startDelim, String endDelim) { return delegate.resolve(expression, ignoreMissing, startDelim, endDelim); } @@ -236,7 +232,7 @@ public boolean booleanValue(boolean defaultValue) { } @Override - public String value(@NonNull String defaultValue) { + public String value(String defaultValue) { return delegate.value(defaultValue); } @@ -246,7 +242,7 @@ public String value(@NonNull String defaultValue) { } @Override - public T value(@NonNull SneakyThrows.Function fn) { + public T value(SneakyThrows.Function fn) { return delegate.value(fn); } @@ -256,14 +252,13 @@ public String value() { } @Override - public > T toEnum(@NonNull SneakyThrows.Function fn) { + public > T toEnum(SneakyThrows.Function fn) { return delegate.toEnum(fn); } @Override public > T toEnum( - @NonNull SneakyThrows.Function fn, - @NonNull Function nameProvider) { + SneakyThrows.Function fn, Function nameProvider) { return delegate.toEnum(fn, nameProvider); } @@ -303,12 +298,12 @@ public boolean isObject() { } @Override - public Optional toOptional(@NonNull Class type) { + public Optional toOptional(Class type) { return delegate.toOptional(type); } @Override - public Set toSet(@NonNull Class type) { + public Set toSet(Class type) { return delegate.toSet(type); } @@ -342,12 +337,12 @@ public Value get(int index) { } @Override - public Value get(@NonNull String name) { + public Value get(String name) { return delegate.get(name); } @Override - public Value getOrDefault(@NonNull String name, @NonNull String defaultValue) { + public Value getOrDefault(String name, String defaultValue) { return delegate.getOrDefault(name, defaultValue); } @@ -362,27 +357,23 @@ public Iterator iterator() { } @Override - public String resolve(@NonNull String expression) { + public String resolve(String expression) { return delegate.resolve(expression); } @Override - public String resolve(@NonNull String expression, boolean ignoreMissing) { + public String resolve(String expression, boolean ignoreMissing) { return delegate.resolve(expression, ignoreMissing); } @Override - public String resolve( - @NonNull String expression, @NonNull String startDelim, @NonNull String endDelim) { + public String resolve(String expression, String startDelim, String endDelim) { return delegate.resolve(expression, startDelim, endDelim); } @Override public String resolve( - @NonNull String expression, - boolean ignoreMissing, - @NonNull String startDelim, - @NonNull String endDelim) { + String expression, boolean ignoreMissing, String startDelim, String endDelim) { return delegate.resolve(expression, ignoreMissing, startDelim, endDelim); } @@ -457,7 +448,7 @@ public boolean booleanValue(boolean defaultValue) { } @Override - public String value(@NonNull String defaultValue) { + public String value(String defaultValue) { return delegate.value(defaultValue); } @@ -467,7 +458,7 @@ public String value(@NonNull String defaultValue) { } @Override - public T value(@NonNull SneakyThrows.Function fn) { + public T value(SneakyThrows.Function fn) { return delegate.value(fn); } @@ -487,14 +478,13 @@ public Set toSet() { } @Override - public > T toEnum(@NonNull SneakyThrows.Function fn) { + public > T toEnum(SneakyThrows.Function fn) { return delegate.toEnum(fn); } @Override public > T toEnum( - @NonNull SneakyThrows.Function fn, - @NonNull Function nameProvider) { + SneakyThrows.Function fn, Function nameProvider) { return delegate.toEnum(fn, nameProvider); } @@ -534,27 +524,27 @@ public boolean isObject() { } @Override - public Optional toOptional(@NonNull Class type) { + public Optional toOptional(Class type) { return delegate.toOptional(type); } @Override - public List toList(@NonNull Class type) { + public List toList(Class type) { return delegate.toList(type); } @Override - public Set toSet(@NonNull Class type) { + public Set toSet(Class type) { return delegate.toSet(type); } @Override - public T to(@NonNull Class type) { + public T to(Class type) { return delegate.to(type); } @Override - @Nullable public T toNullable(@NonNull Class type) { + @Nullable public T toNullable(Class type) { return delegate.toNullable(type); } @@ -581,7 +571,7 @@ public ForwardingQueryString(QueryString queryString) { } @Override - public T toEmpty(@NonNull Class type) { + public T toEmpty(Class type) { return ((QueryString) delegate).toEmpty(type); } @@ -603,22 +593,22 @@ public ForwardingFormdata(Formdata delegate) { } @Override - public void put(@NonNull String path, @NonNull Value value) { + public void put(String path, Value value) { ((Formdata) delegate).put(path, value); } @Override - public void put(@NonNull String path, @NonNull String value) { + public void put(String path, String value) { ((Formdata) delegate).put(path, value); } @Override - public void put(@NonNull String path, @NonNull Collection values) { + public void put(String path, Collection values) { ((Formdata) delegate).put(path, values); } @Override - public void put(@NonNull String name, @NonNull FileUpload file) { + public void put(String name, FileUpload file) { ((Formdata) delegate).put(name, file); } @@ -628,12 +618,12 @@ public List files() { } @Override - public List files(@NonNull String name) { + public List files(String name) { return ((Formdata) delegate).files(name); } @Override - public FileUpload file(@NonNull String name) { + public FileUpload file(String name) { return ((Formdata) delegate).file(name); } } @@ -645,7 +635,7 @@ public FileUpload file(@NonNull String name) { * * @param context Source context. */ - public ForwardingContext(@NonNull Context context) { + public ForwardingContext(Context context) { this.ctx = context; } @@ -670,7 +660,7 @@ public Context getDelegate() { } @Override - public Object forward(@NonNull String path) { + public Object forward(String path) { Object result = ctx.forward(path); if (result instanceof Context) { return this; @@ -679,7 +669,7 @@ public Object forward(@NonNull String path) { } @Override - public boolean matches(@NonNull String pattern) { + public boolean matches(String pattern) { return ctx.matches(pattern); } @@ -694,12 +684,12 @@ public Map getAttributes() { } @Nullable @Override - public T getAttribute(@NonNull String key) { + public T getAttribute(String key) { return ctx.getAttribute(key); } @Override - public Context setAttribute(@NonNull String key, Object value) { + public Context setAttribute(String key, Object value) { ctx.setAttribute(key, value); return this; } @@ -725,22 +715,22 @@ public FlashMap flashOrNull() { } @Override - public Value flash(@NonNull String name) { + public Value flash(String name) { return ctx.flash(name); } @Override - public Value flash(@NonNull String name, @NonNull String defaultValue) { + public Value flash(String name, String defaultValue) { return ctx.flash(name, defaultValue); } @Override - public Value session(@NonNull String name) { + public Value session(String name) { return ctx.session(name); } @Override - public Value session(@NonNull String name, @NonNull String defaultValue) { + public Value session(String name, String defaultValue) { return ctx.session(name, defaultValue); } @@ -755,12 +745,12 @@ public Session sessionOrNull() { } @Override - public Value cookie(@NonNull String name) { + public Value cookie(String name) { return ctx.cookie(name); } @Override - public Value cookie(@NonNull String name, @NonNull String defaultValue) { + public Value cookie(String name, String defaultValue) { return ctx.cookie(name, defaultValue); } @@ -775,7 +765,7 @@ public String getMethod() { } @Override - public Context setMethod(@NonNull String method) { + public Context setMethod(String method) { ctx.setMethod(method); return this; } @@ -786,7 +776,7 @@ public Route getRoute() { } @Override - public Context setRoute(@NonNull Route route) { + public Context setRoute(Route route) { return ctx.setRoute(route); } @@ -796,7 +786,7 @@ public String getRequestPath() { } @Override - public Context setRequestPath(@NonNull String path) { + public Context setRequestPath(String path) { ctx.setRequestPath(path); return this; } @@ -807,17 +797,17 @@ public ParamLookup lookup() { } @Override - public Value lookup(@NonNull String name, ParamSource... sources) { + public Value lookup(String name, ParamSource... sources) { return ctx.lookup(name, sources); } @Override - public Value path(@NonNull String name) { + public Value path(String name) { return ctx.path(name); } @Override - public T path(@NonNull Class type) { + public T path(Class type) { return ctx.path(type); } @@ -832,7 +822,7 @@ public Map pathMap() { } @Override - public Context setPathMap(@NonNull Map pathMap) { + public Context setPathMap(Map pathMap) { ctx.setPathMap(pathMap); return this; } @@ -843,12 +833,12 @@ public QueryString query() { } @Override - public Value query(@NonNull String name) { + public Value query(String name) { return ctx.query(name); } @Override - public Value query(@NonNull String name, @NonNull String defaultValue) { + public Value query(String name, String defaultValue) { return ctx.query(name, defaultValue); } @@ -858,7 +848,7 @@ public String queryString() { } @Override - public T query(@NonNull Class type) { + public T query(Class type) { return ctx.query(type); } @@ -873,12 +863,12 @@ public Value header() { } @Override - public Value header(@NonNull String name) { + public Value header(String name) { return ctx.header(name); } @Override - public Value header(@NonNull String name, @NonNull String defaultValue) { + public Value header(String name, String defaultValue) { return ctx.header(name, defaultValue); } @@ -888,12 +878,12 @@ public Map headerMap() { } @Override - public boolean accept(@NonNull MediaType contentType) { + public boolean accept(MediaType contentType) { return ctx.accept(contentType); } @Nullable @Override - public MediaType accept(@NonNull List produceTypes) { + public MediaType accept(List produceTypes) { return ctx.accept(produceTypes); } @@ -918,7 +908,7 @@ public String getRemoteAddress() { } @Override - public Context setRemoteAddress(@NonNull String remoteAddress) { + public Context setRemoteAddress(String remoteAddress) { ctx.setRemoteAddress(remoteAddress); return this; } @@ -929,7 +919,7 @@ public String getHost() { } @Override - public Context setHost(@NonNull String host) { + public Context setHost(String host) { ctx.setHost(host); return this; } @@ -966,7 +956,7 @@ public String getRequestURL() { } @Override - public String getRequestURL(@NonNull String path) { + public String getRequestURL(String path) { return ctx.getRequestURL(path); } @@ -986,7 +976,7 @@ public String getScheme() { } @Override - public Context setScheme(@NonNull String scheme) { + public Context setScheme(String scheme) { this.ctx.setScheme(scheme); return this; } @@ -997,17 +987,17 @@ public Formdata form() { } @Override - public Value form(@NonNull String name) { + public Value form(String name) { return ctx.form(name); } @Override - public Value form(@NonNull String name, @NonNull String defaultValue) { + public Value form(String name, String defaultValue) { return ctx.form(name, defaultValue); } @Override - public T form(@NonNull Class type) { + public T form(Class type) { return ctx.form(type); } @@ -1022,12 +1012,12 @@ public List files() { } @Override - public List files(@NonNull String name) { + public List files(String name) { return ctx.files(name); } @Override - public FileUpload file(@NonNull String name) { + public FileUpload file(String name) { return ctx.file(name); } @@ -1037,12 +1027,12 @@ public Body body() { } @Override - public T body(@NonNull Class type) { + public T body(Class type) { return ctx.body(type); } @Override - public T body(@NonNull Type type) { + public T body(Type type) { return ctx.body(type); } @@ -1052,12 +1042,12 @@ public ValueFactory getValueFactory() { } @Override - public T decode(@NonNull Type type, @NonNull MediaType contentType) { + public T decode(Type type, MediaType contentType) { return ctx.decode(type, contentType); } @Override - public MessageDecoder decoder(@NonNull MediaType contentType) { + public MessageDecoder decoder(MediaType contentType) { return ctx.decoder(contentType); } @@ -1067,55 +1057,55 @@ public boolean isInIoThread() { } @Override - public Context dispatch(@NonNull Runnable action) { + public Context dispatch(Runnable action) { ctx.dispatch(action); return this; } @Override - public Context dispatch(@NonNull Executor executor, @NonNull Runnable action) { + public Context dispatch(Executor executor, Runnable action) { ctx.dispatch(executor, action); return this; } @Override - public Context upgrade(@NonNull WebSocket.Initializer handler) { + public Context upgrade(WebSocket.Initializer handler) { ctx.upgrade(handler); return this; } @Override - public Context upgrade(@NonNull ServerSentEmitter.Handler handler) { + public Context upgrade(ServerSentEmitter.Handler handler) { ctx.upgrade(handler); return this; } @Override - public Context setResponseHeader(@NonNull String name, @NonNull Date value) { + public Context setResponseHeader(String name, Date value) { ctx.setResponseHeader(name, value); return this; } @Override - public Context setResponseHeader(@NonNull String name, @NonNull Instant value) { + public Context setResponseHeader(String name, Instant value) { ctx.setResponseHeader(name, value); return this; } @Override - public Context setResponseHeader(@NonNull String name, @NonNull Object value) { + public Context setResponseHeader(String name, Object value) { ctx.setResponseHeader(name, value); return this; } @Override - public Context setResponseHeader(@NonNull String name, @NonNull String value) { + public Context setResponseHeader(String name, String value) { ctx.setResponseHeader(name, value); return this; } @Override - public Context removeResponseHeader(@NonNull String name) { + public Context removeResponseHeader(String name) { ctx.removeResponseHeader(name); return this; } @@ -1127,7 +1117,7 @@ public Context removeResponseHeaders() { } @Nullable @Override - public String getResponseHeader(@NonNull String name) { + public String getResponseHeader(String name) { return ctx.getResponseHeader(name); } @@ -1143,25 +1133,25 @@ public Context setResponseLength(long length) { } @Override - public Context setResponseCookie(@NonNull Cookie cookie) { + public Context setResponseCookie(Cookie cookie) { ctx.setResponseCookie(cookie); return this; } @Override - public Context setResponseType(@NonNull String contentType) { + public Context setResponseType(String contentType) { ctx.setResponseType(contentType); return this; } @Override - public Context setResponseType(@NonNull MediaType contentType) { + public Context setResponseType(MediaType contentType) { ctx.setResponseType(contentType); return this; } @Override - public Context setDefaultResponseType(@NonNull MediaType contentType) { + public Context setDefaultResponseType(MediaType contentType) { ctx.setResponseType(contentType); return this; } @@ -1172,7 +1162,7 @@ public MediaType getResponseType() { } @Override - public Context setResponseCode(@NonNull StatusCode statusCode) { + public Context setResponseCode(StatusCode statusCode) { ctx.setResponseCode(statusCode); return this; } @@ -1189,7 +1179,7 @@ public StatusCode getResponseCode() { } @Override - public Context render(@NonNull Object value) { + public Context render(Object value) { ctx.render(value); return this; } @@ -1200,20 +1190,18 @@ public OutputStream responseStream() { } @Override - public OutputStream responseStream(@NonNull MediaType contentType) { + public OutputStream responseStream(MediaType contentType) { return ctx.responseStream(contentType); } @Override - public Context responseStream( - @NonNull MediaType contentType, @NonNull SneakyThrows.Consumer consumer) + public Context responseStream(MediaType contentType, SneakyThrows.Consumer consumer) throws Exception { return ctx.responseStream(contentType, consumer); } @Override - public Context responseStream(@NonNull SneakyThrows.Consumer consumer) - throws Exception { + public Context responseStream(SneakyThrows.Consumer consumer) throws Exception { return ctx.responseStream(consumer); } @@ -1228,121 +1216,119 @@ public PrintWriter responseWriter() { } @Override - public PrintWriter responseWriter(@NonNull MediaType contentType) { + public PrintWriter responseWriter(MediaType contentType) { return ctx.responseWriter(contentType); } @Override - public Context responseWriter(@NonNull SneakyThrows.Consumer consumer) - throws Exception { + public Context responseWriter(SneakyThrows.Consumer consumer) throws Exception { return ctx.responseWriter(consumer); } @Override - public Context responseWriter( - @NonNull MediaType contentType, @NonNull SneakyThrows.Consumer consumer) + public Context responseWriter(MediaType contentType, SneakyThrows.Consumer consumer) throws Exception { return ctx.responseWriter(contentType, consumer); } @Override - public Context sendRedirect(@NonNull String location) { + public Context sendRedirect(String location) { ctx.sendRedirect(location); return this; } @Override - public Context sendRedirect(@NonNull StatusCode redirect, @NonNull String location) { + public Context sendRedirect(StatusCode redirect, String location) { ctx.sendRedirect(redirect, location); return this; } @Override - public Context send(@NonNull String data) { + public Context send(String data) { ctx.send(data); return this; } @Override - public Context send(@NonNull String data, @NonNull Charset charset) { + public Context send(String data, Charset charset) { ctx.send(data, charset); return this; } @Override - public Context send(@NonNull byte[] data) { + public Context send(byte[] data) { ctx.send(data); return this; } @Override - public Context send(@NonNull ByteBuffer data) { + public Context send(ByteBuffer data) { ctx.send(data); return this; } @Override - public Context send(@NonNull Output output) { + public Context send(Output output) { ctx.send(output); return this; } @Override - public Context send(@NonNull byte[]... data) { + public Context send(byte[]... data) { ctx.send(data); return this; } @Override - public Context send(@NonNull ByteBuffer[] data) { + public Context send(ByteBuffer[] data) { ctx.send(data); return this; } @Override - public Context send(@NonNull ReadableByteChannel channel) { + public Context send(ReadableByteChannel channel) { ctx.send(channel); return this; } @Override - public Context send(@NonNull InputStream input) { + public Context send(InputStream input) { ctx.send(input); return this; } @Override - public Context send(@NonNull FileDownload file) { + public Context send(FileDownload file) { ctx.send(file); return this; } @Override - public Context send(@NonNull Path file) { + public Context send(Path file) { ctx.send(file); return this; } @Override - public Context send(@NonNull FileChannel file) { + public Context send(FileChannel file) { ctx.send(file); return this; } @Override - public Context send(@NonNull StatusCode statusCode) { + public Context send(StatusCode statusCode) { ctx.send(statusCode); return this; } @Override - public Context sendError(@NonNull Throwable cause) { + public Context sendError(Throwable cause) { ctx.sendError(cause); return this; } @Override - public Context sendError(@NonNull Throwable cause, @NonNull StatusCode code) { + public Context sendError(Throwable cause, StatusCode code) { ctx.sendError(cause, code); return this; } @@ -1364,33 +1350,33 @@ public Context setResetHeadersOnError(boolean value) { } @Override - public Context onComplete(@NonNull Route.Complete task) { + public Context onComplete(Route.Complete task) { ctx.onComplete(task); return this; } @Override - public T require(@NonNull Class type) throws RegistryException { + public T require(Class type) throws RegistryException { return ctx.require(type); } @Override - public T require(@NonNull Class type, @NonNull String name) throws RegistryException { + public T require(Class type, String name) throws RegistryException { return ctx.require(type, name); } @Override - public T require(@NonNull Reified type) throws RegistryException { + public T require(Reified type) throws RegistryException { return ctx.require(type); } @Override - public T require(@NonNull Reified type, @NonNull String name) throws RegistryException { + public T require(Reified type, String name) throws RegistryException { return ctx.require(type, name); } @Override - public T require(@NonNull ServiceKey key) throws RegistryException { + public T require(ServiceKey key) throws RegistryException { return ctx.require(key); } diff --git a/jooby/src/main/java/io/jooby/GracefulShutdown.java b/jooby/src/main/java/io/jooby/GracefulShutdown.java index 32d54de42f..04d8fa93e4 100644 --- a/jooby/src/main/java/io/jooby/GracefulShutdown.java +++ b/jooby/src/main/java/io/jooby/GracefulShutdown.java @@ -7,7 +7,6 @@ import java.time.Duration; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.internal.GracefulShutdownHandler; /** @@ -29,7 +28,7 @@ public class GracefulShutdown implements Extension { * * @param await Max time to wait for handlers to complete. */ - public GracefulShutdown(@NonNull Duration await) { + public GracefulShutdown(Duration await) { this.await = await; } @@ -37,7 +36,7 @@ public GracefulShutdown(@NonNull Duration await) { public GracefulShutdown() {} @Override - public void install(@NonNull Jooby application) throws Exception { + public void install(Jooby application) throws Exception { GracefulShutdownHandler handler = new GracefulShutdownHandler(await); application.use(handler); application.onStop(handler::shutdown); diff --git a/jooby/src/main/java/io/jooby/InlineFile.java b/jooby/src/main/java/io/jooby/InlineFile.java index 7f88105f05..ed78d93b53 100644 --- a/jooby/src/main/java/io/jooby/InlineFile.java +++ b/jooby/src/main/java/io/jooby/InlineFile.java @@ -9,8 +9,6 @@ import java.io.InputStream; import java.nio.file.Path; -import edu.umd.cs.findbugs.annotations.NonNull; - /** * Represents an inline file response. * @@ -26,7 +24,7 @@ public class InlineFile extends FileDownload { * @param fileName Filename. * @param fileSize File size or -1 if unknown. */ - public InlineFile(@NonNull InputStream content, @NonNull String fileName, long fileSize) { + public InlineFile(InputStream content, String fileName, long fileSize) { super(Mode.INLINE, content, fileName, fileSize); } @@ -36,7 +34,7 @@ public InlineFile(@NonNull InputStream content, @NonNull String fileName, long f * @param content File content. * @param fileName Filename. */ - public InlineFile(@NonNull InputStream content, @NonNull String fileName) { + public InlineFile(InputStream content, String fileName) { super(Mode.INLINE, content, fileName); } @@ -47,7 +45,7 @@ public InlineFile(@NonNull InputStream content, @NonNull String fileName) { * @param fileName Filename. * @throws IOException For IO exception while reading file. */ - public InlineFile(@NonNull Path file, @NonNull String fileName) throws IOException { + public InlineFile(Path file, String fileName) throws IOException { super(Mode.INLINE, file, fileName); } @@ -57,7 +55,7 @@ public InlineFile(@NonNull Path file, @NonNull String fileName) throws IOExcepti * @param file File content. * @throws IOException For IO exception while reading file. */ - public InlineFile(@NonNull Path file) throws IOException { + public InlineFile(Path file) throws IOException { super(Mode.INLINE, file); } } diff --git a/jooby/src/main/java/io/jooby/Jooby.java b/jooby/src/main/java/io/jooby/Jooby.java index 3b24254776..13b50a1537 100644 --- a/jooby/src/main/java/io/jooby/Jooby.java +++ b/jooby/src/main/java/io/jooby/Jooby.java @@ -23,12 +23,11 @@ import java.util.function.Predicate; import java.util.function.Supplier; +import org.jspecify.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.typesafe.config.Config; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; import io.jooby.exception.RegistryException; import io.jooby.exception.StartupException; import io.jooby.internal.LocaleUtils; @@ -142,7 +141,7 @@ public RouterOptions getRouterOptions() { return router.getRouterOptions(); } - public Jooby setRouterOptions(@NonNull RouterOptions options) { + public Jooby setRouterOptions(RouterOptions options) { router.setRouterOptions(options); return this; } @@ -176,7 +175,7 @@ public List getLocales() { * @param locales The supported locales. * @return This router. */ - public Router setLocales(@NonNull List locales) { + public Router setLocales(List locales) { this.locales = requireNonNull(locales); return this; } @@ -215,7 +214,7 @@ public Config getConfig() { * @param environment Application environment. * @return This application. */ - public Jooby setEnvironment(@NonNull Environment environment) { + public Jooby setEnvironment(Environment environment) { this.env = environment; return this; } @@ -226,7 +225,7 @@ public Jooby setEnvironment(@NonNull Environment environment) { * @param options Environment options. * @return New environment. */ - public Environment setEnvironmentOptions(@NonNull EnvironmentOptions options) { + public Environment setEnvironmentOptions(EnvironmentOptions options) { this.environmentOptions = options; this.env = Environment.loadEnvironment( @@ -241,7 +240,7 @@ public Environment setEnvironmentOptions(@NonNull EnvironmentOptions options) { * @param body Start body. * @return This application. */ - public Jooby onStarting(@NonNull SneakyThrows.Runnable body) { + public Jooby onStarting(SneakyThrows.Runnable body) { startingCallbacks.add(body); return this; } @@ -253,7 +252,7 @@ public Jooby onStarting(@NonNull SneakyThrows.Runnable body) { * @param body Start body. * @return This application. */ - public Jooby onStarted(@NonNull SneakyThrows.Runnable body) { + public Jooby onStarted(SneakyThrows.Runnable body) { readyCallbacks.add(body); return this; } @@ -265,13 +264,13 @@ public Jooby onStarted(@NonNull SneakyThrows.Runnable body) { * @param body Stop body. * @return This application. */ - public Jooby onStop(@NonNull AutoCloseable body) { + public Jooby onStop(AutoCloseable body) { stopCallbacks.addFirst(body); return this; } @Override - public Jooby setContextPath(@NonNull String basePath) { + public Jooby setContextPath(String basePath) { router.setContextPath(basePath); return this; } @@ -311,7 +310,7 @@ public String getContextPath() { * @param factory Application factory. * @return Created routes. */ - @NonNull public Route.Set install(@NonNull SneakyThrows.Supplier factory) { + public Route.Set install(SneakyThrows.Supplier factory) { return install("/", factory); } @@ -346,7 +345,7 @@ public String getContextPath() { * @param factory Application factory. * @return Created routes. */ - @NonNull public Route.Set install(@NonNull String path, @NonNull SneakyThrows.Supplier factory) { + public Route.Set install(String path, SneakyThrows.Supplier factory) { try { owner = this; return path(path, factory::get); @@ -388,9 +387,7 @@ public String getContextPath() { * @return This application. */ public Jooby install( - @NonNull String path, - @NonNull Predicate predicate, - @NonNull SneakyThrows.Supplier factory) { + String path, Predicate predicate, SneakyThrows.Supplier factory) { try { owner = this; router.install(path, predicate, factory); @@ -431,8 +428,7 @@ public Jooby install( * @param factory Application factory. * @return This application. */ - public Jooby install( - @NonNull Predicate predicate, @NonNull SneakyThrows.Supplier factory) { + public Jooby install(Predicate predicate, SneakyThrows.Supplier factory) { return install("/", predicate, factory); } @@ -461,27 +457,27 @@ public boolean isStopped() { } @Override - public Route.Set domain(@NonNull String domain, @NonNull Router subrouter) { + public Route.Set domain(String domain, Router subrouter) { return this.router.domain(domain, subrouter); } @Override - public Route.Set domain(@NonNull String domain, @NonNull Runnable body) { + public Route.Set domain(String domain, Runnable body) { return router.domain(domain, body); } @Override - public Route.Set mount(@NonNull Predicate predicate, @NonNull Runnable body) { + public Route.Set mount(Predicate predicate, Runnable body) { return router.mount(predicate, body); } @Override - public Route.Set mount(@NonNull Predicate predicate, @NonNull Router subrouter) { + public Route.Set mount(Predicate predicate, Router subrouter) { return this.router.mount(predicate, subrouter); } @Override - public Route.Set mount(@NonNull String path, @NonNull Router router) { + public Route.Set mount(String path, Router router) { var rs = this.router.mount(path, router); if (router instanceof Jooby child) { child.registry = this.registry; @@ -490,7 +486,7 @@ public Route.Set mount(@NonNull String path, @NonNull Router router) { } @Override - public Route.Set mount(@NonNull Router router) { + public Route.Set mount(Router router) { return mount("/", router); } @@ -504,7 +500,7 @@ public Route.Set mount(@NonNull Router router) { * @param trpcRouter The tRPC router extension to register. Must not be null. * @return A {@link Route.Set} containing the registered tRPC endpoints. */ - public Route.Set trpc(@NonNull Extension trpcRouter) { + public Route.Set trpc(Extension trpcRouter) { return mvc(trpcRouter); } @@ -514,7 +510,7 @@ public Route.Set trpc(@NonNull Extension trpcRouter) { * @param router Mvc extension. * @return Route set. */ - public Route.Set mvc(@NonNull Extension router) { + public Route.Set mvc(Extension router) { try { int start = this.router.getRoutes().size(); router.install(this); @@ -525,12 +521,12 @@ public Route.Set mvc(@NonNull Extension router) { } @Override - public Route ws(@NonNull String pattern, @NonNull WebSocket.Initializer handler) { + public Route ws(String pattern, WebSocket.Initializer handler) { return router.ws(pattern, handler); } @Override - public Route sse(@NonNull String pattern, @NonNull ServerSentEmitter.Handler handler) { + public Route sse(String pattern, ServerSentEmitter.Handler handler) { return router.sse(pattern, handler); } @@ -540,43 +536,43 @@ public List getRoutes() { } @Override - public Jooby error(@NonNull ErrorHandler handler) { + public Jooby error(ErrorHandler handler) { router.error(handler); return this; } @Override - public Router use(@NonNull Route.Filter filter) { + public Router use(Route.Filter filter) { router.use(filter); return this; } @Override - public Jooby before(@NonNull Route.Before before) { + public Jooby before(Route.Before before) { router.before(before); return this; } @Override - public Jooby after(@NonNull Route.After after) { + public Jooby after(Route.After after) { router.after(after); return this; } @Override - public Jooby encoder(@NonNull MessageEncoder encoder) { + public Jooby encoder(MessageEncoder encoder) { router.encoder(encoder); return this; } @Override - public Jooby decoder(@NonNull MediaType contentType, @NonNull MessageDecoder decoder) { + public Jooby decoder(MediaType contentType, MessageDecoder decoder) { router.decoder(contentType, decoder); return this; } @Override - public Jooby encoder(@NonNull MediaType contentType, @NonNull MessageEncoder encoder) { + public Jooby encoder(MediaType contentType, MessageEncoder encoder) { router.encoder(contentType, encoder); return this; } @@ -587,7 +583,7 @@ public Jooby encoder(@NonNull MediaType contentType, @NonNull MessageEncoder enc * @param extension Extension module. * @return This application. */ - @NonNull public Jooby install(@NonNull Extension extension) { + public Jooby install(Extension extension) { if (lateInit || extension.lateinit()) { lateExtensions.add(extension); } else { @@ -601,51 +597,50 @@ public Jooby encoder(@NonNull MediaType contentType, @NonNull MessageEncoder enc } @Override - public Jooby dispatch(@NonNull Runnable body) { + public Jooby dispatch(Runnable body) { router.dispatch(body); return this; } @Override - public Jooby dispatch(@NonNull Executor executor, @NonNull Runnable action) { + public Jooby dispatch(Executor executor, Runnable action) { router.dispatch(executor, action); return this; } @Override - public Route.Set path(@NonNull String pattern, @NonNull Runnable action) { + public Route.Set path(String pattern, Runnable action) { return router.path(pattern, action); } @Override - public Route.Set routes(@NonNull Runnable action) { + public Route.Set routes(Runnable action) { return router.routes(action); } @Override - public Route route( - @NonNull String method, @NonNull String pattern, @NonNull Route.Handler handler) { + public Route route(String method, String pattern, Route.Handler handler) { return router.route(method, pattern, handler); } @Override - public Match match(@NonNull Context ctx) { + public Match match(Context ctx) { return router.match(ctx); } @Override - public boolean match(@NonNull String pattern, @NonNull String path) { + public boolean match(String pattern, String path) { return router.match(pattern, path); } @Override - public Jooby errorCode(@NonNull Class type, @NonNull StatusCode statusCode) { + public Jooby errorCode(Class type, StatusCode statusCode) { router.errorCode(type, statusCode); return this; } @Override - public StatusCode errorCode(@NonNull Throwable cause) { + public StatusCode errorCode(Throwable cause) { return router.errorCode(cause); } @@ -655,7 +650,7 @@ public Executor getWorker() { } @Override - public Jooby setWorker(@NonNull Executor worker) { + public Jooby setWorker(Executor worker) { this.router.setWorker(worker); if (worker instanceof ExecutorService) { onStop(((ExecutorService) worker)::shutdown); @@ -664,7 +659,7 @@ public Jooby setWorker(@NonNull Executor worker) { } @Override - public Jooby setDefaultWorker(@NonNull Executor worker) { + public Jooby setDefaultWorker(Executor worker) { this.router.setDefaultWorker(worker); return this; } @@ -695,7 +690,7 @@ public Path getTmpdir() { * @param tmpdir Temp directory. * @return This application. */ - public Jooby setTmpdir(@NonNull Path tmpdir) { + public Jooby setTmpdir(Path tmpdir) { this.tmpdir = tmpdir; return this; } @@ -715,7 +710,7 @@ public ExecutionMode getExecutionMode() { * @param mode Application execution mode. * @return This application. */ - public Jooby setExecutionMode(@NonNull ExecutionMode mode) { + public Jooby setExecutionMode(ExecutionMode mode) { this.mode = mode; return this; } @@ -726,38 +721,38 @@ public Map getAttributes() { } @Override - public Jooby setAttribute(@NonNull String key, @NonNull Object value) { + public Jooby setAttribute(String key, Object value) { router.setAttribute(key, value); return this; } @Override - public T getAttribute(@NonNull String key) { + public T getAttribute(String key) { return router.getAttribute(key); } @Override - public T require(@NonNull Class type, @NonNull String name) { + public T require(Class type, String name) { return require(ServiceKey.key(type, name)); } @Override - public T require(@NonNull Class type) { + public T require(Class type) { return require(ServiceKey.key(type)); } @Override - public T require(@NonNull Reified type) throws RegistryException { + public T require(Reified type) throws RegistryException { return require(ServiceKey.key(type)); } @Override - public T require(@NonNull Reified type, @NonNull String name) throws RegistryException { + public T require(Reified type, String name) throws RegistryException { return require(ServiceKey.key(type, name)); } @Override - public T require(@NonNull ServiceKey key) { + public T require(ServiceKey key) { ServiceRegistry services = getServices(); T service = services.getOrNull(key); if (service == null) { @@ -775,7 +770,7 @@ public T require(@NonNull ServiceKey key) { * @param registry Application registry. * @return This application. */ - @NonNull public Jooby registry(@NonNull Registry registry) { + public Jooby registry(Registry registry) { this.registry.set(registry); return this; } @@ -819,13 +814,13 @@ public SessionStore getSessionStore() { } @Override - public Jooby setSessionStore(@NonNull SessionStore store) { + public Jooby setSessionStore(SessionStore store) { router.setSessionStore(store); return this; } @Override - public Jooby executor(@NonNull String name, @NonNull Executor executor) { + public Jooby executor(String name, Executor executor) { if (executor instanceof ExecutorService) { onStop(((ExecutorService) executor)::shutdown); } @@ -839,7 +834,7 @@ public Cookie getFlashCookie() { } @Override - public Jooby setFlashCookie(@NonNull Cookie flashCookie) { + public Jooby setFlashCookie(Cookie flashCookie) { router.setFlashCookie(flashCookie); return this; } @@ -850,7 +845,7 @@ public ValueFactory getValueFactory() { } @Override - public Jooby setValueFactory(@NonNull ValueFactory valueFactory) { + public Jooby setValueFactory(ValueFactory valueFactory) { router.setValueFactory(valueFactory); return this; } @@ -861,19 +856,19 @@ public OutputFactory getOutputFactory() { } @Override - public Jooby setHiddenMethod(@NonNull Function> provider) { + public Jooby setHiddenMethod(Function> provider) { router.setHiddenMethod(provider); return this; } @Override - public Jooby setCurrentUser(@NonNull Function provider) { + public Jooby setCurrentUser(Function provider) { router.setCurrentUser(provider); return this; } @Override - public Jooby setHiddenMethod(@NonNull String parameterName) { + public Jooby setHiddenMethod(String parameterName) { router.setHiddenMethod(parameterName); return this; } @@ -904,7 +899,7 @@ public Jooby setStartupSummary(List startupSummary) { * @param server Server. * @return This application. */ - public Jooby start(@NonNull Server server) { + public Jooby start(Server server) { Path tmpdir = getTmpdir(); ensureTmpdir(tmpdir); @@ -961,7 +956,7 @@ public Jooby start(@NonNull Server server) { * @param server Server. * @return This application. */ - public Jooby ready(@NonNull Server server) { + public Jooby ready(Server server) { if (startupSummary == null) { Config config = env.getConfig(); if (config.hasPath(AvailableSettings.STARTUP_SUMMARY)) { @@ -1054,7 +1049,7 @@ public String getName() { * @param name Application's name. * @return This application. */ - public Jooby setName(@NonNull String name) { + public Jooby setName(String name) { this.name = name; return this; } @@ -1086,7 +1081,7 @@ public String getVersion() { * @param version Application's version. * @return This application. */ - public Jooby setVersion(@NonNull String version) { + public Jooby setVersion(String version) { this.version = version; return this; } @@ -1102,7 +1097,7 @@ public String toString() { * @param args Application arguments. * @param provider Application provider. */ - public static void runApp(@NonNull String[] args, @NonNull Supplier provider) { + public static void runApp(String[] args, Supplier provider) { runApp(args, ExecutionMode.DEFAULT, provider); } @@ -1113,8 +1108,7 @@ public static void runApp(@NonNull String[] args, @NonNull Supplier provi * @param server Web server. * @param provider Application provider. */ - public static void runApp( - @NonNull String[] args, @NonNull Server server, @NonNull Supplier provider) { + public static void runApp(String[] args, Server server, Supplier provider) { configurePackage(provider.getClass().getPackage()); runApp(args, server, List.of(provider)); } @@ -1125,7 +1119,7 @@ public static void runApp( * @param args Application arguments. * @param consumer Application consumer. */ - public static void runApp(@NonNull String[] args, @NonNull Consumer consumer) { + public static void runApp(String[] args, Consumer consumer) { configurePackage(consumer.getClass().getPackage()); runApp(args, ExecutionMode.DEFAULT, consumerProvider(consumer)); } @@ -1137,8 +1131,7 @@ public static void runApp(@NonNull String[] args, @NonNull Consumer consu * @param server Server to run. * @param consumer Application consumer. */ - public static void runApp( - @NonNull String[] args, @NonNull Server server, @NonNull Consumer consumer) { + public static void runApp(String[] args, Server server, Consumer consumer) { runApp(args, server, ExecutionMode.DEFAULT, consumer); } @@ -1151,10 +1144,7 @@ public static void runApp( * @param consumer Application consumer. */ public static void runApp( - @NonNull String[] args, - @NonNull Server server, - @NonNull ExecutionMode executionMode, - @NonNull Consumer consumer) { + String[] args, Server server, ExecutionMode executionMode, Consumer consumer) { configurePackage(consumer.getClass().getPackage()); runApp(args, server, executionMode, List.of(consumerProvider(consumer))); } @@ -1166,10 +1156,7 @@ public static void runApp( * @param executionMode Default application execution mode. Can be overridden by application. * @param consumer Application consumer. */ - public static void runApp( - @NonNull String[] args, - @NonNull ExecutionMode executionMode, - @NonNull Consumer consumer) { + public static void runApp(String[] args, ExecutionMode executionMode, Consumer consumer) { configurePackage(consumer.getClass().getPackage()); runApp(args, executionMode, consumerProvider(consumer)); } @@ -1181,10 +1168,7 @@ public static void runApp( * @param executionMode Default application execution mode. Can be overridden by application. * @param provider Application provider. */ - public static void runApp( - @NonNull String[] args, - @NonNull ExecutionMode executionMode, - @NonNull Supplier provider) { + public static void runApp(String[] args, ExecutionMode executionMode, Supplier provider) { runApp(args, executionMode, List.of(provider)); } @@ -1197,10 +1181,7 @@ public static void runApp( * @param provider Application provider. */ public static void runApp( - @NonNull String[] args, - @NonNull Server server, - @NonNull ExecutionMode executionMode, - @NonNull Supplier provider) { + String[] args, Server server, ExecutionMode executionMode, Supplier provider) { configurePackage(provider.getClass().getPackage()); runApp(args, server, executionMode, List.of(provider)); } @@ -1211,7 +1192,7 @@ public static void runApp( * @param args Application arguments. * @param provider Application provider. */ - public static void runApp(@NonNull String[] args, @NonNull List> provider) { + public static void runApp(String[] args, List> provider) { runApp(args, ExecutionMode.DEFAULT, provider); } @@ -1223,9 +1204,7 @@ public static void runApp(@NonNull String[] args, @NonNull List> * @param provider Application provider. */ public static void runApp( - @NonNull String[] args, - @NonNull ExecutionMode executionMode, - @NonNull List> provider) { + String[] args, ExecutionMode executionMode, List> provider) { runApp(args, Server.loadServer(), executionMode, provider); } @@ -1236,8 +1215,7 @@ public static void runApp( * @param server Server. * @param provider Application provider. */ - public static void runApp( - @NonNull String[] args, @NonNull Server server, @NonNull List> provider) { + public static void runApp(String[] args, Server server, List> provider) { runApp(args, server, ExecutionMode.DEFAULT, provider); } @@ -1250,10 +1228,7 @@ public static void runApp( * @param provider Application provider. */ public static void runApp( - @NonNull String[] args, - @NonNull Server server, - @NonNull ExecutionMode executionMode, - @NonNull List> provider) { + String[] args, Server server, ExecutionMode executionMode, List> provider) { /* Dump command line as system properties. */ parseArguments(args).forEach(System::setProperty); ServerOptions appServerOptions = null; @@ -1298,9 +1273,7 @@ public static void runApp( * @return Application. */ public static Jooby createApp( - @NonNull Server server, - @NonNull ExecutionMode executionMode, - @NonNull Supplier provider) { + Server server, ExecutionMode executionMode, Supplier provider) { configurePackage(provider.getClass().getPackage()); /* Find application.env: */ String logfile = diff --git a/jooby/src/main/java/io/jooby/LoggingService.java b/jooby/src/main/java/io/jooby/LoggingService.java index 6dfd611158..727cceaec0 100644 --- a/jooby/src/main/java/io/jooby/LoggingService.java +++ b/jooby/src/main/java/io/jooby/LoggingService.java @@ -15,8 +15,7 @@ import java.util.stream.Stream; import java.util.stream.StreamSupport; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; /** * Describe the underlying logging system. Jooby provides two implementation: jooby-logback and @@ -64,7 +63,7 @@ public interface LoggingService { * configuration file. * @return Location of logging configuration file or null. */ - static @Nullable String configure(@NonNull ClassLoader classLoader, @NonNull List names) { + static @Nullable String configure(ClassLoader classLoader, List names) { // Supported well-know implementation String[] keys = {"logback.configurationFile", "log4j.configurationFile"}; for (String key : keys) { diff --git a/jooby/src/main/java/io/jooby/MapModelAndView.java b/jooby/src/main/java/io/jooby/MapModelAndView.java index 9c496ed4b2..869177795b 100644 --- a/jooby/src/main/java/io/jooby/MapModelAndView.java +++ b/jooby/src/main/java/io/jooby/MapModelAndView.java @@ -9,8 +9,7 @@ import java.util.Locale; import java.util.Map; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; /** A {@link ModelAndView} which uses a map as model. */ public class MapModelAndView extends ModelAndView> { @@ -20,7 +19,7 @@ public class MapModelAndView extends ModelAndView> { * @param view View name must include file extension. * @param model View model. */ - public MapModelAndView(@NonNull String view, @NonNull Map model) { + public MapModelAndView(String view, Map model) { super(view, model); } @@ -29,7 +28,7 @@ public MapModelAndView(@NonNull String view, @NonNull Map model) * * @param view View name must include file extension. */ - public MapModelAndView(@NonNull String view) { + public MapModelAndView(String view) { super(view, new LinkedHashMap<>()); } @@ -40,7 +39,7 @@ public MapModelAndView(@NonNull String view) { * @param value Value. * @return This model and view. */ - public MapModelAndView put(@NonNull String name, Object value) { + public MapModelAndView put(String name, Object value) { model.put(name, value); return this; } @@ -51,7 +50,7 @@ public MapModelAndView put(@NonNull String name, Object value) { * @param attributes Attributes. * @return This model and view. */ - public MapModelAndView put(@NonNull Map attributes) { + public MapModelAndView put(Map attributes) { this.model.putAll(attributes); return this; } diff --git a/jooby/src/main/java/io/jooby/MediaType.java b/jooby/src/main/java/io/jooby/MediaType.java index 6f0b4aaf00..f3df0e87a9 100644 --- a/jooby/src/main/java/io/jooby/MediaType.java +++ b/jooby/src/main/java/io/jooby/MediaType.java @@ -14,8 +14,7 @@ import java.util.Collections; import java.util.List; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; /** * Implementation of media/content type. @@ -112,7 +111,7 @@ public final class MediaType implements Comparable { private final String contentTypeHeader; - private MediaType(@NonNull String value, Charset charset) { + private MediaType(String value, Charset charset) { this.raw = value; this.subtypeStart = value.indexOf('/'); if (subtypeStart < 0) { @@ -153,7 +152,7 @@ public int hashCode() { * @param name Parameter name. * @return Parameter value or null. */ - public @Nullable String getParameter(@NonNull String name) { + public @Nullable String getParameter(String name) { int paramStart = subtypeEnd + 1; for (int i = subtypeEnd; i < raw.length(); i++) { char ch = raw.charAt(i); @@ -178,7 +177,7 @@ public int hashCode() { * * @return Media type value. */ - public @NonNull String getValue() { + public String getValue() { return value; } @@ -187,7 +186,7 @@ public int hashCode() { * * @return Content type header. */ - public @NonNull String toContentTypeHeader() { + public String toContentTypeHeader() { return contentTypeHeader; } @@ -196,7 +195,7 @@ public int hashCode() { * * @return Value of q parameter. */ - @NonNull public float getQuality() { + public float getQuality() { String q = getParameter("q"); return q == null ? 1f : Float.parseFloat(q); } @@ -265,7 +264,7 @@ private Charset charset(Charset charset) { * * @return Type segment of mediatype (leading type). */ - public @NonNull String getType() { + public String getType() { return raw.substring(0, subtypeStart).trim(); } @@ -274,7 +273,7 @@ private Charset charset(Charset charset) { * * @return Subtype segment of mediatype (trailing type). */ - public @NonNull String getSubtype() { + public String getSubtype() { return raw.substring(subtypeStart + 1, subtypeEnd).trim(); } @@ -284,7 +283,7 @@ private Charset charset(Charset charset) { * @param mediaType Media type to test. * @return True if this mediatype is compatible with the given content type. */ - public boolean matches(@NonNull String mediaType) { + public boolean matches(String mediaType) { return matches(value, mediaType); } @@ -294,7 +293,7 @@ public boolean matches(@NonNull String mediaType) { * @param type Media type to test. * @return True if this mediatype is compatible with the given content type. */ - public boolean matches(@NonNull MediaType type) { + public boolean matches(MediaType type) { return matches(value, type.value); } @@ -326,7 +325,7 @@ private int getParameterCount() { * @param value String media-type. * @return Media type. */ - public static @NonNull MediaType valueOf(@NonNull String value) { + public static MediaType valueOf(String value) { if (value == null || value.isEmpty() || value.equals("*") || value.equals("*/*")) { return all; } @@ -372,7 +371,7 @@ private int getParameterCount() { * @param value Mediatype comma separated value. * @return One or more mediatypes. */ - public static @NonNull List parse(@Nullable String value) { + public static List parse(@Nullable String value) { if (value == null || value.isEmpty()) { return Collections.emptyList(); } @@ -394,7 +393,7 @@ private int getParameterCount() { return result; } - static boolean matches(@NonNull String expected, @NonNull String contentType) { + static boolean matches(String expected, String contentType) { int start = 0; int len1 = expected.length(); int end = contentType.indexOf(','); @@ -418,7 +417,7 @@ static boolean matches(@NonNull String expected, @NonNull String contentType) { * @param file File. * @return Mediatype. */ - public static @NonNull MediaType byFile(@NonNull File file) { + public static MediaType byFile(File file) { return byFile(file.getName()); } @@ -428,7 +427,7 @@ static boolean matches(@NonNull String expected, @NonNull String contentType) { * @param file File. * @return Mediatype. */ - public static @NonNull MediaType byFile(@NonNull Path file) { + public static MediaType byFile(Path file) { return byFile(file.getFileName().toString()); } @@ -438,7 +437,7 @@ static boolean matches(@NonNull String expected, @NonNull String contentType) { * @param filename File. * @return Mediatype. */ - public static @NonNull MediaType byFile(@NonNull String filename) { + public static MediaType byFile(String filename) { int index = filename.lastIndexOf('.'); return index > 0 ? byFileExtension(filename.substring(index + 1)) : octetStream; } @@ -449,8 +448,7 @@ static boolean matches(@NonNull String expected, @NonNull String contentType) { * @param ext File extension. * @return Mediatype. */ - public static @NonNull MediaType byFileExtension( - @NonNull String ext, @NonNull String defaultType) { + public static MediaType byFileExtension(String ext, String defaultType) { var result = byFileExtension(ext); if (result.equals(octetStream) || result.equals(all)) { return MediaType.valueOf(defaultType); @@ -464,7 +462,7 @@ static boolean matches(@NonNull String expected, @NonNull String contentType) { * @param ext File extension. * @return Mediatype. */ - public static @NonNull MediaType byFileExtension(@NonNull String ext) { + public static MediaType byFileExtension(String ext) { switch (ext) { case "spl": return new MediaType("application/x-futuresplash", null); diff --git a/jooby/src/main/java/io/jooby/MessageDecoder.java b/jooby/src/main/java/io/jooby/MessageDecoder.java index 8689b9b6f9..0368879fc8 100644 --- a/jooby/src/main/java/io/jooby/MessageDecoder.java +++ b/jooby/src/main/java/io/jooby/MessageDecoder.java @@ -7,7 +7,6 @@ import java.lang.reflect.Type; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.exception.UnsupportedMediaType; /** @@ -32,5 +31,5 @@ public interface MessageDecoder { * @return An instance of the target type. * @throws Exception Is something goes wrong. */ - @NonNull Object decode(@NonNull Context ctx, @NonNull Type type) throws Exception; + Object decode(Context ctx, Type type) throws Exception; } diff --git a/jooby/src/main/java/io/jooby/MessageEncoder.java b/jooby/src/main/java/io/jooby/MessageEncoder.java index eef31ecef7..76af8e62d1 100644 --- a/jooby/src/main/java/io/jooby/MessageEncoder.java +++ b/jooby/src/main/java/io/jooby/MessageEncoder.java @@ -5,8 +5,8 @@ */ package io.jooby; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.exception.NotAcceptableException; import io.jooby.output.Output; @@ -35,5 +35,5 @@ public interface MessageEncoder { * @return Encoded value or null if given object isn't supported it. * @throws Exception If something goes wrong. */ - @Nullable Output encode(@NonNull Context ctx, @NonNull Object value) throws Exception; + @Nullable Output encode(Context ctx, Object value) throws Exception; } diff --git a/jooby/src/main/java/io/jooby/ModelAndView.java b/jooby/src/main/java/io/jooby/ModelAndView.java index c1fb72a0f2..d7e598ecd0 100644 --- a/jooby/src/main/java/io/jooby/ModelAndView.java +++ b/jooby/src/main/java/io/jooby/ModelAndView.java @@ -10,8 +10,7 @@ import java.util.Set; import java.util.stream.Collectors; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; /** * Used by template engines to renderer views. @@ -52,7 +51,7 @@ public UnsupportedModelAndView(Class... supported) { * @param view View name must include file extension. * @param model View model. */ - public ModelAndView(@NonNull String view, @NonNull T model) { + public ModelAndView(String view, T model) { this.view = view; this.model = model; } @@ -63,7 +62,7 @@ public ModelAndView(@NonNull String view, @NonNull T model) { * @param view View name. * @return A map model and view. */ - public static MapModelAndView map(@NonNull String view) { + public static MapModelAndView map(String view) { return new MapModelAndView(view); } @@ -74,7 +73,7 @@ public static MapModelAndView map(@NonNull String view) { * @param model Map instance. * @return A map model and view. */ - public static MapModelAndView map(@NonNull String view, @NonNull Map model) { + public static MapModelAndView map(String view, Map model) { return new MapModelAndView(view, model); } diff --git a/jooby/src/main/java/io/jooby/OpenAPIModule.java b/jooby/src/main/java/io/jooby/OpenAPIModule.java index 7d99d853cf..776b00e695 100644 --- a/jooby/src/main/java/io/jooby/OpenAPIModule.java +++ b/jooby/src/main/java/io/jooby/OpenAPIModule.java @@ -10,8 +10,8 @@ import java.nio.charset.StandardCharsets; import java.util.*; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.SneakyThrows.Consumer2; import io.jooby.handler.Asset; import io.jooby.handler.AssetSource; @@ -94,7 +94,7 @@ public OpenAPISource put(String key, Asset asset) { } @Nullable @Override - public Asset resolve(@NonNull String path) { + public Asset resolve(String path) { return assets.get(path); } } @@ -113,7 +113,7 @@ public enum Format { * @param filePath File name. * @return File format. */ - public static Format from(@NonNull String filePath) { + public static Format from(String filePath) { for (Format value : values()) { if (filePath.endsWith("." + value.name().toLowerCase())) { return value; @@ -141,7 +141,7 @@ public static Format from(@NonNull String filePath) { * * @param path Custom path to use. */ - public OpenAPIModule(@NonNull String path) { + public OpenAPIModule(String path) { this.openAPIPath = Router.normalizePath(path); } @@ -160,7 +160,7 @@ public OpenAPIModule() { * @param path Path. * @return This module. */ - public @NonNull OpenAPIModule file(@NonNull String path) { + public OpenAPIModule file(String path) { customFiles.add(path); return this; } @@ -172,7 +172,7 @@ public OpenAPIModule() { * @param contextPath Context path/Path prefix. * @return This module. */ - public @NonNull OpenAPIModule contextPath(@NonNull String contextPath) { + public OpenAPIModule contextPath(String contextPath) { this.contextPath = contextPath; return this; } @@ -183,7 +183,7 @@ public OpenAPIModule() { * @param path Swagger-ui path. * @return This module. */ - public @NonNull OpenAPIModule swaggerUI(@NonNull String path) { + public OpenAPIModule swaggerUI(String path) { this.swaggerUIPath = Router.normalizePath(path); return this; } @@ -194,7 +194,7 @@ public OpenAPIModule() { * @param path Redoc path. * @return This module. */ - public @NonNull OpenAPIModule redoc(@NonNull String path) { + public OpenAPIModule redoc(String path) { this.redocPath = Router.normalizePath(path); return this; } @@ -207,13 +207,13 @@ public OpenAPIModule() { * @param format Supported formats. * @return This module. */ - public @NonNull OpenAPIModule format(@NonNull Format... format) { + public OpenAPIModule format(Format... format) { this.format = EnumSet.copyOf(Arrays.asList(format)); return this; } @Override - public void install(@NonNull Jooby application) throws Exception { + public void install(Jooby application) throws Exception { var filePaths = computeOpenAPIFiles(application); /* diff --git a/jooby/src/main/java/io/jooby/QueryString.java b/jooby/src/main/java/io/jooby/QueryString.java index 02a91bbe73..2bdd7c2588 100644 --- a/jooby/src/main/java/io/jooby/QueryString.java +++ b/jooby/src/main/java/io/jooby/QueryString.java @@ -5,8 +5,8 @@ */ package io.jooby; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.internal.UrlParser; import io.jooby.value.Value; import io.jooby.value.ValueFactory; @@ -35,7 +35,7 @@ public interface QueryString extends Value { * @return Non null result. * @param Type result. */ - T toEmpty(@NonNull Class type); + T toEmpty(Class type); /** * Query string hash value. @@ -50,7 +50,7 @@ public interface QueryString extends Value { * @param queryString Query string. * @return A query string. */ - static QueryString create(@NonNull ValueFactory valueFactory, @Nullable String queryString) { + static QueryString create(ValueFactory valueFactory, @Nullable String queryString) { return UrlParser.queryString(valueFactory, queryString); } } diff --git a/jooby/src/main/java/io/jooby/Registry.java b/jooby/src/main/java/io/jooby/Registry.java index d6a8e101ee..26f9043cc1 100644 --- a/jooby/src/main/java/io/jooby/Registry.java +++ b/jooby/src/main/java/io/jooby/Registry.java @@ -5,7 +5,6 @@ */ package io.jooby; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.exception.RegistryException; /** @@ -24,7 +23,7 @@ public interface Registry { * @return Instance of this type. * @throws RegistryException If there was a runtime failure while providing an instance. */ - @NonNull T require(@NonNull Class type) throws RegistryException; + T require(Class type) throws RegistryException; /** * Provides an instance of the given type where name matches it. @@ -35,7 +34,7 @@ public interface Registry { * @return Instance of this type. * @throws RegistryException If there was a runtime failure while providing an instance. */ - @NonNull T require(@NonNull Class type, @NonNull String name) throws RegistryException; + T require(Class type, String name) throws RegistryException; /** * Provides an instance of the given type. @@ -45,7 +44,7 @@ public interface Registry { * @return Instance of this type. * @throws RegistryException If there was a runtime failure while providing an instance. */ - @NonNull T require(@NonNull Reified type) throws RegistryException; + T require(Reified type) throws RegistryException; /** * Provides an instance of the given type where name matches it. @@ -56,7 +55,7 @@ public interface Registry { * @return Instance of this type. * @throws RegistryException If there was a runtime failure while providing an instance. */ - @NonNull T require(@NonNull Reified type, @NonNull String name) throws RegistryException; + T require(Reified type, String name) throws RegistryException; /** * Provides an instance of the given type. @@ -66,5 +65,5 @@ public interface Registry { * @return Instance of this type. * @throws RegistryException If there was a runtime failure while providing an instance. */ - @NonNull T require(@NonNull ServiceKey key) throws RegistryException; + T require(ServiceKey key) throws RegistryException; } diff --git a/jooby/src/main/java/io/jooby/Reified.java b/jooby/src/main/java/io/jooby/Reified.java index 2f3e3d6189..28590509be 100644 --- a/jooby/src/main/java/io/jooby/Reified.java +++ b/jooby/src/main/java/io/jooby/Reified.java @@ -13,7 +13,6 @@ import java.util.Set; import java.util.concurrent.CompletableFuture; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.internal.reflect.$Types; /** @@ -132,7 +131,7 @@ public final String toString() { * @param type Source type. * @return Gets type literal for the given {@code Type} instance. */ - public static Reified get(@NonNull Type type) { + public static Reified get(Type type) { return new Reified<>(type); } @@ -142,7 +141,7 @@ public static Reified get(@NonNull Type type) { * @param type Type. * @return Raw type. */ - public static Class rawType(@NonNull Type type) { + public static Class rawType(Type type) { if (type instanceof Class) { return (Class) type; } @@ -156,7 +155,7 @@ public static Class rawType(@NonNull Type type) { * @param Generic type. * @return Gets type literal for the given {@code Class} instance. */ - public static Reified get(@NonNull Class type) { + public static Reified get(Class type) { return new Reified<>(type); } @@ -167,7 +166,7 @@ public static Reified get(@NonNull Class type) { * @param Item type. * @return A {@link List} type literal. */ - public static Reified> list(@NonNull Type type) { + public static Reified> list(Type type) { return getParameterized(List.class, type); } @@ -178,7 +177,7 @@ public static Reified> list(@NonNull Type type) { * @param Item type. * @return A {@link List} type literal. */ - public static Reified> list(@NonNull Reified type) { + public static Reified> list(Reified type) { return getParameterized(List.class, type.getType()); } @@ -189,7 +188,7 @@ public static Reified> list(@NonNull Reified type) { * @param Item type. * @return A {@link Set} type literal. */ - public static Reified> set(@NonNull Type type) { + public static Reified> set(Type type) { return getParameterized(Set.class, type); } @@ -200,7 +199,7 @@ public static Reified> set(@NonNull Type type) { * @param Item type. * @return A {@link Set} type literal. */ - public static Reified> set(@NonNull Reified type) { + public static Reified> set(Reified type) { return getParameterized(Set.class, type.getType()); } @@ -211,7 +210,7 @@ public static Reified> set(@NonNull Reified type) { * @param Item type. * @return A {@link Optional} type literal. */ - public static Reified> optional(@NonNull Type type) { + public static Reified> optional(Type type) { return getParameterized(Optional.class, type); } @@ -222,7 +221,7 @@ public static Reified> optional(@NonNull Type type) { * @param Item type. * @return A {@link Optional} type literal. */ - public static Reified> optional(@NonNull Reified type) { + public static Reified> optional(Reified type) { return getParameterized(Optional.class, type.getType()); } @@ -235,7 +234,7 @@ public static Reified> optional(@NonNull Reified type) { * @param Key type. * @return A {@link Map} type literal. */ - public static Reified> map(@NonNull Type key, @NonNull Type value) { + public static Reified> map(Type key, Type value) { return getParameterized(Map.class, key, value); } @@ -248,7 +247,7 @@ public static Reified> map(@NonNull Type key, @NonNull Type val * @param Key type. * @return A {@link Map} type literal. */ - public static Reified> map(@NonNull Reified key, @NonNull Reified value) { + public static Reified> map(Reified key, Reified value) { return getParameterized(Map.class, key.getType(), value.getType()); } @@ -259,7 +258,7 @@ public static Reified> map(@NonNull Reified key, @NonNull Re * @param Item type. * @return A {@link CompletableFuture} type literal. */ - public static Reified> completableFuture(@NonNull Type type) { + public static Reified> completableFuture(Type type) { return getParameterized(CompletableFuture.class, type); } @@ -273,8 +272,7 @@ public static Reified> completableFuture(@NonNull Type * @return Gets type literal for the parameterized type represented by applying {@code * typeArguments} to {@code rawType}. */ - public static Reified getParameterized( - @NonNull Type rawType, @NonNull Type... typeArguments) { + public static Reified getParameterized(Type rawType, Type... typeArguments) { return new Reified<>($Types.newParameterizedTypeWithOwner(null, rawType, typeArguments)); } @@ -288,8 +286,7 @@ public static Reified getParameterized( * @return Gets type literal for the parameterized type represented by applying {@code * typeArguments} to {@code rawType}. */ - public static Reified getParameterized( - @NonNull Type rawType, @NonNull Reified argument) { + public static Reified getParameterized(Type rawType, Reified argument) { return new Reified<>($Types.newParameterizedTypeWithOwner(null, rawType, argument.getType())); } } diff --git a/jooby/src/main/java/io/jooby/RequestScope.java b/jooby/src/main/java/io/jooby/RequestScope.java index 51b5b56636..4dfa0bcf37 100644 --- a/jooby/src/main/java/io/jooby/RequestScope.java +++ b/jooby/src/main/java/io/jooby/RequestScope.java @@ -8,8 +8,7 @@ import java.util.HashMap; import java.util.Map; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; /** * Thread-Local request scope implementation useful for save/store request attribute and access to @@ -31,7 +30,7 @@ private RequestScope() {} * @param key The key against which to check for a given value within the current thread. * @return True if there is currently a session bound. */ - public static boolean hasBind(@NonNull Object key) { + public static boolean hasBind(Object key) { return get(key) != null; } @@ -43,7 +42,7 @@ public static boolean hasBind(@NonNull Object key) { * @param Bind type. * @return Any previously bound session (should be null in most cases). */ - public static @Nullable T bind(@NonNull Object key, @NonNull T value) { + public static @Nullable T bind(Object key, T value) { return (T) threadMap(true).put(key, value); } @@ -54,7 +53,7 @@ public static boolean hasBind(@NonNull Object key) { * @param Bind type. * @return The bound session if one, else null. */ - public static @Nullable T unbind(@NonNull Object key) { + public static @Nullable T unbind(Object key) { var contextMap = threadMap(); T existing = null; if (contextMap != null) { @@ -71,7 +70,7 @@ public static boolean hasBind(@NonNull Object key) { * @param Object type. * @return Binded value or null. */ - public static @Nullable T get(@NonNull Object key) { + public static @Nullable T get(Object key) { var contextMap = threadMap(); if (contextMap == null) { return null; diff --git a/jooby/src/main/java/io/jooby/Route.java b/jooby/src/main/java/io/jooby/Route.java index 04af34f354..44c5efc800 100644 --- a/jooby/src/main/java/io/jooby/Route.java +++ b/jooby/src/main/java/io/jooby/Route.java @@ -14,8 +14,8 @@ import java.util.concurrent.Executor; import java.util.stream.Stream; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.annotation.Transactional; import io.jooby.exception.*; import io.jooby.internal.RouterImpl; @@ -68,7 +68,7 @@ public interface Filter extends Aware { * @param next Next decorator. * @return A new decorator. */ - default Filter then(@NonNull Filter next) { + default Filter then(Filter next) { return new ThenFilter(this, next); } @@ -78,21 +78,21 @@ default Filter then(@NonNull Filter next) { * @param next Next handler. * @return A new handler. */ - default Handler then(@NonNull Handler next) { + default Handler then(Handler next) { return new ThenHandler(this, next); } } private record ThenFilter(Filter filter, Filter next) implements Filter { @Override - public Handler apply(@NonNull Handler handler) { + public Handler apply(Handler handler) { return new ThenHandler(filter, next.apply(handler)); } } private record ThenHandler(Filter filter, Handler next) implements Handler { @Override - public Object apply(@NonNull Context ctx) throws Exception { + public Object apply(Context ctx) throws Exception { return filter.apply(next).apply(ctx); } @@ -114,7 +114,7 @@ public interface Reactive extends Filter {} */ public interface Before extends Filter { - default @Override Handler apply(@NonNull Handler next) { + default @Override Handler apply(Handler next) { return ctx -> { apply(ctx); return next.apply(ctx); @@ -127,7 +127,7 @@ public interface Before extends Filter { * @param ctx Web context. * @throws Exception If something goes wrong. */ - void apply(@NonNull Context ctx) throws Exception; + void apply(Context ctx) throws Exception; /** * Chain this filter with next one and produces a new before filter. @@ -135,7 +135,7 @@ public interface Before extends Filter { * @param next Next decorator. * @return A new decorator. */ - default Before then(@NonNull Before next) { + default Before then(Before next) { return ctx -> { apply(ctx); if (!ctx.isResponseStarted()) { @@ -150,7 +150,7 @@ default Before then(@NonNull Before next) { * @param next Next handler. * @return A new handler. */ - default Handler then(@NonNull Handler next) { + default Handler then(Handler next) { return ctx -> { apply(ctx); if (!ctx.isResponseStarted()) { @@ -211,7 +211,7 @@ public interface After { * @param next Next filter. * @return A new filter. */ - default After then(@NonNull After next) { + default After then(After next) { return (ctx, result, failure) -> { next.apply(ctx, result, failure); apply(ctx, result, failure); @@ -226,8 +226,7 @@ default After then(@NonNull After next) { * @param failure Uncaught exception generated by route handler. * @throws Exception If something goes wrong. */ - void apply(@NonNull Context ctx, @Nullable Object result, @Nullable Throwable failure) - throws Exception; + void apply(Context ctx, @Nullable Object result, @Nullable Throwable failure) throws Exception; } /** @@ -247,7 +246,7 @@ public interface Complete { * @param ctx Read-Only web context. * @throws Exception If something goes wrong. */ - void apply(@NonNull Context ctx) throws Exception; + void apply(Context ctx) throws Exception; } /** @@ -278,7 +277,7 @@ public interface Handler extends Aware { * @return Route response. * @throws Exception If something goes wrong. */ - Object apply(@NonNull Context ctx) throws Exception; + Object apply(Context ctx) throws Exception; /** * Chain this after decorator with next and produces a new decorator. @@ -286,7 +285,7 @@ public interface Handler extends Aware { * @param next Next decorator. * @return A new handler. */ - default Handler then(@NonNull After next) { + default Handler then(After next) { return ctx -> { Throwable cause = null; Object value = null; @@ -411,10 +410,7 @@ public record Location(String filename, int line) {} * @param parameterTypes Method argument types. */ public record MvcMethod( - @NonNull Class declaringClass, - @NonNull String name, - @NonNull Class returnType, - Class... parameterTypes) { + Class declaringClass, String name, Class returnType, Class... parameterTypes) { /** * Convert to {@link java.lang.reflect.Method}. @@ -509,7 +505,7 @@ public MethodHandle toMethodHandle() { * @param pattern Path pattern. * @param handler Route handler. */ - public Route(@NonNull String method, @NonNull String pattern, @NonNull Handler handler) { + public Route(String method, String pattern, Handler handler) { this.method = method.toUpperCase(); this.pattern = pattern; this.handler = handler; @@ -575,7 +571,7 @@ public List getPathKeys() { * @param pathKeys Path keys or empty list. * @return This route. */ - public Route setPathKeys(@NonNull List pathKeys) { + public Route setPathKeys(List pathKeys) { this.pathKeys = pathKeys; return this; } @@ -608,7 +604,7 @@ public Handler getPipeline() { * @param keys Path keys. * @return Path. */ - public String reverse(@NonNull Map keys) { + public String reverse(Map keys) { return Router.reverse(getPattern(), keys); } @@ -638,7 +634,7 @@ public String reverse(Object... values) { * @param after After filter. * @return This route. */ - public Route setAfter(@NonNull After after) { + public Route setAfter(After after) { this.after = after; return this; } @@ -689,7 +685,7 @@ public MessageEncoder getEncoder() { * @param encoder MessageEncoder. * @return This route. */ - public Route setEncoder(@NonNull MessageEncoder encoder) { + public Route setEncoder(MessageEncoder encoder) { this.encoder = encoder; return this; } @@ -746,7 +742,7 @@ public List getProduces() { * @param produces Produce types. * @return This route. */ - public Route produces(@NonNull MediaType... produces) { + public Route produces(MediaType... produces) { return setProduces(Arrays.asList(produces)); } @@ -756,7 +752,7 @@ public Route produces(@NonNull MediaType... produces) { * @param produces Produce types. * @return This route. */ - public Route setProduces(@NonNull Collection produces) { + public Route setProduces(Collection produces) { if (!produces.isEmpty()) { if (this.produces == EMPTY_LIST) { this.produces = new ArrayList<>(); @@ -783,7 +779,7 @@ public List getConsumes() { * @param consumes Consume types. * @return This route. */ - public Route consumes(@NonNull MediaType... consumes) { + public Route consumes(MediaType... consumes) { return setConsumes(Arrays.asList(consumes)); } @@ -793,7 +789,7 @@ public Route consumes(@NonNull MediaType... consumes) { * @param consumes Consume types. * @return This route. */ - public Route setConsumes(@NonNull Collection consumes) { + public Route setConsumes(Collection consumes) { if (!consumes.isEmpty()) { if (this.consumes == EMPTY_LIST) { this.consumes = new ArrayList<>(); @@ -819,7 +815,7 @@ public Map getAttributes() { * @param Generic type. * @return value of the specific attribute. */ - public @Nullable T getAttribute(@NonNull String name) { + public @Nullable T getAttribute(String name) { //noinspection unchecked return (T) attributes.get(name); } @@ -830,7 +826,7 @@ public Map getAttributes() { * @param attributes . * @return This route. */ - public Route setAttributes(@NonNull Map attributes) { + public Route setAttributes(Map attributes) { this.attributes.putAll(attributes); return this; } @@ -842,7 +838,7 @@ public Route setAttributes(@NonNull Map attributes) { * @param value attribute value * @return This route. */ - public Route setAttribute(@NonNull String name, @NonNull Object value) { + public Route setAttribute(String name, Object value) { if (this.attributes == EMPTY_MAP) { this.attributes = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); } @@ -858,7 +854,7 @@ public Route setAttribute(@NonNull String name, @NonNull Object value) { * @param contentType Media type. * @return MessageDecoder. */ - public MessageDecoder decoder(@NonNull MediaType contentType) { + public MessageDecoder decoder(MediaType contentType) { return decoders.getOrDefault(contentType.getValue(), MessageDecoder.UNSUPPORTED_MEDIA_TYPE); } @@ -877,7 +873,7 @@ public Map getDecoders() { * @param decoders message decoder. * @return This route. */ - public Route setDecoders(@NonNull Map decoders) { + public Route setDecoders(Map decoders) { this.decoders = decoders; return this; } @@ -984,7 +980,7 @@ public List getTags() { * @param tags Tags. * @return This route. */ - public Route setTags(@NonNull List tags) { + public Route setTags(List tags) { if (this.tags == EMPTY_LIST) { this.tags = new ArrayList<>(); } @@ -1000,7 +996,7 @@ public Route setTags(@NonNull List tags) { * @param tag Tag. * @return This route. */ - public Route addTag(@NonNull String tag) { + public Route addTag(String tag) { if (this.tags == EMPTY_LIST) { this.tags = new ArrayList<>(); } @@ -1014,7 +1010,7 @@ public Route addTag(@NonNull String tag) { * @param tags Tags. * @return This route. */ - public Route tags(@NonNull String... tags) { + public Route tags(String... tags) { return setTags(Arrays.asList(tags)); } @@ -1202,7 +1198,7 @@ public List getRoutes() { * @param routes Sub-routes. * @return This route. */ - public Set setRoutes(@NonNull List routes) { + public Set setRoutes(List routes) { this.routes = routes; return this; } @@ -1213,7 +1209,7 @@ public Set setRoutes(@NonNull List routes) { * @param produces Produce types. * @return This route. */ - public Set produces(@NonNull MediaType... produces) { + public Set produces(MediaType... produces) { return setProduces(Arrays.asList(produces)); } @@ -1223,7 +1219,7 @@ public Set produces(@NonNull MediaType... produces) { * @param produces Produce types. * @return This route. */ - public Set setProduces(@NonNull Collection produces) { + public Set setProduces(Collection produces) { routes.forEach( it -> { if (it.getProduces().isEmpty()) { @@ -1239,7 +1235,7 @@ public Set setProduces(@NonNull Collection produces) { * @param consumes Consume types. * @return This route. */ - public Set consumes(@NonNull MediaType... consumes) { + public Set consumes(MediaType... consumes) { return setConsumes(Arrays.asList(consumes)); } @@ -1249,7 +1245,7 @@ public Set consumes(@NonNull MediaType... consumes) { * @param consumes Consume types. * @return This route. */ - public Set setConsumes(@NonNull Collection consumes) { + public Set setConsumes(Collection consumes) { routes.forEach( it -> { if (it.getConsumes().isEmpty()) { @@ -1265,7 +1261,7 @@ public Set setConsumes(@NonNull Collection consumes) { * @param attributes . * @return This route. */ - public Set setAttributes(@NonNull Map attributes) { + public Set setAttributes(Map attributes) { routes.forEach(it -> attributes.forEach((k, v) -> it.getAttributes().putIfAbsent(k, v))); return this; } @@ -1277,7 +1273,7 @@ public Set setAttributes(@NonNull Map attributes) { * @param value attribute value * @return This route. */ - public Set setAttribute(@NonNull String name, @NonNull Object value) { + public Set setAttribute(String name, Object value) { routes.forEach(it -> it.getAttributes().putIfAbsent(name, value)); return this; } @@ -1314,7 +1310,7 @@ public List getTags() { * @param tags Tags. * @return This route. */ - public Set setTags(@NonNull List tags) { + public Set setTags(List tags) { this.tags = tags; routes.forEach(it -> tags.forEach(it::addTag)); return this; @@ -1326,7 +1322,7 @@ public Set setTags(@NonNull List tags) { * @param tags Tags. * @return This route. */ - public Set tags(@NonNull String... tags) { + public Set tags(String... tags) { return setTags(Arrays.asList(tags)); } diff --git a/jooby/src/main/java/io/jooby/Router.java b/jooby/src/main/java/io/jooby/Router.java index b07d64ef5a..0a0af59ef9 100644 --- a/jooby/src/main/java/io/jooby/Router.java +++ b/jooby/src/main/java/io/jooby/Router.java @@ -27,11 +27,10 @@ import java.util.stream.IntStream; import java.util.stream.Stream; +import org.jspecify.annotations.Nullable; import org.slf4j.Logger; import com.typesafe.config.Config; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; import io.jooby.exception.MissingValueException; import io.jooby.handler.AssetHandler; import io.jooby.handler.AssetSource; @@ -60,7 +59,7 @@ interface Match { * * @return Matched route. */ - @NonNull Route route(); + Route route(); /** * Executes matched route. @@ -69,7 +68,7 @@ interface Match { * @param pipeline Route pipeline. * @return route response. */ - Object execute(@NonNull Context context, @NonNull Route.Handler pipeline); + Object execute(Context context, Route.Handler pipeline); /** * Executes matched route. @@ -77,7 +76,7 @@ interface Match { * @param context Web Context. * @return route response. */ - default Object execute(@NonNull Context context) { + default Object execute(Context context) { return execute(context, route().getPipeline()); } @@ -86,7 +85,7 @@ default Object execute(@NonNull Context context) { * * @return Path pattern variables. */ - @NonNull Map pathMap(); + Map pathMap(); } /** HTTP GET. */ @@ -127,28 +126,28 @@ default Object execute(@NonNull Context context) { * * @return Application configuration. */ - @NonNull Config getConfig(); + Config getConfig(); /** * Application environment. * * @return Application environment. */ - @NonNull Environment getEnvironment(); + Environment getEnvironment(); /** * Returns the supported locales. * * @return The supported locales. */ - @NonNull List getLocales(); + List getLocales(); /** * Mutable map of application attributes. * * @return Mutable map of application attributes. */ - @NonNull Map getAttributes(); + Map getAttributes(); /** * Get an attribute by his key. This is just a utility method around {@link #getAttributes()}. @@ -157,7 +156,7 @@ default Object execute(@NonNull Context context) { * @param Attribute type. * @return Attribute value. */ - @NonNull default T getAttribute(@NonNull String key) { + default T getAttribute(String key) { @SuppressWarnings("unchecked") T attribute = (T) getAttributes().get(key); if (attribute == null) { @@ -173,7 +172,7 @@ default Object execute(@NonNull Context context) { * @param value Attribute value. * @return This router. */ - @NonNull default Router setAttribute(@NonNull String key, Object value) { + default Router setAttribute(String key, Object value) { getAttributes().put(key, value); return this; } @@ -186,14 +185,14 @@ default Object execute(@NonNull Context context) { * * @return Service registry. */ - @NonNull ServiceRegistry getServices(); + ServiceRegistry getServices(); /** * Server options. * * @return Server options. */ - @NonNull ServerOptions getServerOptions(); + ServerOptions getServerOptions(); /** * Set application context path. Context path is the base path for all routes. Default is: / @@ -202,7 +201,7 @@ default Object execute(@NonNull Context context) { * @param contextPath Context path. * @return This router. */ - @NonNull Router setContextPath(@NonNull String contextPath); + Router setContextPath(String contextPath); /** * Get application context path (a.k.a as base path). @@ -235,7 +234,7 @@ default Object execute(@NonNull Context context) { * @param parameterName Form field name. * @return This router. */ - @NonNull Router setHiddenMethod(@NonNull String parameterName); + Router setHiddenMethod(String parameterName); /** * Provides a way to override the current HTTP method using lookup strategy. @@ -243,7 +242,7 @@ default Object execute(@NonNull Context context) { * @param provider Lookup strategy. * @return This router. */ - @NonNull Router setHiddenMethod(@NonNull Function> provider); + Router setHiddenMethod(Function> provider); /** * Provides a way to set the current user from a {@link Context}. Current user can be retrieve it @@ -252,7 +251,7 @@ default Object execute(@NonNull Context context) { * @param provider User provider/factory. * @return This router. */ - @NonNull Router setCurrentUser(@NonNull Function provider); + Router setCurrentUser(Function provider); /* *********************************************************************************************** * use(Router) @@ -278,7 +277,7 @@ default Object execute(@NonNull Context context) { * @param subrouter Subrouter. * @return Created routes. */ - @NonNull Route.Set domain(@NonNull String domain, @NonNull Router subrouter); + Route.Set domain(String domain, Router subrouter); /** * Enabled routes for specific domain. Domain matching is done using the host header. @@ -301,7 +300,7 @@ default Object execute(@NonNull Context context) { * @param body Route action. * @return Created routes. */ - @NonNull Route.Set domain(@NonNull String domain, @NonNull Runnable body); + Route.Set domain(String domain, Runnable body); /** * Import routes from given router. Predicate works like a filter and only when predicate pass the @@ -327,7 +326,7 @@ default Object execute(@NonNull Context context) { * @param router Router to import. * @return Created routes. */ - @NonNull Route.Set mount(@NonNull Predicate predicate, @NonNull Router router); + Route.Set mount(Predicate predicate, Router router); /** * Import routes from given action. Predicate works like a filter and only when predicate pass the @@ -355,7 +354,7 @@ default Object execute(@NonNull Context context) { * @param body Route action. * @return Created routes. */ - @NonNull Route.Set mount(@NonNull Predicate predicate, @NonNull Runnable body); + Route.Set mount(Predicate predicate, Runnable body); /** * Import all routes from the given router and prefix them with the given path. @@ -366,7 +365,7 @@ default Object execute(@NonNull Context context) { * @param router Router to import. * @return Created routes. */ - @NonNull Route.Set mount(@NonNull String path, @NonNull Router router); + Route.Set mount(String path, Router router); /** * Import all routes from the given router. @@ -376,7 +375,7 @@ default Object execute(@NonNull Context context) { * @param router Router to import. * @return Created routes. */ - @NonNull Route.Set mount(@NonNull Router router); + Route.Set mount(Router router); /* *********************************************************************************************** * Mvc @@ -390,7 +389,7 @@ default Object execute(@NonNull Context context) { * @param handler WebSocket handler. * @return A new route. */ - @NonNull Route ws(@NonNull String pattern, @NonNull WebSocket.Initializer handler); + Route ws(String pattern, WebSocket.Initializer handler); /** * Add a server-sent event handler. @@ -399,14 +398,14 @@ default Object execute(@NonNull Context context) { * @param handler Handler. * @return A new route. */ - @NonNull Route sse(@NonNull String pattern, @NonNull ServerSentEmitter.Handler handler); + Route sse(String pattern, ServerSentEmitter.Handler handler); /** * Returns all routes. * * @return All routes. */ - @NonNull List getRoutes(); + List getRoutes(); /** * Register a route response encoder. @@ -414,7 +413,7 @@ default Object execute(@NonNull Context context) { * @param encoder MessageEncoder instance. * @return This router. */ - @NonNull Router encoder(@NonNull MessageEncoder encoder); + Router encoder(MessageEncoder encoder); /** * Register a route response encoder. @@ -423,7 +422,7 @@ default Object execute(@NonNull Context context) { * @param encoder MessageEncoder instance. * @return This router. */ - @NonNull Router encoder(@NonNull MediaType contentType, @NonNull MessageEncoder encoder); + Router encoder(MediaType contentType, MessageEncoder encoder); /** * Application temporary directory. This method initialize the {@link Environment} when isn't set @@ -431,7 +430,7 @@ default Object execute(@NonNull Context context) { * * @return Application temporary directory. */ - @NonNull Path getTmpdir(); + Path getTmpdir(); /** * Register a decoder for the given content type. @@ -440,14 +439,14 @@ default Object execute(@NonNull Context context) { * @param decoder MessageDecoder. * @return This router. */ - @NonNull Router decoder(@NonNull MediaType contentType, @NonNull MessageDecoder decoder); + Router decoder(MediaType contentType, MessageDecoder decoder); /** * Returns the worker thread pool. This thread pool is used to run application blocking code. * * @return Worker thread pool. */ - @NonNull Executor getWorker(); + Executor getWorker(); /** * Set a worker thread pool. This thread pool is used to run application blocking code. @@ -455,7 +454,7 @@ default Object execute(@NonNull Context context) { * @param worker Worker thread pool. * @return This router. */ - @NonNull Router setWorker(@NonNull Executor worker); + Router setWorker(Executor worker); /** * Set the default worker thread pool. Via this method the underlying web server set/suggests the @@ -467,7 +466,7 @@ default Object execute(@NonNull Context context) { * @param worker Default worker thread pool. * @return This router. */ - Router setDefaultWorker(@NonNull Executor worker); + Router setDefaultWorker(Executor worker); /** * Output factory. @@ -482,7 +481,7 @@ default Object execute(@NonNull Context context) { * @param filter Filter. * @return This router. */ - Router use(@NonNull Route.Filter filter); + Router use(Route.Filter filter); /** * Add a before route decorator to the route pipeline. @@ -490,7 +489,7 @@ default Object execute(@NonNull Context context) { * @param before Before decorator. * @return This router. */ - @NonNull Router before(@NonNull Route.Before before); + Router before(Route.Before before); /** * Add an after route decorator to the route pipeline. @@ -498,7 +497,7 @@ default Object execute(@NonNull Context context) { * @param after After decorator. * @return This router. */ - @NonNull Router after(@NonNull Route.After after); + Router after(Route.After after); /** * Dispatch route pipeline to the {@link #getWorker()} worker thread pool. After dispatch @@ -507,7 +506,7 @@ default Object execute(@NonNull Context context) { * @param body Dispatch body. * @return This router. */ - @NonNull Router dispatch(@NonNull Runnable body); + Router dispatch(Runnable body); /** * Dispatch route pipeline to the given executor. After dispatch application code is allowed to do @@ -518,7 +517,7 @@ default Object execute(@NonNull Context context) { * @param body Dispatch body. * @return This router. */ - @NonNull Router dispatch(@NonNull Executor executor, @NonNull Runnable body); + Router dispatch(Executor executor, Runnable body); /** * Group one or more routes. Useful for applying cross cutting concerns to the enclosed routes. @@ -526,7 +525,7 @@ default Object execute(@NonNull Context context) { * @param body Route body. * @return All routes created. */ - @NonNull Route.Set routes(@NonNull Runnable body); + Route.Set routes(Runnable body); /** * Group one or more routes under a common path prefix. Useful for applying cross-cutting concerns @@ -536,7 +535,7 @@ default Object execute(@NonNull Context context) { * @param body Route body. * @return All routes created. */ - @NonNull Route.Set path(@NonNull String pattern, @NonNull Runnable body); + Route.Set path(String pattern, Runnable body); /** * Add a HTTP GET handler. @@ -545,7 +544,7 @@ default Object execute(@NonNull Context context) { * @param handler Application code. * @return A route. */ - @NonNull default Route get(@NonNull String pattern, @NonNull Route.Handler handler) { + default Route get(String pattern, Route.Handler handler) { return route(GET, pattern, handler); } @@ -556,7 +555,7 @@ default Object execute(@NonNull Context context) { * @param handler Application code. * @return A route. */ - @NonNull default Route post(@NonNull String pattern, @NonNull Route.Handler handler) { + default Route post(String pattern, Route.Handler handler) { return route(POST, pattern, handler); } @@ -567,7 +566,7 @@ default Object execute(@NonNull Context context) { * @param handler Application code. * @return A route. */ - @NonNull default Route put(@NonNull String pattern, @NonNull Route.Handler handler) { + default Route put(String pattern, Route.Handler handler) { return route(PUT, pattern, handler); } @@ -578,7 +577,7 @@ default Object execute(@NonNull Context context) { * @param handler Application code. * @return A route. */ - @NonNull default Route delete(@NonNull String pattern, @NonNull Route.Handler handler) { + default Route delete(String pattern, Route.Handler handler) { return route(DELETE, pattern, handler); } @@ -589,7 +588,7 @@ default Object execute(@NonNull Context context) { * @param handler Application code. * @return A route. */ - @NonNull default Route patch(@NonNull String pattern, @NonNull Route.Handler handler) { + default Route patch(String pattern, Route.Handler handler) { return route(PATCH, pattern, handler); } @@ -600,7 +599,7 @@ default Object execute(@NonNull Context context) { * @param handler Application code. * @return A route. */ - @NonNull default Route head(@NonNull String pattern, @NonNull Route.Handler handler) { + default Route head(String pattern, Route.Handler handler) { return route(HEAD, pattern, handler); } @@ -611,7 +610,7 @@ default Object execute(@NonNull Context context) { * @param handler Application code. * @return A route. */ - @NonNull default Route options(@NonNull String pattern, @NonNull Route.Handler handler) { + default Route options(String pattern, Route.Handler handler) { return route(OPTIONS, pattern, handler); } @@ -622,7 +621,7 @@ default Object execute(@NonNull Context context) { * @param handler Application code. * @return A route. */ - @NonNull default Route trace(@NonNull String pattern, @NonNull Route.Handler handler) { + default Route trace(String pattern, Route.Handler handler) { return route(TRACE, pattern, handler); } @@ -633,7 +632,7 @@ default Object execute(@NonNull Context context) { * @param source File system directory. * @return A route. */ - default @NonNull AssetHandler assets(@NonNull String pattern, @NonNull Path source) { + default AssetHandler assets(String pattern, Path source) { return assets(pattern, AssetSource.create(source)); } @@ -649,7 +648,7 @@ default Object execute(@NonNull Context context) { * @param source File-System folder when exists, or fallback to a classpath folder. * @return AssetHandler. */ - default @NonNull AssetHandler assets(@NonNull String pattern, @NonNull String source) { + default AssetHandler assets(String pattern, String source) { Path path = Stream.of(source.split("/")) .reduce(Paths.get(System.getProperty("user.dir")), Path::resolve, Path::resolve); @@ -667,8 +666,7 @@ default Object execute(@NonNull Context context) { * @param sources additional Asset sources. * @return A route. */ - default @NonNull AssetHandler assets( - @NonNull String pattern, @NonNull AssetSource source, @NonNull AssetSource... sources) { + default AssetHandler assets(String pattern, AssetSource source, AssetSource... sources) { AssetSource[] allSources; if (sources.length == 0) { allSources = new AssetSource[] {source}; @@ -687,7 +685,7 @@ default Object execute(@NonNull Context context) { * @param handler Asset handler. * @return A route. */ - default @NonNull AssetHandler assets(@NonNull String pattern, @NonNull AssetHandler handler) { + default AssetHandler assets(String pattern, AssetHandler handler) { route(GET, pattern, handler); return handler; } @@ -700,7 +698,7 @@ default Object execute(@NonNull Context context) { * @param handler Application code. * @return A route. */ - @NonNull Route route(@NonNull String method, @NonNull String pattern, @NonNull Route.Handler handler); + Route route(String method, String pattern, Route.Handler handler); /** * Find a matching route using the given context. @@ -711,7 +709,7 @@ default Object execute(@NonNull Context context) { * @param ctx Web Context. * @return A route match result. */ - @NonNull Match match(@NonNull Context ctx); + Match match(Context ctx); /** * Find a matching route using the given context. @@ -723,7 +721,7 @@ default Object execute(@NonNull Context context) { * @param path Path to match. * @return A route match result. */ - boolean match(@NonNull String pattern, @NonNull String path); + boolean match(String pattern, String path); /* Error handler: */ @@ -734,7 +732,7 @@ default Object execute(@NonNull Context context) { * @param statusCode Status code. * @return This router. */ - @NonNull Router errorCode(@NonNull Class type, @NonNull StatusCode statusCode); + Router errorCode(Class type, StatusCode statusCode); /** * Computes the status code for the given exception. @@ -742,7 +740,7 @@ default Object execute(@NonNull Context context) { * @param cause Exception. * @return Status code. */ - @NonNull StatusCode errorCode(@NonNull Throwable cause); + StatusCode errorCode(Throwable cause); /** * Add a custom error handler that matches the given status code. @@ -751,7 +749,7 @@ default Object execute(@NonNull Context context) { * @param handler Error handler. * @return This router. */ - @NonNull default Router error(@NonNull StatusCode statusCode, @NonNull ErrorHandler handler) { + default Router error(StatusCode statusCode, ErrorHandler handler) { return error(statusCode::equals, handler); } @@ -762,7 +760,7 @@ default Object execute(@NonNull Context context) { * @param handler Error handler. * @return This router. */ - @NonNull default Router error(@NonNull Class type, @NonNull ErrorHandler handler) { + default Router error(Class type, ErrorHandler handler) { return error( (ctx, x, statusCode) -> { if (type.isInstance(x) || type.isInstance(x.getCause())) { @@ -778,7 +776,7 @@ default Object execute(@NonNull Context context) { * @param handler Error handler. * @return This router. */ - @NonNull default Router error(@NonNull Predicate predicate, @NonNull ErrorHandler handler) { + default Router error(Predicate predicate, ErrorHandler handler) { return error( (ctx, x, statusCode) -> { if (predicate.test(statusCode)) { @@ -793,28 +791,28 @@ default Object execute(@NonNull Context context) { * @param handler Error handler. * @return This router. */ - @NonNull Router error(@NonNull ErrorHandler handler); + Router error(ErrorHandler handler); /** * Get the error handler. * * @return An error handler. */ - @NonNull ErrorHandler getErrorHandler(); + ErrorHandler getErrorHandler(); /** * Application logger. * * @return Application logger. */ - @NonNull Logger getLog(); + Logger getLog(); /** * Router options. * * @return Router options. */ - @NonNull RouterOptions getRouterOptions(); + RouterOptions getRouterOptions(); /** * Set router options. @@ -822,14 +820,14 @@ default Object execute(@NonNull Context context) { * @param options router options. * @return This router. */ - @NonNull Router setRouterOptions(@NonNull RouterOptions options); + Router setRouterOptions(RouterOptions options); /** * Session store. Default is {@link SessionStore#UNSUPPORTED}. * * @return Session store. */ - @NonNull SessionStore getSessionStore(); + SessionStore getSessionStore(); /** * Set session store. @@ -837,7 +835,7 @@ default Object execute(@NonNull Context context) { * @param store Session store. * @return This router. */ - @NonNull Router setSessionStore(@NonNull SessionStore store); + Router setSessionStore(SessionStore store); /** * Get an executor from application registry. @@ -845,7 +843,7 @@ default Object execute(@NonNull Context context) { * @param name Executor name. * @return Executor. */ - default @NonNull Executor executor(@NonNull String name) { + default Executor executor(String name) { return require(Executor.class, name); } @@ -856,7 +854,7 @@ default Object execute(@NonNull Context context) { * @param executor Executor. * @return This router. */ - @NonNull Router executor(@NonNull String name, @NonNull Executor executor); + Router executor(String name, Executor executor); /** * Template for the flash cookie. Default name is: jooby.flash. @@ -872,7 +870,7 @@ default Object execute(@NonNull Context context) { * @param flashCookie The cookie template. * @return This router. */ - Router setFlashCookie(@NonNull Cookie flashCookie); + Router setFlashCookie(Cookie flashCookie); /** * Value factory. @@ -887,7 +885,7 @@ default Object execute(@NonNull Context context) { * @param valueFactory Value factory. * @return This router. */ - Router setValueFactory(@NonNull ValueFactory valueFactory); + Router setValueFactory(ValueFactory valueFactory); /** * Ensure path start with a /(leading slash). @@ -908,7 +906,7 @@ static String leadingSlash(@Nullable String path) { * @param path Path to process. * @return Path without trailing slashes. */ - static String noTrailingSlash(@NonNull String path) { + static String noTrailingSlash(String path) { StringBuilder buff = new StringBuilder(path); int i = buff.length() - 1; while (i > 0 && buff.charAt(i) == '/') { @@ -962,7 +960,7 @@ static String normalizePath(@Nullable String path) { * @param pattern Path pattern. * @return Path keys. */ - static @NonNull List pathKeys(@NonNull String pattern) { + static List pathKeys(String pattern) { return pathKeys(pattern, (k, v) -> {}); } @@ -975,8 +973,7 @@ static String normalizePath(@Nullable String path) { * @param consumer Listen for key and regex variables found. * @return Path keys. */ - static @NonNull List pathKeys( - @NonNull String pattern, BiConsumer consumer) { + static List pathKeys(String pattern, BiConsumer consumer) { List result = new ArrayList<>(); int start = -1; int end = Integer.MAX_VALUE; @@ -1043,7 +1040,7 @@ static String normalizePath(@Nullable String path) { * @param pattern Pattern. * @return One or more patterns. */ - static @NonNull List expandOptionalVariables(@NonNull String pattern) { + static List expandOptionalVariables(String pattern) { if (pattern == null || pattern.isEmpty() || pattern.equals("/")) { return Collections.singletonList("/"); } @@ -1135,7 +1132,7 @@ static String normalizePath(@Nullable String path) { * @param values Path keys. * @return Path. */ - static @NonNull String reverse(@NonNull String pattern, @NonNull Object... values) { + static String reverse(String pattern, Object... values) { Map keys = new HashMap<>(); IntStream.range(0, values.length).forEach(k -> keys.put(Integer.toString(k), values[k])); return reverse(pattern, keys); @@ -1148,7 +1145,7 @@ static String normalizePath(@Nullable String path) { * @param keys Path keys. * @return Path. */ - static @NonNull String reverse(@NonNull String pattern, @NonNull Map keys) { + static String reverse(String pattern, Map keys) { StringBuilder path = new StringBuilder(); int start = 0; int end = Integer.MAX_VALUE; diff --git a/jooby/src/main/java/io/jooby/RouterOptions.java b/jooby/src/main/java/io/jooby/RouterOptions.java index 8e60d44121..9d38aaf6cb 100644 --- a/jooby/src/main/java/io/jooby/RouterOptions.java +++ b/jooby/src/main/java/io/jooby/RouterOptions.java @@ -5,8 +5,6 @@ */ package io.jooby; -import edu.umd.cs.findbugs.annotations.NonNull; - /** * Router options: * @@ -302,7 +300,7 @@ public boolean isTrustProxy() { * @param trustProxy True to enable. * @return This options. */ - @NonNull public RouterOptions setTrustProxy(boolean trustProxy) { + public RouterOptions setTrustProxy(boolean trustProxy) { this.trustProxy = trustProxy; return this; } diff --git a/jooby/src/main/java/io/jooby/Sender.java b/jooby/src/main/java/io/jooby/Sender.java index 7db97c811d..433e98c688 100644 --- a/jooby/src/main/java/io/jooby/Sender.java +++ b/jooby/src/main/java/io/jooby/Sender.java @@ -8,8 +8,8 @@ import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.output.Output; /** @@ -59,7 +59,7 @@ interface Callback { * @param ctx Web context. * @param cause Cause in case of error or null for success. */ - void onComplete(@NonNull Context ctx, @Nullable Throwable cause); + void onComplete(Context ctx, @Nullable Throwable cause); } /** @@ -69,7 +69,7 @@ interface Callback { * @param callback Callback. * @return This sender. */ - default Sender write(@NonNull String data, @NonNull Callback callback) { + default Sender write(String data, Callback callback) { return write(data, StandardCharsets.UTF_8, callback); } @@ -81,7 +81,7 @@ default Sender write(@NonNull String data, @NonNull Callback callback) { * @param callback Callback. * @return This sender. */ - default Sender write(@NonNull String data, @NonNull Charset charset, @NonNull Callback callback) { + default Sender write(String data, Charset charset, Callback callback) { return write(data.getBytes(charset), callback); } @@ -92,7 +92,7 @@ default Sender write(@NonNull String data, @NonNull Charset charset, @NonNull Ca * @param callback Callback. * @return This sender. */ - Sender write(@NonNull byte[] data, @NonNull Callback callback); + Sender write(byte[] data, Callback callback); /** * Write an output. @@ -101,7 +101,7 @@ default Sender write(@NonNull String data, @NonNull Charset charset, @NonNull Ca * @param callback Callback. * @return This sender. */ - Sender write(@NonNull Output output, @NonNull Callback callback); + Sender write(Output output, Callback callback); /** Close the sender. */ void close(); diff --git a/jooby/src/main/java/io/jooby/Server.java b/jooby/src/main/java/io/jooby/Server.java index 5a1e8f2883..5cbd6674f4 100644 --- a/jooby/src/main/java/io/jooby/Server.java +++ b/jooby/src/main/java/io/jooby/Server.java @@ -21,10 +21,9 @@ import java.util.function.Predicate; import java.util.stream.Collectors; +import org.jspecify.annotations.Nullable; import org.slf4j.LoggerFactory; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; import io.jooby.exception.StartupException; import io.jooby.internal.MutedServer; import io.jooby.output.OutputFactory; @@ -94,13 +93,13 @@ abstract class Base implements Server { private final AtomicBoolean stopping = new AtomicBoolean(); - protected void fireStart(@NonNull List applications, @NonNull Executor defaultWorker) { + protected void fireStart(List applications, Executor defaultWorker) { for (Jooby app : applications) { app.setDefaultWorker(defaultWorker).start(this); } } - protected void fireReady(@NonNull List applications) { + protected void fireReady(List applications) { for (Jooby app : applications) { app.ready(this); } @@ -133,7 +132,7 @@ public final ServerOptions getOptions() { } @Override - public Server setOptions(@NonNull ServerOptions options) { + public Server setOptions(ServerOptions options) { this.options = options; return this; } @@ -145,7 +144,7 @@ public Server setOptions(@NonNull ServerOptions options) { * @param application Application being deployed. * @return This instance. */ - default Server init(@NonNull Jooby application) { + default Server init(Jooby application) { var registry = application.getServices(); var options = getOptions(); options.setServer(getName()); @@ -170,7 +169,7 @@ default Server init(@NonNull Jooby application) { * @param options Server options. * @return This server. */ - Server setOptions(@NonNull ServerOptions options); + Server setOptions(ServerOptions options); /** * Get server name. @@ -192,7 +191,7 @@ default Server init(@NonNull Jooby application) { * @param application Application to start. * @return This server. */ - Server start(@NonNull Jooby... application); + Server start(Jooby... application); /** * Utility method to turn off odd logger. This helps to ensure same startup log lines across @@ -220,7 +219,7 @@ default List getLoggerOff() { * * @param predicate Customize connection lost error. */ - static void addConnectionLost(@NonNull Predicate predicate) { + static void addConnectionLost(Predicate predicate) { Base.connectionLostListeners.add(predicate); } @@ -231,7 +230,7 @@ static void addConnectionLost(@NonNull Predicate predicate) { * * @param predicate Customize connection lost error. */ - static void addAddressInUse(@NonNull Predicate predicate) { + static void addAddressInUse(Predicate predicate) { Base.addressInUseListeners.add(predicate); } @@ -282,7 +281,7 @@ static Server loadServer() { * @param options Optional server options. * @return A server. */ - static Server loadServer(@NonNull ServerOptions options) { + static Server loadServer(ServerOptions options) { List servers = stream( spliteratorUnknownSize( diff --git a/jooby/src/main/java/io/jooby/ServerOptions.java b/jooby/src/main/java/io/jooby/ServerOptions.java index 8022fc244d..d0c5213e54 100644 --- a/jooby/src/main/java/io/jooby/ServerOptions.java +++ b/jooby/src/main/java/io/jooby/ServerOptions.java @@ -20,9 +20,9 @@ import javax.net.ssl.SSLContext; +import org.jspecify.annotations.Nullable; + import com.typesafe.config.Config; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; import io.jooby.internal.SslContextProvider; import io.jooby.output.OutputOptions; @@ -156,7 +156,7 @@ public ServerOptions() { * @param conf Configuration object. * @return Server options. */ - public static Optional from(@NonNull Config conf) { + public static Optional from(Config conf) { if (conf.hasPath("server")) { var options = new ServerOptions(); if (conf.hasPath("server.port")) { @@ -239,7 +239,7 @@ public String toString() { * @param server Name of the underlying server. * @return This options. */ - public ServerOptions setServer(@NonNull String server) { + public ServerOptions setServer(String server) { this.server = server; return this; } @@ -268,7 +268,7 @@ public int getPort() { * @param port Server port or 0 to pick a random port. * @return This options. */ - public @NonNull ServerOptions setPort(int port) { + public ServerOptions setPort(int port) { this.port = Math.max(0, port); return this; } @@ -297,7 +297,7 @@ public boolean isSSLEnabled() { * @param securePort Port number or 0 for random number. * @return This options. */ - public @NonNull ServerOptions setSecurePort(@Nullable Integer securePort) { + public ServerOptions setSecurePort(@Nullable Integer securePort) { if (securePort == null) { this.securePort = null; } else { @@ -321,7 +321,7 @@ public boolean isHttpsOnly() { * @param httpsOnly True to bind only HTTPS. * @return This options. */ - public @NonNull ServerOptions setHttpsOnly(boolean httpsOnly) { + public ServerOptions setHttpsOnly(boolean httpsOnly) { this.httpsOnly = httpsOnly; return this; } @@ -364,7 +364,7 @@ public int getWorkerThreads() { * @param workerThreads Number of worker threads to use. * @return This options. */ - public @NonNull ServerOptions setWorkerThreads(int workerThreads) { + public ServerOptions setWorkerThreads(int workerThreads) { this.workerThreads = workerThreads; return this; } @@ -386,7 +386,7 @@ public int getWorkerThreads() { * @param compressionLevel Value between 0..9 or null. * @return This options. */ - public @NonNull ServerOptions setCompressionLevel(@Nullable Integer compressionLevel) { + public ServerOptions setCompressionLevel(@Nullable Integer compressionLevel) { this.compressionLevel = compressionLevel; return this; } @@ -429,7 +429,7 @@ public OutputOptions getOutput() { * @param output Options. * @return This instance. */ - public ServerOptions setOutput(@NonNull OutputOptions output) { + public ServerOptions setOutput(OutputOptions output) { this.output = output; return this; } @@ -498,7 +498,7 @@ public int getMaxHeaderSize() { * . * @return The maximum size in bytes of an http request header. Default is 8kb. */ - public @NonNull ServerOptions setMaxHeaderSize(int maxHeaderSize) { + public ServerOptions setMaxHeaderSize(int maxHeaderSize) { this.maxHeaderSize = maxHeaderSize; return this; } @@ -540,7 +540,7 @@ public void setHost(String host) { * @param ssl SSL options. * @return Server options. */ - public @NonNull ServerOptions setSsl(@Nullable SslOptions ssl) { + public ServerOptions setSsl(@Nullable SslOptions ssl) { this.ssl = ssl; return this; } @@ -607,7 +607,7 @@ public ServerOptions setExpectContinue(@Nullable Boolean expectContinue) { * @param loader Resource loader. * @return SSLContext or null when SSL is disabled. */ - public @Nullable SSLContext getSSLContext(@NonNull ClassLoader loader) { + public @Nullable SSLContext getSSLContext(ClassLoader loader) { if (isSSLEnabled()) { setSecurePort(Optional.ofNullable(securePort).orElse(SERVER_SECURE_PORT)); SslOptions options = Optional.ofNullable(ssl).orElseGet(SslOptions::selfSigned); diff --git a/jooby/src/main/java/io/jooby/ServerSentEmitter.java b/jooby/src/main/java/io/jooby/ServerSentEmitter.java index f1da31e4d7..8c0ece7dff 100644 --- a/jooby/src/main/java/io/jooby/ServerSentEmitter.java +++ b/jooby/src/main/java/io/jooby/ServerSentEmitter.java @@ -8,12 +8,10 @@ import java.util.Map; import java.util.concurrent.TimeUnit; +import org.jspecify.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; - /** * Server-Sent message emitter. * @@ -73,7 +71,7 @@ interface Handler { * @param sse Server sent event. * @throws Exception If something goes wrong. */ - void handle(@NonNull ServerSentEmitter sse) throws Exception; + void handle(ServerSentEmitter sse) throws Exception; } /** @@ -91,14 +89,14 @@ interface Handler { * * @return Read-only originating HTTP request. */ - @NonNull Context getContext(); + Context getContext(); /** * Context attributes (a.k.a request attributes). * * @return Context attributes. */ - default @NonNull Map getAttributes() { + default Map getAttributes() { return getContext().getAttributes(); } @@ -110,7 +108,7 @@ interface Handler { * @param Attribute type. * @return Attribute value. */ - default @NonNull T attribute(@NonNull String key) { + default T attribute(String key) { return getContext().getAttribute(key); } @@ -121,7 +119,7 @@ interface Handler { * @param value Attribute value. * @return This ServerSent. */ - default @NonNull ServerSentEmitter attribute(@NonNull String key, Object value) { + default ServerSentEmitter attribute(String key, Object value) { getContext().setAttribute(key, value); return this; } @@ -132,7 +130,7 @@ interface Handler { * @param data Text Message. * @return This ServerSent. */ - default @NonNull ServerSentEmitter send(@NonNull String data) { + default ServerSentEmitter send(String data) { return send(new ServerSentMessage(data)); } @@ -142,7 +140,7 @@ interface Handler { * @param data Text Message. * @return This ServerSent. */ - default @NonNull ServerSentEmitter send(@NonNull byte[] data) { + default ServerSentEmitter send(byte[] data) { return send(new ServerSentMessage(data)); } @@ -152,7 +150,7 @@ interface Handler { * @param data Text Message. * @return This ServerSent. */ - default @NonNull ServerSentEmitter send(@NonNull Object data) { + default ServerSentEmitter send(Object data) { if (data instanceof ServerSentMessage) { return send((ServerSentMessage) data); } else { @@ -167,7 +165,7 @@ interface Handler { * @param data Message. * @return This emitter. */ - default @NonNull ServerSentEmitter send(@NonNull String event, @NonNull Object data) { + default ServerSentEmitter send(String event, Object data) { return send(new ServerSentMessage(data).setEvent(event)); } @@ -177,7 +175,7 @@ interface Handler { * @param data Message. * @return This emitter. */ - @NonNull ServerSentEmitter send(@NonNull ServerSentMessage data); + ServerSentEmitter send(ServerSentMessage data); /** * Send a comment message to the client. The comment line can be used to prevent connections from @@ -187,7 +185,7 @@ interface Handler { * @param unit Time unit. * @return This emitter. */ - default @NonNull ServerSentEmitter keepAlive(final long time, final @NonNull TimeUnit unit) { + default ServerSentEmitter keepAlive(final long time, final TimeUnit unit) { return keepAlive(unit.toMillis(time)); } @@ -198,7 +196,7 @@ interface Handler { * @param timeInMillis Period of time in millis. * @return This emitter. */ - @NonNull ServerSentEmitter keepAlive(long timeInMillis); + ServerSentEmitter keepAlive(long timeInMillis); /** * Read the Last-Event-ID header and retrieve it. Might be null. @@ -225,7 +223,7 @@ interface Handler { * * @return Server-Sent ID. Defaults to UUID. */ - @NonNull String getId(); + String getId(); /** * Set Server-Sent ID. @@ -233,7 +231,7 @@ interface Handler { * @param id Set Server-Sent ID. * @return This emitter. */ - @NonNull ServerSentEmitter setId(@NonNull String id); + ServerSentEmitter setId(String id); /** * True if connection is open. diff --git a/jooby/src/main/java/io/jooby/ServerSentMessage.java b/jooby/src/main/java/io/jooby/ServerSentMessage.java index 540f8c34f6..81efee4887 100644 --- a/jooby/src/main/java/io/jooby/ServerSentMessage.java +++ b/jooby/src/main/java/io/jooby/ServerSentMessage.java @@ -12,8 +12,8 @@ import java.util.Iterator; import java.util.function.IntPredicate; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.output.Output; /** @@ -46,7 +46,7 @@ public class ServerSentMessage { * * @param data Data. Must not be null. */ - public ServerSentMessage(@NonNull Object data) { + public ServerSentMessage(Object data) { this.data = data; } @@ -65,7 +65,7 @@ public ServerSentMessage(@NonNull Object data) { * @param id Event ID. Converted to String. * @return This message. */ - public @NonNull ServerSentMessage setId(@Nullable Object id) { + public ServerSentMessage setId(@Nullable Object id) { this.id = id == null ? null : id.toString(); return this; } @@ -88,7 +88,7 @@ public ServerSentMessage(@NonNull Object data) { * @param event Event type. * @return This message. */ - public @NonNull ServerSentMessage setEvent(@Nullable String event) { + public ServerSentMessage setEvent(@Nullable String event) { this.event = event; return this; } @@ -100,7 +100,7 @@ public ServerSentMessage(@NonNull Object data) { * * @return Data. */ - public @NonNull Object getData() { + public Object getData() { return data; } @@ -121,7 +121,7 @@ public ServerSentMessage(@NonNull Object data) { * @param retry Retry option. * @return This message. */ - public @NonNull ServerSentMessage setRetry(@Nullable Long retry) { + public ServerSentMessage setRetry(@Nullable Long retry) { this.retry = retry; return this; } @@ -132,7 +132,7 @@ public ServerSentMessage(@NonNull Object data) { * @param ctx Web context. To encode complex objects. * @return Encoded data. */ - public @NonNull Output encode(@NonNull Context ctx) { + public Output encode(Context ctx) { try { var route = ctx.getRoute(); var encoder = route.getEncoder(); diff --git a/jooby/src/main/java/io/jooby/ServiceKey.java b/jooby/src/main/java/io/jooby/ServiceKey.java index c24a825db3..b3e0bfe6de 100644 --- a/jooby/src/main/java/io/jooby/ServiceKey.java +++ b/jooby/src/main/java/io/jooby/ServiceKey.java @@ -8,8 +8,8 @@ import java.lang.reflect.Type; import java.util.Objects; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.internal.reflect.$Types; /** @@ -88,7 +88,7 @@ public String toString() { * @param Type. * @return A new resource key. */ - public static ServiceKey key(@NonNull Class type) { + public static ServiceKey key(Class type) { return new ServiceKey<>(type, type, null); } @@ -100,7 +100,7 @@ public static ServiceKey key(@NonNull Class type) { * @param Type. * @return A new resource key. */ - public static ServiceKey key(@NonNull Class type, @NonNull String name) { + public static ServiceKey key(Class type, String name) { return new ServiceKey<>(type, type, name); } @@ -113,7 +113,7 @@ public static ServiceKey key(@NonNull Class type, @NonNull String name * @return A new resource key. */ @SuppressWarnings("unchecked") - public static ServiceKey key(@NonNull Reified type, @NonNull String name) { + public static ServiceKey key(Reified type, String name) { return new ServiceKey<>(type.getType(), (Class) type.getRawType(), name); } @@ -125,7 +125,7 @@ public static ServiceKey key(@NonNull Reified type, @NonNull String na * @return A new resource key. */ @SuppressWarnings("unchecked") - public static ServiceKey key(@NonNull Reified type) { + public static ServiceKey key(Reified type) { return new ServiceKey<>(type.getType(), (Class) type.getRawType(), null); } } diff --git a/jooby/src/main/java/io/jooby/ServiceRegistry.java b/jooby/src/main/java/io/jooby/ServiceRegistry.java index fe0cd78ba2..ba45ba035e 100644 --- a/jooby/src/main/java/io/jooby/ServiceRegistry.java +++ b/jooby/src/main/java/io/jooby/ServiceRegistry.java @@ -9,8 +9,8 @@ import java.util.*; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.exception.RegistryException; import jakarta.inject.Provider; @@ -141,7 +141,7 @@ public Set get() { * @return Service. * @throws RegistryException If there was a runtime failure while providing an instance. */ - default T get(@NonNull ServiceKey key) { + default T get(ServiceKey key) { T service = getOrNull(key); if (service == null) { throw new RegistryException("Service not found: " + key); @@ -157,7 +157,7 @@ default T get(@NonNull ServiceKey key) { * @return Service. * @throws RegistryException If there was a runtime failure while providing an instance. */ - default T get(@NonNull Class type) { + default T get(Class type) { return get(ServiceKey.key(type)); } @@ -169,7 +169,7 @@ default T get(@NonNull Class type) { * @return Service. * @throws RegistryException If there was a runtime failure while providing an instance. */ - default T get(@NonNull Reified type) { + default T get(Reified type) { return get(ServiceKey.key(type)); } @@ -180,7 +180,7 @@ default T get(@NonNull Reified type) { * @param Service/resource type. * @return Service or null. */ - default @Nullable T getOrNull(@NonNull Reified type) { + default @Nullable T getOrNull(Reified type) { return getOrNull(ServiceKey.key(type)); } @@ -191,7 +191,7 @@ default T get(@NonNull Reified type) { * @param Service/resource type. * @return Service or null. */ - default @Nullable T getOrNull(@NonNull Class type) { + default @Nullable T getOrNull(Class type) { return getOrNull(ServiceKey.key(type)); } @@ -202,7 +202,7 @@ default T get(@NonNull Reified type) { * @param Service/resource type. * @return Service or null. */ - @Nullable T getOrNull(@NonNull ServiceKey key); + @Nullable T getOrNull(ServiceKey key); /** * List binder. You can gradually add service of the same type and retrieve them all as list. @@ -211,7 +211,7 @@ default T get(@NonNull Reified type) { * @return A new list binder. * @param Service type. */ - default MultiBinder listOf(@NonNull Class type) { + default MultiBinder listOf(Class type) { return multiBinder(Reified.list(type), MultiBinder.list()); } @@ -222,7 +222,7 @@ default MultiBinder listOf(@NonNull Class type) { * @return A new list binder. * @param Service type. */ - default MultiBinder listOf(@NonNull Reified type) { + default MultiBinder listOf(Reified type) { return multiBinder(Reified.list(type.getType()), MultiBinder.list()); } @@ -233,7 +233,7 @@ default MultiBinder listOf(@NonNull Reified type) { * @return A new set binder. * @param Service type. */ - default MultiBinder setOf(@NonNull Class type) { + default MultiBinder setOf(Class type) { return multiBinder(Reified.set(type), MultiBinder.set()); } @@ -244,7 +244,7 @@ default MultiBinder setOf(@NonNull Class type) { * @return A new set binder. * @param Service type. */ - default MultiBinder setOf(@NonNull Reified type) { + default MultiBinder setOf(Reified type) { return multiBinder(Reified.set(type.getType()), MultiBinder.set()); } @@ -257,7 +257,7 @@ default MultiBinder setOf(@NonNull Reified type) { * @param Key type. * @param Service type. */ - default MapBinder mapOf(@NonNull Class keyType, @NonNull Class valueType) { + default MapBinder mapOf(Class keyType, Class valueType) { return multiBinder(Reified.map(keyType, valueType), new MapBinder<>()); } @@ -270,12 +270,12 @@ default MapBinder mapOf(@NonNull Class keyType, @NonNull Class Key type. * @param Service type. */ - default MapBinder mapOf(@NonNull Class keyType, @NonNull Reified valueType) { + default MapBinder mapOf(Class keyType, Reified valueType) { return multiBinder(Reified.map(keyType, valueType.getType()), new MapBinder<>()); } @SuppressWarnings({"rawtypes", "unchecked"}) - private

P multiBinder(@NonNull Reified reified, @NonNull P multibinder) { + private

P multiBinder(Reified reified, P multibinder) { ServiceKey key = ServiceKey.key(reified); var existing = putIfAbsent(key, multibinder); if (existing != null) { @@ -296,7 +296,7 @@ private

P multiBinder(@NonNull Reified reified, @NonNull P * @param Service type. * @return Previously registered service or null. */ - default @Nullable T put(@NonNull Class type, Provider service) { + default @Nullable T put(Class type, Provider service) { return put(ServiceKey.key(type), service); } @@ -308,7 +308,7 @@ private

P multiBinder(@NonNull Reified reified, @NonNull P * @param Service type. * @return Previously registered service or null. */ - @Nullable T put(@NonNull ServiceKey key, Provider service); + @Nullable T put(ServiceKey key, Provider service); /** * Put a service in this registry. This method overrides any previous registered service. @@ -318,7 +318,7 @@ private

P multiBinder(@NonNull Reified reified, @NonNull P * @param Service type. * @return Previously registered service or null. */ - default @Nullable T put(@NonNull Class type, T service) { + default @Nullable T put(Class type, T service) { return put(ServiceKey.key(type), service); } @@ -330,7 +330,7 @@ private

P multiBinder(@NonNull Reified reified, @NonNull P * @param Service type. * @return Previously registered service or null. */ - @Nullable T put(@NonNull ServiceKey key, T service); + @Nullable T put(ServiceKey key, T service); /** * If the specified key is not already associated with a service (or is mapped to null) associates @@ -341,7 +341,7 @@ private

P multiBinder(@NonNull Reified reified, @NonNull P * @param Service type. * @return Previously registered service or null. */ - @Nullable T putIfAbsent(@NonNull ServiceKey key, T service); + @Nullable T putIfAbsent(ServiceKey key, T service); /** * If the specified key is not already associated with a service (or is mapped to null) associates @@ -352,7 +352,7 @@ private

P multiBinder(@NonNull Reified reified, @NonNull P * @param Service type. * @return Previously registered service or null. */ - default @Nullable T putIfAbsent(@NonNull Class type, T service) { + default @Nullable T putIfAbsent(Class type, T service) { return putIfAbsent(ServiceKey.key(type), service); } @@ -365,7 +365,7 @@ private

P multiBinder(@NonNull Reified reified, @NonNull P * @param Service type. * @return Previously registered service or null. */ - default @Nullable T putIfAbsent(@NonNull Class type, Provider service) { + default @Nullable T putIfAbsent(Class type, Provider service) { return putIfAbsent(ServiceKey.key(type), service); } @@ -378,7 +378,7 @@ private

P multiBinder(@NonNull Reified reified, @NonNull P * @param Service type. * @return Previously registered service or null. */ - default @Nullable T putIfAbsent(@NonNull Reified type, T service) { + default @Nullable T putIfAbsent(Reified type, T service) { return putIfAbsent(ServiceKey.key(type), service); } @@ -391,7 +391,7 @@ private

P multiBinder(@NonNull Reified reified, @NonNull P * @param Service type. * @return Previously registered service or null. */ - default @Nullable T putIfAbsent(@NonNull Reified type, Provider service) { + default @Nullable T putIfAbsent(Reified type, Provider service) { return putIfAbsent(ServiceKey.key(type), service); } @@ -404,27 +404,27 @@ private

P multiBinder(@NonNull Reified reified, @NonNull P * @param Service type. * @return Previously registered service or null. */ - @Nullable T putIfAbsent(@NonNull ServiceKey key, Provider service); + @Nullable T putIfAbsent(ServiceKey key, Provider service); - default @Override T require(@NonNull Class type) { + default @Override T require(Class type) { return get(ServiceKey.key(type)); } - default @Override T require(@NonNull Class type, @NonNull String name) { + default @Override T require(Class type, String name) { return get(ServiceKey.key(type, name)); } - default @Override T require(@NonNull ServiceKey key) throws RegistryException { + default @Override T require(ServiceKey key) throws RegistryException { return get(key); } - @NonNull @Override - default T require(@NonNull Reified type, @NonNull String name) throws RegistryException { + @Override + default T require(Reified type, String name) throws RegistryException { return get(ServiceKey.key(type, name)); } - @NonNull @Override - default T require(@NonNull Reified type) throws RegistryException { + @Override + default T require(Reified type) throws RegistryException { return get(ServiceKey.key(type)); } } diff --git a/jooby/src/main/java/io/jooby/Session.java b/jooby/src/main/java/io/jooby/Session.java index 08c099d854..5859bb00b4 100644 --- a/jooby/src/main/java/io/jooby/Session.java +++ b/jooby/src/main/java/io/jooby/Session.java @@ -8,8 +8,8 @@ import java.time.Instant; import java.util.Map; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.internal.SessionImpl; import io.jooby.value.Value; @@ -36,7 +36,7 @@ public interface Session { * @param id Session ID or null * @return Session. */ - @NonNull Session setId(@Nullable String id); + Session setId(@Nullable String id); /** * Get a session attribute. @@ -44,7 +44,7 @@ public interface Session { * @param name Attribute's name. * @return An attribute value or missing value. */ - @NonNull Value get(@NonNull String name); + Value get(String name); /** * Put a session attribute. @@ -53,7 +53,7 @@ public interface Session { * @param value Attribute's value. * @return This session. */ - default @NonNull Session put(@NonNull String name, int value) { + default Session put(String name, int value) { return put(name, Integer.toString(value)); } @@ -64,7 +64,7 @@ public interface Session { * @param value Attribute's value. * @return This session. */ - default @NonNull Session put(@NonNull String name, long value) { + default Session put(String name, long value) { return put(name, Long.toString(value)); } @@ -75,7 +75,7 @@ public interface Session { * @param value Attribute's value. * @return This session. */ - default @NonNull Session put(@NonNull String name, @NonNull CharSequence value) { + default Session put(String name, CharSequence value) { return put(name, value.toString()); } @@ -86,7 +86,7 @@ public interface Session { * @param value Attribute's value. * @return This session. */ - @NonNull Session put(@NonNull String name, @NonNull String value); + Session put(String name, String value); /** * Put a session attribute. @@ -95,7 +95,7 @@ public interface Session { * @param value Attribute's value. * @return This session. */ - default @NonNull Session put(@NonNull String name, float value) { + default Session put(String name, float value) { return put(name, Float.toString(value)); } @@ -106,7 +106,7 @@ public interface Session { * @param value Attribute's value. * @return This session. */ - default @NonNull Session put(@NonNull String name, double value) { + default Session put(String name, double value) { return put(name, Double.toString(value)); } @@ -117,7 +117,7 @@ public interface Session { * @param value Attribute's value. * @return This session. */ - default @NonNull Session put(@NonNull String name, boolean value) { + default Session put(String name, boolean value) { return put(name, Boolean.toString(value)); } @@ -128,7 +128,7 @@ public interface Session { * @param value Attribute's value. * @return This session. */ - default @NonNull Session put(@NonNull String name, @NonNull Number value) { + default Session put(String name, Number value) { return put(name, value.toString()); } @@ -138,21 +138,21 @@ public interface Session { * @param name Attribute's name. * @return Session attribute or missing value. */ - @NonNull Value remove(@NonNull String name); + Value remove(String name); /** * Read-only copy of session attributes. * * @return Read-only attributes. */ - @NonNull Map toMap(); + Map toMap(); /** * Session creation time. * * @return Session creation time. */ - @NonNull Instant getCreationTime(); + Instant getCreationTime(); /** * Set session creation time. @@ -160,14 +160,14 @@ public interface Session { * @param creationTime Session creation time. * @return This session. */ - @NonNull Session setCreationTime(@NonNull Instant creationTime); + Session setCreationTime(Instant creationTime); /** * Session last accessed time. * * @return Session creation time. */ - @NonNull Instant getLastAccessedTime(); + Instant getLastAccessedTime(); /** * Set session last accessed time. @@ -175,7 +175,7 @@ public interface Session { * @param lastAccessedTime Session creation time. * @return This session. */ - @NonNull Session setLastAccessedTime(@NonNull Instant lastAccessedTime); + Session setLastAccessedTime(Instant lastAccessedTime); /** * True for new sessions. @@ -190,7 +190,7 @@ public interface Session { * @param isNew New flag. * @return This session. */ - @NonNull Session setNew(boolean isNew); + Session setNew(boolean isNew); /** * True for modified/dirty sessions. @@ -205,7 +205,7 @@ public interface Session { * @param modify Modify flag. * @return This session. */ - @NonNull Session setModify(boolean modify); + Session setModify(boolean modify); /** * Remove all attributes. @@ -231,7 +231,7 @@ public interface Session { * @param id Session ID or null. * @return A new session. */ - static @NonNull Session create(@NonNull Context ctx, @Nullable String id) { + static Session create(Context ctx, @Nullable String id) { return new SessionImpl(ctx, id); } @@ -243,8 +243,7 @@ public interface Session { * @param data Session attributes. * @return A new session. */ - static @NonNull Session create( - @NonNull Context ctx, @Nullable String id, @NonNull Map data) { + static Session create(Context ctx, @Nullable String id, Map data) { return new SessionImpl(ctx, id, data); } } diff --git a/jooby/src/main/java/io/jooby/SessionStore.java b/jooby/src/main/java/io/jooby/SessionStore.java index c4dcda1229..c040ad401c 100644 --- a/jooby/src/main/java/io/jooby/SessionStore.java +++ b/jooby/src/main/java/io/jooby/SessionStore.java @@ -11,8 +11,8 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.internal.MemorySessionStore; import io.jooby.internal.SignedSessionStore; @@ -32,32 +32,32 @@ public interface SessionStore { new SessionStore() { @Override - public Session newSession(@NonNull Context ctx) { + public Session newSession(Context ctx) { throw Usage.noSession(); } @Nullable @Override - public Session findSession(@NonNull Context ctx) { + public Session findSession(Context ctx) { throw Usage.noSession(); } @Override - public void deleteSession(@NonNull Context ctx, @NonNull Session session) { + public void deleteSession(Context ctx, Session session) { throw Usage.noSession(); } @Override - public void touchSession(@NonNull Context ctx, @NonNull Session session) { + public void touchSession(Context ctx, Session session) { throw Usage.noSession(); } @Override - public void saveSession(@NonNull Context ctx, @NonNull Session session) { + public void saveSession(Context ctx, Session session) { throw Usage.noSession(); } @Override - public void renewSessionId(@NonNull Context ctx, @NonNull Session session) { + public void renewSessionId(Context ctx, Session session) { throw Usage.noSession(); } }; @@ -93,12 +93,12 @@ public boolean isExpired(Duration timeout) { * * @param token Token. */ - protected InMemory(@NonNull SessionToken token) { + protected InMemory(SessionToken token) { this.token = token; } @Override - public @NonNull Session newSession(@NonNull Context ctx) { + public Session newSession(Context ctx) { var sessionId = token.newToken(); var data = getOrCreate( @@ -115,7 +115,7 @@ protected InMemory(@NonNull SessionToken token) { * * @return Session token. */ - public @NonNull SessionToken getToken() { + public SessionToken getToken() { return token; } @@ -125,22 +125,21 @@ protected InMemory(@NonNull SessionToken token) { * @param token Session token. * @return This store. */ - public @NonNull SessionStore setToken(@NonNull SessionToken token) { + public SessionStore setToken(SessionToken token) { this.token = token; return this; } - protected abstract Data getOrCreate( - @NonNull String sessionId, @NonNull Function factory); + protected abstract Data getOrCreate(String sessionId, Function factory); - protected abstract @Nullable Data getOrNull(@NonNull String sessionId); + protected abstract @Nullable Data getOrNull(String sessionId); - protected abstract @Nullable Data remove(@NonNull String sessionId); + protected abstract @Nullable Data remove(String sessionId); - protected abstract void put(@NonNull String sessionId, @NonNull Data data); + protected abstract void put(String sessionId, Data data); @Override - public @Nullable Session findSession(@NonNull Context ctx) { + public @Nullable Session findSession(Context ctx) { String sessionId = token.findToken(ctx); if (sessionId == null) { return null; @@ -155,26 +154,26 @@ protected abstract Data getOrCreate( } @Override - public void deleteSession(@NonNull Context ctx, @NonNull Session session) { + public void deleteSession(Context ctx, Session session) { String sessionId = session.getId(); remove(sessionId); token.deleteToken(ctx, sessionId); } @Override - public void touchSession(@NonNull Context ctx, @NonNull Session session) { + public void touchSession(Context ctx, Session session) { saveSession(ctx, session); token.saveToken(ctx, session.getId()); } @Override - public void saveSession(@NonNull Context ctx, @NonNull Session session) { + public void saveSession(Context ctx, Session session) { String sessionId = session.getId(); put(sessionId, new Data(session.getCreationTime(), Instant.now(), session.toMap())); } @Override - public void renewSessionId(@NonNull Context ctx, @NonNull Session session) { + public void renewSessionId(Context ctx, Session session) { String oldId = session.getId(); Data data = remove(oldId); if (data != null) { @@ -202,7 +201,7 @@ private Session restore(Context ctx, String sessionId, Data data) { * @param ctx Web context. * @return A new session. */ - @NonNull Session newSession(@NonNull Context ctx); + Session newSession(Context ctx); /** * Find an existing session by ID. For existing session this method must: @@ -213,7 +212,7 @@ private Session restore(Context ctx, String sessionId, Data data) { * @param ctx Web context. * @return An existing session or null. */ - @Nullable Session findSession(@NonNull Context ctx); + @Nullable Session findSession(Context ctx); /** * Delete a session from store. This method must NOT call {@link Session#destroy()}. @@ -221,7 +220,7 @@ private Session restore(Context ctx, String sessionId, Data data) { * @param ctx Web context. * @param session Current session. */ - void deleteSession(@NonNull Context ctx, @NonNull Session session); + void deleteSession(Context ctx, Session session); /** * Session attributes/state has changed. Every time a session attribute is put or removed it, this @@ -230,7 +229,7 @@ private Session restore(Context ctx, String sessionId, Data data) { * @param ctx Web context. * @param session Current session. */ - void touchSession(@NonNull Context ctx, @NonNull Session session); + void touchSession(Context ctx, Session session); /** * Save a session. This method must save: @@ -244,7 +243,7 @@ private Session restore(Context ctx, String sessionId, Data data) { * @param ctx Web context. * @param session Current session. */ - void saveSession(@NonNull Context ctx, @NonNull Session session); + void saveSession(Context ctx, Session session); /** * Renew Session ID. This operation might or might not be implemented by a Session Store. @@ -252,7 +251,7 @@ private Session restore(Context ctx, String sessionId, Data data) { * @param ctx Web Context. * @param session Session. */ - void renewSessionId(@NonNull Context ctx, @NonNull Session session); + void renewSessionId(Context ctx, Session session); /** * Creates a cookie based session and store data in memory. @@ -262,7 +261,7 @@ private Session restore(Context ctx, String sessionId, Data data) { * @param cookie Cookie to use. * @return Session store. */ - static @NonNull SessionStore memory(@NonNull Cookie cookie) { + static SessionStore memory(Cookie cookie) { return memory(SessionToken.cookieId(cookie)); } @@ -274,7 +273,7 @@ private Session restore(Context ctx, String sessionId, Data data) { * @param timeout Expires session after amount of inactivity time. * @return Session store. */ - static @NonNull SessionStore memory(@NonNull Cookie cookie, @NonNull Duration timeout) { + static SessionStore memory(Cookie cookie, Duration timeout) { return memory(SessionToken.cookieId(cookie), timeout); } @@ -285,7 +284,7 @@ private Session restore(Context ctx, String sessionId, Data data) { * @param token Session token. * @return Session store. */ - static @NonNull SessionStore memory(@NonNull SessionToken token) { + static SessionStore memory(SessionToken token) { return new MemorySessionStore(token, Duration.ofMinutes(DEFAULT_TIMEOUT)); } @@ -296,7 +295,7 @@ private Session restore(Context ctx, String sessionId, Data data) { * @param timeout Expires session after amount of inactivity time. * @return Session store. */ - static @NonNull SessionStore memory(@NonNull SessionToken token, @NonNull Duration timeout) { + static SessionStore memory(SessionToken token, Duration timeout) { return new MemorySessionStore(token, timeout); } @@ -310,7 +309,7 @@ private Session restore(Context ctx, String sessionId, Data data) { * @param secret Secret token to signed data. * @return A browser session store. */ - static @NonNull SessionStore signed(@NonNull Cookie cookie, @NonNull String secret) { + static SessionStore signed(Cookie cookie, String secret) { return signed(SessionToken.signedCookie(cookie), secret); } @@ -324,7 +323,7 @@ private Session restore(Context ctx, String sessionId, Data data) { * @param secret Secret token to signed data. * @return A browser session store. */ - static @NonNull SessionStore signed(@NonNull SessionToken token, @NonNull String secret) { + static SessionStore signed(SessionToken token, String secret) { SneakyThrows.Function> decoder = value -> { String unsign = Cookie.unsign(value, secret); @@ -349,10 +348,10 @@ private Session restore(Context ctx, String sessionId, Data data) { * @param encoder Encoder to use. * @return Cookie session store. */ - static @NonNull SessionStore signed( - @NonNull SessionToken token, - @NonNull Function> decoder, - @NonNull Function, String> encoder) { + static SessionStore signed( + SessionToken token, + Function> decoder, + Function, String> encoder) { return new SignedSessionStore(token, decoder, encoder); } } diff --git a/jooby/src/main/java/io/jooby/SessionToken.java b/jooby/src/main/java/io/jooby/SessionToken.java index 0f6925f7be..0d3eca4734 100644 --- a/jooby/src/main/java/io/jooby/SessionToken.java +++ b/jooby/src/main/java/io/jooby/SessionToken.java @@ -8,8 +8,8 @@ import java.security.SecureRandom; import java.util.Base64; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.internal.MultipleSessionToken; /** @@ -35,22 +35,22 @@ class CookieID implements SessionToken { * * @param cookie Cookie to use. */ - public CookieID(@NonNull Cookie cookie) { + public CookieID(Cookie cookie) { this.cookie = cookie; } @Nullable @Override - public String findToken(@NonNull Context ctx) { + public String findToken(Context ctx) { return ctx.cookieMap().get(cookie.getName()); } @Override - public void saveToken(@NonNull Context ctx, @NonNull String token) { + public void saveToken(Context ctx, String token) { ctx.setResponseCookie(cookie.clone().setValue(token)); } @Override - public void deleteToken(@NonNull Context ctx, @NonNull String token) { + public void deleteToken(Context ctx, String token) { ctx.setResponseCookie(cookie.clone().setValue(token).setMaxAge(0)); } } @@ -70,22 +70,22 @@ class HeaderID implements SessionToken { * * @param name Header's name. */ - public HeaderID(@NonNull String name) { + public HeaderID(String name) { this.name = name; } @Nullable @Override - public String findToken(@NonNull Context ctx) { + public String findToken(Context ctx) { return ctx.headerMap().get(name); } @Override - public void saveToken(@NonNull Context ctx, @NonNull String token) { + public void saveToken(Context ctx, String token) { ctx.setResponseHeader(name, token); } @Override - public void deleteToken(@NonNull Context ctx, @NonNull String token) { + public void deleteToken(Context ctx, String token) { ctx.removeResponseHeader(name); } } @@ -105,22 +105,22 @@ class SignedCookie implements SessionToken { * * @param cookie Cookie to use. */ - public SignedCookie(@NonNull Cookie cookie) { + public SignedCookie(Cookie cookie) { this.cookie = cookie; } @Nullable @Override - public String findToken(@NonNull Context ctx) { + public String findToken(Context ctx) { return ctx.cookieMap().get(cookie.getName()); } @Override - public void saveToken(@NonNull Context ctx, @NonNull String token) { + public void saveToken(Context ctx, String token) { ctx.setResponseCookie(cookie.clone().setValue(token)); } @Override - public void deleteToken(@NonNull Context ctx, @NonNull String token) { + public void deleteToken(Context ctx, String token) { ctx.setResponseCookie(cookie.clone().setMaxAge(0)); } } @@ -137,7 +137,7 @@ public void deleteToken(@NonNull Context ctx, @NonNull String token) { * * @return A new token. */ - default @NonNull String newToken() { + default String newToken() { byte[] bytes = new byte[ID_SIZE]; RND.nextBytes(bytes); return Base64.getUrlEncoder().withoutPadding().encodeToString(bytes); @@ -149,7 +149,7 @@ public void deleteToken(@NonNull Context ctx, @NonNull String token) { * @param ctx Web context. * @return Session ID or null. */ - @Nullable String findToken(@NonNull Context ctx); + @Nullable String findToken(Context ctx); /** * Save session ID in the web context. @@ -157,7 +157,7 @@ public void deleteToken(@NonNull Context ctx, @NonNull String token) { * @param ctx Web context. * @param token Token/data to save. */ - void saveToken(@NonNull Context ctx, @NonNull String token); + void saveToken(Context ctx, String token); /** * Delete session ID in the web context. @@ -165,7 +165,7 @@ public void deleteToken(@NonNull Context ctx, @NonNull String token) { * @param ctx Web context. * @param token Token/data to delete. */ - void deleteToken(@NonNull Context ctx, @NonNull String token); + void deleteToken(Context ctx, String token); /* ********************************************************************************************** * Factory methods @@ -181,7 +181,7 @@ public void deleteToken(@NonNull Context ctx, @NonNull String token) { * @param cookie Cookie to use. * @return Session Token. */ - static @NonNull SessionToken cookieId(@NonNull Cookie cookie) { + static SessionToken cookieId(Cookie cookie) { return new CookieID(cookie); } @@ -194,7 +194,7 @@ public void deleteToken(@NonNull Context ctx, @NonNull String token) { * @param cookie Cookie to use. * @return Session Token. */ - static @NonNull SessionToken signedCookie(@NonNull Cookie cookie) { + static SessionToken signedCookie(Cookie cookie) { return new SignedCookie(cookie); } @@ -207,7 +207,7 @@ public void deleteToken(@NonNull Context ctx, @NonNull String token) { * @param name Header name. * @return Session Token. */ - static @NonNull SessionToken header(@NonNull String name) { + static SessionToken header(String name) { return new HeaderID(name); } @@ -228,7 +228,7 @@ public void deleteToken(@NonNull Context ctx, @NonNull String token) { * @param tokens Tokens to use. * @return A composed session token. */ - static @NonNull SessionToken combine(@NonNull SessionToken... tokens) { + static SessionToken combine(SessionToken... tokens) { return new MultipleSessionToken(tokens); } } diff --git a/jooby/src/main/java/io/jooby/SneakyThrows.java b/jooby/src/main/java/io/jooby/SneakyThrows.java index 3d753e3174..7bfe6d7470 100644 --- a/jooby/src/main/java/io/jooby/SneakyThrows.java +++ b/jooby/src/main/java/io/jooby/SneakyThrows.java @@ -5,8 +5,6 @@ */ package io.jooby; -import edu.umd.cs.findbugs.annotations.NonNull; - /** * Collection of throwable interfaces to simplify exception handling on lambdas. * @@ -1198,7 +1196,7 @@ Consumer8 throwingConsumer( * @return A dummy RuntimeException; this method never returns normally, it always throws * an exception! */ - public static @NonNull RuntimeException propagate(final Throwable x) { + public static RuntimeException propagate(final Throwable x) { if (x == null) { throw new NullPointerException("x"); } diff --git a/jooby/src/main/java/io/jooby/SslOptions.java b/jooby/src/main/java/io/jooby/SslOptions.java index aa1a8ea859..edd1f85ec6 100644 --- a/jooby/src/main/java/io/jooby/SslOptions.java +++ b/jooby/src/main/java/io/jooby/SslOptions.java @@ -22,9 +22,9 @@ import javax.net.ssl.SSLContext; +import org.jspecify.annotations.Nullable; + import com.typesafe.config.Config; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; /** * SSL options for enabling HTTPs in Jooby. Jooby supports two certificate formats: @@ -101,7 +101,7 @@ public String getType() { * @param type Certificate type. * @return Ssl options. */ - public @NonNull SslOptions setType(@NonNull String type) { + public SslOptions setType(String type) { this.type = type; return this; } @@ -113,7 +113,7 @@ public String getType() { * @return A PKCS12 or X.509 certificate chain file in PEM format. It can be an absolute path or a * classpath resource. Required. */ - public @NonNull InputStream getCert() { + public InputStream getCert() { return cert; } @@ -124,7 +124,7 @@ public String getType() { * @param cert Certificate path or location. * @return Ssl options. */ - public @NonNull SslOptions setCert(@NonNull InputStream cert) { + public SslOptions setCert(InputStream cert) { this.cert = cert; return this; } @@ -148,7 +148,7 @@ public String getType() { * @param trustCert Certificate path or location. * @return Ssl options. */ - public @NonNull SslOptions setTrustCert(@Nullable InputStream trustCert) { + public SslOptions setTrustCert(@Nullable InputStream trustCert) { this.trustCert = trustCert; return this; } @@ -168,7 +168,7 @@ public String getType() { * @param password Certificate password. * @return SSL options. */ - public @NonNull SslOptions setTrustPassword(@Nullable String password) { + public SslOptions setTrustPassword(@Nullable String password) { this.trustPassword = password; return this; } @@ -192,7 +192,7 @@ public String getType() { * an absolute path or a classpath resource. Required when using X.509 certificates. * @return Ssl options. */ - public @NonNull SslOptions setPrivateKey(@Nullable InputStream privateKey) { + public SslOptions setPrivateKey(@Nullable InputStream privateKey) { this.privateKey = privateKey; return this; } @@ -222,7 +222,7 @@ public void close() { * @param password Certificate password. * @return SSL options. */ - public @NonNull SslOptions setPassword(@Nullable String password) { + public SslOptions setPassword(@Nullable String password) { this.password = password; return this; } @@ -245,7 +245,7 @@ public void close() { * @param path Path (file system path or classpath). * @return Resource. */ - public static @NonNull InputStream getResource(@NonNull String path) { + public static InputStream getResource(String path) { try { Path filepath = Paths.get(path); Stream paths; @@ -288,7 +288,7 @@ public void close() { * * @return desired SSL client authentication mode for SSL channels in server mode. */ - public @NonNull ClientAuth getClientAuth() { + public ClientAuth getClientAuth() { return clientAuth; } @@ -298,7 +298,7 @@ public void close() { * @param clientAuth The desired SSL client authentication mode for SSL channels in server mode. * @return This options. */ - public @NonNull SslOptions setClientAuth(@NonNull ClientAuth clientAuth) { + public SslOptions setClientAuth(ClientAuth clientAuth) { this.clientAuth = clientAuth; return this; } @@ -315,7 +315,7 @@ public void close() { * * @return TLS protocols. Default is: TLSv1.2 and TLSv1.3. */ - public @NonNull List getProtocol() { + public List getProtocol() { return protocol; } @@ -327,7 +327,7 @@ public void close() { * @param protocol TLS protocols. * @return This options. */ - public @NonNull SslOptions setProtocol(@NonNull String... protocol) { + public SslOptions setProtocol(String... protocol) { return setProtocol(Arrays.asList(protocol)); } @@ -339,7 +339,7 @@ public void close() { * @param protocol TLS protocols. * @return This options. */ - public @NonNull SslOptions setProtocol(@NonNull List protocol) { + public SslOptions setProtocol(List protocol) { this.protocol = protocol; return this; } @@ -380,7 +380,7 @@ public String toString() { * @param key Private key path or location. * @return New SSL options. */ - public static @NonNull SslOptions x509(@NonNull String crt, @NonNull String key) { + public static SslOptions x509(String crt, String key) { return x509(crt, key, null); } @@ -392,8 +392,7 @@ public String toString() { * @param password Password. * @return New SSL options. */ - public static @NonNull SslOptions x509( - @NonNull String crt, @NonNull String key, @Nullable String password) { + public static SslOptions x509(String crt, String key, @Nullable String password) { SslOptions options = new SslOptions(); options.setType(X509); options.setPrivateKey(getResource(key)); @@ -409,7 +408,7 @@ public String toString() { * @param password Password. * @return New SSL options. */ - public static SslOptions pkcs12(@NonNull String crt, @NonNull String password) { + public static SslOptions pkcs12(String crt, String password) { SslOptions options = new SslOptions(); options.setType(PKCS12); options.setCert(getResource(crt)); @@ -476,7 +475,7 @@ public static SslOptions selfSigned(final String type) { * @param conf Application configuration. * @return SSl options or empty. */ - public static @NonNull Optional from(@NonNull Config conf) { + public static Optional from(Config conf) { return from(conf, "server.ssl", "ssl"); } @@ -511,7 +510,7 @@ public static SslOptions selfSigned(final String type) { * @param key Path to use for loading SSL options. Required. * @return SSl options or empty. */ - static @NonNull Optional from(@NonNull Config conf, String... key) { + static Optional from(Config conf, String... key) { return Stream.of(key) .filter(conf::hasPath) .findFirst() diff --git a/jooby/src/main/java/io/jooby/TemplateEngine.java b/jooby/src/main/java/io/jooby/TemplateEngine.java index ab4dd426c8..c7f9f792f7 100644 --- a/jooby/src/main/java/io/jooby/TemplateEngine.java +++ b/jooby/src/main/java/io/jooby/TemplateEngine.java @@ -8,7 +8,6 @@ import java.util.Collections; import java.util.List; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.output.Output; /** @@ -37,7 +36,7 @@ public interface TemplateEngine extends MessageEncoder { Output render(Context ctx, ModelAndView modelAndView) throws Exception; @Override - default Output encode(@NonNull Context ctx, @NonNull Object value) throws Exception { + default Output encode(Context ctx, Object value) throws Exception { // initialize flash and session attributes (if any) ctx.flashOrNull(); ctx.sessionOrNull(); @@ -53,7 +52,7 @@ default Output encode(@NonNull Context ctx, @NonNull Object value) throws Except * @param modelAndView View to check. * @return True when view is supported. */ - default boolean supports(@NonNull ModelAndView modelAndView) { + default boolean supports(ModelAndView modelAndView) { String view = modelAndView.getView(); for (String extension : extensions()) { if (view.endsWith(extension)) { @@ -69,7 +68,7 @@ default boolean supports(@NonNull ModelAndView modelAndView) { * @return Number of file extensions supported by the template engine. Default is .html * . */ - default @NonNull List extensions() { + default List extensions() { return Collections.singletonList(".html"); } @@ -79,7 +78,7 @@ default boolean supports(@NonNull ModelAndView modelAndView) { * @param templatesPath Template path. * @return Normalized path. */ - static @NonNull String normalizePath(@NonNull String templatesPath) { + static String normalizePath(String templatesPath) { if (templatesPath == null) { return null; } diff --git a/jooby/src/main/java/io/jooby/Usage.java b/jooby/src/main/java/io/jooby/Usage.java index 17d355a8a9..57e19fbb43 100644 --- a/jooby/src/main/java/io/jooby/Usage.java +++ b/jooby/src/main/java/io/jooby/Usage.java @@ -9,7 +9,6 @@ import java.lang.reflect.Parameter; import java.util.stream.Stream; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.exception.ProvisioningException; /** @@ -25,7 +24,7 @@ public class Usage extends RuntimeException { * @param message Message. * @param id Link to a detailed section. */ - public Usage(@NonNull String message, @NonNull String id) { + public Usage(String message, String id) { this( (message + "\nFor more details, please visit: " @@ -34,7 +33,7 @@ public Usage(@NonNull String message, @NonNull String id) { + id)); } - protected Usage(@NonNull String message) { + protected Usage(String message) { super(message); } @@ -54,7 +53,7 @@ public static Usage noSession() { * @param parameter Parameter. * @return Usage exception. */ - public static Usage parameterNameNotPresent(@NonNull Parameter parameter) { + public static Usage parameterNameNotPresent(Parameter parameter) { Executable executable = parameter.getDeclaringExecutable(); int p = Stream.of(executable.getParameters()).toList().indexOf(parameter); String message = diff --git a/jooby/src/main/java/io/jooby/WebSocket.java b/jooby/src/main/java/io/jooby/WebSocket.java index 86d2a5b01b..f0712728df 100644 --- a/jooby/src/main/java/io/jooby/WebSocket.java +++ b/jooby/src/main/java/io/jooby/WebSocket.java @@ -9,8 +9,8 @@ import java.util.List; import java.util.Map; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.output.Output; /** @@ -52,7 +52,7 @@ interface Initializer { * @param ctx Readonly context. * @param configurer WebSocket configurer. */ - void init(@NonNull Context ctx, @NonNull WebSocketConfigurer configurer); + void init(Context ctx, WebSocketConfigurer configurer); } /** Web socket route handler. */ @@ -72,7 +72,7 @@ interface OnConnect { * * @param ws WebSocket. */ - void onConnect(@NonNull WebSocket ws); + void onConnect(WebSocket ws); } /** @@ -86,7 +86,7 @@ interface OnMessage { * @param ws WebSocket. * @param message Client message. */ - void onMessage(@NonNull WebSocket ws, @NonNull WebSocketMessage message); + void onMessage(WebSocket ws, WebSocketMessage message); } /** @@ -101,7 +101,7 @@ interface OnClose { * @param ws WebSocket. * @param closeStatus Close status. */ - void onClose(@NonNull WebSocket ws, @NonNull WebSocketCloseStatus closeStatus); + void onClose(WebSocket ws, WebSocketCloseStatus closeStatus); } /** On error callback. Generated when unexpected error occurs. */ @@ -112,7 +112,7 @@ interface OnError { * @param ws Websocket. * @param cause Cause. */ - void onError(@NonNull WebSocket ws, @NonNull Throwable cause); + void onError(WebSocket ws, Throwable cause); } /** Callback for sending messages. */ @@ -127,7 +127,7 @@ interface WriteCallback { * @param ws Websocket. * @param cause Error or null for success messages. */ - void operationComplete(@NonNull WebSocket ws, @Nullable Throwable cause); + void operationComplete(WebSocket ws, @Nullable Throwable cause); } /** Max message size for websocket (128K). */ @@ -141,7 +141,7 @@ interface WriteCallback { * * @return Read-only originating HTTP request. */ - @NonNull Context getContext(); + Context getContext(); /** * Context attributes (a.k.a request attributes). @@ -160,7 +160,7 @@ default Map getAttributes() { * @param Attribute type. * @return Attribute value. */ - default T attribute(@NonNull String key) { + default T attribute(String key) { return getContext().getAttribute(key); } @@ -171,7 +171,7 @@ default T attribute(@NonNull String key) { * @param value Attribute value. * @return This router. */ - default WebSocket attribute(@NonNull String key, Object value) { + default WebSocket attribute(String key, Object value) { getContext().setAttribute(key, value); return this; } @@ -181,7 +181,7 @@ default WebSocket attribute(@NonNull String key, Object value) { * * @return Web sockets or empty list. */ - @NonNull List getSessions(); + List getSessions(); /** * True if websocket is open. @@ -212,7 +212,7 @@ default WebSocket attribute(@NonNull String key, Object value) { * @param message Text Message. * @return This websocket. */ - default WebSocket sendPing(@NonNull String message) { + default WebSocket sendPing(String message) { return sendPing(message, WriteCallback.NOOP); } @@ -223,7 +223,7 @@ default WebSocket sendPing(@NonNull String message) { * @param callback Write callback. * @return This websocket. */ - WebSocket sendPing(@NonNull String message, @NonNull WriteCallback callback); + WebSocket sendPing(String message, WriteCallback callback); /** * Send a ping message to client. @@ -231,7 +231,7 @@ default WebSocket sendPing(@NonNull String message) { * @param message Text Message. * @return This websocket. */ - default WebSocket sendPing(@NonNull byte[] message) { + default WebSocket sendPing(byte[] message) { return sendPing(message, WriteCallback.NOOP); } @@ -242,7 +242,7 @@ default WebSocket sendPing(@NonNull byte[] message) { * @param callback Write callback. * @return This websocket. */ - default WebSocket sendPing(byte[] message, @NonNull WriteCallback callback) { + default WebSocket sendPing(byte[] message, WriteCallback callback) { return sendPing(ByteBuffer.wrap(message), callback); } @@ -252,7 +252,7 @@ default WebSocket sendPing(byte[] message, @NonNull WriteCallback callback) { * @param message Text message. * @return This instance. */ - default WebSocket sendPing(@NonNull ByteBuffer message) { + default WebSocket sendPing(ByteBuffer message) { return sendPing(message, WriteCallback.NOOP); } @@ -263,7 +263,7 @@ default WebSocket sendPing(@NonNull ByteBuffer message) { * @param callback Write callback. * @return This instance. */ - WebSocket sendPing(@NonNull ByteBuffer message, @NonNull WriteCallback callback); + WebSocket sendPing(ByteBuffer message, WriteCallback callback); /** * Send a text message to client. @@ -271,7 +271,7 @@ default WebSocket sendPing(@NonNull ByteBuffer message) { * @param message Text Message. * @return This websocket. */ - default WebSocket send(@NonNull String message) { + default WebSocket send(String message) { return send(message, WriteCallback.NOOP); } @@ -282,7 +282,7 @@ default WebSocket send(@NonNull String message) { * @param callback Write callback. * @return This websocket. */ - @NonNull WebSocket send(@NonNull String message, @NonNull WriteCallback callback); + WebSocket send(String message, WriteCallback callback); /** * Send a text message to client. @@ -290,7 +290,7 @@ default WebSocket send(@NonNull String message) { * @param message Text Message. * @return This websocket. */ - default WebSocket send(@NonNull byte[] message) { + default WebSocket send(byte[] message) { return send(message, WriteCallback.NOOP); } @@ -301,7 +301,7 @@ default WebSocket send(@NonNull byte[] message) { * @param callback Write callback. * @return This websocket. */ - default WebSocket send(byte[] message, @NonNull WriteCallback callback) { + default WebSocket send(byte[] message, WriteCallback callback) { return send(ByteBuffer.wrap(message), callback); } @@ -311,7 +311,7 @@ default WebSocket send(byte[] message, @NonNull WriteCallback callback) { * @param message Text message. * @return This instance. */ - default WebSocket send(@NonNull ByteBuffer message) { + default WebSocket send(ByteBuffer message) { return send(message, WriteCallback.NOOP); } @@ -322,7 +322,7 @@ default WebSocket send(@NonNull ByteBuffer message) { * @param callback Write callback. * @return This instance. */ - WebSocket send(@NonNull ByteBuffer message, @NonNull WriteCallback callback); + WebSocket send(ByteBuffer message, WriteCallback callback); /** * Send a text message to client. @@ -330,7 +330,7 @@ default WebSocket send(@NonNull ByteBuffer message) { * @param message Text message. * @return This instance. */ - default WebSocket send(@NonNull Output message) { + default WebSocket send(Output message) { return send(message, WriteCallback.NOOP); } @@ -341,7 +341,7 @@ default WebSocket send(@NonNull Output message) { * @param callback Write callback. * @return This instance. */ - WebSocket send(@NonNull Output message, @NonNull WriteCallback callback); + WebSocket send(Output message, WriteCallback callback); /** * Send a binary message to client. @@ -349,7 +349,7 @@ default WebSocket send(@NonNull Output message) { * @param message Binary Message. * @return This websocket. */ - default WebSocket sendBinary(@NonNull String message) { + default WebSocket sendBinary(String message) { return sendBinary(message, WriteCallback.NOOP); } @@ -360,7 +360,7 @@ default WebSocket sendBinary(@NonNull String message) { * @param callback Write callback. * @return This websocket. */ - @NonNull WebSocket sendBinary(@NonNull String message, @NonNull WriteCallback callback); + WebSocket sendBinary(String message, WriteCallback callback); /** * Send a binary message to client. @@ -368,7 +368,7 @@ default WebSocket sendBinary(@NonNull String message) { * @param message Binary Message. * @return This websocket. */ - default WebSocket sendBinary(@NonNull byte[] message) { + default WebSocket sendBinary(byte[] message) { return sendBinary(message, WriteCallback.NOOP); } @@ -379,7 +379,7 @@ default WebSocket sendBinary(@NonNull byte[] message) { * @param callback Write callback. * @return This websocket. */ - default WebSocket sendBinary(@NonNull byte[] message, @NonNull WriteCallback callback) { + default WebSocket sendBinary(byte[] message, WriteCallback callback) { return sendBinary(ByteBuffer.wrap(message), callback); } @@ -389,7 +389,7 @@ default WebSocket sendBinary(@NonNull byte[] message, @NonNull WriteCallback cal * @param message Binary message. * @return This instance. */ - default WebSocket sendBinary(@NonNull ByteBuffer message) { + default WebSocket sendBinary(ByteBuffer message) { return sendBinary(message, WriteCallback.NOOP); } @@ -400,7 +400,7 @@ default WebSocket sendBinary(@NonNull ByteBuffer message) { * @param callback Write callback. * @return This instance. */ - WebSocket sendBinary(@NonNull ByteBuffer message, @NonNull WriteCallback callback); + WebSocket sendBinary(ByteBuffer message, WriteCallback callback); /** * Send a binary message to client. @@ -408,7 +408,7 @@ default WebSocket sendBinary(@NonNull ByteBuffer message) { * @param message Binary message. * @return This instance. */ - default WebSocket sendBinary(@NonNull Output message) { + default WebSocket sendBinary(Output message) { return sendBinary(message, WriteCallback.NOOP); } @@ -419,7 +419,7 @@ default WebSocket sendBinary(@NonNull Output message) { * @param callback Write callback. * @return This instance. */ - WebSocket sendBinary(@NonNull Output message, @NonNull WriteCallback callback); + WebSocket sendBinary(Output message, WriteCallback callback); /** * Encode a value and send a text message to client. @@ -427,7 +427,7 @@ default WebSocket sendBinary(@NonNull Output message) { * @param value Value to send. * @return This websocket. */ - default WebSocket render(@NonNull Object value) { + default WebSocket render(Object value) { return render(value, WriteCallback.NOOP); } @@ -438,7 +438,7 @@ default WebSocket render(@NonNull Object value) { * @param callback Write callback. * @return This websocket. */ - WebSocket render(@NonNull Object value, @NonNull WriteCallback callback); + WebSocket render(Object value, WriteCallback callback); /** * Encode a value and send a binary message to client. @@ -446,7 +446,7 @@ default WebSocket render(@NonNull Object value) { * @param value Value to send. * @return This websocket. */ - default WebSocket renderBinary(@NonNull Object value) { + default WebSocket renderBinary(Object value) { return renderBinary(value, WriteCallback.NOOP); } @@ -457,7 +457,7 @@ default WebSocket renderBinary(@NonNull Object value) { * @param callback Write callback. * @return This websocket. */ - WebSocket renderBinary(@NonNull Object value, @NonNull WriteCallback callback); + WebSocket renderBinary(Object value, WriteCallback callback); /** * Close the web socket and send a {@link WebSocketCloseStatus#NORMAL} code to client. @@ -478,5 +478,5 @@ default WebSocket close() { * @param closeStatus Close status. * @return This websocket. */ - WebSocket close(@NonNull WebSocketCloseStatus closeStatus); + WebSocket close(WebSocketCloseStatus closeStatus); } diff --git a/jooby/src/main/java/io/jooby/WebSocketCloseStatus.java b/jooby/src/main/java/io/jooby/WebSocketCloseStatus.java index 07e89fe5cc..39ee19131c 100644 --- a/jooby/src/main/java/io/jooby/WebSocketCloseStatus.java +++ b/jooby/src/main/java/io/jooby/WebSocketCloseStatus.java @@ -7,7 +7,7 @@ import java.util.Optional; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; /** * Collection of websocket close status. diff --git a/jooby/src/main/java/io/jooby/WebSocketConfigurer.java b/jooby/src/main/java/io/jooby/WebSocketConfigurer.java index 930186036b..21a03af0cd 100644 --- a/jooby/src/main/java/io/jooby/WebSocketConfigurer.java +++ b/jooby/src/main/java/io/jooby/WebSocketConfigurer.java @@ -5,8 +5,6 @@ */ package io.jooby; -import edu.umd.cs.findbugs.annotations.NonNull; - /** * Websocket configurer. Allow to register callbacks for websocket. * @@ -21,7 +19,7 @@ public interface WebSocketConfigurer { * @param callback Callback. * @return This configurer. */ - @NonNull WebSocketConfigurer onConnect(@NonNull WebSocket.OnConnect callback); + WebSocketConfigurer onConnect(WebSocket.OnConnect callback); /** * Register an onMessage callback. @@ -29,7 +27,7 @@ public interface WebSocketConfigurer { * @param callback Callback. * @return This configurer. */ - @NonNull WebSocketConfigurer onMessage(@NonNull WebSocket.OnMessage callback); + WebSocketConfigurer onMessage(WebSocket.OnMessage callback); /** * Register an onError callback. @@ -37,7 +35,7 @@ public interface WebSocketConfigurer { * @param callback Callback. * @return This configurer. */ - @NonNull WebSocketConfigurer onError(@NonNull WebSocket.OnError callback); + WebSocketConfigurer onError(WebSocket.OnError callback); /** * Register an onClose callback. @@ -45,5 +43,5 @@ public interface WebSocketConfigurer { * @param callback Callback. * @return This configurer. */ - @NonNull WebSocketConfigurer onClose(@NonNull WebSocket.OnClose callback); + WebSocketConfigurer onClose(WebSocket.OnClose callback); } diff --git a/jooby/src/main/java/io/jooby/WebSocketMessage.java b/jooby/src/main/java/io/jooby/WebSocketMessage.java index 2867645f0c..a01c50e4c7 100644 --- a/jooby/src/main/java/io/jooby/WebSocketMessage.java +++ b/jooby/src/main/java/io/jooby/WebSocketMessage.java @@ -9,7 +9,6 @@ import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.internal.WebSocketMessageImpl; import io.jooby.value.Value; @@ -28,7 +27,7 @@ public interface WebSocketMessage extends Value { * @param Element type. * @return Instance of the type. */ - T to(@NonNull Type type); + T to(Type type); /** * Direct access to bytes. @@ -51,7 +50,7 @@ public interface WebSocketMessage extends Value { * @param bytes Text message as byte array. * @return A websocket message. */ - static WebSocketMessage create(@NonNull Context ctx, @NonNull byte[] bytes) { + static WebSocketMessage create(Context ctx, byte[] bytes) { return new WebSocketMessageImpl(ctx, bytes); } @@ -62,7 +61,7 @@ static WebSocketMessage create(@NonNull Context ctx, @NonNull byte[] bytes) { * @param message Text message. * @return A websocket message. */ - static WebSocketMessage create(@NonNull Context ctx, @NonNull String message) { + static WebSocketMessage create(Context ctx, String message) { return new WebSocketMessageImpl(ctx, message.getBytes(StandardCharsets.UTF_8)); } } diff --git a/jooby/src/main/java/io/jooby/XSS.java b/jooby/src/main/java/io/jooby/XSS.java index de8ffd3447..1e8cd2eafe 100644 --- a/jooby/src/main/java/io/jooby/XSS.java +++ b/jooby/src/main/java/io/jooby/XSS.java @@ -5,8 +5,8 @@ */ package io.jooby; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.internal.unbescape.html.HtmlEscapeLevel; import io.jooby.internal.unbescape.html.HtmlEscapeType; import io.jooby.internal.unbescape.html.HtmlEscapeUtil; @@ -45,7 +45,7 @@ private XSS() {} * modifications were required (and no additional String objects will be created * during processing). Will return null if input is null. */ - public static @NonNull String uri(@Nullable String value) { + public static String uri(@Nullable String value) { if (value == null || value.isEmpty()) { return ""; } @@ -77,7 +77,7 @@ private XSS() {} * modifications were required (and no additional String objects will be created * during processing). Will return null if input is null. */ - public static @NonNull String html(@Nullable String value) { + public static String html(@Nullable String value) { if (value == null || value.isEmpty()) { return ""; } @@ -124,7 +124,7 @@ private XSS() {} * modifications were required (and no additional String objects will be created * during processing). Will return null if input is null. */ - public static @NonNull String json(@Nullable String value) { + public static String json(@Nullable String value) { if (value == null || value.isEmpty()) { return "\"\""; } diff --git a/jooby/src/main/java/io/jooby/annotation/package-info.java b/jooby/src/main/java/io/jooby/annotation/package-info.java index 971e018be0..e986649872 100644 --- a/jooby/src/main/java/io/jooby/annotation/package-info.java +++ b/jooby/src/main/java/io/jooby/annotation/package-info.java @@ -1,3 +1,3 @@ /** Supported annotations for creating MVC routes. */ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.annotation; diff --git a/jooby/src/main/java/io/jooby/exception/BadRequestException.java b/jooby/src/main/java/io/jooby/exception/BadRequestException.java index 7cfe845b6a..bf30c58e05 100644 --- a/jooby/src/main/java/io/jooby/exception/BadRequestException.java +++ b/jooby/src/main/java/io/jooby/exception/BadRequestException.java @@ -5,7 +5,6 @@ */ package io.jooby.exception; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.StatusCode; /** @@ -21,7 +20,7 @@ public class BadRequestException extends StatusCodeException { * * @param message Message. */ - public BadRequestException(@NonNull String message) { + public BadRequestException(String message) { super(StatusCode.BAD_REQUEST, message); } @@ -31,7 +30,7 @@ public BadRequestException(@NonNull String message) { * @param message Message. * @param cause Throwable. */ - public BadRequestException(@NonNull String message, @NonNull Throwable cause) { + public BadRequestException(String message, Throwable cause) { super(StatusCode.BAD_REQUEST, message, cause); } } diff --git a/jooby/src/main/java/io/jooby/exception/ForbiddenException.java b/jooby/src/main/java/io/jooby/exception/ForbiddenException.java index 8c4f61b379..4de319c4a3 100644 --- a/jooby/src/main/java/io/jooby/exception/ForbiddenException.java +++ b/jooby/src/main/java/io/jooby/exception/ForbiddenException.java @@ -7,7 +7,8 @@ import java.util.Optional; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.StatusCode; /** Specific error for forbidden access. */ diff --git a/jooby/src/main/java/io/jooby/exception/InvalidCsrfToken.java b/jooby/src/main/java/io/jooby/exception/InvalidCsrfToken.java index 392e86a098..ef2b57fd15 100644 --- a/jooby/src/main/java/io/jooby/exception/InvalidCsrfToken.java +++ b/jooby/src/main/java/io/jooby/exception/InvalidCsrfToken.java @@ -5,8 +5,8 @@ */ package io.jooby.exception; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.problem.HttpProblem; /** @@ -27,7 +27,7 @@ public InvalidCsrfToken(@Nullable String token) { } @Override - public @NonNull HttpProblem toHttpProblem() { + public HttpProblem toHttpProblem() { return HttpProblem.valueOf( statusCode, "Invalid CSRF token", "CSRF token '" + getMessage() + "' is invalid"); } diff --git a/jooby/src/main/java/io/jooby/exception/MethodNotAllowedException.java b/jooby/src/main/java/io/jooby/exception/MethodNotAllowedException.java index c75efbec18..05198ec1f2 100644 --- a/jooby/src/main/java/io/jooby/exception/MethodNotAllowedException.java +++ b/jooby/src/main/java/io/jooby/exception/MethodNotAllowedException.java @@ -7,7 +7,6 @@ import java.util.List; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.StatusCode; import io.jooby.problem.HttpProblem; @@ -28,7 +27,7 @@ public class MethodNotAllowedException extends StatusCodeException { * @param method Requested method. * @param allow Allow methods. */ - public MethodNotAllowedException(@NonNull String method, @NonNull List allow) { + public MethodNotAllowedException(String method, List allow) { super(StatusCode.METHOD_NOT_ALLOWED, method); this.allow = allow; } diff --git a/jooby/src/main/java/io/jooby/exception/MissingValueException.java b/jooby/src/main/java/io/jooby/exception/MissingValueException.java index 62d3bd9f03..7e44d83d2a 100644 --- a/jooby/src/main/java/io/jooby/exception/MissingValueException.java +++ b/jooby/src/main/java/io/jooby/exception/MissingValueException.java @@ -5,8 +5,7 @@ */ package io.jooby.exception; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; /** * Missing exception. Used when a required attribute/value is missing. @@ -23,7 +22,7 @@ public class MissingValueException extends BadRequestException { * * @param name Parameter/attribute name. */ - public MissingValueException(@NonNull String name) { + public MissingValueException(String name) { super("Missing value: '" + name + "'"); this.name = name; } @@ -45,7 +44,7 @@ public String getName() { * @param Value type. * @return Input value */ - public static T requireNonNull(@NonNull String name, @Nullable T value) { + public static T requireNonNull(String name, @Nullable T value) { if (value == null) { throw new MissingValueException(name); } diff --git a/jooby/src/main/java/io/jooby/exception/NotAcceptableException.java b/jooby/src/main/java/io/jooby/exception/NotAcceptableException.java index d51dcfc915..73d59351aa 100644 --- a/jooby/src/main/java/io/jooby/exception/NotAcceptableException.java +++ b/jooby/src/main/java/io/jooby/exception/NotAcceptableException.java @@ -5,8 +5,8 @@ */ package io.jooby.exception; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.StatusCode; import io.jooby.problem.HttpProblem; @@ -36,7 +36,7 @@ public NotAcceptableException(@Nullable String contentType) { } @Override - public @NonNull HttpProblem toHttpProblem() { + public HttpProblem toHttpProblem() { return HttpProblem.valueOf( statusCode, statusCode.reason(), diff --git a/jooby/src/main/java/io/jooby/exception/NotFoundException.java b/jooby/src/main/java/io/jooby/exception/NotFoundException.java index a027f68799..5cd7cd7e2a 100644 --- a/jooby/src/main/java/io/jooby/exception/NotFoundException.java +++ b/jooby/src/main/java/io/jooby/exception/NotFoundException.java @@ -5,7 +5,6 @@ */ package io.jooby.exception; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.StatusCode; import io.jooby.problem.HttpProblem; @@ -22,7 +21,7 @@ public class NotFoundException extends StatusCodeException { * * @param path Requested path. */ - public NotFoundException(@NonNull String path) { + public NotFoundException(String path) { super(StatusCode.NOT_FOUND, path); } @@ -31,12 +30,12 @@ public NotFoundException(@NonNull String path) { * * @return Requested path. */ - public @NonNull String getRequestPath() { + public String getRequestPath() { return getMessage(); } @Override - public @NonNull HttpProblem toHttpProblem() { + public HttpProblem toHttpProblem() { return HttpProblem.valueOf( statusCode, statusCode.reason(), diff --git a/jooby/src/main/java/io/jooby/exception/ProvisioningException.java b/jooby/src/main/java/io/jooby/exception/ProvisioningException.java index d448e6bc66..836a64fb6c 100644 --- a/jooby/src/main/java/io/jooby/exception/ProvisioningException.java +++ b/jooby/src/main/java/io/jooby/exception/ProvisioningException.java @@ -11,8 +11,7 @@ import java.util.StringJoiner; import java.util.stream.Stream; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; /** * Provisioning exception, throws by MVC routes when parameter binding fails. @@ -28,7 +27,7 @@ public class ProvisioningException extends BadRequestException { * @param parameter Failing parameter. * @param cause Cause. Nullable. */ - public ProvisioningException(@NonNull Parameter parameter, @Nullable Throwable cause) { + public ProvisioningException(Parameter parameter, @Nullable Throwable cause) { this( "Unable to provision parameter: '" + toString(parameter) @@ -43,7 +42,7 @@ public ProvisioningException(@NonNull Parameter parameter, @Nullable Throwable c * @param message Error message. * @param cause Cause. */ - public ProvisioningException(@NonNull String message, @Nullable Throwable cause) { + public ProvisioningException(String message, @Nullable Throwable cause) { super(message, cause); } @@ -53,7 +52,7 @@ public ProvisioningException(@NonNull String message, @Nullable Throwable cause) * @param parameter Parameter. * @return Description. */ - public static String toString(@NonNull Parameter parameter) { + public static String toString(Parameter parameter) { return parameter.getName() + ": " + parameter.getParameterizedType(); } @@ -63,7 +62,7 @@ public static String toString(@NonNull Parameter parameter) { * @param method Parameter. * @return Description. */ - public static String toString(@NonNull Executable method) { + public static String toString(Executable method) { StringBuilder buff = new StringBuilder(); if (method instanceof Constructor) { buff.append("constructor "); diff --git a/jooby/src/main/java/io/jooby/exception/RegistryException.java b/jooby/src/main/java/io/jooby/exception/RegistryException.java index 389d636fc9..641c9d9f16 100644 --- a/jooby/src/main/java/io/jooby/exception/RegistryException.java +++ b/jooby/src/main/java/io/jooby/exception/RegistryException.java @@ -5,7 +5,6 @@ */ package io.jooby.exception; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.StatusCode; /** Thrown when a required service is not available. */ @@ -17,7 +16,7 @@ public class RegistryException extends StatusCodeException { * @param message Error message. * @param cause Cause. */ - public RegistryException(@NonNull String message, Throwable cause) { + public RegistryException(String message, Throwable cause) { super(StatusCode.SERVER_ERROR, message, cause); } @@ -26,7 +25,7 @@ public RegistryException(@NonNull String message, Throwable cause) { * * @param message Error message. */ - public RegistryException(@NonNull String message) { + public RegistryException(String message) { super(StatusCode.SERVER_ERROR, message); } } diff --git a/jooby/src/main/java/io/jooby/exception/StatusCodeException.java b/jooby/src/main/java/io/jooby/exception/StatusCodeException.java index 7c33caffb9..9eb48e711a 100644 --- a/jooby/src/main/java/io/jooby/exception/StatusCodeException.java +++ b/jooby/src/main/java/io/jooby/exception/StatusCodeException.java @@ -5,8 +5,8 @@ */ package io.jooby.exception; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.StatusCode; import io.jooby.problem.HttpProblem; import io.jooby.problem.HttpProblemMappable; @@ -26,7 +26,7 @@ public class StatusCodeException extends RuntimeException implements HttpProblem * * @param statusCode Status code. */ - public StatusCodeException(@NonNull StatusCode statusCode) { + public StatusCodeException(StatusCode statusCode) { this(statusCode, statusCode.toString()); } @@ -36,7 +36,7 @@ public StatusCodeException(@NonNull StatusCode statusCode) { * @param statusCode Status code. * @param message Error message. */ - public StatusCodeException(@NonNull StatusCode statusCode, @NonNull String message) { + public StatusCodeException(StatusCode statusCode, String message) { this(statusCode, message, null); } @@ -47,8 +47,7 @@ public StatusCodeException(@NonNull StatusCode statusCode, @NonNull String messa * @param message Error message. * @param cause Cause. */ - public StatusCodeException( - @NonNull StatusCode statusCode, @NonNull String message, @Nullable Throwable cause) { + public StatusCodeException(StatusCode statusCode, String message, @Nullable Throwable cause) { super(message, cause); this.statusCode = statusCode; } @@ -58,12 +57,12 @@ public StatusCodeException( * * @return Status code. */ - public @NonNull StatusCode getStatusCode() { + public StatusCode getStatusCode() { return statusCode; } @Override - public @NonNull HttpProblem toHttpProblem() { + public HttpProblem toHttpProblem() { return HttpProblem.valueOf(statusCode, getMessage()); } } diff --git a/jooby/src/main/java/io/jooby/exception/TypeMismatchException.java b/jooby/src/main/java/io/jooby/exception/TypeMismatchException.java index b170055601..d62278d0b5 100644 --- a/jooby/src/main/java/io/jooby/exception/TypeMismatchException.java +++ b/jooby/src/main/java/io/jooby/exception/TypeMismatchException.java @@ -7,7 +7,6 @@ import java.lang.reflect.Type; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.problem.HttpProblem; /** @@ -27,7 +26,7 @@ public class TypeMismatchException extends BadRequestException { * @param type Parameter/attribute type. * @param cause Cause. */ - public TypeMismatchException(@NonNull String name, @NonNull Type type, @NonNull Throwable cause) { + public TypeMismatchException(String name, Type type, Throwable cause) { super("Cannot convert value: '" + name + "', to: '" + type.getTypeName() + "'", cause); this.name = name; } @@ -38,7 +37,7 @@ public TypeMismatchException(@NonNull String name, @NonNull Type type, @NonNull * @param name Parameter/attribute name. * @param type Parameter/attribute type. */ - public TypeMismatchException(@NonNull String name, @NonNull Type type) { + public TypeMismatchException(String name, Type type) { this(name, type, null); } @@ -47,12 +46,12 @@ public TypeMismatchException(@NonNull String name, @NonNull Type type) { * * @return Parameter/attribute name. */ - public @NonNull String getName() { + public String getName() { return name; } @Override - public @NonNull HttpProblem toHttpProblem() { + public HttpProblem toHttpProblem() { return HttpProblem.valueOf(statusCode, "Type Mismatch", getMessage()); } } diff --git a/jooby/src/main/java/io/jooby/exception/UnauthorizedException.java b/jooby/src/main/java/io/jooby/exception/UnauthorizedException.java index e633c72ab4..ccd6151af1 100644 --- a/jooby/src/main/java/io/jooby/exception/UnauthorizedException.java +++ b/jooby/src/main/java/io/jooby/exception/UnauthorizedException.java @@ -7,7 +7,8 @@ import java.util.Optional; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.StatusCode; /** diff --git a/jooby/src/main/java/io/jooby/exception/UnsupportedMediaType.java b/jooby/src/main/java/io/jooby/exception/UnsupportedMediaType.java index 5bacc5f1d6..45739c90c8 100644 --- a/jooby/src/main/java/io/jooby/exception/UnsupportedMediaType.java +++ b/jooby/src/main/java/io/jooby/exception/UnsupportedMediaType.java @@ -5,8 +5,8 @@ */ package io.jooby.exception; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.StatusCode; import io.jooby.problem.HttpProblem; @@ -36,7 +36,7 @@ public UnsupportedMediaType(@Nullable String type) { } @Override - public @NonNull HttpProblem toHttpProblem() { + public HttpProblem toHttpProblem() { return HttpProblem.valueOf( statusCode, statusCode.reason(), "Media type '" + getContentType() + "' is not supported"); } diff --git a/jooby/src/main/java/io/jooby/exception/package-info.java b/jooby/src/main/java/io/jooby/exception/package-info.java index 56014914ff..5185a45d16 100644 --- a/jooby/src/main/java/io/jooby/exception/package-info.java +++ b/jooby/src/main/java/io/jooby/exception/package-info.java @@ -1,3 +1,3 @@ /** Built-in exceptions for common HTTP error codes. */ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.exception; diff --git a/jooby/src/main/java/io/jooby/handler/AccessLogHandler.java b/jooby/src/main/java/io/jooby/handler/AccessLogHandler.java index a9d71a48d4..58eac6fb64 100644 --- a/jooby/src/main/java/io/jooby/handler/AccessLogHandler.java +++ b/jooby/src/main/java/io/jooby/handler/AccessLogHandler.java @@ -20,7 +20,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.Route; @@ -185,7 +184,7 @@ public class AccessLogHandler implements Route.Filter { * * @param userId User ID provider. */ - public AccessLogHandler(@NonNull Function userId) { + public AccessLogHandler(Function userId) { this.userId = requireNonNull(userId, "User ID provider required."); dateFormatter(FORMATTER); } @@ -195,8 +194,8 @@ public AccessLogHandler() { this(USER_OR_DASH); } - @NonNull @Override - public Route.Handler apply(@NonNull Route.Handler next) { + @Override + public Route.Handler apply(Route.Handler next) { long timestamp = System.currentTimeMillis(); return ctx -> { // Take remote address here (less chances of loosing it on interrupted requests). @@ -258,7 +257,7 @@ private void appendHeaders( * @param log Log callback. * @return This instance. */ - public @NonNull AccessLogHandler log(@NonNull Consumer log) { + public AccessLogHandler log(Consumer log) { this.logRecord = requireNonNull(log, "Consumer is required."); return this; } @@ -269,7 +268,7 @@ private void appendHeaders( * @param formatter New formatter to use. * @return This instance. */ - public @NonNull AccessLogHandler dateFormatter(@NonNull DateTimeFormatter formatter) { + public AccessLogHandler dateFormatter(DateTimeFormatter formatter) { return dateFormatter(ts -> formatter.format(Instant.ofEpochMilli(ts))); } @@ -279,7 +278,7 @@ private void appendHeaders( * @param formatter New formatter to use. * @return This instance. */ - public @NonNull AccessLogHandler dateFormatter(final Function formatter) { + public AccessLogHandler dateFormatter(final Function formatter) { requireNonNull(formatter, "Formatter required."); this.df = formatter; return this; @@ -291,7 +290,7 @@ private void appendHeaders( * @param zoneId Zone id. * @return This instance. */ - public @NonNull AccessLogHandler dateFormatter(@NonNull ZoneId zoneId) { + public AccessLogHandler dateFormatter(ZoneId zoneId) { return dateFormatter(FORMATTER.withZone(zoneId)); } @@ -300,7 +299,7 @@ private void appendHeaders( * * @return This instance. */ - public @NonNull AccessLogHandler extended() { + public AccessLogHandler extended() { return requestHeader(USER_AGENT, REFERER); } @@ -310,7 +309,7 @@ private void appendHeaders( * @param names Header names. * @return This instance. */ - public @NonNull AccessLogHandler requestHeader(@NonNull String... names) { + public AccessLogHandler requestHeader(String... names) { this.requestHeaders = Arrays.asList(names); return this; } @@ -321,7 +320,7 @@ private void appendHeaders( * @param names Header names. * @return This instance. */ - public @NonNull AccessLogHandler responseHeader(@NonNull String... names) { + public AccessLogHandler responseHeader(String... names) { this.responseHeaders = Arrays.asList(names); return this; } diff --git a/jooby/src/main/java/io/jooby/handler/Asset.java b/jooby/src/main/java/io/jooby/handler/Asset.java index e662e93f1f..66df6a0c64 100644 --- a/jooby/src/main/java/io/jooby/handler/Asset.java +++ b/jooby/src/main/java/io/jooby/handler/Asset.java @@ -15,7 +15,6 @@ import java.nio.file.Paths; import java.util.Base64; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.MediaType; import io.jooby.SneakyThrows; import io.jooby.internal.FileAsset; @@ -36,7 +35,7 @@ public interface Asset extends AutoCloseable { * @param resource File resource. * @return File resource asset. */ - static Asset create(@NonNull Path resource) { + static Asset create(Path resource) { return new FileAsset(resource); } @@ -47,7 +46,7 @@ static Asset create(@NonNull Path resource) { * @param resource Asset URL. * @return URL asset. */ - static Asset create(@NonNull String path, @NonNull URL resource) { + static Asset create(String path, URL resource) { try { if ("jar".equals(resource.getProtocol())) { return new JarAsset((JarURLConnection) resource.openConnection()); diff --git a/jooby/src/main/java/io/jooby/handler/AssetHandler.java b/jooby/src/main/java/io/jooby/handler/AssetHandler.java index 115c92216f..d5d8029488 100644 --- a/jooby/src/main/java/io/jooby/handler/AssetHandler.java +++ b/jooby/src/main/java/io/jooby/handler/AssetHandler.java @@ -13,8 +13,8 @@ import java.util.Objects; import java.util.function.Function; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.*; /** @@ -61,7 +61,7 @@ public class AssetHandler implements Route.Handler { * @param fallback Fallback asset. * @param sources Asset sources. At least one source is required. */ - public AssetHandler(@NonNull String fallback, AssetSource... sources) { + public AssetHandler(String fallback, AssetSource... sources) { this.fallback = fallback; this.sources = checkSource(sources); } @@ -75,8 +75,8 @@ public AssetHandler(AssetSource... sources) { this.sources = checkSource(sources); } - @NonNull @Override - public Object apply(@NonNull Context ctx) throws Exception { + @Override + public Object apply(Context ctx) throws Exception { final String resolvedPath; String filepath = ctx.path(filekey).value("index.html"); Asset asset = resolve(filepath); @@ -229,7 +229,7 @@ public AssetHandler setNoCache() { * @return this instance. * @see CacheControl */ - public AssetHandler cacheControl(@NonNull Function cacheControl) { + public AssetHandler cacheControl(Function cacheControl) { this.cacheControl = requireNonNull(cacheControl); return this; } @@ -241,7 +241,7 @@ public AssetHandler cacheControl(@NonNull Function cacheCo * @param handler Handler. * @return This handler. */ - public AssetHandler notFound(@NonNull SneakyThrows.Consumer handler) { + public AssetHandler notFound(SneakyThrows.Consumer handler) { this.notFound = handler; return this; } diff --git a/jooby/src/main/java/io/jooby/handler/AssetSource.java b/jooby/src/main/java/io/jooby/handler/AssetSource.java index 253fae126a..39107093dc 100644 --- a/jooby/src/main/java/io/jooby/handler/AssetSource.java +++ b/jooby/src/main/java/io/jooby/handler/AssetSource.java @@ -14,8 +14,8 @@ import java.util.List; import java.util.Properties; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.SneakyThrows; import io.jooby.internal.ClassPathAssetSource; import io.jooby.internal.FileDiskAssetSource; @@ -37,7 +37,7 @@ public interface AssetSource { * @param path Path to look for. * @return An asset or null. */ - @Nullable Asset resolve(@NonNull String path); + @Nullable Asset resolve(String path); /** * Classpath asset source. Useful for resolving files from classpath (including jar files). @@ -47,7 +47,7 @@ public interface AssetSource { * disallowed. * @return An asset source. */ - static @NonNull AssetSource create(@NonNull ClassLoader loader, @NonNull String location) { + static AssetSource create(ClassLoader loader, String location) { return new ClassPathAssetSource(loader, location); } @@ -68,7 +68,7 @@ public interface AssetSource { * @param name Web asset name. * @return A webjar source. */ - static @NonNull AssetSource webjars(@NonNull ClassLoader loader, @NonNull String name) { + static AssetSource webjars(ClassLoader loader, String name) { List location = Arrays.asList( "META-INF/maven/org.webjars/" + name + "/pom.properties", @@ -96,7 +96,7 @@ public interface AssetSource { * @param location Asset directory. * @return A new file system asset source. */ - static @NonNull AssetSource create(@NonNull Path location) { + static AssetSource create(Path location) { Path absoluteLocation = location.toAbsolutePath(); if (Files.isDirectory(absoluteLocation)) { return new FolderDiskAssetSource(absoluteLocation); diff --git a/jooby/src/main/java/io/jooby/handler/Cors.java b/jooby/src/main/java/io/jooby/handler/Cors.java index 83c7ad829c..eda55e7259 100644 --- a/jooby/src/main/java/io/jooby/handler/Cors.java +++ b/jooby/src/main/java/io/jooby/handler/Cors.java @@ -16,7 +16,6 @@ import java.util.regex.Pattern; import com.typesafe.config.Config; -import edu.umd.cs.findbugs.annotations.NonNull; /** * Cross-origin resource sharing. @@ -340,7 +339,7 @@ public Cors setMaxAge(final Duration preflightMaxAge) { * @param conf Configuration. * @return Cors options. */ - public static Cors from(@NonNull Config conf) { + public static Cors from(Config conf) { Config cors = conf.hasPath("cors") ? conf.getConfig("cors") : conf; Cors options = new Cors(); if (cors.hasPath("origin")) { diff --git a/jooby/src/main/java/io/jooby/handler/CorsHandler.java b/jooby/src/main/java/io/jooby/handler/CorsHandler.java index 3a5c311362..dff6b5b8b8 100644 --- a/jooby/src/main/java/io/jooby/handler/CorsHandler.java +++ b/jooby/src/main/java/io/jooby/handler/CorsHandler.java @@ -14,7 +14,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.Route; import io.jooby.Router; @@ -58,7 +57,7 @@ public class CorsHandler implements Route.Filter { * * @param options Cors options, or empty for using default options. */ - public CorsHandler(@NonNull final Cors options) { + public CorsHandler(final Cors options) { this.options = options; } @@ -67,8 +66,8 @@ public CorsHandler() { this(new Cors()); } - @NonNull @Override - public Route.Handler apply(@NonNull Route.Handler next) { + @Override + public Route.Handler apply(Route.Handler next) { return ctx -> { String origin = ctx.header("Origin").valueOrNull(); if (origin != null) { @@ -147,8 +146,8 @@ private static void simple(final Context ctx, final Cors options, final String o } } - @NonNull @Override - public void setRoute(@NonNull Route route) { + @Override + public void setRoute(Route route) { route.setHttpOptions(true); } diff --git a/jooby/src/main/java/io/jooby/handler/CsrfHandler.java b/jooby/src/main/java/io/jooby/handler/CsrfHandler.java index ceef4bef6f..c0abac6bcb 100644 --- a/jooby/src/main/java/io/jooby/handler/CsrfHandler.java +++ b/jooby/src/main/java/io/jooby/handler/CsrfHandler.java @@ -11,7 +11,6 @@ import java.util.function.Predicate; import java.util.stream.Stream; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.Route; import io.jooby.Router; @@ -100,7 +99,7 @@ public CsrfHandler() { } @Override - public void apply(@NonNull Context ctx) throws Exception { + public void apply(Context ctx) throws Exception { Session session = ctx.session(); String token = @@ -138,7 +137,7 @@ public void apply(@NonNull Context ctx) throws Exception { * @param generator A custom token generator. * @return This filter. */ - public @NonNull CsrfHandler setTokenGenerator(@NonNull Function generator) { + public CsrfHandler setTokenGenerator(Function generator) { this.generator = generator; return this; } @@ -151,7 +150,7 @@ public void apply(@NonNull Context ctx) throws Exception { * @param filter Predicate to use. * @return This filter. */ - public @NonNull CsrfHandler setRequestFilter(@NonNull Predicate filter) { + public CsrfHandler setRequestFilter(Predicate filter) { this.filter = filter; return this; } diff --git a/jooby/src/main/java/io/jooby/handler/HeadHandler.java b/jooby/src/main/java/io/jooby/handler/HeadHandler.java index f87d684dfb..e3aa6577a1 100644 --- a/jooby/src/main/java/io/jooby/handler/HeadHandler.java +++ b/jooby/src/main/java/io/jooby/handler/HeadHandler.java @@ -5,7 +5,6 @@ */ package io.jooby.handler; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Route; import io.jooby.Router; import io.jooby.internal.HeadContext; @@ -32,7 +31,7 @@ public class HeadHandler implements Route.Filter { public HeadHandler() {} @Override - public Route.Handler apply(@NonNull Route.Handler next) { + public Route.Handler apply(Route.Handler next) { return ctx -> { if (ctx.getMethod().equals(Router.HEAD)) { return DefaultHandler.DEFAULT.apply(next).apply(new HeadContext(ctx)); @@ -43,7 +42,7 @@ public Route.Handler apply(@NonNull Route.Handler next) { } @Override - public void setRoute(@NonNull Route route) { + public void setRoute(Route route) { route.setHttpHead(true); } } diff --git a/jooby/src/main/java/io/jooby/handler/RateLimitHandler.java b/jooby/src/main/java/io/jooby/handler/RateLimitHandler.java index b8b0cbf906..3d79034c46 100644 --- a/jooby/src/main/java/io/jooby/handler/RateLimitHandler.java +++ b/jooby/src/main/java/io/jooby/handler/RateLimitHandler.java @@ -11,7 +11,6 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; -import edu.umd.cs.findbugs.annotations.NonNull; import io.github.bucket4j.Bucket; import io.github.bucket4j.ConsumptionProbe; import io.jooby.Context; @@ -85,7 +84,7 @@ public class RateLimitHandler implements Route.Before { * * @param bucketFactory Bucket factory. */ - public RateLimitHandler(@NonNull SneakyThrows.Function bucketFactory) { + public RateLimitHandler(SneakyThrows.Function bucketFactory) { this(bucketFactory, Context::getRemoteAddress); } @@ -95,8 +94,7 @@ public RateLimitHandler(@NonNull SneakyThrows.Function bucketFac * @param bucketFactory Bucket factory. * @param headerName Header to use as key. */ - public RateLimitHandler( - @NonNull SneakyThrows.Function bucketFactory, @NonNull String headerName) { + public RateLimitHandler(SneakyThrows.Function bucketFactory, String headerName) { this(bucketFactory, ctx -> ctx.header(headerName).value()); } @@ -107,8 +105,8 @@ public RateLimitHandler( * @param classifier Key provider. */ public RateLimitHandler( - @NonNull SneakyThrows.Function bucketFactory, - @NonNull SneakyThrows.Function classifier) { + SneakyThrows.Function bucketFactory, + SneakyThrows.Function classifier) { this(byKey(bucketFactory, classifier)); } @@ -117,7 +115,7 @@ public RateLimitHandler( * * @param bucket Bucket to use. */ - public RateLimitHandler(@NonNull Bucket bucket) { + public RateLimitHandler(Bucket bucket) { this((Function) ctx -> bucket); } @@ -131,8 +129,7 @@ private RateLimitHandler(Function factory) { * @param proxyManager Cluster bucket configuration. * @return Rate limiter. */ - public static @NonNull RateLimitHandler cluster( - @NonNull SneakyThrows.Function proxyManager) { + public static RateLimitHandler cluster(SneakyThrows.Function proxyManager) { return cluster(proxyManager, Context::getRemoteAddress); } @@ -143,8 +140,8 @@ private RateLimitHandler(Function factory) { * @param headerName Header to use as key. * @return Rate limiter. */ - public static @NonNull RateLimitHandler cluster( - @NonNull SneakyThrows.Function proxyManager, @NonNull String headerName) { + public static RateLimitHandler cluster( + SneakyThrows.Function proxyManager, String headerName) { return cluster(proxyManager, ctx -> ctx.header(headerName).value()); } @@ -156,14 +153,14 @@ private RateLimitHandler(Function factory) { * @return Rate limiter. */ public static RateLimitHandler cluster( - @NonNull SneakyThrows.Function proxyManager, - @NonNull SneakyThrows.Function classifier) { + SneakyThrows.Function proxyManager, + SneakyThrows.Function classifier) { return new RateLimitHandler( (Function) ctx -> proxyManager.apply(classifier.apply(ctx))); } @Override - public void apply(@NonNull Context ctx) throws Exception { + public void apply(Context ctx) throws Exception { Bucket bucket = factory.apply(ctx); // tryConsume returns false immediately if no tokens available with the bucket ConsumptionProbe probe = bucket.tryConsumeAndReturnRemaining(1); diff --git a/jooby/src/main/java/io/jooby/handler/SSLHandler.java b/jooby/src/main/java/io/jooby/handler/SSLHandler.java index e57b64b9b4..491794466c 100644 --- a/jooby/src/main/java/io/jooby/handler/SSLHandler.java +++ b/jooby/src/main/java/io/jooby/handler/SSLHandler.java @@ -5,7 +5,6 @@ */ package io.jooby.handler; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.Route; import io.jooby.ServerOptions; @@ -33,7 +32,7 @@ public class SSLHandler implements Route.Before { * @param host Host to redirect. * @param port HTTP port. */ - public SSLHandler(@NonNull String host, int port) { + public SSLHandler(String host, int port) { this.host = host; this.port = port; } @@ -46,7 +45,7 @@ public SSLHandler(@NonNull String host, int port) { * * @param host Host to redirect. */ - public SSLHandler(@NonNull String host) { + public SSLHandler(String host) { this(host, SECURE_PORT); } @@ -76,7 +75,7 @@ public SSLHandler() { } @Override - public void apply(@NonNull Context ctx) { + public void apply(Context ctx) { if (!ctx.isSecure()) { String host; if (this.host == null) { diff --git a/jooby/src/main/java/io/jooby/handler/TraceHandler.java b/jooby/src/main/java/io/jooby/handler/TraceHandler.java index 06e972187b..d22200ea9b 100644 --- a/jooby/src/main/java/io/jooby/handler/TraceHandler.java +++ b/jooby/src/main/java/io/jooby/handler/TraceHandler.java @@ -9,7 +9,6 @@ import java.util.Map; import java.util.stream.Collectors; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Route; import io.jooby.Router; @@ -26,7 +25,7 @@ public class TraceHandler implements Route.Filter { public TraceHandler() {} @Override - public Route.Handler apply(@NonNull Route.Handler next) { + public Route.Handler apply(Route.Handler next) { return ctx -> { if (ctx.getMethod().equals(Router.TRACE)) { // Handle trace @@ -55,8 +54,8 @@ public Route.Handler apply(@NonNull Route.Handler next) { }; } - @NonNull @Override - public void setRoute(@NonNull Route route) { + @Override + public void setRoute(Route route) { route.setHttpTrace(true); } } diff --git a/jooby/src/main/java/io/jooby/handler/WebVariables.java b/jooby/src/main/java/io/jooby/handler/WebVariables.java index f925f205ad..0d034958e9 100644 --- a/jooby/src/main/java/io/jooby/handler/WebVariables.java +++ b/jooby/src/main/java/io/jooby/handler/WebVariables.java @@ -5,7 +5,6 @@ */ package io.jooby.handler; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.Route; @@ -39,7 +38,7 @@ public class WebVariables implements Route.Filter { * * @param scope Scope to use. */ - public WebVariables(@NonNull String scope) { + public WebVariables(String scope) { this.scope = scope; } @@ -48,8 +47,8 @@ public WebVariables() { this.scope = null; } - @NonNull @Override - public Route.Handler apply(@NonNull Route.Handler next) { + @Override + public Route.Handler apply(Route.Handler next) { return ctx -> next.apply(webvariables(ctx)); } diff --git a/jooby/src/main/java/io/jooby/handler/package-info.java b/jooby/src/main/java/io/jooby/handler/package-info.java index c3d4415007..4441d7b5c3 100644 --- a/jooby/src/main/java/io/jooby/handler/package-info.java +++ b/jooby/src/main/java/io/jooby/handler/package-info.java @@ -1,3 +1,3 @@ /** Built-in middleware. */ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.handler; diff --git a/jooby/src/main/java/io/jooby/internal/ArrayValue.java b/jooby/src/main/java/io/jooby/internal/ArrayValue.java index f8c95525b5..8b657c4564 100644 --- a/jooby/src/main/java/io/jooby/internal/ArrayValue.java +++ b/jooby/src/main/java/io/jooby/internal/ArrayValue.java @@ -14,8 +14,8 @@ import java.util.Optional; import java.util.Set; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.exception.MissingValueException; import io.jooby.exception.TypeMismatchException; import io.jooby.value.ConversionHint; @@ -56,7 +56,7 @@ public ArrayValue add(String value) { } @Override - public @NonNull Value get(int index) { + public Value get(int index) { try { return list.get(index); } catch (IndexOutOfBoundsException x) { @@ -65,12 +65,12 @@ public ArrayValue add(String value) { } @Override - public @NonNull Value get(@NonNull String name) { + public Value get(String name) { return new MissingValue(factory, this.name + "." + name); } @Override - public Value getOrDefault(@NonNull String name, @NonNull String defaultValue) { + public Value getOrDefault(String name, String defaultValue) { return Value.value(factory, this.name + "." + name, defaultValue); } @@ -80,7 +80,7 @@ public int size() { } @Override - public @NonNull String value() { + public String value() { String name = name(); throw new TypeMismatchException(name == null ? getClass().getSimpleName() : name, String.class); } @@ -91,27 +91,27 @@ public String toString() { } @Override - public @NonNull Iterator iterator() { + public Iterator iterator() { return list.iterator(); } - @NonNull @Override - public T to(@NonNull Class type) { + @Override + public T to(Class type) { return factory.convert(type, list.get(0), ConversionHint.Strict); } @Nullable @Override - public T toNullable(@NonNull Class type) { + public T toNullable(Class type) { return list.isEmpty() ? null : factory.convert(type, list.get(0), ConversionHint.Nullable); } - @NonNull @Override - public List toList(@NonNull Class type) { + @Override + public List toList(Class type) { return collect(new ArrayList<>(this.list.size()), type); } - @NonNull @Override - public Optional toOptional(@NonNull Class type) { + @Override + public Optional toOptional(Class type) { try { return Optional.ofNullable(toNullable(type)); } catch (MissingValueException x) { @@ -119,20 +119,20 @@ public Optional toOptional(@NonNull Class type) { } } - @NonNull @Override - public Set toSet(@NonNull Class type) { + @Override + public Set toSet(Class type) { return collect(new LinkedHashSet<>(this.list.size()), type); } @Override - public @NonNull Map> toMultimap() { + public Map> toMultimap() { var values = new ArrayList(); list.forEach(it -> it.toMultimap().values().forEach(values::addAll)); return Map.of(name, values); } @Override - public @NonNull List toList() { + public List toList() { return switch (list.size()) { case 0 -> List.of(); case 1 -> List.of(list.get(0).value()); @@ -143,7 +143,7 @@ public Set toSet(@NonNull Class type) { } @Override - public @NonNull Set toSet() { + public Set toSet() { return switch (list.size()) { case 0 -> Set.of(); case 1 -> Set.of(list.get(0).value()); diff --git a/jooby/src/main/java/io/jooby/internal/ByteArrayBody.java b/jooby/src/main/java/io/jooby/internal/ByteArrayBody.java index e5af6e3e1f..3d88c33254 100644 --- a/jooby/src/main/java/io/jooby/internal/ByteArrayBody.java +++ b/jooby/src/main/java/io/jooby/internal/ByteArrayBody.java @@ -15,8 +15,8 @@ import java.util.List; import java.util.Map; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.Body; import io.jooby.Context; import io.jooby.MediaType; @@ -35,12 +35,12 @@ public ByteArrayBody(Context ctx, byte[] bytes) { } @Override - public Value get(@NonNull String name) { + public Value get(String name) { return new MissingValue(ctx.getValueFactory(), name); } @Override - public Value getOrDefault(@NonNull String name, @NonNull String defaultValue) { + public Value getOrDefault(String name, String defaultValue) { return Value.value(ctx.getValueFactory(), name, defaultValue); } @@ -50,12 +50,12 @@ public long getSize() { } @Override - public @NonNull byte[] bytes() { + public byte[] bytes() { return bytes; } @Override - public @NonNull ReadableByteChannel channel() { + public ReadableByteChannel channel() { return Channels.newChannel(stream()); } @@ -65,16 +65,16 @@ public boolean isInMemory() { } @Override - public @NonNull InputStream stream() { + public InputStream stream() { return new ByteArrayInputStream(bytes); } - @NonNull @Override + @Override public String value() { return value(StandardCharsets.UTF_8); } - @NonNull @Override + @Override public List toList() { return Collections.singletonList(value()); } @@ -84,18 +84,18 @@ public String name() { return "body"; } - @NonNull @Override - public T to(@NonNull Type type) { + @Override + public T to(Type type) { return ctx.decode(type, ctx.getRequestType(MediaType.text)); } @Nullable @Override - public T toNullable(@NonNull Type type) { + public T toNullable(Type type) { return bytes.length == 0 ? null : ctx.decode(type, ctx.getRequestType(MediaType.text)); } @Override - public @NonNull Map> toMultimap() { + public Map> toMultimap() { return Map.of(); } diff --git a/jooby/src/main/java/io/jooby/internal/ClassPathAssetSource.java b/jooby/src/main/java/io/jooby/internal/ClassPathAssetSource.java index 6739b9ca50..a350c9b849 100644 --- a/jooby/src/main/java/io/jooby/internal/ClassPathAssetSource.java +++ b/jooby/src/main/java/io/jooby/internal/ClassPathAssetSource.java @@ -14,8 +14,8 @@ import java.util.jar.JarFile; import java.util.zip.ZipEntry; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.handler.Asset; import io.jooby.handler.AssetSource; @@ -41,7 +41,7 @@ public ClassPathAssetSource(ClassLoader loader, String source) { } @Nullable @Override - public Asset resolve(@NonNull String path) { + public Asset resolve(String path) { String fullpath; if (isDir) { fullpath = safePath(prefix + path); diff --git a/jooby/src/main/java/io/jooby/internal/FileAsset.java b/jooby/src/main/java/io/jooby/internal/FileAsset.java index 7a1b64c698..d6520def92 100644 --- a/jooby/src/main/java/io/jooby/internal/FileAsset.java +++ b/jooby/src/main/java/io/jooby/internal/FileAsset.java @@ -11,7 +11,6 @@ import java.nio.file.Files; import java.nio.file.Path; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.MediaType; import io.jooby.SneakyThrows; import io.jooby.handler.Asset; @@ -32,7 +31,7 @@ public class FileAsset implements Asset { * * @param file Asset file. */ - public FileAsset(@NonNull Path file) { + public FileAsset(Path file) { this.file = file; } @@ -54,7 +53,7 @@ public long getLastModified() { } } - @NonNull @Override + @Override public MediaType getContentType() { return MediaType.byFile(file); } diff --git a/jooby/src/main/java/io/jooby/internal/FileBody.java b/jooby/src/main/java/io/jooby/internal/FileBody.java index 4142e25cbd..971123e06f 100644 --- a/jooby/src/main/java/io/jooby/internal/FileBody.java +++ b/jooby/src/main/java/io/jooby/internal/FileBody.java @@ -16,8 +16,8 @@ import java.util.List; import java.util.Map; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.Body; import io.jooby.Context; import io.jooby.MediaType; @@ -43,12 +43,12 @@ public long getSize() { } @Override - public Value get(@NonNull String name) { + public Value get(String name) { return new MissingValue(ctx.getValueFactory(), name); } @Override - public Value getOrDefault(@NonNull String name, @NonNull String defaultValue) { + public Value getOrDefault(String name, String defaultValue) { return Value.value(ctx.getValueFactory(), name, defaultValue); } @@ -58,7 +58,7 @@ public boolean isInMemory() { } @Override - public @NonNull ReadableByteChannel channel() { + public ReadableByteChannel channel() { try { return Files.newByteChannel(file); } catch (IOException x) { @@ -67,7 +67,7 @@ public boolean isInMemory() { } @Override - public @NonNull InputStream stream() { + public InputStream stream() { try { return Files.newInputStream(file); } catch (IOException x) { @@ -76,7 +76,7 @@ public boolean isInMemory() { } @Override - public @NonNull byte[] bytes() { + public byte[] bytes() { try { return Files.readAllBytes(file); } catch (IOException x) { @@ -84,12 +84,12 @@ public boolean isInMemory() { } } - @NonNull @Override + @Override public String value() { return value(StandardCharsets.UTF_8); } - @NonNull @Override + @Override public List toList() { return Collections.singletonList(value()); } @@ -99,18 +99,18 @@ public String name() { return "body"; } - @NonNull @Override - public T to(@NonNull Type type) { + @Override + public T to(Type type) { return ctx.decode(type, ctx.getRequestType(MediaType.text)); } @Nullable @Override - public T toNullable(@NonNull Type type) { + public T toNullable(Type type) { return ctx.decode(type, ctx.getRequestType(MediaType.text)); } @Override - public @NonNull Map> toMultimap() { + public Map> toMultimap() { return Map.of(); } } diff --git a/jooby/src/main/java/io/jooby/internal/FileDiskAssetSource.java b/jooby/src/main/java/io/jooby/internal/FileDiskAssetSource.java index c53b8adc22..62666f88c7 100644 --- a/jooby/src/main/java/io/jooby/internal/FileDiskAssetSource.java +++ b/jooby/src/main/java/io/jooby/internal/FileDiskAssetSource.java @@ -7,20 +7,20 @@ import java.nio.file.Path; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.handler.Asset; import io.jooby.handler.AssetSource; public class FileDiskAssetSource implements AssetSource { private Path filepath; - public FileDiskAssetSource(@NonNull Path filepath) { + public FileDiskAssetSource(Path filepath) { this.filepath = filepath; } @Nullable @Override - public Asset resolve(@NonNull String path) { + public Asset resolve(String path) { return Asset.create(filepath); } diff --git a/jooby/src/main/java/io/jooby/internal/FolderDiskAssetSource.java b/jooby/src/main/java/io/jooby/internal/FolderDiskAssetSource.java index 0b64f65b03..aa290177bb 100644 --- a/jooby/src/main/java/io/jooby/internal/FolderDiskAssetSource.java +++ b/jooby/src/main/java/io/jooby/internal/FolderDiskAssetSource.java @@ -8,20 +8,20 @@ import java.nio.file.Files; import java.nio.file.Path; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.handler.Asset; import io.jooby.handler.AssetSource; public class FolderDiskAssetSource implements AssetSource { private Path location; - public FolderDiskAssetSource(@NonNull Path location) { + public FolderDiskAssetSource(Path location) { this.location = location.normalize().toAbsolutePath(); } @Nullable @Override - public Asset resolve(@NonNull String path) { + public Asset resolve(String path) { Path resource = location.resolve(path).normalize().toAbsolutePath(); if (resource.startsWith(location)) { if (Files.isRegularFile(resource)) { diff --git a/jooby/src/main/java/io/jooby/internal/ForwardingExecutor.java b/jooby/src/main/java/io/jooby/internal/ForwardingExecutor.java index bc868ea406..ee0c8ec7e1 100644 --- a/jooby/src/main/java/io/jooby/internal/ForwardingExecutor.java +++ b/jooby/src/main/java/io/jooby/internal/ForwardingExecutor.java @@ -7,13 +7,11 @@ import java.util.concurrent.Executor; -import edu.umd.cs.findbugs.annotations.NonNull; - public class ForwardingExecutor implements Executor { Executor executor; @Override - public void execute(@NonNull Runnable command) { + public void execute(Runnable command) { if (executor == null) { throw new IllegalStateException("Worker executor not ready"); } diff --git a/jooby/src/main/java/io/jooby/internal/GracefulShutdownHandler.java b/jooby/src/main/java/io/jooby/internal/GracefulShutdownHandler.java index 3da0eb66f0..c6341bad4e 100644 --- a/jooby/src/main/java/io/jooby/internal/GracefulShutdownHandler.java +++ b/jooby/src/main/java/io/jooby/internal/GracefulShutdownHandler.java @@ -9,7 +9,6 @@ import java.util.concurrent.atomic.AtomicLongFieldUpdater; import java.util.function.LongUnaryOperator; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Route; import io.jooby.StatusCode; @@ -44,8 +43,8 @@ public GracefulShutdownHandler(Duration await) { this.await = await; } - @NonNull @Override - public Route.Handler apply(@NonNull Route.Handler next) { + @Override + public Route.Handler apply(Route.Handler next) { return ctx -> { long snapshot = stateUpdater.updateAndGet(this, incrementActive); if (isShutdown(snapshot)) { diff --git a/jooby/src/main/java/io/jooby/internal/HashValue.java b/jooby/src/main/java/io/jooby/internal/HashValue.java index 6248145584..26b5bf0bd8 100644 --- a/jooby/src/main/java/io/jooby/internal/HashValue.java +++ b/jooby/src/main/java/io/jooby/internal/HashValue.java @@ -20,8 +20,8 @@ import java.util.TreeMap; import java.util.function.BiConsumer; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.FileUpload; import io.jooby.value.ConversionHint; import io.jooby.value.Value; @@ -166,7 +166,7 @@ protected Map hash() { return (HashValue) hash().computeIfAbsent(name, k -> new HashValue(factory, k)); } - public @NonNull Value get(@NonNull String name) { + public Value get(String name) { var value = hash.get(name); if (value == null) { return new MissingValue(factory, scope(name)); @@ -175,7 +175,7 @@ protected Map hash() { } @Override - public Value getOrDefault(@NonNull String name, @NonNull String defaultValue) { + public Value getOrDefault(String name, String defaultValue) { var value = hash.get(name); if (value == null) { return Value.value(factory, name, defaultValue); @@ -188,7 +188,7 @@ private String scope(String name) { } @Override - public @NonNull Value get(int index) { + public Value get(int index) { return get(Integer.toString(index)); } @@ -215,45 +215,45 @@ public Iterator iterator() { return hash.values().iterator(); } - @NonNull @Override + @Override public List toList() { return toList(String.class); } - @NonNull @Override + @Override public Set toSet() { return toSet(String.class); } - @NonNull @Override - public List toList(@NonNull Class type) { + @Override + public List toList(Class type) { return toCollection(type, new ArrayList<>()); } - @NonNull @Override - public Set toSet(@NonNull Class type) { + @Override + public Set toSet(Class type) { return toCollection(type, new LinkedHashSet<>()); } - @NonNull @Override - public Optional toOptional(@NonNull Class type) { + @Override + public Optional toOptional(Class type) { if (hash.isEmpty()) { return Optional.empty(); } return ofNullable(toNullable(type)); } - @NonNull @Override - public T to(@NonNull Class type) { + @Override + public T to(Class type) { return factory.convert(type, this); } @Nullable @Override - public T toNullable(@NonNull Class type) { + public T toNullable(Class type) { return toNullable(factory, type); } - private T toNullable(@NonNull ValueFactory factory, @NonNull Class type) { + private T toNullable(ValueFactory factory, Class type) { return factory.convert(type, this, ConversionHint.Nullable); } @@ -284,7 +284,7 @@ public void put(Map> headers) { } } - private > C toCollection(@NonNull Class type, C collection) { + private > C toCollection(Class type, C collection) { if (!hash.isEmpty()) { if (arrayLike) { // indexes access, treat like a list diff --git a/jooby/src/main/java/io/jooby/internal/HeadContext.java b/jooby/src/main/java/io/jooby/internal/HeadContext.java index c4dc99aec9..c19d19f6a8 100644 --- a/jooby/src/main/java/io/jooby/internal/HeadContext.java +++ b/jooby/src/main/java/io/jooby/internal/HeadContext.java @@ -17,7 +17,6 @@ import java.nio.file.Files; import java.nio.file.Path; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.*; import io.jooby.output.Output; @@ -27,12 +26,12 @@ public class HeadContext extends ForwardingContext { * * @param context Source context. */ - public HeadContext(@NonNull Context context) { + public HeadContext(Context context) { super(context); } - @NonNull @Override - public Context send(@NonNull Path file) { + @Override + public Context send(Path file) { try { ctx.setResponseLength(Files.size(file)); checkSizeHeaders(); @@ -44,37 +43,37 @@ public Context send(@NonNull Path file) { } } - @NonNull @Override - public Context send(@NonNull byte[] data) { + @Override + public Context send(byte[] data) { ctx.setResponseLength(data.length); checkSizeHeaders(); ctx.send(StatusCode.OK); return this; } - @NonNull @Override - public Context send(@NonNull String data) { + @Override + public Context send(String data) { return send(data, StandardCharsets.UTF_8); } - @NonNull @Override - public Context send(@NonNull ByteBuffer data) { + @Override + public Context send(ByteBuffer data) { ctx.setResponseLength(data.remaining()); checkSizeHeaders(); ctx.send(StatusCode.OK); return this; } - @NonNull @Override - public Context send(@NonNull Output output) { + @Override + public Context send(Output output) { ctx.setResponseLength(output.size()); checkSizeHeaders(); ctx.send(StatusCode.OK); return this; } - @NonNull @Override - public Context send(@NonNull FileChannel file) { + @Override + public Context send(FileChannel file) { try { ctx.setResponseLength(file.size()); checkSizeHeaders(); @@ -85,8 +84,8 @@ public Context send(@NonNull FileChannel file) { } } - @NonNull @Override - public Context send(@NonNull FileDownload file) { + @Override + public Context send(FileDownload file) { ctx.setResponseLength(file.getFileSize()); ctx.setResponseType(file.getContentType()); checkSizeHeaders(); @@ -94,36 +93,36 @@ public Context send(@NonNull FileDownload file) { return this; } - @NonNull @Override - public Context send(@NonNull InputStream input) { + @Override + public Context send(InputStream input) { checkSizeHeaders(); ctx.send(StatusCode.OK); return this; } - @NonNull @Override - public Context send(@NonNull StatusCode statusCode) { + @Override + public Context send(StatusCode statusCode) { ctx.send(statusCode); return this; } - @NonNull @Override - public Context send(@NonNull ReadableByteChannel channel) { + @Override + public Context send(ReadableByteChannel channel) { checkSizeHeaders(); ctx.send(StatusCode.OK); return this; } - @NonNull @Override - public Context send(@NonNull String data, @NonNull Charset charset) { + @Override + public Context send(String data, Charset charset) { ctx.setResponseLength(data.getBytes(charset).length); checkSizeHeaders(); ctx.send(StatusCode.OK); return this; } - @NonNull @Override - public Context render(@NonNull Object value) { + @Override + public Context render(Object value) { try { Route route = getRoute(); MessageEncoder encoder = route.getEncoder(); @@ -141,21 +140,21 @@ public Context render(@NonNull Object value) { } } - @NonNull @Override + @Override public Sender responseSender() { checkSizeHeaders(); ctx.send(StatusCode.OK); return new NoopSender(); } - @NonNull @Override + @Override public OutputStream responseStream() { checkSizeHeaders(); ctx.send(StatusCode.OK); return new NoopOutputStream(); } - @NonNull @Override + @Override public PrintWriter responseWriter() { return new PrintWriter(responseStream()); } @@ -170,23 +169,23 @@ private void checkSizeHeaders() { private static class NoopOutputStream extends OutputStream { @Override - public void write(@NonNull byte[] b) throws IOException {} + public void write(byte[] b) throws IOException {} @Override - public void write(@NonNull byte[] b, int off, int len) throws IOException {} + public void write(byte[] b, int off, int len) throws IOException {} @Override public void write(int b) throws IOException {} } private static class NoopSender implements Sender { - @NonNull @Override - public Sender write(@NonNull byte[] data, @NonNull Callback callback) { + @Override + public Sender write(byte[] data, Callback callback) { return this; } - @NonNull @Override - public Sender write(@NonNull Output output, @NonNull Callback callback) { + @Override + public Sender write(Output output, Callback callback) { return this; } diff --git a/jooby/src/main/java/io/jooby/internal/HeadersValue.java b/jooby/src/main/java/io/jooby/internal/HeadersValue.java index 8ed7148ca2..dcfbc2f4e5 100644 --- a/jooby/src/main/java/io/jooby/internal/HeadersValue.java +++ b/jooby/src/main/java/io/jooby/internal/HeadersValue.java @@ -10,7 +10,6 @@ import java.util.Set; import java.util.TreeMap; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.value.Value; import io.jooby.value.ValueFactory; @@ -28,14 +27,14 @@ protected Map hash() { return hash; } - @NonNull @Override + @Override public Map toMap() { Map map = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); toMultimap().forEach((k, v) -> map.put(k, v.get(0))); return map; } - @NonNull @Override + @Override public Map> toMultimap() { Map> result = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); Set> entries = hash.entrySet(); diff --git a/jooby/src/main/java/io/jooby/internal/HttpMessageEncoder.java b/jooby/src/main/java/io/jooby/internal/HttpMessageEncoder.java index 4650a6d2f6..06dd2acea0 100644 --- a/jooby/src/main/java/io/jooby/internal/HttpMessageEncoder.java +++ b/jooby/src/main/java/io/jooby/internal/HttpMessageEncoder.java @@ -12,7 +12,6 @@ import java.nio.file.Path; import java.util.*; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.FileDownload; import io.jooby.MediaType; @@ -42,7 +41,7 @@ public HttpMessageEncoder add(MediaType type, MessageEncoder encoder) { } @Override - public Output encode(@NonNull Context ctx, @NonNull Object value) throws Exception { + public Output encode(Context ctx, Object value) throws Exception { if (value instanceof ModelAndView modelAndView) { for (var engine : templateEngineList) { if (engine.supports(modelAndView)) { diff --git a/jooby/src/main/java/io/jooby/internal/InputStreamBody.java b/jooby/src/main/java/io/jooby/internal/InputStreamBody.java index 666ad91288..8b92b10f94 100644 --- a/jooby/src/main/java/io/jooby/internal/InputStreamBody.java +++ b/jooby/src/main/java/io/jooby/internal/InputStreamBody.java @@ -16,8 +16,8 @@ import java.util.List; import java.util.Map; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.Body; import io.jooby.Context; import io.jooby.MediaType; @@ -71,18 +71,18 @@ public InputStream stream() { return in; } - @NonNull @Override + @Override public String value() { return value(StandardCharsets.UTF_8); } @Override - public Value get(@NonNull String name) { + public Value get(String name) { return new MissingValue(ctx.getValueFactory(), name); } @Override - public Value getOrDefault(@NonNull String name, @NonNull String defaultValue) { + public Value getOrDefault(String name, String defaultValue) { return Value.value(ctx.getValueFactory(), name, defaultValue); } @@ -91,17 +91,17 @@ public String name() { return "body"; } - @NonNull @Override - public T to(@NonNull Type type) { + @Override + public T to(Type type) { return ctx.decode(type, ctx.getRequestType(MediaType.text)); } @Nullable @Override - public T toNullable(@NonNull Type type) { + public T toNullable(Type type) { return ctx.decode(type, ctx.getRequestType(MediaType.text)); } - @NonNull @Override + @Override public List toList() { return Collections.singletonList(value()); } diff --git a/jooby/src/main/java/io/jooby/internal/JarAsset.java b/jooby/src/main/java/io/jooby/internal/JarAsset.java index 40685660b8..e5c6d583b3 100644 --- a/jooby/src/main/java/io/jooby/internal/JarAsset.java +++ b/jooby/src/main/java/io/jooby/internal/JarAsset.java @@ -11,7 +11,6 @@ import java.util.jar.JarFile; import java.util.zip.ZipEntry; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.MediaType; import io.jooby.SneakyThrows; import io.jooby.handler.Asset; @@ -42,7 +41,7 @@ public long getLastModified() { return entry.getTime(); } - @NonNull @Override + @Override public MediaType getContentType() { return MediaType.byFile(entry.getName()); } diff --git a/jooby/src/main/java/io/jooby/internal/MemorySessionStore.java b/jooby/src/main/java/io/jooby/internal/MemorySessionStore.java index 3f915c13b2..fe983f5cf6 100644 --- a/jooby/src/main/java/io/jooby/internal/MemorySessionStore.java +++ b/jooby/src/main/java/io/jooby/internal/MemorySessionStore.java @@ -12,7 +12,6 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.Session; import io.jooby.SessionStore; @@ -30,27 +29,27 @@ public MemorySessionStore(SessionToken token, Duration timeout) { } @Override - protected Data getOrCreate(@NonNull String sessionId, @NonNull Function factory) { + protected Data getOrCreate(String sessionId, Function factory) { return sessions.computeIfAbsent(sessionId, factory); } @Override - protected Data getOrNull(@NonNull String sessionId) { + protected Data getOrNull(String sessionId) { return sessions.get(sessionId); } @Override - protected Data remove(@NonNull String sessionId) { + protected Data remove(String sessionId) { return sessions.remove(sessionId); } @Override - protected void put(@NonNull String sessionId, @NonNull Data data) { + protected void put(String sessionId, Data data) { sessions.put(sessionId, data); } @Override - public Session findSession(@NonNull Context ctx) { + public Session findSession(Context ctx) { purge(); return super.findSession(ctx); } diff --git a/jooby/src/main/java/io/jooby/internal/MissingValue.java b/jooby/src/main/java/io/jooby/internal/MissingValue.java index 909281fe94..c78864d0fc 100644 --- a/jooby/src/main/java/io/jooby/internal/MissingValue.java +++ b/jooby/src/main/java/io/jooby/internal/MissingValue.java @@ -7,8 +7,8 @@ import java.util.*; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.exception.MissingValueException; import io.jooby.value.Value; import io.jooby.value.ValueFactory; @@ -28,7 +28,7 @@ public String name() { } @Override - public @NonNull Value get(@NonNull String name) { + public Value get(String name) { return this.name.equals(name) ? this : new MissingValue(factory, this.name + "." + name); } @@ -38,27 +38,27 @@ public int size() { } @Override - public @NonNull Iterator iterator() { + public Iterator iterator() { return Collections.emptyIterator(); } @Override - public @NonNull Value get(int index) { + public Value get(int index) { return new MissingValue(factory, this.name + "[" + index + "]"); } @Override - public Value getOrDefault(@NonNull String name, @NonNull String defaultValue) { + public Value getOrDefault(String name, String defaultValue) { return Value.value(factory, name, defaultValue); } - @NonNull @Override - public T to(@NonNull Class type) { + @Override + public T to(Class type) { throw new MissingValueException(name); } @Nullable @Override - public T toNullable(@NonNull Class type) { + public T toNullable(Class type) { return null; } @@ -67,7 +67,7 @@ public String value() { throw new MissingValueException(name); } - @NonNull @Override + @Override public Map toMap() { return Collections.emptyMap(); } @@ -77,28 +77,28 @@ public Map> toMultimap() { return Collections.emptyMap(); } - @NonNull @Override + @Override public List toList() { return Collections.emptyList(); } - @NonNull @Override + @Override public Optional toOptional() { return Optional.empty(); } - @NonNull @Override - public List toList(@NonNull Class type) { + @Override + public List toList(Class type) { return Collections.emptyList(); } - @NonNull @Override + @Override public Set toSet() { return Collections.emptySet(); } - @NonNull @Override - public Set toSet(@NonNull Class type) { + @Override + public Set toSet(Class type) { return Collections.emptySet(); } diff --git a/jooby/src/main/java/io/jooby/internal/MultipartNode.java b/jooby/src/main/java/io/jooby/internal/MultipartNode.java index 90ec58d939..bbb8a28ac5 100644 --- a/jooby/src/main/java/io/jooby/internal/MultipartNode.java +++ b/jooby/src/main/java/io/jooby/internal/MultipartNode.java @@ -7,7 +7,6 @@ import java.util.*; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.FileUpload; import io.jooby.Formdata; import io.jooby.SneakyThrows; @@ -21,22 +20,22 @@ public MultipartNode(ValueFactory valueFactory) { } @Override - public void put(@NonNull String name, @NonNull FileUpload file) { + public void put(String name, FileUpload file) { files.computeIfAbsent(name, k -> new ArrayList<>()).add(file); } - @NonNull @Override + @Override public List files() { return files.values().stream().flatMap(Collection::stream).toList(); } - @NonNull @Override - public List files(@NonNull String name) { + @Override + public List files(String name) { return this.files.getOrDefault(name, List.of()); } - @NonNull @Override - public FileUpload file(@NonNull String name) { + @Override + public FileUpload file(String name) { List files = files(name); if (files.isEmpty()) { final String error = "Field '" + name + "' is missing"; diff --git a/jooby/src/main/java/io/jooby/internal/MultipleSessionToken.java b/jooby/src/main/java/io/jooby/internal/MultipleSessionToken.java index f2d5a8e7a0..cb7d9b7247 100644 --- a/jooby/src/main/java/io/jooby/internal/MultipleSessionToken.java +++ b/jooby/src/main/java/io/jooby/internal/MultipleSessionToken.java @@ -9,7 +9,6 @@ import java.util.Arrays; import java.util.List; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.SessionToken; @@ -22,7 +21,7 @@ public MultipleSessionToken(SessionToken... sessionToken) { } @Override - public String findToken(@NonNull Context ctx) { + public String findToken(Context ctx) { for (SessionToken sessionToken : sessionTokens) { String token = sessionToken.findToken(ctx); if (token != null) { @@ -33,12 +32,12 @@ public String findToken(@NonNull Context ctx) { } @Override - public void saveToken(@NonNull Context ctx, @NonNull String token) { + public void saveToken(Context ctx, String token) { strategy(ctx).forEach(it -> it.saveToken(ctx, token)); } @Override - public void deleteToken(@NonNull Context ctx, @NonNull String token) { + public void deleteToken(Context ctx, String token) { strategy(ctx).forEach(it -> it.deleteToken(ctx, token)); } diff --git a/jooby/src/main/java/io/jooby/internal/MutedServer.java b/jooby/src/main/java/io/jooby/internal/MutedServer.java index 804ae04855..b7799016ac 100644 --- a/jooby/src/main/java/io/jooby/internal/MutedServer.java +++ b/jooby/src/main/java/io/jooby/internal/MutedServer.java @@ -11,7 +11,6 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Jooby; import io.jooby.LoggingService; import io.jooby.Server; @@ -31,7 +30,7 @@ private MutedServer(Server server, LoggingService loggingService, List m this.mute = mute; } - @NonNull @Override + @Override public OutputFactory getOutputFactory() { return delegate.getOutputFactory(); } @@ -58,28 +57,28 @@ public static Server mute(Server server, String... logger) { .orElse(server); } - @NonNull public Server setOptions(@NonNull ServerOptions options) { + public Server setOptions(ServerOptions options) { return delegate.setOptions(options); } - @NonNull public String getName() { + public String getName() { return delegate.getName(); } - @NonNull public ServerOptions getOptions() { + public ServerOptions getOptions() { return delegate.getOptions(); } - @NonNull public Server start(@NonNull Jooby... application) { + public Server start(Jooby... application) { loggingService.logOff(mute, () -> delegate.start(application)); return delegate; } - @NonNull public List getLoggerOff() { + public List getLoggerOff() { return delegate.getLoggerOff(); } - @NonNull public Server stop() { + public Server stop() { loggingService.logOff(mute, delegate::stop); return delegate; } diff --git a/jooby/src/main/java/io/jooby/internal/NoByteRange.java b/jooby/src/main/java/io/jooby/internal/NoByteRange.java index 483eac94e8..542c9d7a68 100644 --- a/jooby/src/main/java/io/jooby/internal/NoByteRange.java +++ b/jooby/src/main/java/io/jooby/internal/NoByteRange.java @@ -8,7 +8,6 @@ import java.io.IOException; import java.io.InputStream; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.ByteRange; import io.jooby.Context; import io.jooby.StatusCode; @@ -35,23 +34,23 @@ public long getContentLength() { return contentLength; } - @NonNull @Override + @Override public StatusCode getStatusCode() { return StatusCode.OK; } - @NonNull @Override + @Override public String getContentRange() { return "bytes */" + contentLength; } - @NonNull @Override - public ByteRange apply(@NonNull Context ctx) { + @Override + public ByteRange apply(Context ctx) { return this; } - @NonNull @Override - public InputStream apply(@NonNull InputStream input) throws IOException { + @Override + public InputStream apply(InputStream input) throws IOException { return input; } } diff --git a/jooby/src/main/java/io/jooby/internal/NotSatisfiableByteRange.java b/jooby/src/main/java/io/jooby/internal/NotSatisfiableByteRange.java index 94e865073a..547c4dd558 100644 --- a/jooby/src/main/java/io/jooby/internal/NotSatisfiableByteRange.java +++ b/jooby/src/main/java/io/jooby/internal/NotSatisfiableByteRange.java @@ -8,7 +8,6 @@ import java.io.IOException; import java.io.InputStream; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.ByteRange; import io.jooby.Context; import io.jooby.StatusCode; @@ -33,7 +32,7 @@ public long getEnd() { return -1; } - @NonNull @Override + @Override public StatusCode getStatusCode() { return StatusCode.REQUESTED_RANGE_NOT_SATISFIABLE; } @@ -43,18 +42,18 @@ public long getContentLength() { return contentLength; } - @NonNull @Override + @Override public String getContentRange() { return "bytes */" + contentLength; } - @NonNull @Override - public ByteRange apply(@NonNull Context ctx) { + @Override + public ByteRange apply(Context ctx) { throw new StatusCodeException(StatusCode.REQUESTED_RANGE_NOT_SATISFIABLE, value); } - @NonNull @Override - public InputStream apply(@NonNull InputStream input) throws IOException { + @Override + public InputStream apply(InputStream input) throws IOException { throw new StatusCodeException(StatusCode.REQUESTED_RANGE_NOT_SATISFIABLE, value); } } diff --git a/jooby/src/main/java/io/jooby/internal/QueryStringValue.java b/jooby/src/main/java/io/jooby/internal/QueryStringValue.java index 164321d37f..91f36a7527 100644 --- a/jooby/src/main/java/io/jooby/internal/QueryStringValue.java +++ b/jooby/src/main/java/io/jooby/internal/QueryStringValue.java @@ -5,7 +5,6 @@ */ package io.jooby.internal; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.QueryString; import io.jooby.value.ConversionHint; import io.jooby.value.ValueFactory; @@ -19,11 +18,11 @@ public QueryStringValue(ValueFactory valueFactory, String queryString) { } @Override - public @NonNull T toEmpty(@NonNull Class type) { + public T toEmpty(Class type) { return factory.convert(type, this, ConversionHint.Empty); } - @NonNull @Override + @Override public String queryString() { return queryString; } diff --git a/jooby/src/main/java/io/jooby/internal/ReadOnlyContext.java b/jooby/src/main/java/io/jooby/internal/ReadOnlyContext.java index 97056f81e8..53768f6afb 100644 --- a/jooby/src/main/java/io/jooby/internal/ReadOnlyContext.java +++ b/jooby/src/main/java/io/jooby/internal/ReadOnlyContext.java @@ -16,7 +16,6 @@ import java.time.Instant; import java.util.Date; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.Cookie; import io.jooby.FileDownload; @@ -29,7 +28,7 @@ public class ReadOnlyContext extends ForwardingContext { private static final String MESSAGE = "The response has already been started"; - public ReadOnlyContext(@NonNull Context context) { + public ReadOnlyContext(Context context) { super(context); } @@ -38,189 +37,185 @@ public boolean isResponseStarted() { return true; } - @NonNull @Override - public Context send(@NonNull Path file) { + @Override + public Context send(Path file) { throw new IllegalStateException(MESSAGE); } - @NonNull @Override - public Context send(@NonNull byte[] data) { + @Override + public Context send(byte[] data) { throw new IllegalStateException(MESSAGE); } - @NonNull @Override - public Context send(@NonNull String data) { + @Override + public Context send(String data) { throw new IllegalStateException(MESSAGE); } - @NonNull @Override - public Context send(@NonNull ByteBuffer data) { + @Override + public Context send(ByteBuffer data) { throw new IllegalStateException(MESSAGE); } - @NonNull @Override - public Context send(@NonNull FileChannel file) { + @Override + public Context send(FileChannel file) { throw new IllegalStateException(MESSAGE); } - @NonNull @Override - public Context send(@NonNull FileDownload file) { + @Override + public Context send(FileDownload file) { throw new IllegalStateException(MESSAGE); } - @NonNull @Override - public Context send(@NonNull InputStream input) { + @Override + public Context send(InputStream input) { throw new IllegalStateException(MESSAGE); } - @NonNull @Override - public Context send(@NonNull StatusCode statusCode) { + @Override + public Context send(StatusCode statusCode) { throw new IllegalStateException(MESSAGE); } - @NonNull @Override - public Context send(@NonNull ReadableByteChannel channel) { + @Override + public Context send(ReadableByteChannel channel) { throw new IllegalStateException(MESSAGE); } - @NonNull @Override - public Context send(@NonNull String data, @NonNull Charset charset) { + @Override + public Context send(String data, Charset charset) { throw new IllegalStateException(MESSAGE); } - @NonNull @Override - public Context sendError(@NonNull Throwable cause) { + @Override + public Context sendError(Throwable cause) { throw new IllegalStateException(MESSAGE); } - @NonNull @Override - public Context sendError(@NonNull Throwable cause, @NonNull StatusCode statusCode) { + @Override + public Context sendError(Throwable cause, StatusCode statusCode) { throw new IllegalStateException(MESSAGE); } - @NonNull @Override - public Context sendRedirect(@NonNull String location) { + @Override + public Context sendRedirect(String location) { throw new IllegalStateException(MESSAGE); } - @NonNull @Override - public Context sendRedirect(@NonNull StatusCode redirect, @NonNull String location) { + @Override + public Context sendRedirect(StatusCode redirect, String location) { throw new IllegalStateException(MESSAGE); } - @NonNull @Override - public Context render(@NonNull Object value) { + @Override + public Context render(Object value) { throw new IllegalStateException(MESSAGE); } - @NonNull @Override - public Context responseStream(@NonNull SneakyThrows.Consumer consumer) - throws Exception { + @Override + public Context responseStream(SneakyThrows.Consumer consumer) throws Exception { throw new IllegalStateException(MESSAGE); } - @NonNull @Override - public Context responseStream( - @NonNull MediaType contentType, @NonNull SneakyThrows.Consumer consumer) + @Override + public Context responseStream(MediaType contentType, SneakyThrows.Consumer consumer) throws Exception { throw new IllegalStateException(MESSAGE); } - @NonNull @Override - public Context responseWriter( - @NonNull MediaType contentType, @NonNull SneakyThrows.Consumer consumer) + @Override + public Context responseWriter(MediaType contentType, SneakyThrows.Consumer consumer) throws Exception { throw new IllegalStateException(MESSAGE); } - @NonNull @Override - public Context responseWriter(@NonNull SneakyThrows.Consumer consumer) - throws Exception { + @Override + public Context responseWriter(SneakyThrows.Consumer consumer) throws Exception { throw new IllegalStateException(MESSAGE); } - @NonNull @Override + @Override public OutputStream responseStream() { throw new IllegalStateException(MESSAGE); } - @NonNull @Override - public OutputStream responseStream(@NonNull MediaType contentType) { + @Override + public OutputStream responseStream(MediaType contentType) { throw new IllegalStateException(MESSAGE); } - @NonNull @Override + @Override public PrintWriter responseWriter() { throw new IllegalStateException(MESSAGE); } - @NonNull @Override - public PrintWriter responseWriter(@NonNull MediaType contentType) { + @Override + public PrintWriter responseWriter(MediaType contentType) { throw new IllegalStateException(MESSAGE); } - @NonNull @Override + @Override public Sender responseSender() { throw new IllegalStateException(MESSAGE); } - @NonNull @Override - public Context removeResponseHeader(@NonNull String name) { + @Override + public Context removeResponseHeader(String name) { throw new IllegalStateException(MESSAGE); } - @NonNull @Override - public Context setResponseCookie(@NonNull Cookie cookie) { + @Override + public Context setResponseCookie(Cookie cookie) { throw new IllegalStateException(MESSAGE); } - @NonNull @Override - public Context setResponseHeader(@NonNull String name, @NonNull Date value) { + @Override + public Context setResponseHeader(String name, Date value) { throw new IllegalStateException(MESSAGE); } - @NonNull @Override + @Override public Context setResponseCode(int statusCode) { throw new IllegalStateException(MESSAGE); } - @NonNull @Override - public Context setResponseCode(@NonNull StatusCode statusCode) { + @Override + public Context setResponseCode(StatusCode statusCode) { throw new IllegalStateException(MESSAGE); } - @NonNull @Override - public Context setResponseHeader(@NonNull String name, @NonNull Object value) { + @Override + public Context setResponseHeader(String name, Object value) { throw new IllegalStateException(MESSAGE); } - @NonNull @Override - public Context setResponseHeader(@NonNull String name, @NonNull String value) { + @Override + public Context setResponseHeader(String name, String value) { throw new IllegalStateException(MESSAGE); } - @NonNull @Override - public Context setResponseHeader(@NonNull String name, @NonNull Instant value) { + @Override + public Context setResponseHeader(String name, Instant value) { throw new IllegalStateException(MESSAGE); } - @NonNull @Override + @Override public Context setResponseLength(long length) { throw new IllegalStateException(MESSAGE); } - @NonNull @Override - public Context setResponseType(@NonNull String contentType) { + @Override + public Context setResponseType(String contentType) { throw new IllegalStateException(MESSAGE); } - @NonNull @Override - public Context setResponseType(@NonNull MediaType contentType) { + @Override + public Context setResponseType(MediaType contentType) { throw new IllegalStateException(MESSAGE); } - @NonNull @Override - public Context setDefaultResponseType(@NonNull MediaType contentType) { + @Override + public Context setDefaultResponseType(MediaType contentType) { throw new IllegalStateException(MESSAGE); } } diff --git a/jooby/src/main/java/io/jooby/internal/RouterImpl.java b/jooby/src/main/java/io/jooby/internal/RouterImpl.java index ee50a105f9..880c1b3b2d 100644 --- a/jooby/src/main/java/io/jooby/internal/RouterImpl.java +++ b/jooby/src/main/java/io/jooby/internal/RouterImpl.java @@ -36,7 +36,6 @@ import org.slf4j.LoggerFactory; import com.typesafe.config.Config; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.*; import io.jooby.exception.RegistryException; import io.jooby.exception.StatusCodeException; @@ -172,40 +171,40 @@ public RouterImpl() { stack.addLast(new Stack(chi, null)); } - @NonNull @Override + @Override public Config getConfig() { throw new UnsupportedOperationException(); } - @NonNull @Override + @Override public Environment getEnvironment() { throw new UnsupportedOperationException(); } - @NonNull @Override + @Override public List getLocales() { throw new UnsupportedOperationException(); } - @NonNull @Override + @Override public Map getAttributes() { return attributes; } - @NonNull @Override + @Override public RouterOptions getRouterOptions() { return routerOptions; } - @NonNull @Override - public Router setRouterOptions(@NonNull RouterOptions options) { + @Override + public Router setRouterOptions(RouterOptions options) { this.routerOptions = options; ((Chi) chi).failOnDuplicateRoutes = options.isFailOnDuplicateRoutes(); return this; } - @NonNull @Override - public Router setContextPath(@NonNull String basePath) { + @Override + public Router setContextPath(String basePath) { if (!routes.isEmpty()) { throw new IllegalStateException("Base path must be set before adding any routes."); } @@ -213,17 +212,17 @@ public Router setContextPath(@NonNull String basePath) { return this; } - @NonNull @Override + @Override public Path getTmpdir() { return Paths.get(System.getProperty("java.io.tmpdir")); } - @NonNull @Override + @Override public String getContextPath() { return basePath == null ? "/" : basePath; } - @NonNull @Override + @Override public List getRoutes() { return routes; } @@ -255,18 +254,18 @@ private void configureContextAsService(boolean contextAsService) { } } - @NonNull @Override - public Route.Set domain(@NonNull String domain, @NonNull Runnable body) { + @Override + public Route.Set domain(String domain, Runnable body) { return mount(domainPredicate(domain), body); } - @NonNull @Override - public Route.Set domain(@NonNull String domain, @NonNull Router subrouter) { + @Override + public Route.Set domain(String domain, Router subrouter) { return mount(domainPredicate(domain), subrouter); } - @NonNull @Override - public Route.Set mount(@NonNull Predicate predicate, @NonNull Runnable body) { + @Override + public Route.Set mount(Predicate predicate, Runnable body) { var tree = new Chi(routerOptions.isFailOnDuplicateRoutes()); putPredicate(predicate, tree); int start = this.routes.size(); @@ -275,9 +274,7 @@ public Route.Set mount(@NonNull Predicate predicate, @NonNull Runnable } public Router install( - @NonNull String path, - @NonNull Predicate predicate, - @NonNull SneakyThrows.Supplier factory) { + String path, Predicate predicate, SneakyThrows.Supplier factory) { var existingRouter = this.chi; try { var tree = new Chi(routerOptions.isFailOnDuplicateRoutes()); @@ -290,8 +287,8 @@ public Router install( } } - @NonNull @Override - public Route.Set mount(@NonNull Predicate predicate, @NonNull Router subrouter) { + @Override + public Route.Set mount(Predicate predicate, Router subrouter) { /* Override services: */ overrideAll(this, subrouter); /* Routes: */ @@ -305,8 +302,8 @@ public Route.Set mount(@NonNull Predicate predicate, @NonNull Router su }); } - @NonNull @Override - public Route.Set mount(@NonNull String path, @NonNull Router router) { + @Override + public Route.Set mount(String path, Router router) { int start = this.routes.size(); /** Override services: */ overrideAll(this, router); @@ -317,43 +314,43 @@ public Route.Set mount(@NonNull String path, @NonNull Router router) { return new Route.Set(this.routes.subList(start, this.routes.size())); } - @NonNull @Override - public Route.Set mount(@NonNull Router router) { + @Override + public Route.Set mount(Router router) { return mount("/", router); } - @NonNull @Override - public Router encoder(@NonNull MessageEncoder encoder) { + @Override + public Router encoder(MessageEncoder encoder) { this.encoder.add(MediaType.all, encoder); return this; } - @NonNull @Override - public Router encoder(@NonNull MediaType contentType, @NonNull MessageEncoder encoder) { + @Override + public Router encoder(MediaType contentType, MessageEncoder encoder) { this.encoder.add(contentType, encoder); return this; } - @NonNull @Override - public Router decoder(@NonNull MediaType contentType, @NonNull MessageDecoder decoder) { + @Override + public Router decoder(MediaType contentType, MessageDecoder decoder) { decoders.put(contentType.getValue(), decoder); return this; } - @NonNull @Override + @Override public Executor getWorker() { return worker; } - @NonNull @Override + @Override public Router setWorker(Executor worker) { ForwardingExecutor workerRef = (ForwardingExecutor) this.worker; workerRef.executor = worker; return this; } - @NonNull @Override - public Router setDefaultWorker(@NonNull Executor worker) { + @Override + public Router setDefaultWorker(Executor worker) { ForwardingExecutor workerRef = (ForwardingExecutor) this.worker; if (workerRef.executor == null) { workerRef.executor = worker; @@ -361,101 +358,99 @@ public Router setDefaultWorker(@NonNull Executor worker) { return this; } - @NonNull @Override - public Router use(@NonNull Route.Filter filter) { + @Override + public Router use(Route.Filter filter) { stack.peekLast().then(filter); return this; } @Override - @NonNull public Router after(@NonNull Route.After after) { + public Router after(Route.After after) { stack.peekLast().then(after); return this; } - @NonNull @Override - public Router before(@NonNull Route.Before before) { + @Override + public Router before(Route.Before before) { stack.peekLast().then(before); return this; } - @NonNull @Override - public Router error(@NonNull ErrorHandler handler) { + @Override + public Router error(ErrorHandler handler) { err = err == null ? handler : err.then(handler); return this; } - @NonNull @Override - public Router dispatch(@NonNull Runnable body) { + @Override + public Router dispatch(Runnable body) { return newStack(push(chi).executor(worker), body); } - @NonNull @Override - public Router dispatch(@NonNull Executor executor, @NonNull Runnable action) { + @Override + public Router dispatch(Executor executor, Runnable action) { return newStack(push(chi).executor(executor), action); } - @NonNull @Override - public Route.Set routes(@NonNull Runnable action) { + @Override + public Route.Set routes(Runnable action) { return path("/", action); } @Override - @NonNull public Route.Set path(@NonNull String pattern, @NonNull Runnable action) { + public Route.Set path(String pattern, Runnable action) { int start = this.routes.size(); newStack(chi, pattern, action); return new Route.Set(this.routes.subList(start, this.routes.size())); } - @NonNull @Override + @Override public SessionStore getSessionStore() { return sessionStore; } - @NonNull @Override + @Override public Router setSessionStore(SessionStore sessionStore) { this.sessionStore = sessionStore; return this; } - @NonNull @Override + @Override public ValueFactory getValueFactory() { return valueFactory; } - @NonNull @Override - public Router setValueFactory(@NonNull ValueFactory valueFactory) { + @Override + public Router setValueFactory(ValueFactory valueFactory) { this.valueFactory = valueFactory; return this; } - @NonNull @Override + @Override public OutputFactory getOutputFactory() { return outputFactory; } - public void setOutputFactory(@NonNull OutputFactory outputFactory) { + public void setOutputFactory(OutputFactory outputFactory) { this.outputFactory = outputFactory; } - @NonNull @Override - public Route ws(@NonNull String pattern, @NonNull WebSocket.Initializer handler) { + @Override + public Route ws(String pattern, WebSocket.Initializer handler) { return route(WS, pattern, new WebSocketHandler(handler)); } - @NonNull @Override - public Route sse(@NonNull String pattern, @NonNull ServerSentEmitter.Handler handler) { + @Override + public Route sse(String pattern, ServerSentEmitter.Handler handler) { return route(SSE, pattern, new ServerSentEventHandler(handler)).setExecutorKey("worker"); } @Override - public Route route( - @NonNull String method, @NonNull String pattern, @NonNull Route.Handler handler) { + public Route route(String method, String pattern, Route.Handler handler) { return newRoute(method, pattern, handler); } - private Route newRoute( - @NonNull String method, @NonNull String pattern, @NonNull Route.Handler handler) { + private Route newRoute(String method, String pattern, Route.Handler handler) { RouteTree tree = stack.getLast().tree; /** Pattern: */ PathBuilder pathBuilder = new PathBuilder(); @@ -548,7 +543,7 @@ public void initialize() { configureContextAsService(routerOptions.isContextAsService()); } - @NonNull public Router start(@NonNull Jooby app) { + public Router start(Jooby app) { started = true; var globalErrHandler = defineGlobalErrorHandler(app); if (err == null) { @@ -657,8 +652,8 @@ public Logger getLog() { return LoggerFactory.getLogger(getClass()); } - @NonNull @Override - public Router executor(@NonNull String name, @NonNull Executor executor) { + @Override + public Router executor(String name, Executor executor) { services.put(ServiceKey.key(Executor.class, name), executor); return this; } @@ -679,13 +674,13 @@ public void destroy() { } } - @NonNull @Override + @Override public ErrorHandler getErrorHandler() { return err; } - @NonNull @Override - public Match match(@NonNull Context ctx) { + @Override + public Match match(Context ctx) { if (preDispatchInitializer != null) { preDispatchInitializer.apply(ctx); } @@ -703,15 +698,14 @@ public Match match(@NonNull Context ctx) { } @Override - public boolean match(@NonNull String pattern, @NonNull String path) { + public boolean match(String pattern, String path) { Chi chi = new Chi(false); chi.insert(Router.GET, pattern, ROUTE_MARK); return chi.exists(Router.GET, path); } - @NonNull @Override - public Router errorCode( - @NonNull Class type, @NonNull StatusCode statusCode) { + @Override + public Router errorCode(Class type, StatusCode statusCode) { if (errorCodes == null) { errorCodes = new HashMap<>(); } @@ -719,8 +713,8 @@ public Router errorCode( return this; } - @NonNull @Override - public StatusCode errorCode(@NonNull Throwable x) { + @Override + public StatusCode errorCode(Throwable x) { if (x instanceof StatusCodeException) { return ((StatusCodeException) x).getStatusCode(); } @@ -743,48 +737,48 @@ public StatusCode errorCode(@NonNull Throwable x) { return StatusCode.SERVER_ERROR; } - @NonNull @Override + @Override public ServiceRegistry getServices() { return services; } - @NonNull @Override - public T require(@NonNull Class type, @NonNull String name) throws RegistryException { + @Override + public T require(Class type, String name) throws RegistryException { return services.require(type, name); } - @NonNull @Override - public T require(@NonNull Class type) throws RegistryException { + @Override + public T require(Class type) throws RegistryException { return services.require(type); } - @NonNull @Override - public T require(@NonNull ServiceKey key) throws RegistryException { + @Override + public T require(ServiceKey key) throws RegistryException { return services.require(key); } - @NonNull @Override - public T require(@NonNull Reified type, @NonNull String name) throws RegistryException { + @Override + public T require(Reified type, String name) throws RegistryException { return services.require(type, name); } - @NonNull @Override - public T require(@NonNull Reified type) throws RegistryException { + @Override + public T require(Reified type) throws RegistryException { return services.require(type); } - @NonNull @Override + @Override public Cookie getFlashCookie() { return flashCookie; } - @NonNull @Override - public Router setFlashCookie(@NonNull Cookie flashCookie) { + @Override + public Router setFlashCookie(Cookie flashCookie) { this.flashCookie = requireNonNull(flashCookie); return this; } - @NonNull @Override + @Override public ServerOptions getServerOptions() { return serverOptions; } @@ -794,20 +788,20 @@ public void setServerOptions(ServerOptions serverOptions) { services.put(ServerOptions.class, serverOptions); } - @NonNull @Override - public Router setHiddenMethod(@NonNull String parameterName) { + @Override + public Router setHiddenMethod(String parameterName) { setHiddenMethod(new DefaultHiddenMethodLookup(parameterName)); return this; } - @NonNull @Override - public Router setHiddenMethod(@NonNull Function> provider) { + @Override + public Router setHiddenMethod(Function> provider) { addPreDispatchInitializer(new HiddenMethodInitializer(provider)); return this; } - @NonNull @Override - public Router setCurrentUser(@NonNull Function provider) { + @Override + public Router setCurrentUser(Function provider) { addPreDispatchInitializer(new CurrentUserInitializer(provider)); return this; } @@ -847,7 +841,7 @@ private Stack push(RouteTree tree, String pattern) { return stack; } - private Router newStack(@NonNull Stack stack, @NonNull Runnable action, Route.Filter... filter) { + private Router newStack(Stack stack, Runnable action, Route.Filter... filter) { Stream.of(filter).forEach(stack::then); this.stack.addLast(stack); action.run(); @@ -883,7 +877,7 @@ private void copy(Route src, Route it) { it.setSummary(src.getSummary()); } - private void putPredicate(@NonNull Predicate predicate, Chi tree) { + private void putPredicate(Predicate predicate, Chi tree) { if (predicateMap == null) { predicateMap = new LinkedHashMap<>(); } @@ -932,7 +926,7 @@ private static Predicate domainPredicate(String domain) { return ctx -> ctx.getHost().equals(domain); } - private void copyRoutes(@NonNull String path, @NonNull Router router) { + private void copyRoutes(String path, Router router) { String prefix = Router.leadingSlash(path); for (Route route : router.getRoutes()) { String routePattern = new PathBuilder(prefix, route.getPattern()).toString(); diff --git a/jooby/src/main/java/io/jooby/internal/RouterMatch.java b/jooby/src/main/java/io/jooby/internal/RouterMatch.java index b4aecb711f..81e0e0f6df 100644 --- a/jooby/src/main/java/io/jooby/internal/RouterMatch.java +++ b/jooby/src/main/java/io/jooby/internal/RouterMatch.java @@ -11,7 +11,6 @@ import java.util.Map; import java.util.Set; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.MessageEncoder; import io.jooby.Route; @@ -85,7 +84,7 @@ public RouterMatch found(Route route) { } @Override - public Object execute(@NonNull Context context, @NonNull Route.Handler pipeline) { + public Object execute(Context context, Route.Handler pipeline) { context.setPathMap(vars); context.setRoute(route); try { diff --git a/jooby/src/main/java/io/jooby/internal/ServiceRegistryImpl.java b/jooby/src/main/java/io/jooby/internal/ServiceRegistryImpl.java index 0bec8ddb94..1b99468e7a 100644 --- a/jooby/src/main/java/io/jooby/internal/ServiceRegistryImpl.java +++ b/jooby/src/main/java/io/jooby/internal/ServiceRegistryImpl.java @@ -9,8 +9,8 @@ import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.ServiceKey; import io.jooby.ServiceRegistry; import jakarta.inject.Provider; @@ -19,18 +19,18 @@ public class ServiceRegistryImpl implements ServiceRegistry { private final Map, Provider> registry = new ConcurrentHashMap<>(); - @NonNull @Override + @Override public Set> keySet() { return registry.keySet(); } - @NonNull @Override + @Override public Set, Provider>> entrySet() { return registry.entrySet(); } @Nullable @Override - public T getOrNull(@NonNull ServiceKey key) { + public T getOrNull(ServiceKey key) { var provider = registry.get(key); if (provider == null) { return null; @@ -39,22 +39,22 @@ public T getOrNull(@NonNull ServiceKey key) { } @Nullable @Override - public T put(@NonNull ServiceKey key, T service) { + public T put(ServiceKey key, T service) { return put(key, singleton(service)); } @Nullable @Override - public T put(@NonNull ServiceKey key, Provider service) { + public T put(ServiceKey key, Provider service) { return (T) registry.put(key, service); } @Nullable @Override - public T putIfAbsent(@NonNull ServiceKey type, T service) { + public T putIfAbsent(ServiceKey type, T service) { return putIfAbsent(type, singleton(service)); } @Nullable @Override - public T putIfAbsent(@NonNull ServiceKey key, Provider service) { + public T putIfAbsent(ServiceKey key, Provider service) { return (T) registry.putIfAbsent(key, service); } diff --git a/jooby/src/main/java/io/jooby/internal/SessionImpl.java b/jooby/src/main/java/io/jooby/internal/SessionImpl.java index ccec6d784d..d3e8a88dd3 100644 --- a/jooby/src/main/java/io/jooby/internal/SessionImpl.java +++ b/jooby/src/main/java/io/jooby/internal/SessionImpl.java @@ -9,8 +9,8 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.Context; import io.jooby.Session; import io.jooby.SessionStore; @@ -47,7 +47,7 @@ public boolean isNew() { return isNew; } - @NonNull @Override + @Override public Session setNew(boolean aNew) { this.isNew = aNew; return this; @@ -58,7 +58,7 @@ public boolean isModify() { return modify; } - @NonNull @Override + @Override public Session setModify(boolean modify) { this.modify = modify; return this; @@ -69,31 +69,31 @@ public Session setModify(boolean modify) { return id; } - @NonNull @Override + @Override public Session setId(@Nullable String id) { this.id = id; return this; } @Override - public @NonNull Value get(@NonNull String name) { + public Value get(String name) { return Value.create(ctx.getValueFactory(), name, attributes.get(name)); } @Override - public @NonNull Session put(@NonNull String name, @NonNull String value) { + public Session put(String name, String value) { attributes.put(name, value); updateState(); return this; } - public @NonNull Session put(@NonNull String name, Object value) { + public Session put(String name, Object value) { attributes.put(name, value.toString()); return this; } @Override - public @NonNull Value remove(@NonNull String name) { + public Value remove(String name) { var value = get(name); attributes.remove(name); updateState(); @@ -101,33 +101,33 @@ public Session setId(@Nullable String id) { } @Override - public @NonNull Map toMap() { + public Map toMap() { return attributes; } @Override - public @NonNull Instant getCreationTime() { + public Instant getCreationTime() { return creationTime; } - @NonNull @Override - public Session setCreationTime(@NonNull Instant creationTime) { + @Override + public Session setCreationTime(Instant creationTime) { this.creationTime = creationTime; return this; } @Override - public @NonNull Instant getLastAccessedTime() { + public Instant getLastAccessedTime() { return lastAccessedTime; } @Override - public @NonNull Session setLastAccessedTime(@NonNull Instant lastAccessedTime) { + public Session setLastAccessedTime(Instant lastAccessedTime) { this.lastAccessedTime = lastAccessedTime; return this; } - @NonNull @Override + @Override public Session clear() { attributes.clear(); updateState(); @@ -141,7 +141,7 @@ public void destroy() { store(ctx).deleteSession(ctx, this); } - @NonNull @Override + @Override public Session renewId() { store(ctx).renewSessionId(ctx, this); updateState(); diff --git a/jooby/src/main/java/io/jooby/internal/SignedSessionStore.java b/jooby/src/main/java/io/jooby/internal/SignedSessionStore.java index 29825828a3..7a1769da66 100644 --- a/jooby/src/main/java/io/jooby/internal/SignedSessionStore.java +++ b/jooby/src/main/java/io/jooby/internal/SignedSessionStore.java @@ -9,8 +9,8 @@ import java.util.Map; import java.util.function.Function; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.Context; import io.jooby.Session; import io.jooby.SessionStore; @@ -33,13 +33,13 @@ public SignedSessionStore( this.token = token; } - @NonNull @Override - public Session newSession(@NonNull Context ctx) { + @Override + public Session newSession(Context ctx) { return Session.create(ctx, null).setNew(true); } @Nullable @Override - public Session findSession(@NonNull Context ctx) { + public Session findSession(Context ctx) { String signed = token.findToken(ctx); if (signed == null) { return null; @@ -52,22 +52,22 @@ public Session findSession(@NonNull Context ctx) { } @Override - public void deleteSession(@NonNull Context ctx, @NonNull Session session) { + public void deleteSession(Context ctx, Session session) { token.deleteToken(ctx, null); } @Override - public void touchSession(@NonNull Context ctx, @NonNull Session session) { + public void touchSession(Context ctx, Session session) { token.saveToken(ctx, encoder.apply(session.toMap())); } @Override - public void saveSession(@NonNull Context ctx, @NonNull Session session) { + public void saveSession(Context ctx, Session session) { // NOOP } @Override - public void renewSessionId(@NonNull Context ctx, @NonNull Session session) { + public void renewSessionId(Context ctx, Session session) { token.saveToken(ctx, encoder.apply(session.toMap())); } } diff --git a/jooby/src/main/java/io/jooby/internal/SingleByteRange.java b/jooby/src/main/java/io/jooby/internal/SingleByteRange.java index 585743e9c9..55c4e19fdd 100644 --- a/jooby/src/main/java/io/jooby/internal/SingleByteRange.java +++ b/jooby/src/main/java/io/jooby/internal/SingleByteRange.java @@ -10,7 +10,6 @@ import java.io.IOException; import java.io.InputStream; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.ByteRange; import io.jooby.Context; import io.jooby.StatusCode; @@ -83,11 +82,11 @@ public long getContentLength() { * @return Value for Content-Range response header. */ @Override - public @NonNull String getContentRange() { + public String getContentRange() { return contentRange; } - @NonNull @Override + @Override public StatusCode getStatusCode() { return StatusCode.PARTIAL_CONTENT; } @@ -107,7 +106,7 @@ public StatusCode getStatusCode() { * @return This byte range request. */ @Override - public @NonNull ByteRange apply(@NonNull Context ctx) { + public ByteRange apply(Context ctx) { ctx.setResponseHeader("Accept-Ranges", "bytes"); ctx.setResponseHeader("Content-Range", contentRange); ctx.setResponseLength(contentLength); @@ -127,7 +126,7 @@ public StatusCode getStatusCode() { * @throws IOException When truncation fails. */ @Override - public @NonNull InputStream apply(@NonNull InputStream input) throws IOException { + public InputStream apply(InputStream input) throws IOException { return bounded(input, start, end); } diff --git a/jooby/src/main/java/io/jooby/internal/SingleValue.java b/jooby/src/main/java/io/jooby/internal/SingleValue.java index cf1d58e2f9..c23b437817 100644 --- a/jooby/src/main/java/io/jooby/internal/SingleValue.java +++ b/jooby/src/main/java/io/jooby/internal/SingleValue.java @@ -12,8 +12,8 @@ import java.util.Optional; import java.util.Set; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.value.ConversionHint; import io.jooby.value.Value; import io.jooby.value.ValueFactory; @@ -38,17 +38,17 @@ public String name() { } @Override - public @NonNull Value get(int index) { + public Value get(int index) { return get(Integer.toString(index)); } @Override - public @NonNull Value get(@NonNull String name) { + public Value get(String name) { return new MissingValue(factory, this.name + "." + name); } @Override - public Value getOrDefault(@NonNull String name, @NonNull String defaultValue) { + public Value getOrDefault(String name, String defaultValue) { return Value.value(factory, this.name + "." + name, defaultValue); } @@ -58,7 +58,7 @@ public int size() { } @Override - public @NonNull String value() { + public String value() { return value; } @@ -68,32 +68,32 @@ public String toString() { } @Override - public @NonNull Iterator iterator() { + public Iterator iterator() { return List.of((Value) this).iterator(); } - @NonNull @Override - public List toList(@NonNull Class type) { + @Override + public List toList(Class type) { return Collections.singletonList(to(type)); } - @NonNull @Override - public Set toSet(@NonNull Class type) { + @Override + public Set toSet(Class type) { return Collections.singleton(to(type)); } - @NonNull @Override - public Optional toOptional(@NonNull Class type) { + @Override + public Optional toOptional(Class type) { return Optional.ofNullable(toNullable(type)); } - @NonNull @Override - public T to(@NonNull Class type) { + @Override + public T to(Class type) { return factory.convert(type, this); } @Nullable @Override - public T toNullable(@NonNull Class type) { + public T toNullable(Class type) { return factory.convert(type, this, ConversionHint.Nullable); } diff --git a/jooby/src/main/java/io/jooby/internal/StaticRouterMatch.java b/jooby/src/main/java/io/jooby/internal/StaticRouterMatch.java index 20b6d0778e..58aa2bacc4 100644 --- a/jooby/src/main/java/io/jooby/internal/StaticRouterMatch.java +++ b/jooby/src/main/java/io/jooby/internal/StaticRouterMatch.java @@ -8,7 +8,6 @@ import java.util.Collections; import java.util.Map; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.Route; import io.jooby.Router; @@ -25,13 +24,13 @@ public boolean matches() { return true; } - @NonNull @Override + @Override public Route route() { return route; } @Override - public Object execute(@NonNull Context context, @NonNull Route.Handler pipeline) { + public Object execute(Context context, Route.Handler pipeline) { context.setRoute(route); try { return pipeline.apply(context); @@ -42,11 +41,11 @@ public Object execute(@NonNull Context context, @NonNull Route.Handler pipeline) } @Override - public Object execute(@NonNull Context context) { + public Object execute(Context context) { return execute(context, route.getPipeline()); } - @NonNull @Override + @Override public Map pathMap() { return Collections.emptyMap(); } diff --git a/jooby/src/main/java/io/jooby/internal/URLAsset.java b/jooby/src/main/java/io/jooby/internal/URLAsset.java index 1d766e7981..6c74ed04cc 100644 --- a/jooby/src/main/java/io/jooby/internal/URLAsset.java +++ b/jooby/src/main/java/io/jooby/internal/URLAsset.java @@ -10,7 +10,6 @@ import java.net.URL; import java.net.URLConnection; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.MediaType; import io.jooby.SneakyThrows; import io.jooby.handler.Asset; @@ -44,7 +43,7 @@ public class URLAsset implements Asset { * @param resource Asset resource url. * @param path Asset path. */ - public URLAsset(@NonNull URL resource, @NonNull String path) { + public URLAsset(URL resource, String path) { this.resource = resource; this.path = path; } @@ -61,7 +60,7 @@ public long getLastModified() { return lastModified; } - @NonNull @Override + @Override public MediaType getContentType() { return MediaType.byFile(path); } diff --git a/jooby/src/main/java/io/jooby/internal/WebSocketMessageImpl.java b/jooby/src/main/java/io/jooby/internal/WebSocketMessageImpl.java index c86ab02e96..9467fb29d6 100644 --- a/jooby/src/main/java/io/jooby/internal/WebSocketMessageImpl.java +++ b/jooby/src/main/java/io/jooby/internal/WebSocketMessageImpl.java @@ -8,8 +8,8 @@ import java.lang.reflect.Type; import java.nio.ByteBuffer; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.Body; import io.jooby.Context; import io.jooby.DefaultContext; @@ -24,28 +24,28 @@ private static class WebSocketMessageBody extends ForwardingContext implements D private final Body body; - public WebSocketMessageBody(@NonNull Context context, Body body) { + public WebSocketMessageBody(Context context, Body body) { super(context); this.body = body; } - @NonNull @Override + @Override public Body body() { return body; } - @NonNull @Override - public T body(@NonNull Type type) { + @Override + public T body(Type type) { return body.to(type); } - @NonNull @Override - public T body(@NonNull Class type) { + @Override + public T body(Class type) { return body.to(type); } - @NonNull @Override - public T decode(@NonNull Type type, @NonNull MediaType contentType) { + @Override + public T decode(Type type, MediaType contentType) { return DefaultContext.super.decode(type, contentType); } } @@ -54,34 +54,34 @@ public WebSocketMessageImpl(Context ctx, byte[] bytes) { super(ctx, bytes); } - @NonNull @Override - public T to(@NonNull Type type) { + @Override + public T to(Type type) { MediaType contentType = ctx.getRoute().getConsumes().get(0); return new WebSocketMessageBody(ctx, this).decode(type, contentType); } @Override - public Value get(@NonNull String name) { + public Value get(String name) { return new MissingValue(ctx.getValueFactory(), name); } @Override - public Value getOrDefault(@NonNull String name, @NonNull String defaultValue) { + public Value getOrDefault(String name, String defaultValue) { return Value.value(ctx.getValueFactory(), name, defaultValue); } @Nullable @Override - public T toNullable(@NonNull Type type) { + public T toNullable(Type type) { return this.to(type); } @Override - @NonNull public byte[] bytes() { + public byte[] bytes() { return super.bytes(); } @Override - public @NonNull ByteBuffer byteBuffer() { + public ByteBuffer byteBuffer() { return ByteBuffer.wrap(bytes()); } } diff --git a/jooby/src/main/java/io/jooby/internal/WebSocketSender.java b/jooby/src/main/java/io/jooby/internal/WebSocketSender.java index 8a6c9a485c..448f07fda1 100644 --- a/jooby/src/main/java/io/jooby/internal/WebSocketSender.java +++ b/jooby/src/main/java/io/jooby/internal/WebSocketSender.java @@ -10,7 +10,6 @@ import java.time.Instant; import java.util.Date; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.Cookie; import io.jooby.DefaultContext; @@ -27,18 +26,15 @@ public class WebSocketSender extends ForwardingContext implements DefaultContext private final WebSocket.WriteCallback callback; public WebSocketSender( - @NonNull Context context, - @NonNull WebSocket ws, - boolean binary, - WebSocket.WriteCallback callback) { + Context context, WebSocket ws, boolean binary, WebSocket.WriteCallback callback) { super(context); this.ws = ws; this.binary = binary; this.callback = callback; } - @NonNull @Override - public Context send(@NonNull String data, @NonNull Charset charset) { + @Override + public Context send(String data, Charset charset) { if (binary) { ws.sendBinary(data.getBytes(charset), callback); } else { @@ -47,8 +43,8 @@ public Context send(@NonNull String data, @NonNull Charset charset) { return this; } - @NonNull @Override - public Context send(@NonNull byte[] data) { + @Override + public Context send(byte[] data) { if (binary) { ws.sendBinary(data, callback); } else { @@ -57,8 +53,8 @@ public Context send(@NonNull byte[] data) { return this; } - @NonNull @Override - public Context send(@NonNull ByteBuffer data) { + @Override + public Context send(ByteBuffer data) { if (binary) { ws.sendBinary(data, callback); } else { @@ -68,7 +64,7 @@ public Context send(@NonNull ByteBuffer data) { } @Override - public Context send(@NonNull Output output) { + public Context send(Output output) { if (binary) { ws.sendBinary(output, callback); } else { @@ -77,8 +73,8 @@ public Context send(@NonNull Output output) { return this; } - @NonNull @Override - public Context render(@NonNull Object value) { + @Override + public Context render(Object value) { DefaultContext.super.render(value); return this; } @@ -89,68 +85,68 @@ public Context setResetHeadersOnError(boolean value) { return this; } - @NonNull @Override - public Context setDefaultResponseType(@NonNull MediaType contentType) { + @Override + public Context setDefaultResponseType(MediaType contentType) { // NOOP return this; } - @NonNull @Override + @Override public Context setResponseCode(int statusCode) { // NOOP return this; } - @NonNull @Override - public Context setResponseCode(@NonNull StatusCode statusCode) { + @Override + public Context setResponseCode(StatusCode statusCode) { // NOOP return this; } - @NonNull @Override - public Context setResponseCookie(@NonNull Cookie cookie) { + @Override + public Context setResponseCookie(Cookie cookie) { // NOOP return this; } - @NonNull @Override - public Context setResponseHeader(@NonNull String name, @NonNull String value) { + @Override + public Context setResponseHeader(String name, String value) { // NOOP return this; } - @NonNull @Override - public Context setResponseHeader(@NonNull String name, @NonNull Date value) { + @Override + public Context setResponseHeader(String name, Date value) { // NOOP return this; } - @NonNull @Override - public Context setResponseHeader(@NonNull String name, @NonNull Object value) { + @Override + public Context setResponseHeader(String name, Object value) { // NOOP return this; } - @NonNull @Override - public Context setResponseHeader(@NonNull String name, @NonNull Instant value) { + @Override + public Context setResponseHeader(String name, Instant value) { // NOOP return this; } - @NonNull @Override + @Override public Context setResponseLength(long length) { // NOOP return this; } - @NonNull @Override - public Context setResponseType(@NonNull String contentType) { + @Override + public Context setResponseType(String contentType) { // NOOP return this; } - @NonNull @Override - public Context setResponseType(@NonNull MediaType contentType) { + @Override + public Context setResponseType(MediaType contentType) { // NOOP return this; } diff --git a/jooby/src/main/java/io/jooby/internal/handler/ConcurrentHandler.java b/jooby/src/main/java/io/jooby/internal/handler/ConcurrentHandler.java index a8030a1309..ab3ce65cc9 100644 --- a/jooby/src/main/java/io/jooby/internal/handler/ConcurrentHandler.java +++ b/jooby/src/main/java/io/jooby/internal/handler/ConcurrentHandler.java @@ -12,13 +12,12 @@ import java.util.concurrent.CompletionStage; import java.util.concurrent.Flow; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Route; public class ConcurrentHandler implements Route.Reactive { - @NonNull @Override - public Route.Handler apply(@NonNull Route.Handler next) { + @Override + public Route.Handler apply(Route.Handler next) { return ctx -> { Object result = next.apply(ctx); if (ctx.isResponseStarted()) { diff --git a/jooby/src/main/java/io/jooby/internal/handler/DefaultHandler.java b/jooby/src/main/java/io/jooby/internal/handler/DefaultHandler.java index 7221e54622..5d86817fbe 100644 --- a/jooby/src/main/java/io/jooby/internal/handler/DefaultHandler.java +++ b/jooby/src/main/java/io/jooby/internal/handler/DefaultHandler.java @@ -5,7 +5,6 @@ */ package io.jooby.internal.handler; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Route; public class DefaultHandler implements Route.Filter { @@ -14,8 +13,8 @@ public class DefaultHandler implements Route.Filter { private DefaultHandler() {} - @NonNull @Override - public Route.Handler apply(@NonNull Route.Handler next) { + @Override + public Route.Handler apply(Route.Handler next) { return ctx -> { try { Object value = next.apply(ctx); diff --git a/jooby/src/main/java/io/jooby/internal/handler/DispatchHandler.java b/jooby/src/main/java/io/jooby/internal/handler/DispatchHandler.java index 5960c25096..e1ef336f8a 100644 --- a/jooby/src/main/java/io/jooby/internal/handler/DispatchHandler.java +++ b/jooby/src/main/java/io/jooby/internal/handler/DispatchHandler.java @@ -7,7 +7,6 @@ import java.util.concurrent.Executor; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Route; public class DispatchHandler implements Route.Filter { @@ -17,8 +16,8 @@ public DispatchHandler(Executor executor) { this.executor = executor; } - @NonNull @Override - public Route.Handler apply(@NonNull Route.Handler next) { + @Override + public Route.Handler apply(Route.Handler next) { return ctx -> ctx.dispatch( executor, diff --git a/jooby/src/main/java/io/jooby/internal/handler/PostDispatchInitializerHandler.java b/jooby/src/main/java/io/jooby/internal/handler/PostDispatchInitializerHandler.java index 0c16902ecd..df9e3d80f9 100644 --- a/jooby/src/main/java/io/jooby/internal/handler/PostDispatchInitializerHandler.java +++ b/jooby/src/main/java/io/jooby/internal/handler/PostDispatchInitializerHandler.java @@ -5,7 +5,6 @@ */ package io.jooby.internal.handler; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Route; import io.jooby.internal.ContextInitializer; @@ -17,8 +16,8 @@ public PostDispatchInitializerHandler(ContextInitializer initializer) { this.initializer = initializer; } - @NonNull @Override - public Route.Handler apply(@NonNull Route.Handler next) { + @Override + public Route.Handler apply(Route.Handler next) { return ctx -> { try { initializer.apply(ctx); diff --git a/jooby/src/main/java/io/jooby/internal/handler/SendDirect.java b/jooby/src/main/java/io/jooby/internal/handler/SendDirect.java index 799b901ea2..25add553fd 100644 --- a/jooby/src/main/java/io/jooby/internal/handler/SendDirect.java +++ b/jooby/src/main/java/io/jooby/internal/handler/SendDirect.java @@ -5,7 +5,6 @@ */ package io.jooby.internal.handler; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Route; public class SendDirect implements Route.Filter { @@ -14,8 +13,8 @@ public class SendDirect implements Route.Filter { private SendDirect() {} - @NonNull @Override - public Route.Handler apply(@NonNull Route.Handler next) { + @Override + public Route.Handler apply(Route.Handler next) { return ctx -> { try { next.apply(ctx); diff --git a/jooby/src/main/java/io/jooby/internal/handler/ServerSentEventHandler.java b/jooby/src/main/java/io/jooby/internal/handler/ServerSentEventHandler.java index 1bd9527dff..0c409d3585 100644 --- a/jooby/src/main/java/io/jooby/internal/handler/ServerSentEventHandler.java +++ b/jooby/src/main/java/io/jooby/internal/handler/ServerSentEventHandler.java @@ -5,7 +5,6 @@ */ package io.jooby.internal.handler; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.Route; import io.jooby.ServerSentEmitter; @@ -18,8 +17,8 @@ public ServerSentEventHandler(ServerSentEmitter.Handler handler) { this.handler = handler; } - @NonNull @Override - public Object apply(@NonNull Context ctx) { + @Override + public Object apply(Context ctx) { ctx.setResponseHeader("Connection", "Close"); ctx.setResponseType("text/event-stream; charset=utf-8"); ctx.setResponseCode(StatusCode.OK); diff --git a/jooby/src/main/java/io/jooby/internal/handler/WebSocketHandler.java b/jooby/src/main/java/io/jooby/internal/handler/WebSocketHandler.java index bec0afdc75..b1c8c65948 100644 --- a/jooby/src/main/java/io/jooby/internal/handler/WebSocketHandler.java +++ b/jooby/src/main/java/io/jooby/internal/handler/WebSocketHandler.java @@ -5,7 +5,6 @@ */ package io.jooby.internal.handler; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.StatusCode; import io.jooby.WebSocket; @@ -21,8 +20,8 @@ public WebSocket.Initializer getInitializer() { return handler; } - @NonNull @Override - public Object apply(@NonNull Context ctx) { + @Override + public Object apply(Context ctx) { boolean webSocket = ctx.header("Upgrade").value("").equalsIgnoreCase("WebSocket"); if (webSocket) { ctx.upgrade(handler); diff --git a/jooby/src/main/java/io/jooby/internal/handler/WorkerHandler.java b/jooby/src/main/java/io/jooby/internal/handler/WorkerHandler.java index cf1ac65674..8a2af94a82 100644 --- a/jooby/src/main/java/io/jooby/internal/handler/WorkerHandler.java +++ b/jooby/src/main/java/io/jooby/internal/handler/WorkerHandler.java @@ -5,7 +5,6 @@ */ package io.jooby.internal.handler; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Route; public class WorkerHandler implements Route.Filter { @@ -13,8 +12,8 @@ public class WorkerHandler implements Route.Filter { private WorkerHandler() {} - @NonNull @Override - public Route.Handler apply(@NonNull Route.Handler next) { + @Override + public Route.Handler apply(Route.Handler next) { return ctx -> ctx.dispatch( () -> { diff --git a/jooby/src/main/java/io/jooby/internal/output/CompositeOutput.java b/jooby/src/main/java/io/jooby/internal/output/CompositeOutput.java index dfd6241587..72e20a1198 100644 --- a/jooby/src/main/java/io/jooby/internal/output/CompositeOutput.java +++ b/jooby/src/main/java/io/jooby/internal/output/CompositeOutput.java @@ -9,7 +9,6 @@ import java.util.ArrayList; import java.util.List; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.SneakyThrows; import io.jooby.output.BufferedOutput; @@ -70,7 +69,7 @@ public ByteBuffer asByteBuffer() { } @Override - public void transferTo(@NonNull SneakyThrows.Consumer consumer) { + public void transferTo(SneakyThrows.Consumer consumer) { chunks.forEach(consumer); } diff --git a/jooby/src/main/java/io/jooby/internal/output/OutputOutputStream.java b/jooby/src/main/java/io/jooby/internal/output/OutputOutputStream.java index aeea74deec..809d185e6a 100644 --- a/jooby/src/main/java/io/jooby/internal/output/OutputOutputStream.java +++ b/jooby/src/main/java/io/jooby/internal/output/OutputOutputStream.java @@ -8,7 +8,6 @@ import java.io.IOException; import java.io.OutputStream; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.output.BufferedOutput; import io.jooby.output.Output; @@ -23,7 +22,7 @@ public class OutputOutputStream extends OutputStream { private boolean closed; - public OutputOutputStream(@NonNull BufferedOutput output) { + public OutputOutputStream(BufferedOutput output) { this.output = output; } @@ -34,7 +33,7 @@ public void write(int b) throws IOException { } @Override - public void write(@NonNull byte[] b, int off, int len) throws IOException { + public void write(byte[] b, int off, int len) throws IOException { checkClosed(); if (len > 0) { this.output.write(b, off, len); diff --git a/jooby/src/main/java/io/jooby/internal/output/OutputStatic.java b/jooby/src/main/java/io/jooby/internal/output/OutputStatic.java index a4ac2e2e38..2df2114652 100644 --- a/jooby/src/main/java/io/jooby/internal/output/OutputStatic.java +++ b/jooby/src/main/java/io/jooby/internal/output/OutputStatic.java @@ -7,7 +7,6 @@ import java.nio.ByteBuffer; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.SneakyThrows; import io.jooby.output.Output; @@ -20,7 +19,7 @@ public int size() { } @Override - public void transferTo(@NonNull SneakyThrows.Consumer consumer) { + public void transferTo(SneakyThrows.Consumer consumer) { consumer.accept(asByteBuffer()); } diff --git a/jooby/src/main/java/io/jooby/internal/output/OutputWriter.java b/jooby/src/main/java/io/jooby/internal/output/OutputWriter.java index c0279a1eba..97354146ac 100644 --- a/jooby/src/main/java/io/jooby/internal/output/OutputWriter.java +++ b/jooby/src/main/java/io/jooby/internal/output/OutputWriter.java @@ -10,7 +10,6 @@ import java.nio.CharBuffer; import java.nio.charset.Charset; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.output.BufferedOutput; public class OutputWriter extends Writer { @@ -18,7 +17,7 @@ public class OutputWriter extends Writer { private final Charset charset; private boolean closed; - public OutputWriter(@NonNull BufferedOutput output, @NonNull Charset charset) { + public OutputWriter(BufferedOutput output, Charset charset) { this.output = output; this.charset = charset; } @@ -30,24 +29,24 @@ public void write(int c) throws IOException { } @Override - public void write(@NonNull char[] source) throws IOException { + public void write(char[] source) throws IOException { write(source, 0, source.length); } @Override - public void write(@NonNull char[] source, int off, int len) throws IOException { + public void write(char[] source, int off, int len) throws IOException { checkClosed(); output.write(CharBuffer.wrap(source, off, len), charset); } @Override - public void write(@NonNull String source) throws IOException { + public void write(String source) throws IOException { checkClosed(); output.write(source, charset); } @Override - public void write(@NonNull String source, int off, int len) throws IOException { + public void write(String source, int off, int len) throws IOException { checkClosed(); output.write(CharBuffer.wrap(source, off, off + len), charset); } diff --git a/jooby/src/main/java/io/jooby/internal/output/WrappedOutput.java b/jooby/src/main/java/io/jooby/internal/output/WrappedOutput.java index f4b23dd832..0ce25a0333 100644 --- a/jooby/src/main/java/io/jooby/internal/output/WrappedOutput.java +++ b/jooby/src/main/java/io/jooby/internal/output/WrappedOutput.java @@ -7,7 +7,6 @@ import java.nio.ByteBuffer; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.SneakyThrows; import io.jooby.output.Output; @@ -22,7 +21,7 @@ public int size() { } @Override - public void transferTo(@NonNull SneakyThrows.Consumer consumer) { + public void transferTo(SneakyThrows.Consumer consumer) { consumer.accept(asByteBuffer()); } diff --git a/jooby/src/main/java/io/jooby/internal/output/package-info.java b/jooby/src/main/java/io/jooby/internal/output/package-info.java deleted file mode 100644 index 881ac8de5c..0000000000 --- a/jooby/src/main/java/io/jooby/internal/output/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -@ReturnValuesAreNonnullByDefault -package io.jooby.internal.output; - -import edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault; diff --git a/jooby/src/main/java/io/jooby/internal/reflect/$Types.java b/jooby/src/main/java/io/jooby/internal/reflect/$Types.java index 6a46e63ddc..71cc70a811 100644 --- a/jooby/src/main/java/io/jooby/internal/reflect/$Types.java +++ b/jooby/src/main/java/io/jooby/internal/reflect/$Types.java @@ -5,7 +5,6 @@ */ package io.jooby.internal.reflect; -import edu.umd.cs.findbugs.annotations.NonNull; import java.io.Serializable; import java.lang.reflect.Array; @@ -85,7 +84,7 @@ public static WildcardType supertypeOf(Type bound) { * Returns a type that is functionally equal but not necessarily equal according to {@link * Object#equals(Object) Object.equals()}. The returned type is {@link java.io.Serializable}. */ - public static Type canonicalize(@NonNull Type type) { + public static Type canonicalize(Type type) { return switch (type) { case Class c -> c.isArray() ? new GenericArrayTypeImpl(canonicalize(c.getComponentType())) : c; diff --git a/jooby/src/main/java/io/jooby/output/BufferedOutput.java b/jooby/src/main/java/io/jooby/output/BufferedOutput.java index 2c5ec732ef..20ad7250d1 100644 --- a/jooby/src/main/java/io/jooby/output/BufferedOutput.java +++ b/jooby/src/main/java/io/jooby/output/BufferedOutput.java @@ -12,7 +12,6 @@ import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.internal.output.OutputOutputStream; import io.jooby.internal.output.OutputWriter; @@ -56,7 +55,7 @@ default Writer asWriter() { * @param charset Charset to use. * @return An output stream. */ - default Writer asWriter(@NonNull Charset charset) { + default Writer asWriter(Charset charset) { return new OutputWriter(this, charset); } @@ -94,7 +93,7 @@ default Writer asWriter(@NonNull Charset charset) { * @param source the char sequence to write into this buffer * @return this output */ - default BufferedOutput write(@NonNull String source) { + default BufferedOutput write(String source) { return write(source, StandardCharsets.UTF_8); } @@ -106,7 +105,7 @@ default BufferedOutput write(@NonNull String source) { * @param charset the charset to encode the char sequence with * @return this output */ - default BufferedOutput write(@NonNull String source, @NonNull Charset charset) { + default BufferedOutput write(String source, Charset charset) { if (!source.isEmpty()) { return write(source.getBytes(charset)); } @@ -120,7 +119,7 @@ default BufferedOutput write(@NonNull String source, @NonNull Charset charset) { * @param source the bytes to be written into this buffer * @return this output */ - default BufferedOutput write(@NonNull ByteBuffer source) { + default BufferedOutput write(ByteBuffer source) { if (source.hasArray()) { return write(source.array(), source.arrayOffset() + source.position(), source.remaining()); } else { @@ -138,7 +137,7 @@ default BufferedOutput write(@NonNull ByteBuffer source) { * @param charset Charset. * @return this output */ - default BufferedOutput write(@NonNull CharBuffer source, @NonNull Charset charset) { + default BufferedOutput write(CharBuffer source, Charset charset) { if (!source.isEmpty()) { return write(charset.encode(source)); } diff --git a/jooby/src/main/java/io/jooby/output/ByteBufferedOutput.java b/jooby/src/main/java/io/jooby/output/ByteBufferedOutput.java index 4ae8092ffd..cf23e72a6b 100644 --- a/jooby/src/main/java/io/jooby/output/ByteBufferedOutput.java +++ b/jooby/src/main/java/io/jooby/output/ByteBufferedOutput.java @@ -9,7 +9,6 @@ import java.util.Iterator; import java.util.List; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.SneakyThrows; @@ -46,7 +45,7 @@ public int size() { } @Override - public void transferTo(@NonNull SneakyThrows.Consumer consumer) { + public void transferTo(SneakyThrows.Consumer consumer) { consumer.accept(asByteBuffer()); } @@ -87,7 +86,7 @@ public BufferedOutput write(byte[] source, int offset, int length) { } @Override - public BufferedOutput write(@NonNull ByteBuffer source) { + public BufferedOutput write(ByteBuffer source) { ensureWritable(source.remaining()); var length = source.remaining(); var tmp = this.buffer.duplicate(); diff --git a/jooby/src/main/java/io/jooby/output/ByteBufferedOutputFactory.java b/jooby/src/main/java/io/jooby/output/ByteBufferedOutputFactory.java index bc9e4fe35f..9cb8431322 100644 --- a/jooby/src/main/java/io/jooby/output/ByteBufferedOutputFactory.java +++ b/jooby/src/main/java/io/jooby/output/ByteBufferedOutputFactory.java @@ -8,7 +8,6 @@ import java.nio.ByteBuffer; import java.nio.charset.Charset; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.internal.output.CompositeOutput; import io.jooby.internal.output.OutputStatic; import io.jooby.internal.output.WrappedOutput; @@ -27,22 +26,22 @@ public ContextOutputFactory(OutputOptions options) { } @Override - public Output wrap(@NonNull ByteBuffer buffer) { + public Output wrap(ByteBuffer buffer) { return new WrappedOutput(buffer); } @Override - public Output wrap(@NonNull String value, @NonNull Charset charset) { + public Output wrap(String value, Charset charset) { return new WrappedOutput(ByteBuffer.wrap(value.getBytes(charset))); } @Override - public Output wrap(@NonNull byte[] bytes) { + public Output wrap(byte[] bytes) { return new WrappedOutput(ByteBuffer.wrap(bytes)); } @Override - public Output wrap(@NonNull byte[] bytes, int offset, int length) { + public Output wrap(byte[] bytes, int offset, int length) { return new WrappedOutput(ByteBuffer.wrap(bytes, offset, length)); } } @@ -74,22 +73,22 @@ public BufferedOutput newComposite() { } @Override - public Output wrap(@NonNull String value, @NonNull Charset charset) { + public Output wrap(String value, Charset charset) { return wrap(value.getBytes(charset)); } @Override - public Output wrap(@NonNull ByteBuffer buffer) { + public Output wrap(ByteBuffer buffer) { return new OutputStatic(buffer); } @Override - public Output wrap(@NonNull byte[] bytes) { + public Output wrap(byte[] bytes) { return wrap(bytes, 0, bytes.length); } @Override - public Output wrap(@NonNull byte[] bytes, int offset, int length) { + public Output wrap(byte[] bytes, int offset, int length) { return new OutputStatic(ByteBuffer.wrap(bytes, offset, length)); } diff --git a/jooby/src/main/java/io/jooby/output/Output.java b/jooby/src/main/java/io/jooby/output/Output.java index 243c8f1565..fccbe2fb03 100644 --- a/jooby/src/main/java/io/jooby/output/Output.java +++ b/jooby/src/main/java/io/jooby/output/Output.java @@ -9,7 +9,6 @@ import java.util.ArrayList; import java.util.Iterator; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.SneakyThrows; /** @@ -34,7 +33,7 @@ public interface Output { * * @param consumer Consumer. */ - void transferTo(@NonNull SneakyThrows.Consumer consumer); + void transferTo(SneakyThrows.Consumer consumer); /** * An iterator over read-only byte buffers. diff --git a/jooby/src/main/java/io/jooby/output/OutputFactory.java b/jooby/src/main/java/io/jooby/output/OutputFactory.java index bbc6b5da3f..094878c6b6 100644 --- a/jooby/src/main/java/io/jooby/output/OutputFactory.java +++ b/jooby/src/main/java/io/jooby/output/OutputFactory.java @@ -9,8 +9,6 @@ import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; -import edu.umd.cs.findbugs.annotations.NonNull; - /** * Factory class for {@link Output}. * @@ -25,7 +23,7 @@ public interface OutputFactory { * @param options Output options. * @return Default output factory. */ - static OutputFactory create(@NonNull OutputOptions options) { + static OutputFactory create(OutputOptions options) { return new ByteBufferedOutputFactory(options); } @@ -98,7 +96,7 @@ default Output wrap(String value) { * @param charset Charset to use. * @return Readonly buffer. */ - default Output wrap(@NonNull String value, @NonNull Charset charset) { + default Output wrap(String value, Charset charset) { return wrap(value.getBytes(charset)); } @@ -108,7 +106,7 @@ default Output wrap(@NonNull String value, @NonNull Charset charset) { * @param buffer Input buffer. * @return Readonly buffer. */ - Output wrap(@NonNull ByteBuffer buffer); + Output wrap(ByteBuffer buffer); /** * Readonly buffer created from byte array. @@ -116,7 +114,7 @@ default Output wrap(@NonNull String value, @NonNull Charset charset) { * @param bytes Byte array. * @return Readonly buffer. */ - Output wrap(@NonNull byte[] bytes); + Output wrap(byte[] bytes); /** * Readonly buffer created from byte array. @@ -126,7 +124,7 @@ default Output wrap(@NonNull String value, @NonNull Charset charset) { * @param length Length. * @return Readonly buffer. */ - Output wrap(@NonNull byte[] bytes, int offset, int length); + Output wrap(byte[] bytes, int offset, int length); /** * Special implementation when output factory is requested from {@link io.jooby.Context}. diff --git a/jooby/src/main/java/io/jooby/output/package-info.java b/jooby/src/main/java/io/jooby/output/package-info.java index 8ad7c10d47..050b6267f7 100644 --- a/jooby/src/main/java/io/jooby/output/package-info.java +++ b/jooby/src/main/java/io/jooby/output/package-info.java @@ -1,3 +1,3 @@ /** Output used to support multiple implementations like byte array, byte buffer, netty buffers. */ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.output; diff --git a/jooby/src/main/java/io/jooby/package-info.java b/jooby/src/main/java/io/jooby/package-info.java index b108136354..23bb81f2f1 100644 --- a/jooby/src/main/java/io/jooby/package-info.java +++ b/jooby/src/main/java/io/jooby/package-info.java @@ -19,5 +19,5 @@ * * More documentation at jooby.io */ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby; diff --git a/jooby/src/main/java/io/jooby/problem/HttpProblem.java b/jooby/src/main/java/io/jooby/problem/HttpProblem.java index ba2c043ec5..79399c0d25 100644 --- a/jooby/src/main/java/io/jooby/problem/HttpProblem.java +++ b/jooby/src/main/java/io/jooby/problem/HttpProblem.java @@ -9,7 +9,8 @@ import java.time.Instant; import java.util.*; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.StatusCode; /** diff --git a/jooby/src/main/java/io/jooby/problem/HttpProblemMappable.java b/jooby/src/main/java/io/jooby/problem/HttpProblemMappable.java index 8fc069c300..4611de9c84 100644 --- a/jooby/src/main/java/io/jooby/problem/HttpProblemMappable.java +++ b/jooby/src/main/java/io/jooby/problem/HttpProblemMappable.java @@ -5,8 +5,6 @@ */ package io.jooby.problem; -import edu.umd.cs.findbugs.annotations.NonNull; - /** * Implementing {@link HttpProblemMappable} allows to control the transformation of exception into * {@link HttpProblem}. {@link ProblemDetailsHandler} rely on `toHttpProblem()` method when it is @@ -21,5 +19,5 @@ public interface HttpProblemMappable { * * @return A {@link HttpProblem} instance. */ - @NonNull HttpProblem toHttpProblem(); + HttpProblem toHttpProblem(); } diff --git a/jooby/src/main/java/io/jooby/problem/ProblemDetailsHandler.java b/jooby/src/main/java/io/jooby/problem/ProblemDetailsHandler.java index 674ca78ac9..fffcdc01d8 100644 --- a/jooby/src/main/java/io/jooby/problem/ProblemDetailsHandler.java +++ b/jooby/src/main/java/io/jooby/problem/ProblemDetailsHandler.java @@ -16,7 +16,6 @@ import org.slf4j.Logger; import com.typesafe.config.Config; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.*; import io.jooby.exception.NotAcceptableException; @@ -57,7 +56,7 @@ public ProblemDetailsHandler log4xxErrors() { } @Override - public void apply(@NonNull Context ctx, @NonNull Throwable cause, @NonNull StatusCode code) { + public void apply(Context ctx, Throwable cause, StatusCode code) { Logger log = ctx.getRouter().getLog(); if (cause instanceof NotAcceptableException ex) { // no matching produce type, respond in html diff --git a/jooby/src/main/java/io/jooby/rpc/grpc/GrpcExchange.java b/jooby/src/main/java/io/jooby/rpc/grpc/GrpcExchange.java index d6a56f4ff8..a526918748 100644 --- a/jooby/src/main/java/io/jooby/rpc/grpc/GrpcExchange.java +++ b/jooby/src/main/java/io/jooby/rpc/grpc/GrpcExchange.java @@ -9,7 +9,7 @@ import java.util.Map; import java.util.function.Consumer; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; /** * Server-agnostic abstraction for a native HTTP/2 gRPC exchange. diff --git a/jooby/src/main/java/io/jooby/rpc/grpc/GrpcProcessor.java b/jooby/src/main/java/io/jooby/rpc/grpc/GrpcProcessor.java index 6161f0fa12..428e6d4fad 100644 --- a/jooby/src/main/java/io/jooby/rpc/grpc/GrpcProcessor.java +++ b/jooby/src/main/java/io/jooby/rpc/grpc/GrpcProcessor.java @@ -8,8 +8,6 @@ import java.nio.ByteBuffer; import java.util.concurrent.Flow; -import edu.umd.cs.findbugs.annotations.NonNull; - /** * Core Service Provider Interface (SPI) for the gRPC extension. * @@ -47,5 +45,5 @@ public interface GrpcProcessor { * @throws IllegalStateException If an unregistered path bypasses the {@link * #isGrpcMethod(String)} guard. */ - Flow.Subscriber process(@NonNull GrpcExchange exchange); + Flow.Subscriber process(GrpcExchange exchange); } diff --git a/jooby/src/main/java/io/jooby/validation/ValidationContext.java b/jooby/src/main/java/io/jooby/validation/ValidationContext.java index 8293974527..c5497849c5 100644 --- a/jooby/src/main/java/io/jooby/validation/ValidationContext.java +++ b/jooby/src/main/java/io/jooby/validation/ValidationContext.java @@ -12,8 +12,8 @@ import java.util.List; import java.util.Set; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.*; import io.jooby.value.ConversionHint; import io.jooby.value.Value; @@ -34,29 +34,29 @@ public ValidatedValue(Context ctx, Value delegate) { this.ctx = ctx; } - @NonNull @Override - public T to(@NonNull Class type) { + @Override + public T to(Class type) { return validate(type); } - protected T validate(@NonNull Class type) { + protected T validate(Class type) { // Call empty version to let bean validator to run return BeanValidator.apply( ctx, ctx.getValueFactory().convert(type, this, ConversionHint.Empty)); } @Nullable @Override - public T toNullable(@NonNull Class type) { + public T toNullable(Class type) { return validate(type); } - @NonNull @Override - public List toList(@NonNull Class type) { + @Override + public List toList(Class type) { return BeanValidator.apply(ctx, super.toList(type)); } - @NonNull @Override - public Set toSet(@NonNull Class type) { + @Override + public Set toSet(Class type) { return BeanValidator.apply(ctx, super.toSet(type)); } } @@ -66,7 +66,7 @@ public ValidatedBody(Context ctx, Body body) { super(ctx, body); } - @NonNull @Override + @Override public byte[] bytes() { return ((Body) delegate).bytes(); } @@ -81,30 +81,30 @@ public long getSize() { return ((Body) delegate).getSize(); } - @NonNull @Override + @Override public ReadableByteChannel channel() { return ((Body) delegate).channel(); } - @NonNull @Override + @Override public InputStream stream() { return ((Body) delegate).stream(); } - @NonNull @Override - public T to(@NonNull Type type) { + @Override + public T to(Type type) { // Call nullable version to let bean validator to run return BeanValidator.apply(ctx, ((Body) delegate).toNullable(type)); } - @NonNull @Override - public T to(@NonNull Class type) { + @Override + public T to(Class type) { // Call nullable version to let bean validator to run return BeanValidator.apply(ctx, ((Body) delegate).toNullable(type)); } @Nullable @Override - public T toNullable(@NonNull Type type) { + public T toNullable(Type type) { return BeanValidator.apply(ctx, ((Body) delegate).toNullable(type)); } } @@ -115,11 +115,11 @@ public ValidatedQueryString(Context ctx, QueryString delegate) { } @Override - public @NonNull T toEmpty(@NonNull Class type) { + public T toEmpty(Class type) { return validate(type); } - @NonNull @Override + @Override public String queryString() { return ((QueryString) delegate).queryString(); } @@ -131,37 +131,37 @@ public ValidatedFormdata(Context ctx, Formdata delegate) { } @Override - public void put(@NonNull String path, @NonNull Value value) { + public void put(String path, Value value) { ((Formdata) delegate).put(path, value); } @Override - public void put(@NonNull String path, @NonNull String value) { + public void put(String path, String value) { ((Formdata) delegate).put(path, value); } @Override - public void put(@NonNull String path, @NonNull Collection values) { + public void put(String path, Collection values) { ((Formdata) delegate).put(path, values); } @Override - public void put(@NonNull String name, @NonNull FileUpload file) { + public void put(String name, FileUpload file) { ((Formdata) delegate).put(name, file); } - @NonNull @Override + @Override public List files() { return ((Formdata) delegate).files(); } - @NonNull @Override - public List files(@NonNull String name) { + @Override + public List files(String name) { return ((Formdata) delegate).files(name); } - @NonNull @Override - public FileUpload file(@NonNull String name) { + @Override + public FileUpload file(String name) { return ((Formdata) delegate).file(name); } } @@ -171,51 +171,51 @@ public FileUpload file(@NonNull String name) { * * @param context Source context. */ - public ValidationContext(@NonNull Context context) { + public ValidationContext(Context context) { super(context); } - @NonNull @Override - public T body(@NonNull Type type) { + @Override + public T body(Type type) { return body().to(type); } - @NonNull @Override - public T body(@NonNull Class type) { + @Override + public T body(Class type) { return body().to(type); } - @NonNull @Override + @Override public Value path() { return new ValidatedValue(ctx, super.path()); } - @NonNull @Override + @Override public Body body() { return new ValidatedBody(ctx, super.body()); } - @NonNull @Override - public T query(@NonNull Class type) { + @Override + public T query(Class type) { return query().toEmpty(type); } - @NonNull @Override + @Override public QueryString query() { return new ValidatedQueryString(ctx, super.query()); } - @NonNull @Override - public T form(@NonNull Class type) { + @Override + public T form(Class type) { return form().to(type); } - @NonNull @Override + @Override public Formdata form() { return new ValidatedFormdata(ctx, super.form()); } - @NonNull @Override + @Override public Value header() { return new ValidatedValue(ctx, super.header()); } diff --git a/jooby/src/main/java/io/jooby/validation/ValidationResult.java b/jooby/src/main/java/io/jooby/validation/ValidationResult.java index a7e001aa34..40ad588937 100644 --- a/jooby/src/main/java/io/jooby/validation/ValidationResult.java +++ b/jooby/src/main/java/io/jooby/validation/ValidationResult.java @@ -8,8 +8,8 @@ import java.util.LinkedList; import java.util.List; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.StatusCode; import io.jooby.problem.HttpProblem; import io.jooby.problem.HttpProblemMappable; @@ -37,7 +37,7 @@ public ValidationResult(String title, int status, List errors) { this.errors = errors; } - @NonNull @Override + @Override public HttpProblem toHttpProblem() { return HttpProblem.builder() .title(title) @@ -64,8 +64,7 @@ private List convertErrors() { * @param messages Messages. * @param type Error type. */ - public record Error( - @Nullable String field, @NonNull List messages, @NonNull ErrorType type) {} + public record Error(@Nullable String field, List messages, ErrorType type) {} /** Error type, describe when it is a generic/global error or specific/field error. */ public enum ErrorType { diff --git a/jooby/src/main/java/io/jooby/value/Converter.java b/jooby/src/main/java/io/jooby/value/Converter.java index 19aa4ac002..3dfd2194b3 100644 --- a/jooby/src/main/java/io/jooby/value/Converter.java +++ b/jooby/src/main/java/io/jooby/value/Converter.java @@ -7,8 +7,6 @@ import java.lang.reflect.Type; -import edu.umd.cs.findbugs.annotations.NonNull; - /** * Value converter for values that come from config, query, path, form, path parameters into more * specific type. @@ -25,5 +23,5 @@ public interface Converter { * @param hint Requested hint. * @return Converted value. */ - Object convert(@NonNull Type type, @NonNull Value value, @NonNull ConversionHint hint); + Object convert(Type type, Value value, ConversionHint hint); } diff --git a/jooby/src/main/java/io/jooby/value/ReflectiveBeanConverter.java b/jooby/src/main/java/io/jooby/value/ReflectiveBeanConverter.java index be187abb13..fd55207ecc 100644 --- a/jooby/src/main/java/io/jooby/value/ReflectiveBeanConverter.java +++ b/jooby/src/main/java/io/jooby/value/ReflectiveBeanConverter.java @@ -12,7 +12,6 @@ import java.util.*; import java.util.function.Consumer; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.FileUpload; import io.jooby.Formdata; import io.jooby.Usage; @@ -90,7 +89,7 @@ public ReflectiveBeanConverter(ValueFactory factory, MethodHandles.Lookup lookup * and value is missing or null. */ @Override - public Object convert(@NonNull Type type, @NonNull Value value, @NonNull ConversionHint hint) + public Object convert(Type type, Value value, ConversionHint hint) throws TypeMismatchException, ProvisioningException { var rawType = $Types.parameterizedType0(type); var allowEmptyBean = hint == ConversionHint.Empty; diff --git a/jooby/src/main/java/io/jooby/value/StandardConverter.java b/jooby/src/main/java/io/jooby/value/StandardConverter.java index 4d50bafd70..3ac3bf5004 100644 --- a/jooby/src/main/java/io/jooby/value/StandardConverter.java +++ b/jooby/src/main/java/io/jooby/value/StandardConverter.java @@ -27,7 +27,6 @@ import java.util.UUID; import java.util.concurrent.TimeUnit; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.SneakyThrows; import io.jooby.StatusCode; @@ -41,7 +40,7 @@ protected void add(ValueFactory factory) { } @Override - public Object convert(@NonNull Type type, @NonNull Value value, @NonNull ConversionHint hint) { + public Object convert(Type type, Value value, ConversionHint hint) { return value.valueOrNull(); } }, @@ -54,7 +53,7 @@ protected void add(ValueFactory factory) { } @Override - public Object convert(@NonNull Type type, @NonNull Value value, @NonNull ConversionHint hint) { + public Object convert(Type type, Value value, ConversionHint hint) { if (type == int.class) { return value.intValue(); } @@ -70,7 +69,7 @@ protected void add(ValueFactory factory) { } @Override - public Object convert(@NonNull Type type, @NonNull Value value, @NonNull ConversionHint hint) { + public Object convert(Type type, Value value, ConversionHint hint) { if (type == long.class) { return value.longValue(); } @@ -86,7 +85,7 @@ protected void add(ValueFactory factory) { } @Override - public Object convert(@NonNull Type type, @NonNull Value value, @NonNull ConversionHint hint) { + public Object convert(Type type, Value value, ConversionHint hint) { if (type == float.class) { return value.floatValue(); } @@ -102,7 +101,7 @@ protected void add(ValueFactory factory) { } @Override - public Object convert(@NonNull Type type, @NonNull Value value, @NonNull ConversionHint hint) { + public Object convert(Type type, Value value, ConversionHint hint) { if (type == double.class) { return value.doubleValue(); } @@ -118,7 +117,7 @@ protected void add(ValueFactory factory) { } @Override - public Object convert(@NonNull Type type, @NonNull Value value, @NonNull ConversionHint hint) { + public Object convert(Type type, Value value, ConversionHint hint) { if (type == boolean.class) { return value.booleanValue(); } @@ -134,7 +133,7 @@ protected void add(ValueFactory factory) { } @Override - public Object convert(@NonNull Type type, @NonNull Value value, @NonNull ConversionHint hint) { + public Object convert(Type type, Value value, ConversionHint hint) { if (type == byte.class) { return value.byteValue(); } @@ -149,7 +148,7 @@ protected void add(ValueFactory factory) { } @Override - public Object convert(@NonNull Type type, @NonNull Value value, @NonNull ConversionHint hint) { + public Object convert(Type type, Value value, ConversionHint hint) { return new BigDecimal(value.value()); } }, @@ -161,7 +160,7 @@ protected void add(ValueFactory factory) { } @Override - public Object convert(@NonNull Type type, @NonNull Value value, @NonNull ConversionHint hint) { + public Object convert(Type type, Value value, ConversionHint hint) { return new BigInteger(value.value()); } }, @@ -173,7 +172,7 @@ protected void add(ValueFactory factory) { } @Override - public Object convert(@NonNull Type type, @NonNull Value value, @NonNull ConversionHint hint) { + public Object convert(Type type, Value value, ConversionHint hint) { var charset = value.value(); return switch (charset.toLowerCase()) { case "utf-8" -> StandardCharsets.UTF_8; @@ -194,7 +193,7 @@ protected void add(ValueFactory factory) { } @Override - public Object convert(@NonNull Type type, @NonNull Value value, @NonNull ConversionHint hint) { + public Object convert(Type type, Value value, ConversionHint hint) { try { // must be millis return new Date(parseLong(value.value())); @@ -213,7 +212,7 @@ protected void add(ValueFactory factory) { } @Override - public Object convert(@NonNull Type type, @NonNull Value value, @NonNull ConversionHint hint) { + public Object convert(Type type, Value value, ConversionHint hint) { try { return java.time.Duration.parse(value.value()); } catch (DateTimeParseException x) { @@ -280,7 +279,7 @@ protected void add(ValueFactory factory) { } @Override - public Object convert(@NonNull Type type, @NonNull Value value, @NonNull ConversionHint hint) { + public Object convert(Type type, Value value, ConversionHint hint) { try { return java.time.Period.from((Duration) Duration.convert(type, value, hint)); } catch (DateTimeException x) { @@ -348,7 +347,7 @@ protected void add(ValueFactory factory) { } @Override - public Object convert(@NonNull Type type, @NonNull Value value, @NonNull ConversionHint hint) { + public Object convert(Type type, Value value, ConversionHint hint) { try { return java.time.Instant.ofEpochMilli(parseLong(value.value())); } catch (NumberFormatException x) { @@ -364,7 +363,7 @@ protected void add(ValueFactory factory) { } @Override - public Object convert(@NonNull Type type, @NonNull Value value, @NonNull ConversionHint hint) { + public Object convert(Type type, Value value, ConversionHint hint) { try { // must be millis var instant = java.time.Instant.ofEpochMilli(parseLong(value.value())); @@ -383,7 +382,7 @@ protected void add(ValueFactory factory) { } @Override - public Object convert(@NonNull Type type, @NonNull Value value, @NonNull ConversionHint hint) { + public Object convert(Type type, Value value, ConversionHint hint) { try { // must be millis var instant = java.time.Instant.ofEpochMilli(parseLong(value.value())); @@ -402,7 +401,7 @@ protected void add(ValueFactory factory) { } @Override - public Object convert(@NonNull Type type, @NonNull Value value, @NonNull ConversionHint hint) { + public Object convert(Type type, Value value, ConversionHint hint) { return io.jooby.StatusCode.valueOf(value.intValue()); } }, @@ -414,7 +413,7 @@ protected void add(ValueFactory factory) { } @Override - public Object convert(@NonNull Type type, @NonNull Value value, @NonNull ConversionHint hint) { + public Object convert(Type type, Value value, ConversionHint hint) { return java.util.TimeZone.getTimeZone(value.value()); } }, @@ -426,7 +425,7 @@ protected void add(ValueFactory factory) { } @Override - public Object convert(@NonNull Type type, @NonNull Value value, @NonNull ConversionHint hint) { + public Object convert(Type type, Value value, ConversionHint hint) { try { var uri = java.net.URI.create(value.value()); if (type == URL.class) { @@ -446,7 +445,7 @@ protected void add(ValueFactory factory) { } @Override - public Object convert(@NonNull Type type, @NonNull Value value, @NonNull ConversionHint hint) { + public Object convert(Type type, Value value, ConversionHint hint) { return java.util.UUID.fromString(value.value()); } }, @@ -458,7 +457,7 @@ protected void add(ValueFactory factory) { } @Override - public Object convert(@NonNull Type type, @NonNull Value value, @NonNull ConversionHint hint) { + public Object convert(Type type, Value value, ConversionHint hint) { var zoneId = value.value(); return java.time.ZoneId.of(java.time.ZoneId.SHORT_IDS.getOrDefault(zoneId, zoneId)); } diff --git a/jooby/src/main/java/io/jooby/value/Value.java b/jooby/src/main/java/io/jooby/value/Value.java index d78d0f8eb6..fabf8dc52c 100644 --- a/jooby/src/main/java/io/jooby/value/Value.java +++ b/jooby/src/main/java/io/jooby/value/Value.java @@ -13,8 +13,8 @@ import java.util.function.BiFunction; import java.util.function.Function; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.Context; import io.jooby.Formdata; import io.jooby.SneakyThrows; @@ -61,7 +61,7 @@ public interface Value extends Iterable { * @param name Field name. * @return Field value. */ - Value get(@NonNull String name); + Value get(String name); /** * Get a value that matches the given name or fallback back to default value. @@ -70,7 +70,7 @@ public interface Value extends Iterable { * @param defaultValue Default Value. * @return Field value. */ - Value getOrDefault(@NonNull String name, @NonNull String defaultValue); + Value getOrDefault(String name, String defaultValue); /** * The number of values this one has. For single values size is 0. @@ -99,7 +99,7 @@ public interface Value extends Iterable { * @param expression Text expression. * @return Resolved text. */ - default String resolve(@NonNull String expression) { + default String resolve(String expression) { return resolve(expression, "${", "}"); } @@ -117,7 +117,7 @@ default String resolve(@NonNull String expression) { * @param ignoreMissing On missing values, keep the expression as it is. * @return Resolved text. */ - default String resolve(@NonNull String expression, boolean ignoreMissing) { + default String resolve(String expression, boolean ignoreMissing) { return resolve(expression, ignoreMissing, "${", "}"); } @@ -136,8 +136,7 @@ default String resolve(@NonNull String expression, boolean ignoreMissing) { * @param endDelim End delimiter. * @return Resolved text. */ - default String resolve( - @NonNull String expression, @NonNull String startDelim, @NonNull String endDelim) { + default String resolve(String expression, String startDelim, String endDelim) { return resolve(expression, false, startDelim, endDelim); } @@ -158,10 +157,7 @@ default String resolve( * @return Resolved text. */ default String resolve( - @NonNull String expression, - boolean ignoreMissing, - @NonNull String startDelim, - @NonNull String endDelim) { + String expression, boolean ignoreMissing, String startDelim, String endDelim) { if (expression.isEmpty()) { return ""; } @@ -398,7 +394,7 @@ default boolean booleanValue(boolean defaultValue) { * @param defaultValue Default value. * @return Convert this value to String (if possible) or fallback to given value when missing. */ - default String value(@NonNull String defaultValue) { + default String value(String defaultValue) { try { return value(); } catch (MissingValueException x) { @@ -422,7 +418,7 @@ default String value(@NonNull String defaultValue) { * @param Target type. * @return Converted value. */ - default T value(@NonNull SneakyThrows.Function fn) { + default T value(SneakyThrows.Function fn) { return fn.apply(value()); } @@ -454,7 +450,7 @@ default T value(@NonNull SneakyThrows.Function fn) { * @param Enum type. * @return Enum. */ - default > T toEnum(@NonNull SneakyThrows.Function fn) { + default > T toEnum(SneakyThrows.Function fn) { return toEnum(fn, String::toUpperCase); } @@ -467,8 +463,7 @@ default > T toEnum(@NonNull SneakyThrows.Function f * @return Enum. */ default > T toEnum( - @NonNull SneakyThrows.Function fn, - @NonNull Function nameProvider) { + SneakyThrows.Function fn, Function nameProvider) { return fn.apply(nameProvider.apply(value())); } @@ -544,7 +539,7 @@ default boolean isObject() { * @param Item type. * @return Value or empty optional. */ - default Optional toOptional(@NonNull Class type) { + default Optional toOptional(Class type) { try { return Optional.ofNullable(toNullable(type)); } catch (MissingValueException x) { @@ -559,7 +554,7 @@ default Optional toOptional(@NonNull Class type) { * @param Item type. * @return List of items. */ - default List toList(@NonNull Class type) { + default List toList(Class type) { return List.of(to(type)); } @@ -570,7 +565,7 @@ default List toList(@NonNull Class type) { * @param Item type. * @return Set of items. */ - default Set toSet(@NonNull Class type) { + default Set toSet(Class type) { return Set.of(to(type)); } @@ -584,7 +579,7 @@ default Set toSet(@NonNull Class type) { * @param Element type. * @return Instance of the type. */ - T to(@NonNull Class type); + T to(Class type); /** * Convert this value to the given type. Support values are single-value, array-value and @@ -594,7 +589,7 @@ default Set toSet(@NonNull Class type) { * @param Element type. * @return Instance of the type or null. */ - @Nullable T toNullable(@NonNull Class type); + @Nullable T toNullable(Class type); /** * Value as multi-value map. @@ -626,7 +621,7 @@ default Map toMap() { * @param name Name of missing value. * @return Missing value. */ - static Value missing(@NonNull ValueFactory valueFactory, @NonNull String name) { + static Value missing(ValueFactory valueFactory, String name) { return new MissingValue(valueFactory, name); } @@ -638,8 +633,7 @@ static Value missing(@NonNull ValueFactory valueFactory, @NonNull String name) { * @param value Value. * @return Single value. */ - static Value value( - @NonNull ValueFactory valueFactory, @NonNull String name, @NonNull String value) { + static Value value(ValueFactory valueFactory, String name, String value) { return new SingleValue(valueFactory, name, value); } @@ -651,8 +645,7 @@ static Value value( * @param values Field values. * @return Array value. */ - static Value array( - @NonNull ValueFactory valueFactory, @NonNull String name, @NonNull List values) { + static Value array(ValueFactory valueFactory, String name, List values) { return new ArrayValue(valueFactory, name).add(values); } @@ -667,8 +660,7 @@ static Value array( * @param values Field values. * @return A value. */ - static Value create( - @NonNull ValueFactory valueFactory, @NonNull String name, @Nullable List values) { + static Value create(ValueFactory valueFactory, String name, @Nullable List values) { if (values == null || values.isEmpty()) { return missing(valueFactory, name); } @@ -689,8 +681,7 @@ static Value create( * @param value Field values. * @return A value. */ - static Value create( - @NonNull ValueFactory valueFactory, @NonNull String name, @Nullable String value) { + static Value create(ValueFactory valueFactory, String name, @Nullable String value) { if (value == null) { return missing(valueFactory, name); } @@ -704,8 +695,7 @@ static Value create( * @param values Map values. * @return A hash/object value. */ - static Value hash( - @NonNull ValueFactory valueFactory, @NonNull Map> values) { + static Value hash(ValueFactory valueFactory, Map> values) { var node = new HashValue(valueFactory, null); node.put(values); return node; @@ -717,7 +707,7 @@ static Value hash( * @param valueFactory Current context. * @return A hash/object value. */ - static Formdata formdata(@NonNull ValueFactory valueFactory) { + static Formdata formdata(ValueFactory valueFactory) { return new MultipartNode(valueFactory); } @@ -728,8 +718,7 @@ static Formdata formdata(@NonNull ValueFactory valueFactory) { * @param values Map values. * @return A hash/object value. */ - static Value headers( - @NonNull ValueFactory valueFactory, @NonNull Map> values) { + static Value headers(ValueFactory valueFactory, Map> values) { var node = new HeadersValue(valueFactory); node.put(values); return node; diff --git a/jooby/src/main/java/io/jooby/value/ValueFactory.java b/jooby/src/main/java/io/jooby/value/ValueFactory.java index bc39ec329e..635003e3da 100644 --- a/jooby/src/main/java/io/jooby/value/ValueFactory.java +++ b/jooby/src/main/java/io/jooby/value/ValueFactory.java @@ -11,8 +11,8 @@ import java.lang.reflect.Type; import java.util.*; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.SneakyThrows; import io.jooby.exception.ProvisioningException; import io.jooby.exception.TypeMismatchException; @@ -48,7 +48,7 @@ public class ValueFactory { * * @param lookup Lookup to use. */ - public ValueFactory(@NonNull MethodHandles.Lookup lookup) { + public ValueFactory(MethodHandles.Lookup lookup) { this.lookup = lookup; this.fallback = new ReflectiveBeanConverter(this, lookup); StandardConverter.register(this); @@ -71,7 +71,7 @@ public ValueFactory() { * @param lookup Look up to use. * @return This instance. */ - public @NonNull ValueFactory lookup(@NonNull MethodHandles.Lookup lookup) { + public ValueFactory lookup(MethodHandles.Lookup lookup) { this.lookup = lookup; this.fallback = new ReflectiveBeanConverter(this, lookup); return this; @@ -83,7 +83,7 @@ public ValueFactory() { * @param defaultHint Default conversion hint. * @return This instance. */ - public @NonNull ValueFactory hint(@NonNull ConversionHint defaultHint) { + public ValueFactory hint(ConversionHint defaultHint) { this.defaultHint = defaultHint; return this; } @@ -105,7 +105,7 @@ public ValueFactory() { * @param converter Converter. * @return This instance. */ - public @NonNull ValueFactory put(@NonNull Type type, @NonNull Converter converter) { + public ValueFactory put(Type type, Converter converter) { converterMap.put(type, converter); return this; } @@ -132,8 +132,7 @@ public ValueFactory() { * @throws ProvisioningException when convert target type constructor requires a non-null value * and value is missing or null. */ - public T convert(@NonNull Type type, @NonNull Value value) - throws TypeMismatchException, ProvisioningException { + public T convert(Type type, Value value) throws TypeMismatchException, ProvisioningException { return convert(type, value, defaultHint); } @@ -159,7 +158,7 @@ public T convert(@NonNull Type type, @NonNull Value value) * @throws ProvisioningException when convert target type constructor requires a non-null value * and value is missing or null. */ - public T convert(@NonNull Type type, @NonNull Value value, @NonNull ConversionHint hint) + public T convert(Type type, Value value, ConversionHint hint) throws TypeMismatchException, ProvisioningException { T result = convertInternal(type, value, hint); if (result == null && hint == ConversionHint.Strict) { @@ -169,8 +168,7 @@ public T convert(@NonNull Type type, @NonNull Value value, @NonNull Conversi } @SuppressWarnings("unchecked") - private T convertInternal( - @NonNull Type type, @NonNull Value value, @NonNull ConversionHint hint) { + private T convertInternal(Type type, Value value, ConversionHint hint) { var converter = converterMap.get(type); if (converter != null) { // Specific converter at type level. diff --git a/jooby/src/main/java/module-info.java b/jooby/src/main/java/module-info.java index 8fbbbf03ce..077e1e792b 100644 --- a/jooby/src/main/java/module-info.java +++ b/jooby/src/main/java/module-info.java @@ -26,7 +26,7 @@ */ requires jakarta.inject; requires org.slf4j; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires typesafe.config; /* diff --git a/jooby/src/test/java/io/jooby/Issue2525.java b/jooby/src/test/java/io/jooby/Issue2525.java index 0597851976..f23e09f101 100644 --- a/jooby/src/test/java/io/jooby/Issue2525.java +++ b/jooby/src/test/java/io/jooby/Issue2525.java @@ -14,7 +14,6 @@ import org.junit.jupiter.api.Test; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.internal.UrlParser; import io.jooby.value.ConversionHint; import io.jooby.value.Converter; @@ -26,7 +25,7 @@ public class Issue2525 { public class VC2525 implements Converter { @Override - public Object convert(@NonNull Type type, @NonNull Value value, @NonNull ConversionHint hint) { + public Object convert(Type type, Value value, ConversionHint hint) { return new MyID2525(value.value()); } } diff --git a/jooby/src/test/java/io/jooby/Issue3653.java b/jooby/src/test/java/io/jooby/Issue3653.java index f7d6544ad2..94a15818d8 100644 --- a/jooby/src/test/java/io/jooby/Issue3653.java +++ b/jooby/src/test/java/io/jooby/Issue3653.java @@ -10,29 +10,28 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.output.OutputFactory; public class Issue3653 { private static class TestServer extends Server.Base { - @NonNull @Override + @Override public OutputFactory getOutputFactory() { return null; } - @NonNull @Override + @Override public String getName() { return "Test"; } - @NonNull @Override - public Server start(@NonNull Jooby... application) { + @Override + public Server start(Jooby... application) { return this; } - @NonNull @Override + @Override public Server stop() { return this; } diff --git a/migrate-jspecify.sh b/migrate-jspecify.sh new file mode 100755 index 0000000000..5c3e898095 --- /dev/null +++ b/migrate-jspecify.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +echo "🚀 Starting migration from SpotBugs to JSpecify..." + +# 1. Remove @NonNull imports entirely (swallows the newline) +echo "-> Removing @NonNull imports..." +find . -type f -name "*.java" -exec perl -pi -e 's/^import edu\.umd\.cs\.findbugs\.annotations\.NonNull;\r?\n//g' {} + + +# 2. Remove @NonNull usages entirely (Handles standalone lines AND inline) +echo "-> Removing @NonNull annotations..." +# Pass A: Removes it if it's on its own line (eats leading indentation and the newline) +find . -type f -name "*.java" -exec perl -pi -e 's/^\s*\@NonNull\s*\r?\n//g' {} + +# Pass B: Removes it if it's inline (eats the annotation and the trailing space) +find . -type f -name "*.java" -exec perl -pi -e 's/\@NonNull\s+//g' {} + + +# 3. Replace @Nullable imports in all Java files +echo "-> Replacing @Nullable imports..." +find . -type f -name "*.java" -exec perl -pi -e 's/import edu\.umd\.cs\.findbugs\.annotations\.Nullable;/import org.jspecify.annotations.Nullable;/g' {} + + +# 4. Replace module-info.java requires directives +# Note: JSpecify's JPMS module name is exactly 'org.jspecify' +echo "-> Updating module-info.java files..." +find . -type f -name "module-info.java" -exec perl -pi -e 's/requires static com\.github\.spotbugs\.annotations;/requires static org.jspecify;/g' {} + + +# 5. Update package-info.java files +echo "-> Updating package-info.java files..." +find . -type f -name "*.java" -exec perl -pi -e 's/\@edu\.umd\.cs\.findbugs\.annotations\.ReturnValuesAreNonnullByDefault/\@org.jspecify.annotations.NullMarked/g' {} + + +echo "✅ Migration complete! Run 'git diff' to verify the changes." diff --git a/modules/jooby-apt/src/main/java/io/jooby/internal/apt/JsonRpcRouter.java b/modules/jooby-apt/src/main/java/io/jooby/internal/apt/JsonRpcRouter.java index 20c5a54abb..84370c358f 100644 --- a/modules/jooby-apt/src/main/java/io/jooby/internal/apt/JsonRpcRouter.java +++ b/modules/jooby-apt/src/main/java/io/jooby/internal/apt/JsonRpcRouter.java @@ -128,7 +128,7 @@ public String toSourceCode(boolean kt) throws IOException { statement( indent(4), "override fun execute(ctx: io.jooby.Context, req:" - + " io.jooby.jsonrpc.JsonRpcRequest): Any? {")); + + " io.jooby.jsonrpc.JsonRpcRequest): Any {")); buffer.append(statement(indent(6), "val c = factory.apply(ctx)")); buffer.append(statement(indent(6), "val method = req.method")); buffer.append( diff --git a/modules/jooby-apt/src/main/java/io/jooby/internal/apt/TypeDefinition.java b/modules/jooby-apt/src/main/java/io/jooby/internal/apt/TypeDefinition.java index 089adc4bc2..436d8b9082 100644 --- a/modules/jooby-apt/src/main/java/io/jooby/internal/apt/TypeDefinition.java +++ b/modules/jooby-apt/src/main/java/io/jooby/internal/apt/TypeDefinition.java @@ -12,6 +12,8 @@ import java.util.stream.Stream; import javax.lang.model.element.ElementKind; +import javax.lang.model.element.TypeElement; +import javax.lang.model.type.ArrayType; import javax.lang.model.type.DeclaredType; import javax.lang.model.type.TypeKind; import javax.lang.model.type.TypeMirror; @@ -30,7 +32,7 @@ public TypeDefinition(Types types, TypeMirror type) { public TypeDefinition(Types types, TypeMirror type, boolean projection) { this.typeUtils = types; - this.type = type; + this.type = stripAnnotations(types, type); this.unwrapType = unwrapType(type); this.rawType = typeUtils.erasure(unwrapType); this.projection = projection; @@ -204,4 +206,40 @@ public String toString() { private String typeName(Class type) { return type.isArray() ? type.getComponentType().getName() + "[]" : type.getName(); } + + private TypeMirror stripAnnotations(Types types, TypeMirror typeMirror) { + switch (typeMirror.getKind()) { + case DECLARED: + DeclaredType declaredType = (DeclaredType) typeMirror; + TypeElement element = (TypeElement) declaredType.asElement(); + + // If the type has generics (e.g., List), we must strip them recursively + TypeMirror[] typeArgs = + declaredType.getTypeArguments().stream() + .map(arg -> stripAnnotations(types, arg)) + .toArray(TypeMirror[]::new); + + return types.getDeclaredType(element, typeArgs); + + case ARRAY: + ArrayType arrayType = (ArrayType) typeMirror; + TypeMirror cleanComponent = stripAnnotations(types, arrayType.getComponentType()); + return types.getArrayType(cleanComponent); + + // For primitives (int, boolean, etc.) + case BOOLEAN: + case BYTE: + case SHORT: + case INT: + case LONG: + case CHAR: + case FLOAT: + case DOUBLE: + return types.getPrimitiveType(typeMirror.getKind()); + + default: + // Fallback for TypeVariables, Wildcards, etc. + return typeMirror; + } + } } diff --git a/modules/jooby-apt/src/main/java/io/jooby/internal/apt/WebRoute.java b/modules/jooby-apt/src/main/java/io/jooby/internal/apt/WebRoute.java index fcd3380415..c580323122 100644 --- a/modules/jooby-apt/src/main/java/io/jooby/internal/apt/WebRoute.java +++ b/modules/jooby-apt/src/main/java/io/jooby/internal/apt/WebRoute.java @@ -157,7 +157,9 @@ protected List getJavaMethodSignature(boolean kt) { } protected boolean isNullableKotlinReturn() { - return method.getAnnotationMirrors().stream() + // SpotBugs/FindBugs vs JSpecify: + return Stream.of(method.getAnnotationMirrors(), method.getReturnType().getAnnotationMirrors()) + .flatMap(List::stream) .map(javax.lang.model.element.AnnotationMirror::getAnnotationType) .map(java.util.Objects::toString) .anyMatch(AnnotationSupport.NULLABLE); diff --git a/modules/jooby-apt/src/test/java/source/Controller1786.java b/modules/jooby-apt/src/test/java/source/Controller1786.java index a0183ba0ad..33f844b44d 100644 --- a/modules/jooby-apt/src/test/java/source/Controller1786.java +++ b/modules/jooby-apt/src/test/java/source/Controller1786.java @@ -5,7 +5,8 @@ */ package source; -import edu.umd.cs.findbugs.annotations.NonNull; +import org.jspecify.annotations.NonNull; + import io.jooby.annotation.GET; import io.jooby.annotation.QueryParam; diff --git a/modules/jooby-apt/src/test/java/source/Controller1786b.java b/modules/jooby-apt/src/test/java/source/Controller1786b.java index 4b81a614da..90e7dffea3 100644 --- a/modules/jooby-apt/src/test/java/source/Controller1786b.java +++ b/modules/jooby-apt/src/test/java/source/Controller1786b.java @@ -7,7 +7,8 @@ import java.util.UUID; -import edu.umd.cs.findbugs.annotations.NonNull; +import org.jspecify.annotations.NonNull; + import io.jooby.annotation.GET; import io.jooby.annotation.QueryParam; diff --git a/modules/jooby-apt/src/test/java/source/ParamSourceCheckerContext.java b/modules/jooby-apt/src/test/java/source/ParamSourceCheckerContext.java index 668414af50..8161629fbc 100644 --- a/modules/jooby-apt/src/test/java/source/ParamSourceCheckerContext.java +++ b/modules/jooby-apt/src/test/java/source/ParamSourceCheckerContext.java @@ -7,7 +7,6 @@ import java.util.function.Consumer; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.ParamSource; import io.jooby.test.MockContext; import io.jooby.value.Value; @@ -21,7 +20,7 @@ public ParamSourceCheckerContext(Consumer onLookup) { } @Override - public Value lookup(@NonNull String name, ParamSource... sources) { + public Value lookup(String name, ParamSource... sources) { onLookup.accept(sources); return super.lookup(name, sources); } diff --git a/modules/jooby-apt/src/test/java/source/Provisioning.java b/modules/jooby-apt/src/test/java/source/Provisioning.java index da905d4e76..1b57eceb32 100644 --- a/modules/jooby-apt/src/test/java/source/Provisioning.java +++ b/modules/jooby-apt/src/test/java/source/Provisioning.java @@ -20,7 +20,8 @@ import java.util.Set; import java.util.UUID; -import edu.umd.cs.findbugs.annotations.NonNull; +import org.jspecify.annotations.NonNull; + import io.jooby.Context; import io.jooby.FileUpload; import io.jooby.FlashMap; diff --git a/modules/jooby-apt/src/test/java/source/RouteWithParamLookup.java b/modules/jooby-apt/src/test/java/source/RouteWithParamLookup.java index cffb42884d..d803ef98f8 100644 --- a/modules/jooby-apt/src/test/java/source/RouteWithParamLookup.java +++ b/modules/jooby-apt/src/test/java/source/RouteWithParamLookup.java @@ -12,7 +12,8 @@ import static io.jooby.ParamSource.QUERY; import static io.jooby.ParamSource.SESSION; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.Context; import io.jooby.annotation.GET; import io.jooby.annotation.Param; diff --git a/modules/jooby-apt/src/test/java/tests/i1807/C1807.java b/modules/jooby-apt/src/test/java/tests/i1807/C1807.java index 300d96157b..e591f96987 100644 --- a/modules/jooby-apt/src/test/java/tests/i1807/C1807.java +++ b/modules/jooby-apt/src/test/java/tests/i1807/C1807.java @@ -5,7 +5,8 @@ */ package tests.i1807; -import edu.umd.cs.findbugs.annotations.NonNull; +import org.jspecify.annotations.NonNull; + import io.jooby.annotation.FormParam; import io.jooby.annotation.POST; import io.jooby.annotation.Path; diff --git a/modules/jooby-apt/src/test/java/tests/i1814/C1814.java b/modules/jooby-apt/src/test/java/tests/i1814/C1814.java index 8b2d8fcf4f..aa3b9bd0d4 100644 --- a/modules/jooby-apt/src/test/java/tests/i1814/C1814.java +++ b/modules/jooby-apt/src/test/java/tests/i1814/C1814.java @@ -8,14 +8,13 @@ import java.util.Collections; import java.util.List; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Route; import io.jooby.annotation.GET; import io.jooby.annotation.QueryParam; public class C1814 { @GET("/1814") - public List getUsers(@QueryParam @NonNull String type, Route route) { + public List getUsers(@QueryParam String type, Route route) { return Collections.singletonList(new U1814(type)); } } diff --git a/modules/jooby-apt/src/test/java/tests/i2325/VC2325.java b/modules/jooby-apt/src/test/java/tests/i2325/VC2325.java index 9c3052d925..76f65a9302 100644 --- a/modules/jooby-apt/src/test/java/tests/i2325/VC2325.java +++ b/modules/jooby-apt/src/test/java/tests/i2325/VC2325.java @@ -7,13 +7,12 @@ import java.lang.reflect.Type; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.value.ConversionHint; import io.jooby.value.Converter; import io.jooby.value.Value; public class VC2325 implements Converter { - public Object convert(@NonNull Type type, @NonNull Value value, @NonNull ConversionHint hint) { + public Object convert(Type type, Value value, ConversionHint hint) { return new MyID2325(value.value()); } } diff --git a/modules/jooby-apt/src/test/java/tests/i2405/Converter2405.java b/modules/jooby-apt/src/test/java/tests/i2405/Converter2405.java index 33ebf63f95..e351193fe4 100644 --- a/modules/jooby-apt/src/test/java/tests/i2405/Converter2405.java +++ b/modules/jooby-apt/src/test/java/tests/i2405/Converter2405.java @@ -7,7 +7,6 @@ import java.lang.reflect.Type; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.value.ConversionHint; import io.jooby.value.Converter; import io.jooby.value.Value; @@ -15,7 +14,7 @@ public class Converter2405 implements Converter { @Override - public Object convert(@NonNull Type type, @NonNull Value value, @NonNull ConversionHint hint) { + public Object convert(Type type, Value value, ConversionHint hint) { return new Bean2405(value.value()); } } diff --git a/modules/jooby-apt/src/test/java/tests/i2408/C2408.java b/modules/jooby-apt/src/test/java/tests/i2408/C2408.java index 98bdd27b8f..6adfe80aa2 100644 --- a/modules/jooby-apt/src/test/java/tests/i2408/C2408.java +++ b/modules/jooby-apt/src/test/java/tests/i2408/C2408.java @@ -5,14 +5,15 @@ */ package tests.i2408; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.Nullable; + import io.jooby.annotation.GET; import io.jooby.annotation.QueryParam; public class C2408 { @GET("/2408/nonnull") - public String nonnull(@NonNull @QueryParam String name) { + public String nonnull(@QueryParam @NonNull String name) { return name; } diff --git a/modules/jooby-apt/src/test/java/tests/i3455/C3455.java b/modules/jooby-apt/src/test/java/tests/i3455/C3455.java index 81fdd37d21..765d85666b 100644 --- a/modules/jooby-apt/src/test/java/tests/i3455/C3455.java +++ b/modules/jooby-apt/src/test/java/tests/i3455/C3455.java @@ -5,7 +5,6 @@ */ package tests.i3455; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.annotation.GET; import io.jooby.annotation.Path; import io.jooby.annotation.QueryParam; @@ -14,7 +13,7 @@ public class C3455 { @GET("/required\"-string-param") @Schema(description = "test\"ttttt") - public String requiredStringParam(@QueryParam(name = "value\"") @NonNull String value) { + public String requiredStringParam(@QueryParam(name = "value\"") String value) { return value; } } diff --git a/modules/jooby-apt/src/test/java/tests/i3460/C3460.java b/modules/jooby-apt/src/test/java/tests/i3460/C3460.java index 8dce29e392..ead378a05a 100644 --- a/modules/jooby-apt/src/test/java/tests/i3460/C3460.java +++ b/modules/jooby-apt/src/test/java/tests/i3460/C3460.java @@ -5,7 +5,6 @@ */ package tests.i3460; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.annotation.GET; import io.jooby.annotation.Path; import io.jooby.annotation.QueryParam; @@ -13,7 +12,7 @@ @Path("/path") public class C3460 { @GET("/required-string-param") - public String requiredStringParam(@QueryParam(name = "value") @NonNull String value) { + public String requiredStringParam(@QueryParam(name = "value") String value) { return value; } } diff --git a/modules/jooby-apt/src/test/java/tests/i3507/C3507.java b/modules/jooby-apt/src/test/java/tests/i3507/C3507.java index b8082c4cc7..18c06cb2e8 100644 --- a/modules/jooby-apt/src/test/java/tests/i3507/C3507.java +++ b/modules/jooby-apt/src/test/java/tests/i3507/C3507.java @@ -5,13 +5,15 @@ */ package tests.i3507; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.Nullable; + import io.jooby.annotation.GET; import io.jooby.annotation.QueryParam; public class C3507 { @GET("/3507") - @Nullable public String get(@QueryParam String query) { + @Nullable public String get(@QueryParam @NonNull String query) { return null; } } diff --git a/modules/jooby-apt/src/test/java/tests/i3864/NullSupport.java b/modules/jooby-apt/src/test/java/tests/i3864/NullSupport.java index 0a14b6ff98..147b09c620 100644 --- a/modules/jooby-apt/src/test/java/tests/i3864/NullSupport.java +++ b/modules/jooby-apt/src/test/java/tests/i3864/NullSupport.java @@ -5,7 +5,8 @@ */ package tests.i3864; -import edu.umd.cs.findbugs.annotations.NonNull; +import org.jspecify.annotations.NonNull; + import io.jooby.annotation.jsonrpc.JsonRpc; @JsonRpc diff --git a/modules/jooby-avaje-inject/pom.xml b/modules/jooby-avaje-inject/pom.xml index f6bab21c75..243b10442f 100644 --- a/modules/jooby-avaje-inject/pom.xml +++ b/modules/jooby-avaje-inject/pom.xml @@ -16,11 +16,6 @@ - - com.github.spotbugs - spotbugs-annotations - - io.jooby jooby diff --git a/modules/jooby-avaje-inject/src/main/java/io/jooby/avaje/inject/AvajeInjectModule.java b/modules/jooby-avaje-inject/src/main/java/io/jooby/avaje/inject/AvajeInjectModule.java index 36e768f029..c5bdbc0703 100644 --- a/modules/jooby-avaje-inject/src/main/java/io/jooby/avaje/inject/AvajeInjectModule.java +++ b/modules/jooby-avaje-inject/src/main/java/io/jooby/avaje/inject/AvajeInjectModule.java @@ -8,7 +8,6 @@ import java.util.List; import java.util.stream.Collectors; -import edu.umd.cs.findbugs.annotations.NonNull; import io.avaje.inject.BeanScope; import io.avaje.inject.BeanScopeBuilder; import io.jooby.Environment; @@ -49,7 +48,7 @@ public static AvajeInjectModule of(BeanScopeBuilder beanScope) { return new AvajeInjectModule(beanScope); } - public AvajeInjectModule(@NonNull BeanScopeBuilder scopeBuilder) { + public AvajeInjectModule(BeanScopeBuilder scopeBuilder) { this.scopeBuilder = scopeBuilder; } diff --git a/modules/jooby-avaje-inject/src/main/java/io/jooby/avaje/inject/AvajeInjectRegistry.java b/modules/jooby-avaje-inject/src/main/java/io/jooby/avaje/inject/AvajeInjectRegistry.java index cc6ab7efa7..d9068b9fd2 100644 --- a/modules/jooby-avaje-inject/src/main/java/io/jooby/avaje/inject/AvajeInjectRegistry.java +++ b/modules/jooby-avaje-inject/src/main/java/io/jooby/avaje/inject/AvajeInjectRegistry.java @@ -8,8 +8,8 @@ import java.lang.reflect.Type; import java.util.NoSuchElementException; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.avaje.inject.BeanScope; import io.jooby.Registry; import io.jooby.Reified; @@ -25,34 +25,31 @@ public AvajeInjectRegistry(BeanScope beanScope) { } @Override - public @NonNull T require(@NonNull Reified type, @NonNull String name) - throws RegistryException { + public T require(Reified type, String name) throws RegistryException { return getBean(type.getType(), name); } - @NonNull @Override - public T require(@NonNull Reified type) throws RegistryException { + @Override + public T require(Reified type) throws RegistryException { return getBean(type.getType(), null); } @Override - public @NonNull T require(@NonNull Class type) throws RegistryException { + public T require(Class type) throws RegistryException { return getBean(type, null); } @Override - public @NonNull T require(@NonNull Class type, @NonNull String name) - throws RegistryException { + public T require(Class type, String name) throws RegistryException { return getBean(type, name); } @Override - public @NonNull T require(@NonNull ServiceKey key) throws RegistryException { + public T require(ServiceKey key) throws RegistryException { return getBean(key.getType(), key.getName()); } - private @NonNull T getBean(@NonNull Type type, @Nullable String name) - throws RegistryException { + private T getBean(Type type, @Nullable String name) throws RegistryException { try { return name == null ? beanScope.get(type) : beanScope.get(type, name); } catch (NoSuchElementException e) { diff --git a/modules/jooby-avaje-inject/src/main/java/io/jooby/avaje/inject/package-info.java b/modules/jooby-avaje-inject/src/main/java/io/jooby/avaje/inject/package-info.java index 941ee4a01c..fa12316251 100644 --- a/modules/jooby-avaje-inject/src/main/java/io/jooby/avaje/inject/package-info.java +++ b/modules/jooby-avaje-inject/src/main/java/io/jooby/avaje/inject/package-info.java @@ -1,2 +1,2 @@ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.avaje.inject; diff --git a/modules/jooby-avaje-inject/src/main/java/module-info.java b/modules/jooby-avaje-inject/src/main/java/module-info.java index 1adf62f9ba..ef51a71def 100644 --- a/modules/jooby-avaje-inject/src/main/java/module-info.java +++ b/modules/jooby-avaje-inject/src/main/java/module-info.java @@ -8,7 +8,7 @@ exports io.jooby.avaje.inject; requires transitive io.jooby; - requires com.github.spotbugs.annotations; + requires org.jspecify; requires typesafe.config; requires transitive io.avaje.inject; } diff --git a/modules/jooby-avaje-jsonb/src/main/java/io/jooby/avaje/jsonb/AvajeJsonbModule.java b/modules/jooby-avaje-jsonb/src/main/java/io/jooby/avaje/jsonb/AvajeJsonbModule.java index b3a5934351..b28a2b1fbf 100644 --- a/modules/jooby-avaje-jsonb/src/main/java/io/jooby/avaje/jsonb/AvajeJsonbModule.java +++ b/modules/jooby-avaje-jsonb/src/main/java/io/jooby/avaje/jsonb/AvajeJsonbModule.java @@ -9,7 +9,6 @@ import java.lang.reflect.Type; import java.util.*; -import edu.umd.cs.findbugs.annotations.NonNull; import io.avaje.json.JsonWriter; import io.avaje.jsonb.JsonView; import io.avaje.jsonb.Jsonb; @@ -70,7 +69,7 @@ public class AvajeJsonbModule implements Extension, MessageDecoder, MessageEncod * * @param jsonb JsonB to use. */ - public AvajeJsonbModule(@NonNull Jsonb jsonb) { + public AvajeJsonbModule(Jsonb jsonb) { this.jsonb = jsonb; } @@ -80,7 +79,7 @@ public AvajeJsonbModule() { } @Override - public void install(@NonNull Jooby application) throws Exception { + public void install(Jooby application) throws Exception { application.decoder(MediaType.json, this); application.encoder(MediaType.json, this); @@ -89,7 +88,7 @@ public void install(@NonNull Jooby application) throws Exception { } @Override - public Object decode(@NonNull Context ctx, @NonNull Type type) throws Exception { + public Object decode(Context ctx, Type type) throws Exception { Body body = ctx.body(); if (body.isInMemory()) { return jsonb.type(type).fromJson(body.bytes()); @@ -101,7 +100,7 @@ public Object decode(@NonNull Context ctx, @NonNull Type type) throws Exception } @Override - public Output encode(@NonNull Context ctx, @NonNull Object value) { + public Output encode(Context ctx, Object value) { ctx.setDefaultResponseType(MediaType.json); var factory = ctx.getOutputFactory(); var buffer = factory.allocate(); diff --git a/modules/jooby-avaje-jsonb/src/main/java/io/jooby/avaje/jsonb/package-info.java b/modules/jooby-avaje-jsonb/src/main/java/io/jooby/avaje/jsonb/package-info.java index 9c19be6e96..94a7567a8f 100644 --- a/modules/jooby-avaje-jsonb/src/main/java/io/jooby/avaje/jsonb/package-info.java +++ b/modules/jooby-avaje-jsonb/src/main/java/io/jooby/avaje/jsonb/package-info.java @@ -1,2 +1,2 @@ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.avaje.jsonb; diff --git a/modules/jooby-avaje-jsonb/src/main/java/module-info.java b/modules/jooby-avaje-jsonb/src/main/java/module-info.java index 9cf233688c..490d48e981 100644 --- a/modules/jooby-avaje-jsonb/src/main/java/module-info.java +++ b/modules/jooby-avaje-jsonb/src/main/java/module-info.java @@ -8,6 +8,6 @@ exports io.jooby.avaje.jsonb; requires io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires io.avaje.jsonb; } diff --git a/modules/jooby-avaje-validator/src/main/java/io/jooby/avaje/validator/AvajeValidatorModule.java b/modules/jooby-avaje-validator/src/main/java/io/jooby/avaje/validator/AvajeValidatorModule.java index 7ecf45380f..2fe33f24dc 100644 --- a/modules/jooby-avaje-validator/src/main/java/io/jooby/avaje/validator/AvajeValidatorModule.java +++ b/modules/jooby-avaje-validator/src/main/java/io/jooby/avaje/validator/AvajeValidatorModule.java @@ -15,7 +15,6 @@ import com.typesafe.config.Config; import com.typesafe.config.ConfigValueType; -import edu.umd.cs.findbugs.annotations.NonNull; import io.avaje.validation.ConstraintViolationException; import io.avaje.validation.Validator; import io.jooby.Context; @@ -68,7 +67,7 @@ public class AvajeValidatorModule implements Extension { * @param configurer Configurer callback. * @return This module. */ - public AvajeValidatorModule doWith(@NonNull final Consumer configurer) { + public AvajeValidatorModule doWith(final Consumer configurer) { this.configurer = configurer; return this; } @@ -80,7 +79,7 @@ public AvajeValidatorModule doWith(@NonNull final Consumer co * @param statusCode new status code * @return This module. */ - public AvajeValidatorModule statusCode(@NonNull StatusCode statusCode) { + public AvajeValidatorModule statusCode(StatusCode statusCode) { this.statusCode = statusCode; return this; } @@ -92,7 +91,7 @@ public AvajeValidatorModule statusCode(@NonNull StatusCode statusCode) { * @param title new title * @return This module. */ - public AvajeValidatorModule validationTitle(@NonNull String title) { + public AvajeValidatorModule validationTitle(String title) { this.title = title; return this; } @@ -121,7 +120,7 @@ public AvajeValidatorModule disableViolationHandler() { } @Override - public void install(@NonNull Jooby app) { + public void install(Jooby app) { var conf = app.getConfig(); final var builder = Validator.builder(); diff --git a/modules/jooby-avaje-validator/src/main/java/io/jooby/avaje/validator/ConstraintViolationHandler.java b/modules/jooby-avaje-validator/src/main/java/io/jooby/avaje/validator/ConstraintViolationHandler.java index f9779f0d36..193b694b7f 100644 --- a/modules/jooby-avaje-validator/src/main/java/io/jooby/avaje/validator/ConstraintViolationHandler.java +++ b/modules/jooby-avaje-validator/src/main/java/io/jooby/avaje/validator/ConstraintViolationHandler.java @@ -16,7 +16,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import edu.umd.cs.findbugs.annotations.NonNull; import io.avaje.validation.ConstraintViolation; import io.avaje.validation.ConstraintViolationException; import io.jooby.Context; @@ -65,10 +64,7 @@ public class ConstraintViolationHandler implements ErrorHandler { private final boolean problemDetailsEnabled; public ConstraintViolationHandler( - @NonNull StatusCode statusCode, - @NonNull String title, - boolean logException, - boolean problemDetailsEnabled) { + StatusCode statusCode, String title, boolean logException, boolean problemDetailsEnabled) { this.statusCode = statusCode; this.title = title; this.logException = logException; @@ -76,7 +72,7 @@ public ConstraintViolationHandler( } @Override - public void apply(@NonNull Context ctx, @NonNull Throwable cause, @NonNull StatusCode code) { + public void apply(Context ctx, Throwable cause, StatusCode code) { if (cause instanceof ConstraintViolationException ex) { if (logException) { log.error(ErrorHandler.errorMessage(ctx, code), cause); diff --git a/modules/jooby-avaje-validator/src/main/java/module-info.java b/modules/jooby-avaje-validator/src/main/java/module-info.java index 5bd20a098e..cb4b11b505 100644 --- a/modules/jooby-avaje-validator/src/main/java/module-info.java +++ b/modules/jooby-avaje-validator/src/main/java/module-info.java @@ -8,7 +8,7 @@ exports io.jooby.avaje.validator; requires transitive io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires typesafe.config; requires transitive io.avaje.validation; requires org.slf4j; diff --git a/modules/jooby-awssdk-v1/src/main/java/io/jooby/awssdkv1/AwsModule.java b/modules/jooby-awssdk-v1/src/main/java/io/jooby/awssdkv1/AwsModule.java index 4b20804567..e8c1b7fb8f 100644 --- a/modules/jooby-awssdk-v1/src/main/java/io/jooby/awssdkv1/AwsModule.java +++ b/modules/jooby-awssdk-v1/src/main/java/io/jooby/awssdkv1/AwsModule.java @@ -19,7 +19,6 @@ import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.services.s3.transfer.TransferManager; import com.typesafe.config.Config; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Extension; import io.jooby.Jooby; import io.jooby.ServiceRegistry; @@ -62,7 +61,7 @@ public class AwsModule implements Extension { private final List> factoryList = new ArrayList<>(); private final AWSCredentialsProvider credentialsProvider; - public AwsModule(@NonNull AWSCredentialsProvider credentialsProvider) { + public AwsModule(AWSCredentialsProvider credentialsProvider) { this.credentialsProvider = credentialsProvider; } @@ -81,13 +80,13 @@ public AwsModule() { * @param provider Service provider/factory. * @return AWS service. */ - public @NonNull AwsModule setup(@NonNull Function provider) { + public AwsModule setup(Function provider) { factoryList.add(provider); return this; } @Override - public void install(@NonNull Jooby application) throws Exception { + public void install(Jooby application) throws Exception { var credentialsProvider = Optional.ofNullable(this.credentialsProvider) .orElseGet(() -> newCredentialsProvider(application.getConfig())); @@ -129,7 +128,7 @@ public void install(@NonNull Jooby application) throws Exception { * @param config Application properties. * @return Credentials provider. */ - public static @NonNull AWSCredentialsProvider newCredentialsProvider(@NonNull Config config) { + public static AWSCredentialsProvider newCredentialsProvider(Config config) { return new AWSCredentialsProviderChain( new EnvironmentVariableCredentialsProvider(), new SystemPropertiesCredentialsProvider(), diff --git a/modules/jooby-awssdk-v1/src/main/java/io/jooby/awssdkv1/package-info.java b/modules/jooby-awssdk-v1/src/main/java/io/jooby/awssdkv1/package-info.java index 27520e87f4..8b771d4965 100644 --- a/modules/jooby-awssdk-v1/src/main/java/io/jooby/awssdkv1/package-info.java +++ b/modules/jooby-awssdk-v1/src/main/java/io/jooby/awssdkv1/package-info.java @@ -1,2 +1,2 @@ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.awssdkv1; diff --git a/modules/jooby-awssdk-v2/src/main/java/io/jooby/awssdkv2/AwsModule.java b/modules/jooby-awssdk-v2/src/main/java/io/jooby/awssdkv2/AwsModule.java index 20371e0f25..a1b979ebe7 100644 --- a/modules/jooby-awssdk-v2/src/main/java/io/jooby/awssdkv2/AwsModule.java +++ b/modules/jooby-awssdk-v2/src/main/java/io/jooby/awssdkv2/AwsModule.java @@ -10,7 +10,6 @@ import java.util.stream.Stream; import com.typesafe.config.Config; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Extension; import io.jooby.Jooby; import io.jooby.ServiceRegistry; @@ -52,7 +51,7 @@ public class AwsModule implements Extension { private final AwsCredentialsProvider credentialsProvider; private final List> factoryList = new ArrayList<>(); - public AwsModule(@NonNull AwsCredentialsProvider credentialsProvider) { + public AwsModule(AwsCredentialsProvider credentialsProvider) { this.credentialsProvider = credentialsProvider; } @@ -71,13 +70,13 @@ public AwsModule() { * @param provider Service provider/factory. * @return AWS service. */ - public @NonNull AwsModule setup(@NonNull Function provider) { + public AwsModule setup(Function provider) { factoryList.add(provider); return this; } @Override - public void install(@NonNull Jooby application) throws Exception { + public void install(Jooby application) throws Exception { var config = application.getConfig(); var credentialsProvider = Optional.ofNullable(this.credentialsProvider) @@ -118,7 +117,7 @@ public void install(@NonNull Jooby application) throws Exception { * @param config Application properties. * @return Credentials provider. */ - public static @NonNull AwsCredentialsProvider newCredentialsProvider(@NonNull Config config) { + public static AwsCredentialsProvider newCredentialsProvider(Config config) { return AwsCredentialsProviderChain.of( DefaultCredentialsProvider.create(), new ConfigCredentialsProvider(config)); } diff --git a/modules/jooby-awssdk-v2/src/main/java/io/jooby/awssdkv2/ConfigCredentialsProvider.java b/modules/jooby-awssdk-v2/src/main/java/io/jooby/awssdkv2/ConfigCredentialsProvider.java index 60c17fecb9..4b78eb3487 100644 --- a/modules/jooby-awssdk-v2/src/main/java/io/jooby/awssdkv2/ConfigCredentialsProvider.java +++ b/modules/jooby-awssdk-v2/src/main/java/io/jooby/awssdkv2/ConfigCredentialsProvider.java @@ -6,7 +6,6 @@ package io.jooby.awssdkv2; import com.typesafe.config.Config; -import edu.umd.cs.findbugs.annotations.NonNull; import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; import software.amazon.awssdk.auth.credentials.AwsCredentials; import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider; @@ -18,7 +17,7 @@ public class ConfigCredentialsProvider implements AwsCredentialsProvider { private final Config config; - public ConfigCredentialsProvider(@NonNull Config config) { + public ConfigCredentialsProvider(Config config) { this.config = config; } diff --git a/modules/jooby-awssdk-v2/src/main/java/io/jooby/awssdkv2/package-info.java b/modules/jooby-awssdk-v2/src/main/java/io/jooby/awssdkv2/package-info.java index 53547f42ee..4f31125114 100644 --- a/modules/jooby-awssdk-v2/src/main/java/io/jooby/awssdkv2/package-info.java +++ b/modules/jooby-awssdk-v2/src/main/java/io/jooby/awssdkv2/package-info.java @@ -29,7 +29,5 @@ * @author edgar * @since 3.3.1 */ -@ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.awssdkv2; - -import edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault; diff --git a/modules/jooby-awssdk-v2/src/main/java/module-info.java b/modules/jooby-awssdk-v2/src/main/java/module-info.java index 3cdd141109..d66ec5a19a 100644 --- a/modules/jooby-awssdk-v2/src/main/java/module-info.java +++ b/modules/jooby-awssdk-v2/src/main/java/module-info.java @@ -3,7 +3,7 @@ requires io.jooby; requires typesafe.config; - requires com.github.spotbugs.annotations; + requires org.jspecify; requires software.amazon.awssdk.core; requires software.amazon.awssdk.auth; requires software.amazon.awssdk.utils; diff --git a/modules/jooby-caffeine/src/main/java/io/jooby/caffeine/CaffeineSessionStore.java b/modules/jooby-caffeine/src/main/java/io/jooby/caffeine/CaffeineSessionStore.java index e13eaf9875..120cb1a3ff 100644 --- a/modules/jooby-caffeine/src/main/java/io/jooby/caffeine/CaffeineSessionStore.java +++ b/modules/jooby-caffeine/src/main/java/io/jooby/caffeine/CaffeineSessionStore.java @@ -8,10 +8,10 @@ import java.time.Duration; import java.util.function.Function; +import org.jspecify.annotations.Nullable; + import com.github.benmanes.caffeine.cache.Cache; import com.github.benmanes.caffeine.cache.Caffeine; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; import io.jooby.SessionStore; import io.jooby.SessionToken; @@ -40,7 +40,7 @@ public class CaffeineSessionStore extends SessionStore.InMemory { * * @param cache Cache. */ - public CaffeineSessionStore(@NonNull SessionToken token, @NonNull Cache cache) { + public CaffeineSessionStore(SessionToken token, Cache cache) { super(token); this.cache = cache; } @@ -50,35 +50,35 @@ public CaffeineSessionStore(@NonNull SessionToken token, @NonNull Cache30 minutes. */ - public CaffeineSessionStore(@NonNull SessionToken token) { + public CaffeineSessionStore(SessionToken token) { this(token, Duration.ofMinutes(DEFAULT_TIMEOUT)); } @Override - protected Data getOrCreate(@NonNull String sessionId, @NonNull Function factory) { + protected Data getOrCreate(String sessionId, Function factory) { return (Data) cache.get(sessionId, factory); } @Override - protected @Nullable Data getOrNull(@NonNull String sessionId) { + protected @Nullable Data getOrNull(String sessionId) { return (Data) cache.getIfPresent(sessionId); } @Override - protected @Nullable Data remove(@NonNull String sessionId) { + protected @Nullable Data remove(String sessionId) { Data data = (Data) cache.getIfPresent(sessionId); cache.invalidate(sessionId); return data; } @Override - protected void put(@NonNull String sessionId, @NonNull Data data) { + protected void put(String sessionId, Data data) { cache.put(sessionId, data); } } diff --git a/modules/jooby-caffeine/src/main/java/io/jooby/caffeine/package-info.java b/modules/jooby-caffeine/src/main/java/io/jooby/caffeine/package-info.java index af4bfc5acb..c8c518c2d6 100644 --- a/modules/jooby-caffeine/src/main/java/io/jooby/caffeine/package-info.java +++ b/modules/jooby-caffeine/src/main/java/io/jooby/caffeine/package-info.java @@ -1,2 +1,2 @@ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.caffeine; diff --git a/modules/jooby-caffeine/src/main/java/module-info.java b/modules/jooby-caffeine/src/main/java/module-info.java index 52a69a3360..32fc139fe9 100644 --- a/modules/jooby-caffeine/src/main/java/module-info.java +++ b/modules/jooby-caffeine/src/main/java/module-info.java @@ -8,6 +8,6 @@ exports io.jooby.caffeine; requires io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires com.github.benmanes.caffeine; } diff --git a/modules/jooby-camel/pom.xml b/modules/jooby-camel/pom.xml index c6733ed7db..6e400a9ba8 100644 --- a/modules/jooby-camel/pom.xml +++ b/modules/jooby-camel/pom.xml @@ -12,11 +12,6 @@ jooby-camel - - com.github.spotbugs - spotbugs-annotations - - io.jooby jooby diff --git a/modules/jooby-camel/src/main/java/io/jooby/camel/CamelModule.java b/modules/jooby-camel/src/main/java/io/jooby/camel/CamelModule.java index 53e560ab03..c47725b54d 100644 --- a/modules/jooby-camel/src/main/java/io/jooby/camel/CamelModule.java +++ b/modules/jooby-camel/src/main/java/io/jooby/camel/CamelModule.java @@ -18,7 +18,6 @@ import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.main.SimpleMain; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Extension; import io.jooby.Jooby; import io.jooby.ServiceRegistry; @@ -69,7 +68,7 @@ public CamelModule() {} * * @param camel Camel context. */ - public CamelModule(@NonNull CamelContext camel) { + public CamelModule(CamelContext camel) { this.camel = camel; } @@ -79,7 +78,7 @@ public CamelModule(@NonNull CamelContext camel) { * @param route Route configuration. * @param routes Optional route configuration. */ - public CamelModule(@NonNull RouteBuilder route, RouteBuilder... routes) { + public CamelModule(RouteBuilder route, RouteBuilder... routes) { this(null, route, routes); } @@ -90,8 +89,7 @@ public CamelModule(@NonNull RouteBuilder route, RouteBuilder... routes) { * @param route Route configuration. * @param routes Optional route configuration. */ - public CamelModule( - @NonNull CamelContext camel, @NonNull RouteBuilder route, RouteBuilder... routes) { + public CamelModule(CamelContext camel, RouteBuilder route, RouteBuilder... routes) { this.camel = camel; this.routes = registry -> concat(route, routes).collect(Collectors.toList()); } @@ -104,9 +102,7 @@ public CamelModule( * @param route Route configuration. * @param routes Optional route configuration. */ - public CamelModule( - @NonNull Class route, - @NonNull Class... routes) { + public CamelModule(Class route, Class... routes) { this(null, route, routes); } @@ -120,8 +116,8 @@ public CamelModule( * @param routes Optional route configuration. */ public CamelModule( - @NonNull CamelContext camel, - @NonNull Class route, + CamelContext camel, + Class route, Class... routes) { this.camel = camel; this.routes = @@ -132,7 +128,7 @@ public CamelModule( } @Override - public void install(@NonNull Jooby application) throws Exception { + public void install(Jooby application) throws Exception { // create a CamelContext if (this.camel == null) { this.camel = newCamelContext(application); diff --git a/modules/jooby-camel/src/main/java/io/jooby/camel/package-info.java b/modules/jooby-camel/src/main/java/io/jooby/camel/package-info.java index 78b45393c1..adda6bd8ac 100644 --- a/modules/jooby-camel/src/main/java/io/jooby/camel/package-info.java +++ b/modules/jooby-camel/src/main/java/io/jooby/camel/package-info.java @@ -1,2 +1,2 @@ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.camel; diff --git a/modules/jooby-cli/pom.xml b/modules/jooby-cli/pom.xml index cdfe0904b7..80698d3428 100644 --- a/modules/jooby-cli/pom.xml +++ b/modules/jooby-cli/pom.xml @@ -19,10 +19,9 @@ - - com.github.spotbugs - spotbugs-annotations + org.jspecify + jspecify provided diff --git a/modules/jooby-cli/src/main/java/io/jooby/cli/Cli.java b/modules/jooby-cli/src/main/java/io/jooby/cli/Cli.java index 7ae4eef15a..1ea30457f0 100644 --- a/modules/jooby-cli/src/main/java/io/jooby/cli/Cli.java +++ b/modules/jooby-cli/src/main/java/io/jooby/cli/Cli.java @@ -22,7 +22,6 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.internal.cli.CommandContextImpl; import io.jooby.internal.cli.JLineCompleter; import picocli.CommandLine; @@ -60,7 +59,7 @@ public class Cli extends Cmd { private @CommandLine.Unmatched List args; @Override - public void run(@NonNull CliContext ctx) { + public void run(CliContext ctx) { List args = this.args.stream() .filter(Objects::nonNull) diff --git a/modules/jooby-cli/src/main/java/io/jooby/cli/CliContext.java b/modules/jooby-cli/src/main/java/io/jooby/cli/CliContext.java index 23247a8db5..6a97c25223 100644 --- a/modules/jooby-cli/src/main/java/io/jooby/cli/CliContext.java +++ b/modules/jooby-cli/src/main/java/io/jooby/cli/CliContext.java @@ -11,8 +11,6 @@ import java.util.Map; import java.util.Set; -import edu.umd.cs.findbugs.annotations.NonNull; - /** * Provides an execution context for application commands as well as utility methods for read and * writing to the console. @@ -35,8 +33,7 @@ public interface CliContext { * @param file Output file. * @throws IOException If something goes wrong. */ - void writeTemplate(@NonNull String template, @NonNull Object model, @NonNull Path file) - throws IOException; + void writeTemplate(String template, Object model, Path file) throws IOException; /** * Copy a classpath resource to a file. @@ -45,7 +42,7 @@ void writeTemplate(@NonNull String template, @NonNull Object model, @NonNull Pat * @param dest Destination file. * @throws IOException If something goes wrong. */ - void copyResource(@NonNull String source, @NonNull Path dest) throws IOException; + void copyResource(String source, Path dest) throws IOException; /** * Copy a classpath resource to a file. @@ -55,8 +52,7 @@ void writeTemplate(@NonNull String template, @NonNull Object model, @NonNull Pat * @param permissions File permissions. * @throws IOException If something goes wrong. */ - void copyResource( - @NonNull String source, @NonNull Path dest, @NonNull Set permissions) + void copyResource(String source, Path dest, Set permissions) throws IOException; /** @@ -77,28 +73,28 @@ void copyResource( * @param prompt User prompt. * @return Input value. */ - @NonNull String readLine(@NonNull String prompt); + String readLine(String prompt); /** * Write a message to console. * * @param message Message. */ - void println(@NonNull String message); + void println(String message); /** * Jooby version to use. * * @return Jooby version to use. */ - @NonNull String getVersion(); + String getVersion(); /** * Working directory (where the projects are created). * * @return Working directory (where the projects are created). */ - @NonNull Path getWorkspace(); + Path getWorkspace(); /** * Set workspace/working directory. @@ -106,5 +102,5 @@ void copyResource( * @param workspace Workspace/working directory. * @throws IOException When directory doesn't exist. */ - void setWorkspace(@NonNull Path workspace) throws IOException; + void setWorkspace(Path workspace) throws IOException; } diff --git a/modules/jooby-cli/src/main/java/io/jooby/cli/Cmd.java b/modules/jooby-cli/src/main/java/io/jooby/cli/Cmd.java index 06b720490e..7c7975b895 100644 --- a/modules/jooby-cli/src/main/java/io/jooby/cli/Cmd.java +++ b/modules/jooby-cli/src/main/java/io/jooby/cli/Cmd.java @@ -5,8 +5,6 @@ */ package io.jooby.cli; -import edu.umd.cs.findbugs.annotations.NonNull; - /** * Base class for application commands. * @@ -30,14 +28,14 @@ public void run() { * @param context Command context. * @throws Exception If something goes wrong. */ - public abstract void run(@NonNull CliContext context) throws Exception; + public abstract void run(CliContext context) throws Exception; /** * Set command context. * * @param context Command context. */ - public void setContext(@NonNull CliContext context) { + public void setContext(CliContext context) { this.context = context; } diff --git a/modules/jooby-cli/src/main/java/io/jooby/cli/CreateCmd.java b/modules/jooby-cli/src/main/java/io/jooby/cli/CreateCmd.java index c69f835602..080d5a6a27 100644 --- a/modules/jooby-cli/src/main/java/io/jooby/cli/CreateCmd.java +++ b/modules/jooby-cli/src/main/java/io/jooby/cli/CreateCmd.java @@ -17,7 +17,6 @@ import java.util.Map; import java.util.stream.Stream; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.internal.cli.Dependency; import picocli.CommandLine; @@ -93,7 +92,7 @@ public class CreateCmd extends Cmd { private boolean openapi; @Override - public void run(@NonNull CliContext ctx) throws Exception { + public void run(CliContext ctx) throws Exception { Path projectDir = ctx.getWorkspace().resolve(name); if (Files.exists(projectDir)) { throw new IOException("Project directory already exists: " + projectDir); diff --git a/modules/jooby-cli/src/main/java/io/jooby/cli/ExitCmd.java b/modules/jooby-cli/src/main/java/io/jooby/cli/ExitCmd.java index 2b903dbd99..113ace28e5 100644 --- a/modules/jooby-cli/src/main/java/io/jooby/cli/ExitCmd.java +++ b/modules/jooby-cli/src/main/java/io/jooby/cli/ExitCmd.java @@ -5,7 +5,6 @@ */ package io.jooby.cli; -import edu.umd.cs.findbugs.annotations.NonNull; import picocli.CommandLine; /** @@ -17,7 +16,7 @@ public class ExitCmd extends Cmd { @Override - public void run(@NonNull CliContext ctx) { + public void run(CliContext ctx) { ctx.exit(0); } } diff --git a/modules/jooby-cli/src/main/java/io/jooby/cli/SetCmd.java b/modules/jooby-cli/src/main/java/io/jooby/cli/SetCmd.java index e006cf416e..da34b6f030 100644 --- a/modules/jooby-cli/src/main/java/io/jooby/cli/SetCmd.java +++ b/modules/jooby-cli/src/main/java/io/jooby/cli/SetCmd.java @@ -10,7 +10,6 @@ import java.nio.file.Paths; import java.util.regex.Matcher; -import edu.umd.cs.findbugs.annotations.NonNull; import picocli.CommandLine; /** @@ -33,7 +32,7 @@ public class SetCmd extends Cmd { private boolean force; @Override - public void run(@NonNull CliContext ctx) throws Exception { + public void run(CliContext ctx) throws Exception { if (workspace != null) { Path path = Paths.get( diff --git a/modules/jooby-cli/src/main/java/io/jooby/internal/cli/CommandContextImpl.java b/modules/jooby-cli/src/main/java/io/jooby/internal/cli/CommandContextImpl.java index ae00d123c4..2dd6700d1d 100644 --- a/modules/jooby-cli/src/main/java/io/jooby/internal/cli/CommandContextImpl.java +++ b/modules/jooby-cli/src/main/java/io/jooby/internal/cli/CommandContextImpl.java @@ -29,7 +29,6 @@ import com.github.jknack.handlebars.Handlebars; import com.github.jknack.handlebars.io.ClassPathTemplateLoader; import com.github.jknack.handlebars.io.TemplateLoader; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.cli.Cli; import io.jooby.cli.CliContext; @@ -80,12 +79,12 @@ private void migrateOldConfiguration(Path from, Path to) throws IOException { } } - @NonNull @Override + @Override public String getVersion() { return (String) configuration.getOrDefault("version", version); } - @NonNull @Override + @Override public Path getWorkspace() { String workspace = (String) configuration.getOrDefault("workspace", System.getProperty("user.dir")); @@ -93,7 +92,7 @@ public Path getWorkspace() { } @Override - public void setWorkspace(@NonNull Path workspace) throws IOException { + public void setWorkspace(Path workspace) throws IOException { if (!Files.isDirectory(workspace)) { throw new FileNotFoundException(workspace.toAbsolutePath().toString()); } diff --git a/modules/jooby-commons-email/src/main/java/io/jooby/commons/mail/CommonsMailModule.java b/modules/jooby-commons-email/src/main/java/io/jooby/commons/mail/CommonsMailModule.java index 4f6839e7b0..39207f10ed 100644 --- a/modules/jooby-commons-email/src/main/java/io/jooby/commons/mail/CommonsMailModule.java +++ b/modules/jooby-commons-email/src/main/java/io/jooby/commons/mail/CommonsMailModule.java @@ -18,7 +18,6 @@ import com.typesafe.config.Config; import com.typesafe.config.ConfigException.Missing; import com.typesafe.config.ConfigFactory; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.AvailableSettings; import io.jooby.Extension; import io.jooby.Jooby; @@ -84,7 +83,7 @@ public CommonsMailModule() { } @Override - public void install(@NonNull Jooby application) { + public void install(Jooby application) { Config config = mailConfig(application.getConfig(), name); ServiceRegistry services = application.getServices(); diff --git a/modules/jooby-commons-email/src/main/java/io/jooby/commons/mail/package-info.java b/modules/jooby-commons-email/src/main/java/io/jooby/commons/mail/package-info.java index 5e5f12e253..59f4b0b233 100644 --- a/modules/jooby-commons-email/src/main/java/io/jooby/commons/mail/package-info.java +++ b/modules/jooby-commons-email/src/main/java/io/jooby/commons/mail/package-info.java @@ -1,2 +1,2 @@ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.commons.mail; diff --git a/modules/jooby-conscrypt/src/main/java/io/jooby/conscrypt/package-info.java b/modules/jooby-conscrypt/src/main/java/io/jooby/conscrypt/package-info.java index c9ef99cfba..71b2dd0fa9 100644 --- a/modules/jooby-conscrypt/src/main/java/io/jooby/conscrypt/package-info.java +++ b/modules/jooby-conscrypt/src/main/java/io/jooby/conscrypt/package-info.java @@ -1,3 +1,3 @@ /** SSL support with conscrypt. */ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.conscrypt; diff --git a/modules/jooby-conscrypt/src/main/java/module-info.java b/modules/jooby-conscrypt/src/main/java/module-info.java index e109d0c300..c95fbcaddb 100644 --- a/modules/jooby-conscrypt/src/main/java/module-info.java +++ b/modules/jooby-conscrypt/src/main/java/module-info.java @@ -9,7 +9,7 @@ /** SSL Conscrypt module. */ module io.jooby.conscrypt { requires io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires org.conscrypt; provides SslProvider with diff --git a/modules/jooby-db-scheduler/src/main/java/io/jooby/dbscheduler/DbSchedulerModule.java b/modules/jooby-db-scheduler/src/main/java/io/jooby/dbscheduler/DbSchedulerModule.java index f6dd32b2e8..152bab7776 100644 --- a/modules/jooby-db-scheduler/src/main/java/io/jooby/dbscheduler/DbSchedulerModule.java +++ b/modules/jooby-db-scheduler/src/main/java/io/jooby/dbscheduler/DbSchedulerModule.java @@ -27,7 +27,6 @@ import com.github.kagkarlsson.scheduler.stats.StatsRegistry; import com.github.kagkarlsson.scheduler.task.OnStartup; import com.github.kagkarlsson.scheduler.task.Task; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Extension; import io.jooby.Jooby; import io.jooby.internal.dbscheduler.ClassLoaderJavaSerializer; @@ -81,7 +80,7 @@ public class DbSchedulerModule implements Extension { * * @param tasks Task to schedule. */ - public DbSchedulerModule(@NonNull List> tasks) { + public DbSchedulerModule(List> tasks) { this.tasks.addAll(tasks); } @@ -91,7 +90,7 @@ public DbSchedulerModule(@NonNull List> tasks) { * @param task Task to schedule. * @param tail Tasks to schedule. */ - public DbSchedulerModule(@NonNull Task task, Task... tail) { + public DbSchedulerModule(Task task, Task... tail) { this(Stream.concat(Stream.of(task), Stream.of(tail)).toList()); } @@ -101,7 +100,7 @@ public DbSchedulerModule(@NonNull Task task, Task... tail) { * @param tasks Tasks to schedule. * @return This module. */ - public DbSchedulerModule withTasks(@NonNull List> tasks) { + public DbSchedulerModule withTasks(List> tasks) { this.tasks.addAll(tasks); return this; } @@ -112,7 +111,7 @@ public DbSchedulerModule withTasks(@NonNull List> tasks) { * @param statsRegistry Stats registry. * @return This module. */ - public DbSchedulerModule withStatsRegistry(@NonNull StatsRegistry statsRegistry) { + public DbSchedulerModule withStatsRegistry(StatsRegistry statsRegistry) { this.statsRegistry = statsRegistry; return this; } @@ -123,7 +122,7 @@ public DbSchedulerModule withStatsRegistry(@NonNull StatsRegistry statsRegistry) * @param schedulerName Scheduler name. * @return This module. */ - public DbSchedulerModule withSchedulerName(@NonNull SchedulerName schedulerName) { + public DbSchedulerModule withSchedulerName(SchedulerName schedulerName) { this.schedulerName = schedulerName; return this; } @@ -135,7 +134,7 @@ public DbSchedulerModule withSchedulerName(@NonNull SchedulerName schedulerName) * @param interceptor An {@link ExecutionInterceptor} that intercepts task execution. * @return This {@link DbSchedulerModule} to allow method chaining. */ - public DbSchedulerModule withExecutionInterceptor(@NonNull ExecutionInterceptor interceptor) { + public DbSchedulerModule withExecutionInterceptor(ExecutionInterceptor interceptor) { this.executionInterceptors.add(interceptor); return this; } @@ -146,7 +145,7 @@ public DbSchedulerModule withExecutionInterceptor(@NonNull ExecutionInterceptor * @param serializer Task serializer. * @return This module. */ - public DbSchedulerModule withSerializer(@NonNull Serializer serializer) { + public DbSchedulerModule withSerializer(Serializer serializer) { this.serializer = serializer; return this; } @@ -157,7 +156,7 @@ public DbSchedulerModule withSerializer(@NonNull Serializer serializer) { * @param executorService Task executor service. * @return This module. */ - public DbSchedulerModule withExecutorService(@NonNull ExecutorService executorService) { + public DbSchedulerModule withExecutorService(ExecutorService executorService) { this.executorService = executorService; return this; } @@ -168,7 +167,7 @@ public DbSchedulerModule withExecutorService(@NonNull ExecutorService executorSe * @param dueExecutor Executor service. * @return This module. */ - public DbSchedulerModule withDueExecutor(@NonNull ExecutorService dueExecutor) { + public DbSchedulerModule withDueExecutor(ExecutorService dueExecutor) { this.dueExecutor = dueExecutor; return this; } @@ -179,8 +178,7 @@ public DbSchedulerModule withDueExecutor(@NonNull ExecutorService dueExecutor) { * @param housekeeperExecutor Executor service. * @return This module. */ - public DbSchedulerModule withHousekeeperExecutor( - @NonNull ScheduledExecutorService housekeeperExecutor) { + public DbSchedulerModule withHousekeeperExecutor(ScheduledExecutorService housekeeperExecutor) { this.housekeeperExecutor = housekeeperExecutor; return this; } @@ -191,13 +189,13 @@ public DbSchedulerModule withHousekeeperExecutor( * @param jdbcCustomization Customize/configure jdbc calls. * @return This module. */ - public DbSchedulerModule withJdbcCustomization(@NonNull JdbcCustomization jdbcCustomization) { + public DbSchedulerModule withJdbcCustomization(JdbcCustomization jdbcCustomization) { this.jdbcCustomization = jdbcCustomization; return this; } @Override - public void install(@NonNull Jooby app) throws SQLException { + public void install(Jooby app) throws SQLException { var properties = DbSchedulerProperties.from(app.getConfig(), "db-scheduler") .orElseGet(DbSchedulerProperties::new); diff --git a/modules/jooby-db-scheduler/src/main/java/io/jooby/dbscheduler/DbSchedulerProperties.java b/modules/jooby-db-scheduler/src/main/java/io/jooby/dbscheduler/DbSchedulerProperties.java index 3fa3e1b5f9..b7466d283b 100644 --- a/modules/jooby-db-scheduler/src/main/java/io/jooby/dbscheduler/DbSchedulerProperties.java +++ b/modules/jooby-db-scheduler/src/main/java/io/jooby/dbscheduler/DbSchedulerProperties.java @@ -14,7 +14,6 @@ import com.github.kagkarlsson.scheduler.jdbc.JdbcTaskRepository; import com.github.kagkarlsson.scheduler.logging.LogLevel; import com.typesafe.config.Config; -import edu.umd.cs.findbugs.annotations.NonNull; /** * Default schedule properties. It can be created from configuration files using {@link @@ -272,7 +271,7 @@ public Duration getHeartbeatInterval() { * @param heartbeatInterval How often to update the heartbeat timestamp for running executions. * @return This instance. */ - public DbSchedulerProperties setHeartbeatInterval(@NonNull Duration heartbeatInterval) { + public DbSchedulerProperties setHeartbeatInterval(Duration heartbeatInterval) { this.heartbeatInterval = heartbeatInterval; return this; } @@ -295,7 +294,7 @@ public String getSchedulerName() { * @param schedulerName Scheduler's name. * @return This instance. */ - public DbSchedulerProperties setSchedulerName(@NonNull String schedulerName) { + public DbSchedulerProperties setSchedulerName(String schedulerName) { this.schedulerName = schedulerName; return this; } @@ -317,7 +316,7 @@ public String getTableName() { * . * @return This module. */ - public DbSchedulerProperties setTableName(@NonNull String tableName) { + public DbSchedulerProperties setTableName(String tableName) { this.tableName = tableName; return this; } @@ -385,7 +384,7 @@ public Duration getPollingInterval() { * 10s. * @return This instance. */ - public DbSchedulerProperties setPollingInterval(@NonNull Duration pollingInterval) { + public DbSchedulerProperties setPollingInterval(Duration pollingInterval) { this.pollingInterval = pollingInterval; return this; } @@ -409,7 +408,7 @@ public Duration getDeleteUnresolvedAfter() { * automatically deleted * @return This instance. */ - public DbSchedulerProperties setDeleteUnresolvedAfter(@NonNull Duration deleteUnresolvedAfter) { + public DbSchedulerProperties setDeleteUnresolvedAfter(Duration deleteUnresolvedAfter) { this.deleteUnresolvedAfter = deleteUnresolvedAfter; return this; } @@ -433,7 +432,7 @@ public Duration getShutdownMaxWait() { * threads. * @return This instance. */ - public DbSchedulerProperties setShutdownMaxWait(@NonNull Duration shutdownMaxWait) { + public DbSchedulerProperties setShutdownMaxWait(Duration shutdownMaxWait) { this.shutdownMaxWait = shutdownMaxWait; return this; } @@ -454,7 +453,7 @@ public LogLevel getFailureLoggerLevel() { * @param failureLoggerLevel Configures how to log task failures. * @return This instance. */ - public DbSchedulerProperties setFailureLoggerLevel(@NonNull LogLevel failureLoggerLevel) { + public DbSchedulerProperties setFailureLoggerLevel(LogLevel failureLoggerLevel) { this.failureLoggerLevel = failureLoggerLevel; return this; } @@ -496,8 +495,7 @@ public PollingStrategyConfig.Type getPollingStrategy() { * @param pollingStrategy The polling strategy. * @return This instance. */ - public DbSchedulerProperties setPollingStrategy( - @NonNull PollingStrategyConfig.Type pollingStrategy) { + public DbSchedulerProperties setPollingStrategy(PollingStrategyConfig.Type pollingStrategy) { this.pollingStrategy = pollingStrategy; return this; } diff --git a/modules/jooby-db-scheduler/src/main/java/io/jooby/dbscheduler/package-info.java b/modules/jooby-db-scheduler/src/main/java/io/jooby/dbscheduler/package-info.java index 388dab6936..272a244418 100644 --- a/modules/jooby-db-scheduler/src/main/java/io/jooby/dbscheduler/package-info.java +++ b/modules/jooby-db-scheduler/src/main/java/io/jooby/dbscheduler/package-info.java @@ -28,5 +28,5 @@ * @since 3.2.10 * @author edgar */ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.dbscheduler; diff --git a/modules/jooby-db-scheduler/src/main/java/module-info.java b/modules/jooby-db-scheduler/src/main/java/module-info.java index 342080ec29..537b284d5c 100644 --- a/modules/jooby-db-scheduler/src/main/java/module-info.java +++ b/modules/jooby-db-scheduler/src/main/java/module-info.java @@ -2,7 +2,7 @@ exports io.jooby.dbscheduler; requires io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires typesafe.config; requires java.sql; requires com.github.kagkarlsson.scheduler; diff --git a/modules/jooby-ebean/src/main/java/io/jooby/ebean/EbeanModule.java b/modules/jooby-ebean/src/main/java/io/jooby/ebean/EbeanModule.java index 8d426486d6..d152803823 100644 --- a/modules/jooby-ebean/src/main/java/io/jooby/ebean/EbeanModule.java +++ b/modules/jooby-ebean/src/main/java/io/jooby/ebean/EbeanModule.java @@ -13,7 +13,6 @@ import com.typesafe.config.Config; import com.typesafe.config.ConfigFactory; import com.typesafe.config.ConfigValueType; -import edu.umd.cs.findbugs.annotations.NonNull; import io.ebean.Database; import io.ebean.DatabaseFactory; import io.ebean.config.DatabaseConfig; @@ -66,7 +65,7 @@ public class EbeanModule implements Extension { * * @param name Ebean name. */ - public EbeanModule(@NonNull String name) { + public EbeanModule(String name) { this.name = name; this.databaseConfig = null; } @@ -81,13 +80,13 @@ public EbeanModule() { * * @param config Database configuration. */ - public EbeanModule(@NonNull DatabaseConfig config) { + public EbeanModule(DatabaseConfig config) { this.databaseConfig = config; this.name = databaseConfig.getName(); } @Override - public void install(@NonNull Jooby application) throws Exception { + public void install(Jooby application) throws Exception { DatabaseConfig config = Optional.ofNullable(this.databaseConfig).orElseGet(() -> create(application, name)); @@ -109,7 +108,7 @@ public void install(@NonNull Jooby application) throws Exception { * @param name Ebean name. * @return Database configuration. */ - public static @NonNull DatabaseConfig create(@NonNull Jooby application, @NonNull String name) { + public static DatabaseConfig create(Jooby application, String name) { var environment = application.getEnvironment(); var registry = application.getServices(); var databaseConfig = new DatabaseConfig(); diff --git a/modules/jooby-ebean/src/main/java/io/jooby/ebean/TransactionalRequest.java b/modules/jooby-ebean/src/main/java/io/jooby/ebean/TransactionalRequest.java index 497a09d021..ea43c66ce8 100644 --- a/modules/jooby-ebean/src/main/java/io/jooby/ebean/TransactionalRequest.java +++ b/modules/jooby-ebean/src/main/java/io/jooby/ebean/TransactionalRequest.java @@ -5,7 +5,6 @@ */ package io.jooby.ebean; -import edu.umd.cs.findbugs.annotations.NonNull; import io.ebean.Database; import io.jooby.Route; import io.jooby.ServiceKey; @@ -30,7 +29,7 @@ public class TransactionalRequest implements Route.Filter { * * @param name Ebean service name. */ - public TransactionalRequest(@NonNull String name) { + public TransactionalRequest(String name) { key = ServiceKey.key(Database.class, name); } @@ -54,8 +53,8 @@ public TransactionalRequest enabledByDefault(boolean enabledByDefault) { return this; } - @NonNull @Override - public Route.Handler apply(@NonNull Route.Handler next) { + @Override + public Route.Handler apply(Route.Handler next) { return ctx -> { if (ctx.getRoute().isTransactional(enabledByDefault)) { var db = ctx.require(key); diff --git a/modules/jooby-ebean/src/main/java/io/jooby/ebean/package-info.java b/modules/jooby-ebean/src/main/java/io/jooby/ebean/package-info.java index 20f8ffea73..58f26a2c8e 100644 --- a/modules/jooby-ebean/src/main/java/io/jooby/ebean/package-info.java +++ b/modules/jooby-ebean/src/main/java/io/jooby/ebean/package-info.java @@ -1,3 +1,3 @@ /** Ebean module. */ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.ebean; diff --git a/modules/jooby-ebean/src/main/java/module-info.java b/modules/jooby-ebean/src/main/java/module-info.java index ca132e69c5..39510b04dd 100644 --- a/modules/jooby-ebean/src/main/java/module-info.java +++ b/modules/jooby-ebean/src/main/java/module-info.java @@ -8,7 +8,7 @@ exports io.jooby.ebean; requires io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires typesafe.config; requires io.ebean; } diff --git a/modules/jooby-flyway/src/main/java/io/jooby/flyway/FlywayModule.java b/modules/jooby-flyway/src/main/java/io/jooby/flyway/FlywayModule.java index 8642f2f0c5..aa35f26a0c 100644 --- a/modules/jooby-flyway/src/main/java/io/jooby/flyway/FlywayModule.java +++ b/modules/jooby-flyway/src/main/java/io/jooby/flyway/FlywayModule.java @@ -13,7 +13,6 @@ import org.flywaydb.core.api.configuration.FluentConfiguration; import org.flywaydb.core.api.migration.JavaMigration; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Extension; import io.jooby.Jooby; import io.jooby.ServiceKey; @@ -54,7 +53,7 @@ public class FlywayModule implements Extension { * * @param name The name/key of the data source to attach. */ - public FlywayModule(@NonNull String name) { + public FlywayModule(String name) { this.name = name; } @@ -75,13 +74,13 @@ public FlywayModule() { * @param migrations The manually added Java-based migrations. An empty array if none. * @return This module. */ - public FlywayModule javaMigrations(@NonNull JavaMigration... migrations) { + public FlywayModule javaMigrations(JavaMigration... migrations) { this.javaMigrations = List.of(migrations); return this; } @Override - public void install(@NonNull Jooby application) throws Exception { + public void install(Jooby application) throws Exception { var environment = application.getEnvironment(); var registry = application.getServices(); var dataSource = registry.getOrNull(ServiceKey.key(DataSource.class, name)); diff --git a/modules/jooby-flyway/src/main/java/io/jooby/flyway/package-info.java b/modules/jooby-flyway/src/main/java/io/jooby/flyway/package-info.java index 748936a1b6..ff31ff1a74 100644 --- a/modules/jooby-flyway/src/main/java/io/jooby/flyway/package-info.java +++ b/modules/jooby-flyway/src/main/java/io/jooby/flyway/package-info.java @@ -1,3 +1,3 @@ /** Flyway module. */ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.flyway; diff --git a/modules/jooby-freemarker/src/main/java/io/jooby/freemarker/FreemarkerModule.java b/modules/jooby-freemarker/src/main/java/io/jooby/freemarker/FreemarkerModule.java index cf21fae832..b1f33dfc4f 100644 --- a/modules/jooby-freemarker/src/main/java/io/jooby/freemarker/FreemarkerModule.java +++ b/modules/jooby-freemarker/src/main/java/io/jooby/freemarker/FreemarkerModule.java @@ -16,7 +16,6 @@ import java.util.Optional; import java.util.Properties; -import edu.umd.cs.findbugs.annotations.NonNull; import freemarker.cache.ClassTemplateLoader; import freemarker.cache.FileTemplateLoader; import freemarker.cache.TemplateLoader; @@ -104,7 +103,7 @@ public static class Builder { * @param loader Template loader to use. * @return This builder. */ - public @NonNull Builder setTemplateLoader(@NonNull TemplateLoader loader) { + public Builder setTemplateLoader(TemplateLoader loader) { this.templateLoader = loader; return this; } @@ -116,7 +115,7 @@ public static class Builder { * @param value Optiona value. * @return This builder. */ - public @NonNull Builder setSetting(@NonNull String name, @NonNull String value) { + public Builder setSetting(String name, String value) { this.settings.put(name, value); return this; } @@ -127,7 +126,7 @@ public static class Builder { * @param outputFormat Output format. * @return This builder. */ - public @NonNull Builder setOutputFormat(@NonNull OutputFormat outputFormat) { + public Builder setOutputFormat(OutputFormat outputFormat) { this.outputFormat = outputFormat; return this; } @@ -138,7 +137,7 @@ public static class Builder { * @param templatesPath Set template path. * @return This builder. */ - public @NonNull Builder setTemplatesPath(@NonNull String templatesPath) { + public Builder setTemplatesPath(String templatesPath) { this.templatesPathString = templatesPath; return this; } @@ -149,7 +148,7 @@ public static class Builder { * @param templatesPath Set template path. * @return This builder. */ - public @NonNull Builder setTemplatesPath(@NonNull Path templatesPath) { + public Builder setTemplatesPath(Path templatesPath) { this.templatesPath = templatesPath; return this; } @@ -160,7 +159,7 @@ public static class Builder { * @param env Application environment. * @return A new freemarker instance. */ - public @NonNull Configuration build(@NonNull Environment env) { + public Configuration build(Environment env) { try { var freemarker = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS); freemarker.setOutputFormat(outputFormat); @@ -237,7 +236,7 @@ private TemplateLoader defaultTemplateLoader( * * @param freemarker Freemarker to use. */ - public FreemarkerModule(@NonNull Configuration freemarker) { + public FreemarkerModule(Configuration freemarker) { this.freemarker = freemarker; } @@ -247,7 +246,7 @@ public FreemarkerModule(@NonNull Configuration freemarker) { * * @param templatesPath Template path. */ - public FreemarkerModule(@NonNull String templatesPath) { + public FreemarkerModule(String templatesPath) { this.templatesPathString = templatesPath; } @@ -256,7 +255,7 @@ public FreemarkerModule(@NonNull String templatesPath) { * * @param templatesPath Template path. */ - public FreemarkerModule(@NonNull Path templatesPath) { + public FreemarkerModule(Path templatesPath) { this.templatesPath = templatesPath; } @@ -266,7 +265,7 @@ public FreemarkerModule() { } @Override - public void install(@NonNull Jooby application) { + public void install(Jooby application) { if (freemarker == null) { freemarker = create() @@ -285,7 +284,7 @@ public void install(@NonNull Jooby application) { * * @return A builder. */ - public static @NonNull FreemarkerModule.Builder create() { + public static FreemarkerModule.Builder create() { return new FreemarkerModule.Builder(); } } diff --git a/modules/jooby-freemarker/src/main/java/io/jooby/freemarker/FreemarkerTemplateEngine.java b/modules/jooby-freemarker/src/main/java/io/jooby/freemarker/FreemarkerTemplateEngine.java index 8036288d63..e8a9baef98 100644 --- a/modules/jooby-freemarker/src/main/java/io/jooby/freemarker/FreemarkerTemplateEngine.java +++ b/modules/jooby-freemarker/src/main/java/io/jooby/freemarker/FreemarkerTemplateEngine.java @@ -10,7 +10,6 @@ import java.util.Collections; import java.util.List; -import edu.umd.cs.findbugs.annotations.NonNull; import freemarker.template.*; import io.jooby.Context; import io.jooby.ModelAndView; @@ -27,7 +26,7 @@ class FreemarkerTemplateEngine implements TemplateEngine { this.extensions = Collections.unmodifiableList(extensions); } - @NonNull @Override + @Override public List extensions() { return extensions; } diff --git a/modules/jooby-freemarker/src/main/java/io/jooby/freemarker/package-info.java b/modules/jooby-freemarker/src/main/java/io/jooby/freemarker/package-info.java index 67f28c05a4..0eeb145f8f 100644 --- a/modules/jooby-freemarker/src/main/java/io/jooby/freemarker/package-info.java +++ b/modules/jooby-freemarker/src/main/java/io/jooby/freemarker/package-info.java @@ -1,2 +1,2 @@ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.freemarker; diff --git a/modules/jooby-freemarker/src/main/java/module-info.java b/modules/jooby-freemarker/src/main/java/module-info.java index 99fd2b4cad..077efefd13 100644 --- a/modules/jooby-freemarker/src/main/java/module-info.java +++ b/modules/jooby-freemarker/src/main/java/module-info.java @@ -8,7 +8,7 @@ exports io.jooby.freemarker; requires io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires typesafe.config; requires freemarker; } diff --git a/modules/jooby-gradle-plugin/src/main/java/io/jooby/gradle/BaseTask.java b/modules/jooby-gradle-plugin/src/main/java/io/jooby/gradle/BaseTask.java index 6cb0fe77e5..c1f62f67e5 100644 --- a/modules/jooby-gradle-plugin/src/main/java/io/jooby/gradle/BaseTask.java +++ b/modules/jooby-gradle-plugin/src/main/java/io/jooby/gradle/BaseTask.java @@ -21,7 +21,6 @@ import java.util.function.Predicate; import java.util.stream.Collectors; -import edu.umd.cs.findbugs.annotations.NonNull; import org.gradle.api.DefaultTask; import org.gradle.api.Project; @@ -55,7 +54,7 @@ public BaseTask() {} * @return Available projects. */ @Internal - public @NonNull List getProjects() { + public List getProjects() { return Collections.singletonList(getProject()); } @@ -65,7 +64,7 @@ public BaseTask() {} * @param projects Projects. * @return Main class. */ - protected @NonNull String computeMainClassName(@NonNull List projects) { + protected String computeMainClassName(List projects) { return projects.stream() .map(it -> { // Old way: @@ -91,8 +90,8 @@ public BaseTask() {} * @param sourceSet Source set. * @return Directories. */ - protected @NonNull Set binDirectories(@NonNull Project project, - @NonNull List sourceSet) { + protected Set binDirectories(Project project, + List sourceSet) { return classpath(project, sourceSet, it -> Files.exists(it) && Files.isDirectory(it)); } @@ -103,8 +102,8 @@ public BaseTask() {} * @param sourceSet Source set. * @return Jar files. */ - protected @NonNull Set jars(@NonNull Project project, - @NonNull List sourceSet) { + protected Set jars(Project project, + List sourceSet) { return classpath(project, sourceSet, it -> Files.exists(it) && it.toString().endsWith(".jar")); } @@ -115,7 +114,7 @@ public BaseTask() {} * @param useTestScope Whenever expand classpath to use test resources. * @return Classes directory. */ - protected @NonNull Path classes(@NonNull Project project, boolean useTestScope) { + protected Path classes(Project project, boolean useTestScope) { List sourceSet = sourceSet(project, useTestScope); return sourceSet.stream() .flatMap(it -> it.getRuntimeClasspath().getFiles().stream()) @@ -133,8 +132,8 @@ public BaseTask() {} * @param predicate Path filter. * @return Classpath. */ - protected @NonNull Set classpath(@NonNull Project project, @NonNull List sourceSet, - @NonNull Predicate predicate) { + protected Set classpath(Project project, List sourceSet, + Predicate predicate) { Set result = new LinkedHashSet<>(); // classes/main, resources/main + jars sourceSet.stream() @@ -159,8 +158,8 @@ public BaseTask() {} * @param sourceSet Source set. * @return Source directories. */ - protected @NonNull Set sourceDirectories(@NonNull Project project, - @NonNull List sourceSet) { + protected Set sourceDirectories(Project project, + List sourceSet) { Path eclipse = project.getProjectDir().toPath().resolve(".classpath"); if (Files.exists(eclipse)) { // let eclipse to do the incremental compilation @@ -180,7 +179,7 @@ public BaseTask() {} * @param useTestScope Whenever expand classpath to use test resources. * @return SourceSet. */ - protected @NonNull List sourceSet(@NonNull Project project, boolean useTestScope) { + protected List sourceSet(Project project, boolean useTestScope) { SourceSetContainer sourceSets = getJavaExtension(project).getSourceSets(); List result = new ArrayList<>(); if (useTestScope) { @@ -196,7 +195,7 @@ public BaseTask() {} * @param project Project. * @return Java plugin convention. */ - protected @NonNull JavaPluginExtension getJavaExtension(final @NonNull Project project) { + protected JavaPluginExtension getJavaExtension(final Project project) { return project.getExtensions().getByType(JavaPluginExtension.class); } diff --git a/modules/jooby-gradle-plugin/src/main/java/io/jooby/gradle/OpenAPITask.java b/modules/jooby-gradle-plugin/src/main/java/io/jooby/gradle/OpenAPITask.java index 37518da61d..ed85fde9cd 100644 --- a/modules/jooby-gradle-plugin/src/main/java/io/jooby/gradle/OpenAPITask.java +++ b/modules/jooby-gradle-plugin/src/main/java/io/jooby/gradle/OpenAPITask.java @@ -12,7 +12,7 @@ import org.gradle.api.tasks.Input; import org.gradle.api.tasks.TaskAction; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; import java.io.File; import java.nio.file.Path; diff --git a/modules/jooby-graphiql/src/main/java/io/jooby/graphiql/GraphiQLModule.java b/modules/jooby-graphiql/src/main/java/io/jooby/graphiql/GraphiQLModule.java index 5dbad612e3..3764629055 100644 --- a/modules/jooby-graphiql/src/main/java/io/jooby/graphiql/GraphiQLModule.java +++ b/modules/jooby-graphiql/src/main/java/io/jooby/graphiql/GraphiQLModule.java @@ -5,7 +5,6 @@ */ package io.jooby.graphiql; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Extension; import io.jooby.Jooby; import io.jooby.MediaType; @@ -29,7 +28,7 @@ public class GraphiQLModule implements Extension { @Override - public void install(@NonNull Jooby application) throws Exception { + public void install(Jooby application) throws Exception { var contextPath = application.getContextPath(); if (contextPath.equals("/")) { contextPath = ""; diff --git a/modules/jooby-graphiql/src/main/java/io/jooby/graphiql/package-info.java b/modules/jooby-graphiql/src/main/java/io/jooby/graphiql/package-info.java index ac244f7ffc..e27f596f4f 100644 --- a/modules/jooby-graphiql/src/main/java/io/jooby/graphiql/package-info.java +++ b/modules/jooby-graphiql/src/main/java/io/jooby/graphiql/package-info.java @@ -1,2 +1,2 @@ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.graphiql; diff --git a/modules/jooby-graphiql/src/main/java/module-info.java b/modules/jooby-graphiql/src/main/java/module-info.java index 054b5f014f..a5389733b7 100644 --- a/modules/jooby-graphiql/src/main/java/module-info.java +++ b/modules/jooby-graphiql/src/main/java/module-info.java @@ -8,6 +8,6 @@ exports io.jooby.graphiql; requires io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires typesafe.config; } diff --git a/modules/jooby-graphql/src/main/java/io/jooby/graphql/GraphQLModule.java b/modules/jooby-graphql/src/main/java/io/jooby/graphql/GraphQLModule.java index ce37fefad6..36998aaa3c 100644 --- a/modules/jooby-graphql/src/main/java/io/jooby/graphql/GraphQLModule.java +++ b/modules/jooby-graphql/src/main/java/io/jooby/graphql/GraphQLModule.java @@ -13,7 +13,6 @@ import java.nio.file.Files; import java.nio.file.Path; -import edu.umd.cs.findbugs.annotations.NonNull; import graphql.GraphQL; import graphql.schema.GraphQLSchema; import graphql.schema.idl.RuntimeWiring; @@ -56,7 +55,7 @@ public class GraphQLModule implements Extension { * * @param graphQL GraphQL instance. */ - public GraphQLModule(@NonNull GraphQL graphQL) { + public GraphQLModule(GraphQL graphQL) { this.graphQL = graphQL; } @@ -65,7 +64,7 @@ public GraphQLModule(@NonNull GraphQL graphQL) { * * @param schema GraphQL schema. */ - public GraphQLModule(@NonNull GraphQLSchema schema) { + public GraphQLModule(GraphQLSchema schema) { this(GraphQL.newGraphQL(schema).build()); } @@ -75,7 +74,7 @@ public GraphQLModule(@NonNull GraphQLSchema schema) { * @param path Classpath location for schema file. Usually schema.graphql. * @param wiring Runtime wiring to build a GraphQL instance. */ - public GraphQLModule(@NonNull String path, @NonNull RuntimeWiring wiring) { + public GraphQLModule(String path, RuntimeWiring wiring) { this(newSchema(reader(GraphQLModule.class.getClassLoader(), path), wiring)); } @@ -85,7 +84,7 @@ public GraphQLModule(@NonNull String path, @NonNull RuntimeWiring wiring) { * @param path File system location for schema file. Usually schema.graphqls. * @param wiring Runtime wiring to build a GraphQL instance. */ - public GraphQLModule(@NonNull Path path, @NonNull RuntimeWiring wiring) { + public GraphQLModule(Path path, RuntimeWiring wiring) { this(newSchema(fileReader(path), wiring)); } @@ -95,12 +94,12 @@ public GraphQLModule(@NonNull Path path, @NonNull RuntimeWiring wiring) { * * @param wiring Runtime wiring to build a GraphQL instance. */ - public GraphQLModule(@NonNull RuntimeWiring wiring) { + public GraphQLModule(RuntimeWiring wiring) { this("schema.graphql", wiring); } @Override - public void install(@NonNull Jooby application) throws Exception { + public void install(Jooby application) throws Exception { var graphqlPath = application.getEnvironment().getProperty("graphql.path", "/graphql"); var handler = async ? new GraphQLHandler(graphQL) : new BlockingGraphQLHandler(graphQL); @@ -145,7 +144,7 @@ private static Reader fileReader(Path path) { } } - private static Reader reader(ClassLoader loader, @NonNull String path) { + private static Reader reader(ClassLoader loader, String path) { try { return new InputStreamReader( loader.getResourceAsStream(path.startsWith("/") ? path.substring(0) : path), diff --git a/modules/jooby-graphql/src/main/java/io/jooby/graphql/package-info.java b/modules/jooby-graphql/src/main/java/io/jooby/graphql/package-info.java index bcfa69b679..794ab4a913 100644 --- a/modules/jooby-graphql/src/main/java/io/jooby/graphql/package-info.java +++ b/modules/jooby-graphql/src/main/java/io/jooby/graphql/package-info.java @@ -1,2 +1,2 @@ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.graphql; diff --git a/modules/jooby-graphql/src/main/java/io/jooby/internal/graphql/BlockingGraphQLHandler.java b/modules/jooby-graphql/src/main/java/io/jooby/internal/graphql/BlockingGraphQLHandler.java index aaae1bc8c0..e945ed8e40 100644 --- a/modules/jooby-graphql/src/main/java/io/jooby/internal/graphql/BlockingGraphQLHandler.java +++ b/modules/jooby-graphql/src/main/java/io/jooby/internal/graphql/BlockingGraphQLHandler.java @@ -5,7 +5,6 @@ */ package io.jooby.internal.graphql; -import edu.umd.cs.findbugs.annotations.NonNull; import graphql.GraphQL; import io.jooby.Context; @@ -15,8 +14,8 @@ public BlockingGraphQLHandler(GraphQL graphQL) { super(graphQL); } - @NonNull @Override - public Object apply(@NonNull Context ctx) { + @Override + public Object apply(Context ctx) { return graphQL.execute(newExecutionInput(ctx)); } } diff --git a/modules/jooby-graphql/src/main/java/io/jooby/internal/graphql/GraphQLHandler.java b/modules/jooby-graphql/src/main/java/io/jooby/internal/graphql/GraphQLHandler.java index 0d9335f59a..d7b3c1770c 100644 --- a/modules/jooby-graphql/src/main/java/io/jooby/internal/graphql/GraphQLHandler.java +++ b/modules/jooby-graphql/src/main/java/io/jooby/internal/graphql/GraphQLHandler.java @@ -10,7 +10,6 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import edu.umd.cs.findbugs.annotations.NonNull; import graphql.ExecutionInput; import graphql.ExecutionResult; import graphql.GraphQL; @@ -27,12 +26,12 @@ public GraphQLHandler(GraphQL graphQL) { this.graphQL = graphQL; } - @NonNull @Override - public Object apply(@NonNull Context ctx) { + @Override + public Object apply(Context ctx) { return graphQL.executeAsync(newExecutionInput(ctx)).thenApply(ExecutionResult::toSpecification); } - protected final ExecutionInput newExecutionInput(@NonNull Context ctx) { + protected final ExecutionInput newExecutionInput(Context ctx) { GraphQLRequest request; if (ctx.getMethod().equals(Router.POST)) { request = ctx.body(GraphQLRequest.class); diff --git a/modules/jooby-graphql/src/main/java/module-info.java b/modules/jooby-graphql/src/main/java/module-info.java index 6000f0cf46..02c07a5e36 100644 --- a/modules/jooby-graphql/src/main/java/module-info.java +++ b/modules/jooby-graphql/src/main/java/module-info.java @@ -8,7 +8,7 @@ exports io.jooby.graphql; requires io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires typesafe.config; requires com.graphqljava; requires com.google.gson; diff --git a/modules/jooby-grpc/src/main/java/io/jooby/grpc/GrpcModule.java b/modules/jooby-grpc/src/main/java/io/jooby/grpc/GrpcModule.java index 32438beb89..eda3d86def 100644 --- a/modules/jooby-grpc/src/main/java/io/jooby/grpc/GrpcModule.java +++ b/modules/jooby-grpc/src/main/java/io/jooby/grpc/GrpcModule.java @@ -9,7 +9,6 @@ import org.slf4j.bridge.SLF4JBridgeHandler; -import edu.umd.cs.findbugs.annotations.NonNull; import io.grpc.BindableService; import io.grpc.MethodDescriptor; import io.grpc.inprocess.InProcessChannelBuilder; @@ -122,7 +121,7 @@ public final GrpcModule bind(Class... serviceClasses) * @throws Exception If an error occurs during installation. */ @Override - public void install(@NonNull Jooby app) throws Exception { + public void install(Jooby app) throws Exception { var serverName = app.getName(); var builder = InProcessServerBuilder.forName(serverName); final Map> registry = new HashMap<>(); diff --git a/modules/jooby-grpc/src/main/java/io/jooby/internal/grpc/DefaultGrpcProcessor.java b/modules/jooby-grpc/src/main/java/io/jooby/internal/grpc/DefaultGrpcProcessor.java index f58358b017..4bb77c829d 100644 --- a/modules/jooby-grpc/src/main/java/io/jooby/internal/grpc/DefaultGrpcProcessor.java +++ b/modules/jooby-grpc/src/main/java/io/jooby/internal/grpc/DefaultGrpcProcessor.java @@ -16,7 +16,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import edu.umd.cs.findbugs.annotations.NonNull; import io.grpc.CallOptions; import io.grpc.ManagedChannel; import io.grpc.MethodDescriptor; @@ -69,7 +68,7 @@ public boolean isGrpcMethod(String path) { } @Override - public @NonNull Flow.Subscriber process(@NonNull GrpcExchange exchange) { + public Flow.Subscriber process(GrpcExchange exchange) { // Route paths: /{package.Service}/{Method} String path = exchange.getRequestPath(); // Remove the leading slash to match the gRPC method registry format diff --git a/modules/jooby-grpc/src/main/java/module-info.java b/modules/jooby-grpc/src/main/java/module-info.java index c690bc2e26..d160a73382 100644 --- a/modules/jooby-grpc/src/main/java/module-info.java +++ b/modules/jooby-grpc/src/main/java/module-info.java @@ -63,7 +63,7 @@ exports io.jooby.grpc; requires io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires typesafe.config; requires org.slf4j; requires jul.to.slf4j; diff --git a/modules/jooby-gson/src/main/java/io/jooby/gson/GsonModule.java b/modules/jooby-gson/src/main/java/io/jooby/gson/GsonModule.java index f9b51bcee7..dd9f7275ba 100644 --- a/modules/jooby-gson/src/main/java/io/jooby/gson/GsonModule.java +++ b/modules/jooby-gson/src/main/java/io/jooby/gson/GsonModule.java @@ -14,7 +14,6 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.Extension; import io.jooby.Jooby; @@ -75,7 +74,7 @@ public class GsonModule implements Extension, MessageDecoder, MessageEncoder { * * @param gson Gson to use. */ - public GsonModule(@NonNull Gson gson) { + public GsonModule(Gson gson) { this.gson = gson; } @@ -85,7 +84,7 @@ public GsonModule() { } @Override - public void install(@NonNull Jooby application) { + public void install(Jooby application) { application.decoder(MediaType.json, this); application.encoder(MediaType.json, this); @@ -93,8 +92,8 @@ public void install(@NonNull Jooby application) { services.put(Gson.class, gson); } - @NonNull @Override - public Object decode(@NonNull Context ctx, @NonNull Type type) throws Exception { + @Override + public Object decode(Context ctx, Type type) throws Exception { var body = ctx.body(); if (body.isInMemory()) { return gson.fromJson( @@ -106,8 +105,8 @@ public Object decode(@NonNull Context ctx, @NonNull Type type) throws Exception } } - @NonNull @Override - public Output encode(@NonNull Context ctx, @NonNull Object value) { + @Override + public Output encode(Context ctx, Object value) { var buffer = ctx.getOutputFactory().allocate(); ctx.setDefaultResponseType(MediaType.json); gson.toJson(value, buffer.asWriter()); diff --git a/modules/jooby-gson/src/main/java/io/jooby/gson/package-info.java b/modules/jooby-gson/src/main/java/io/jooby/gson/package-info.java index 24d5d3dc9c..8ef42d5422 100644 --- a/modules/jooby-gson/src/main/java/io/jooby/gson/package-info.java +++ b/modules/jooby-gson/src/main/java/io/jooby/gson/package-info.java @@ -1,2 +1,2 @@ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.gson; diff --git a/modules/jooby-gson/src/main/java/module-info.java b/modules/jooby-gson/src/main/java/module-info.java index 0c6196ed20..8c594bc684 100644 --- a/modules/jooby-gson/src/main/java/module-info.java +++ b/modules/jooby-gson/src/main/java/module-info.java @@ -8,7 +8,7 @@ exports io.jooby.gson; requires io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires typesafe.config; requires com.google.gson; } diff --git a/modules/jooby-guice/src/main/java/io/jooby/guice/GuiceModule.java b/modules/jooby-guice/src/main/java/io/jooby/guice/GuiceModule.java index a50608b97f..7865eedbe1 100644 --- a/modules/jooby-guice/src/main/java/io/jooby/guice/GuiceModule.java +++ b/modules/jooby-guice/src/main/java/io/jooby/guice/GuiceModule.java @@ -12,7 +12,6 @@ import com.google.inject.Injector; import com.google.inject.Module; import com.google.inject.Stage; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Extension; import io.jooby.Jooby; @@ -49,7 +48,7 @@ public class GuiceModule implements Extension { * * @param injector Injector to use. */ - public GuiceModule(@NonNull Injector injector) { + public GuiceModule(Injector injector) { this.injector = injector; } @@ -58,7 +57,7 @@ public GuiceModule(@NonNull Injector injector) { * * @param modules Module to add. */ - public GuiceModule(@NonNull Module... modules) { + public GuiceModule(Module... modules) { this.modules = modules; } @@ -68,7 +67,7 @@ public boolean lateinit() { } @Override - public void install(@NonNull Jooby application) { + public void install(Jooby application) { if (injector == null) { var env = application.getEnvironment(); List modules = new ArrayList<>(); diff --git a/modules/jooby-guice/src/main/java/io/jooby/guice/GuiceRegistry.java b/modules/jooby-guice/src/main/java/io/jooby/guice/GuiceRegistry.java index 32bd7c558c..223184943b 100644 --- a/modules/jooby-guice/src/main/java/io/jooby/guice/GuiceRegistry.java +++ b/modules/jooby-guice/src/main/java/io/jooby/guice/GuiceRegistry.java @@ -10,7 +10,6 @@ import com.google.inject.Key; import com.google.inject.ProvisionException; import com.google.inject.name.Names; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Registry; import io.jooby.Reified; import io.jooby.ServiceKey; @@ -23,30 +22,30 @@ class GuiceRegistry implements Registry { this.injector = injector; } - @NonNull @Override - public T require(@NonNull Class type) { + @Override + public T require(Class type) { return require(Key.get(type)); } - @NonNull @Override - public T require(@NonNull Class type, @NonNull String name) { + @Override + public T require(Class type, String name) { return require(Key.get(type, Names.named(name))); } - @NonNull @Override - public T require(@NonNull Reified type) throws RegistryException { + @Override + public T require(Reified type) throws RegistryException { //noinspection unchecked return (T) require(Key.get(type.getType())); } - @NonNull @Override - public T require(@NonNull Reified type, @NonNull String name) throws RegistryException { + @Override + public T require(Reified type, String name) throws RegistryException { //noinspection unchecked return (T) require(Key.get(type.getType(), Names.named(name))); } - @NonNull @Override - public T require(@NonNull ServiceKey key) throws RegistryException { + @Override + public T require(ServiceKey key) throws RegistryException { String name = key.getName(); //noinspection unchecked return name == null @@ -54,7 +53,7 @@ public T require(@NonNull ServiceKey key) throws RegistryException { : (T) require(Key.get(key.getType(), Names.named(name))); } - @NonNull private T require(@NonNull Key key) { + private T require(Key key) { try { return injector.getInstance(key); } catch (ProvisionException | ConfigurationException x) { diff --git a/modules/jooby-guice/src/main/java/io/jooby/guice/JoobyModule.java b/modules/jooby-guice/src/main/java/io/jooby/guice/JoobyModule.java index 3bd741ef96..806ab7a325 100644 --- a/modules/jooby-guice/src/main/java/io/jooby/guice/JoobyModule.java +++ b/modules/jooby-guice/src/main/java/io/jooby/guice/JoobyModule.java @@ -17,7 +17,6 @@ import com.google.inject.util.Types; import com.typesafe.config.Config; import com.typesafe.config.ConfigObject; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Environment; import io.jooby.Jooby; import io.jooby.ServiceRegistry; @@ -38,7 +37,7 @@ public class JoobyModule extends AbstractModule { * * @param application Jooby application. */ - public JoobyModule(@NonNull Jooby application) { + public JoobyModule(Jooby application) { this.application = application; } diff --git a/modules/jooby-guice/src/main/java/io/jooby/guice/package-info.java b/modules/jooby-guice/src/main/java/io/jooby/guice/package-info.java index 3b1ec70c2c..ece6a3fc56 100644 --- a/modules/jooby-guice/src/main/java/io/jooby/guice/package-info.java +++ b/modules/jooby-guice/src/main/java/io/jooby/guice/package-info.java @@ -1,2 +1,2 @@ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.guice; diff --git a/modules/jooby-guice/src/main/java/module-info.java b/modules/jooby-guice/src/main/java/module-info.java index 854002603d..b66d59e247 100644 --- a/modules/jooby-guice/src/main/java/module-info.java +++ b/modules/jooby-guice/src/main/java/module-info.java @@ -8,7 +8,7 @@ exports io.jooby.guice; requires io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires typesafe.config; requires com.google.guice; requires jakarta.inject; diff --git a/modules/jooby-handlebars/src/main/java/io/jooby/handlebars/HandlebarsModule.java b/modules/jooby-handlebars/src/main/java/io/jooby/handlebars/HandlebarsModule.java index 42863aaa9c..57452d86d8 100644 --- a/modules/jooby-handlebars/src/main/java/io/jooby/handlebars/HandlebarsModule.java +++ b/modules/jooby-handlebars/src/main/java/io/jooby/handlebars/HandlebarsModule.java @@ -27,7 +27,6 @@ import com.github.jknack.handlebars.io.ClassPathTemplateLoader; import com.github.jknack.handlebars.io.FileTemplateLoader; import com.github.jknack.handlebars.io.TemplateLoader; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Environment; import io.jooby.Extension; import io.jooby.Jooby; @@ -107,7 +106,7 @@ public static class Builder { * @param cache Template cache. * @return This builder. */ - public @NonNull Builder setTemplateCache(@NonNull TemplateCache cache) { + public Builder setTemplateCache(TemplateCache cache) { this.cache = cache; return this; } @@ -118,7 +117,7 @@ public static class Builder { * @param templatesPathString Set template path. * @return This builder. */ - public @NonNull Builder setTemplatesPath(@NonNull String templatesPathString) { + public Builder setTemplatesPath(String templatesPathString) { this.templatesPathString = templatesPathString; return this; } @@ -129,7 +128,7 @@ public static class Builder { * @param templatesPath Set template path. * @return This builder. */ - public @NonNull Builder setTemplatesPath(@NonNull Path templatesPath) { + public Builder setTemplatesPath(Path templatesPath) { this.templatesPath = templatesPath; return this; } @@ -140,7 +139,7 @@ public static class Builder { * @param loader Template loader to use. * @return This builder. */ - public @NonNull Builder setTemplateLoader(@NonNull TemplateLoader loader) { + public Builder setTemplateLoader(TemplateLoader loader) { this.loader = loader; return this; } @@ -151,7 +150,7 @@ public static class Builder { * @param env Application environment. * @return A new handlebars instance. */ - public @NonNull Handlebars build(@NonNull Environment env) { + public Handlebars build(Environment env) { if (loader == null) { var templatesPathString = normalizePath( @@ -209,7 +208,7 @@ protected URL getResource(String location) { * * @param handlebars Handlebars instance to use. */ - public HandlebarsModule(@NonNull Handlebars handlebars) { + public HandlebarsModule(Handlebars handlebars) { this.handlebars = handlebars; } @@ -219,7 +218,7 @@ public HandlebarsModule(@NonNull Handlebars handlebars) { * @param templatesPath Template location to use. First try to file-system or fallback to * classpath. */ - public HandlebarsModule(@NonNull String templatesPath) { + public HandlebarsModule(String templatesPath) { this.templatesPathString = templatesPath; } @@ -229,7 +228,7 @@ public HandlebarsModule(@NonNull String templatesPath) { * @param templatesPath Template location to use. First try to file-system or fallback to * classpath. */ - public HandlebarsModule(@NonNull Path templatesPath) { + public HandlebarsModule(Path templatesPath) { this.templatesPath = templatesPath; } @@ -244,13 +243,13 @@ public HandlebarsModule() { * @param resolver Value resolver. * @return This module. */ - public HandlebarsModule with(@NonNull ValueResolver resolver) { + public HandlebarsModule with(ValueResolver resolver) { resolvers.addFirst(resolver); return this; } @Override - public void install(@NonNull Jooby application) throws Exception { + public void install(Jooby application) throws Exception { if (handlebars == null) { handlebars = create() @@ -270,7 +269,7 @@ public void install(@NonNull Jooby application) throws Exception { * * @return A builder. */ - public static @NonNull HandlebarsModule.Builder create() { + public static HandlebarsModule.Builder create() { return new HandlebarsModule.Builder(); } } diff --git a/modules/jooby-handlebars/src/main/java/io/jooby/internal/handlebars/HandlebarsTemplateEngine.java b/modules/jooby-handlebars/src/main/java/io/jooby/internal/handlebars/HandlebarsTemplateEngine.java index 8eed83b35e..9c5f36c548 100644 --- a/modules/jooby-handlebars/src/main/java/io/jooby/internal/handlebars/HandlebarsTemplateEngine.java +++ b/modules/jooby-handlebars/src/main/java/io/jooby/internal/handlebars/HandlebarsTemplateEngine.java @@ -10,7 +10,6 @@ import com.github.jknack.handlebars.Handlebars; import com.github.jknack.handlebars.ValueResolver; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.ModelAndView; import io.jooby.TemplateEngine; @@ -29,7 +28,7 @@ public HandlebarsTemplateEngine( this.extensions = Collections.unmodifiableList(extensions); } - @NonNull @Override + @Override public List extensions() { return extensions; } diff --git a/modules/jooby-handlebars/src/main/java/module-info.java b/modules/jooby-handlebars/src/main/java/module-info.java index 8381b4b2f9..4bd022e0db 100644 --- a/modules/jooby-handlebars/src/main/java/module-info.java +++ b/modules/jooby-handlebars/src/main/java/module-info.java @@ -1,7 +1,7 @@ module io.jooby.handlebars { exports io.jooby.handlebars; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires io.jooby; requires com.github.jknack.handlebars; } diff --git a/modules/jooby-hibernate-validator/src/main/java/io/jooby/hibernate/validator/ConstraintViolationHandler.java b/modules/jooby-hibernate-validator/src/main/java/io/jooby/hibernate/validator/ConstraintViolationHandler.java index 17b7aefb50..065ad36875 100644 --- a/modules/jooby-hibernate-validator/src/main/java/io/jooby/hibernate/validator/ConstraintViolationHandler.java +++ b/modules/jooby-hibernate-validator/src/main/java/io/jooby/hibernate/validator/ConstraintViolationHandler.java @@ -16,7 +16,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.ErrorHandler; import io.jooby.StatusCode; @@ -65,10 +64,7 @@ public class ConstraintViolationHandler implements ErrorHandler { private final boolean problemDetailsEnabled; public ConstraintViolationHandler( - @NonNull StatusCode statusCode, - @NonNull String title, - boolean logException, - boolean problemDetailsEnabled) { + StatusCode statusCode, String title, boolean logException, boolean problemDetailsEnabled) { this.statusCode = statusCode; this.title = title; this.logException = logException; @@ -76,7 +72,7 @@ public ConstraintViolationHandler( } @Override - public void apply(@NonNull Context ctx, @NonNull Throwable cause, @NonNull StatusCode code) { + public void apply(Context ctx, Throwable cause, StatusCode code) { if (cause instanceof ConstraintViolationException ex) { if (logException) { log.error(ErrorHandler.errorMessage(ctx, code), cause); diff --git a/modules/jooby-hibernate-validator/src/main/java/io/jooby/hibernate/validator/HibernateValidatorModule.java b/modules/jooby-hibernate-validator/src/main/java/io/jooby/hibernate/validator/HibernateValidatorModule.java index 54674f4eed..ba8f013bda 100644 --- a/modules/jooby-hibernate-validator/src/main/java/io/jooby/hibernate/validator/HibernateValidatorModule.java +++ b/modules/jooby-hibernate-validator/src/main/java/io/jooby/hibernate/validator/HibernateValidatorModule.java @@ -14,7 +14,6 @@ import org.hibernate.validator.HibernateValidator; import org.hibernate.validator.HibernateValidatorConfiguration; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.*; import io.jooby.internal.hibernate.validator.CompositeConstraintValidatorFactory; import io.jooby.validation.BeanValidator; @@ -63,7 +62,7 @@ public class HibernateValidatorModule implements Extension { private List factories; private final HibernateValidatorConfiguration configuration; - public HibernateValidatorModule(@NonNull HibernateValidatorConfiguration configuration) { + public HibernateValidatorModule(HibernateValidatorConfiguration configuration) { this.configuration = configuration; } @@ -78,7 +77,7 @@ public HibernateValidatorModule() { * @param statusCode new status code * @return This module. */ - public HibernateValidatorModule statusCode(@NonNull StatusCode statusCode) { + public HibernateValidatorModule statusCode(StatusCode statusCode) { this.statusCode = statusCode; return this; } @@ -100,7 +99,7 @@ public HibernateValidatorModule logException() { * @param title new title * @return This module. */ - public HibernateValidatorModule validationTitle(@NonNull String title) { + public HibernateValidatorModule validationTitle(String title) { this.title = title; return this; } @@ -134,7 +133,7 @@ public HibernateValidatorModule with(ConstraintValidatorFactory factory) { } @Override - public void install(@NonNull Jooby app) throws Exception { + public void install(Jooby app) throws Exception { var config = app.getConfig(); if (config.hasPath(CONFIG_ROOT_PATH)) { config diff --git a/modules/jooby-hibernate-validator/src/main/java/module-info.java b/modules/jooby-hibernate-validator/src/main/java/module-info.java index 5a1244368d..3908671e92 100644 --- a/modules/jooby-hibernate-validator/src/main/java/module-info.java +++ b/modules/jooby-hibernate-validator/src/main/java/module-info.java @@ -8,7 +8,7 @@ exports io.jooby.hibernate.validator; requires transitive io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires typesafe.config; requires org.hibernate.validator; requires jakarta.validation; diff --git a/modules/jooby-hibernate/src/main/java/io/jooby/hibernate/HibernateConfigurer.java b/modules/jooby-hibernate/src/main/java/io/jooby/hibernate/HibernateConfigurer.java index 94dc42a16b..6c5bca70ee 100644 --- a/modules/jooby-hibernate/src/main/java/io/jooby/hibernate/HibernateConfigurer.java +++ b/modules/jooby-hibernate/src/main/java/io/jooby/hibernate/HibernateConfigurer.java @@ -12,7 +12,6 @@ import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import com.typesafe.config.Config; -import edu.umd.cs.findbugs.annotations.NonNull; /** * Allow to customize Hibernate bootstrap components. @@ -31,7 +30,7 @@ public HibernateConfigurer() {} * @param builder Builder. * @param config Configuration. */ - public void configure(@NonNull BootstrapServiceRegistryBuilder builder, @NonNull Config config) {} + public void configure(BootstrapServiceRegistryBuilder builder, Config config) {} /** * Hook into service registry and customize it. @@ -39,7 +38,7 @@ public void configure(@NonNull BootstrapServiceRegistryBuilder builder, @NonNull * @param builder Builder. * @param config Configuration. */ - public void configure(@NonNull StandardServiceRegistryBuilder builder, @NonNull Config config) {} + public void configure(StandardServiceRegistryBuilder builder, Config config) {} /** * Hook into metadata sources and customize it. @@ -47,7 +46,7 @@ public void configure(@NonNull StandardServiceRegistryBuilder builder, @NonNull * @param sources Sources. * @param config Configuration. */ - public void configure(@NonNull MetadataSources sources, @NonNull Config config) {} + public void configure(MetadataSources sources, Config config) {} /** * Hook into metadata builder and customize it. @@ -55,7 +54,7 @@ public void configure(@NonNull MetadataSources sources, @NonNull Config config) * @param builder Builder. * @param config Configuration. */ - public void configure(@NonNull MetadataBuilder builder, @NonNull Config config) {} + public void configure(MetadataBuilder builder, Config config) {} /** * Hook into SessionFactory creation and customize it. @@ -63,5 +62,5 @@ public void configure(@NonNull MetadataBuilder builder, @NonNull Config config) * @param builder Builder. * @param config Configuration. */ - public void configure(@NonNull SessionFactoryBuilder builder, @NonNull Config config) {} + public void configure(SessionFactoryBuilder builder, Config config) {} } diff --git a/modules/jooby-hibernate/src/main/java/io/jooby/hibernate/HibernateModule.java b/modules/jooby-hibernate/src/main/java/io/jooby/hibernate/HibernateModule.java index 7299af8214..552f825b1d 100644 --- a/modules/jooby-hibernate/src/main/java/io/jooby/hibernate/HibernateModule.java +++ b/modules/jooby-hibernate/src/main/java/io/jooby/hibernate/HibernateModule.java @@ -17,7 +17,6 @@ import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.AvailableSettings; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Environment; import io.jooby.Extension; import io.jooby.Jooby; @@ -144,7 +143,7 @@ public class HibernateModule implements Extension { * @param name The name/key of the data source to attach. * @param classes Persistent classes. */ - public HibernateModule(@NonNull String name, Class... classes) { + public HibernateModule(String name, Class... classes) { this.name = name; this.classes = List.of(classes); } @@ -165,7 +164,7 @@ public HibernateModule(Class... classes) { * @param name The name/key of the data source to attach. * @param classes Persistent classes. */ - public HibernateModule(@NonNull String name, List> classes) { + public HibernateModule(String name, List> classes) { this.name = name; this.classes = classes; } @@ -176,7 +175,7 @@ public HibernateModule(@NonNull String name, List> classes) { * @param packages Package names. * @return This module. */ - public @NonNull HibernateModule scan(@NonNull String... packages) { + public HibernateModule scan(String... packages) { this.packages = List.of(packages); return this; } @@ -187,7 +186,7 @@ public HibernateModule(@NonNull String name, List> classes) { * @param packages Package names. * @return This module. */ - public @NonNull HibernateModule scan(@NonNull List packages) { + public HibernateModule scan(List packages) { this.packages = packages; return this; } @@ -198,7 +197,7 @@ public HibernateModule(@NonNull String name, List> classes) { * @param sessionProvider Session customizer. * @return This module. */ - public @NonNull HibernateModule with(@NonNull SessionProvider sessionProvider) { + public HibernateModule with(SessionProvider sessionProvider) { this.sessionBuilder = sessionProvider; return this; } @@ -209,7 +208,7 @@ public HibernateModule(@NonNull String name, List> classes) { * @param sessionProvider Session customizer. * @return This module. */ - public @NonNull HibernateModule with(@NonNull StatelessSessionProvider sessionProvider) { + public HibernateModule with(StatelessSessionProvider sessionProvider) { this.statelessSessionProvider = sessionProvider; return this; } @@ -220,13 +219,13 @@ public HibernateModule(@NonNull String name, List> classes) { * @param configurer Configurer. * @return This module. */ - public @NonNull HibernateModule with(@NonNull HibernateConfigurer configurer) { + public HibernateModule with(HibernateConfigurer configurer) { this.configurer = configurer; return this; } @Override - public void install(@NonNull Jooby application) { + public void install(Jooby application) { var env = application.getEnvironment(); var config = application.getConfig(); var registry = application.getServices(); diff --git a/modules/jooby-hibernate/src/main/java/io/jooby/hibernate/SessionProvider.java b/modules/jooby-hibernate/src/main/java/io/jooby/hibernate/SessionProvider.java index 0352cf018a..7fdd152a6e 100644 --- a/modules/jooby-hibernate/src/main/java/io/jooby/hibernate/SessionProvider.java +++ b/modules/jooby-hibernate/src/main/java/io/jooby/hibernate/SessionProvider.java @@ -8,8 +8,6 @@ import org.hibernate.Session; import org.hibernate.SessionBuilder; -import edu.umd.cs.findbugs.annotations.NonNull; - /** * Allow to customize a Session before opening it. * @@ -23,5 +21,5 @@ public interface SessionProvider { * @param builder Session builder. * @return A new session. */ - @NonNull Session newSession(@NonNull SessionBuilder builder); + Session newSession(SessionBuilder builder); } diff --git a/modules/jooby-hibernate/src/main/java/io/jooby/hibernate/SessionRequest.java b/modules/jooby-hibernate/src/main/java/io/jooby/hibernate/SessionRequest.java index 2a08a6d1d4..1076d29699 100644 --- a/modules/jooby-hibernate/src/main/java/io/jooby/hibernate/SessionRequest.java +++ b/modules/jooby-hibernate/src/main/java/io/jooby/hibernate/SessionRequest.java @@ -12,7 +12,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Route; import io.jooby.ServiceKey; import io.jooby.internal.hibernate.RequestSessionFactory; @@ -63,7 +62,7 @@ public class SessionRequest implements Route.Filter { * * @param name Name of the session factory. */ - public SessionRequest(@NonNull String name) { + public SessionRequest(String name) { this(ServiceKey.key(SessionFactory.class, name)); } @@ -79,8 +78,8 @@ private SessionRequest(ServiceKey sessionFactoryKey) { ServiceKey.key(SessionProvider.class, sessionFactoryKey.getName())); } - @NonNull @Override - public Route.Handler apply(@NonNull Route.Handler next) { + @Override + public Route.Handler apply(Route.Handler next) { return ctx -> { var sessionFactory = ctx.require(sessionFactoryKey); try (var session = sessionProvider.create(ctx, sessionFactory)) { @@ -108,7 +107,7 @@ public Route.Handler apply(@NonNull Route.Handler next) { * * @return The service key for accessing to the configured {@link SessionFactory} service. */ - public @NonNull ServiceKey getSessionFactoryKey() { + public ServiceKey getSessionFactoryKey() { return sessionFactoryKey; } } diff --git a/modules/jooby-hibernate/src/main/java/io/jooby/hibernate/StatelessSessionProvider.java b/modules/jooby-hibernate/src/main/java/io/jooby/hibernate/StatelessSessionProvider.java index 422831e8e2..3ac2a56cb6 100644 --- a/modules/jooby-hibernate/src/main/java/io/jooby/hibernate/StatelessSessionProvider.java +++ b/modules/jooby-hibernate/src/main/java/io/jooby/hibernate/StatelessSessionProvider.java @@ -8,8 +8,6 @@ import org.hibernate.StatelessSession; import org.hibernate.StatelessSessionBuilder; -import edu.umd.cs.findbugs.annotations.NonNull; - /** * Allow to customize a Session before opening it. * @@ -23,5 +21,5 @@ public interface StatelessSessionProvider { * @param builder Session builder. * @return A new session. */ - @NonNull StatelessSession newSession(@NonNull StatelessSessionBuilder builder); + StatelessSession newSession(StatelessSessionBuilder builder); } diff --git a/modules/jooby-hibernate/src/main/java/io/jooby/hibernate/TransactionalRequest.java b/modules/jooby-hibernate/src/main/java/io/jooby/hibernate/TransactionalRequest.java index d96dfbf5ab..e5050cddae 100644 --- a/modules/jooby-hibernate/src/main/java/io/jooby/hibernate/TransactionalRequest.java +++ b/modules/jooby-hibernate/src/main/java/io/jooby/hibernate/TransactionalRequest.java @@ -12,7 +12,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.*; import io.jooby.annotation.Transactional; import io.jooby.internal.hibernate.RequestSessionFactory; @@ -63,7 +62,7 @@ public class TransactionalRequest implements Route.Filter { * * @param name Name of the session factory. */ - public TransactionalRequest(@NonNull String name) { + public TransactionalRequest(String name) { this(ServiceKey.key(SessionFactory.class, name)); } @@ -108,8 +107,8 @@ public TransactionalRequest useStatelessSession() { return this; } - @NonNull @Override - public Route.Handler apply(@NonNull Route.Handler next) { + @Override + public Route.Handler apply(Route.Handler next) { return ctx -> { if (ctx.getRoute().isTransactional(enabledByDefault)) { var sessionFactory = ctx.require(sessionFactoryKey); diff --git a/modules/jooby-hibernate/src/main/java/io/jooby/hibernate/package-info.java b/modules/jooby-hibernate/src/main/java/io/jooby/hibernate/package-info.java index 014e94354d..2ed81918a7 100644 --- a/modules/jooby-hibernate/src/main/java/io/jooby/hibernate/package-info.java +++ b/modules/jooby-hibernate/src/main/java/io/jooby/hibernate/package-info.java @@ -1,3 +1,3 @@ /** Hibernate module. */ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.hibernate; diff --git a/modules/jooby-hibernate/src/main/java/module-info.java b/modules/jooby-hibernate/src/main/java/module-info.java index e5248144cc..aa7eed4cb3 100644 --- a/modules/jooby-hibernate/src/main/java/module-info.java +++ b/modules/jooby-hibernate/src/main/java/module-info.java @@ -8,7 +8,7 @@ exports io.jooby.hibernate; requires io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires typesafe.config; requires org.slf4j; requires org.hibernate.orm.core; diff --git a/modules/jooby-hikari/src/main/java/io/jooby/hikari/HikariModule.java b/modules/jooby-hikari/src/main/java/io/jooby/hikari/HikariModule.java index f82d232dd6..7d3bc8560b 100644 --- a/modules/jooby-hikari/src/main/java/io/jooby/hikari/HikariModule.java +++ b/modules/jooby-hikari/src/main/java/io/jooby/hikari/HikariModule.java @@ -27,7 +27,6 @@ import com.typesafe.config.ConfigValueType; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.AvailableSettings; import io.jooby.Environment; import io.jooby.Extension; @@ -141,7 +140,7 @@ public class HikariModule implements Extension { * * @param database Database key, database type or connection string. */ - public HikariModule(@NonNull String database) { + public HikariModule(String database) { this.database = database; } @@ -164,7 +163,7 @@ public HikariModule() { * * @param hikari Hikari configuration. */ - public HikariModule(@NonNull HikariConfig hikari) { + public HikariModule(HikariConfig hikari) { this(hikari.getPoolName()); this.hikari = hikari; } @@ -197,7 +196,7 @@ public HikariModule healthCheckRegistry(Object healthCheckRegistry) { } @Override - public void install(@NonNull Jooby application) { + public void install(Jooby application) { if (hikari == null) { hikari = build(application.getEnvironment(), database); } @@ -234,7 +233,7 @@ public void install(@NonNull Jooby application) { * @param url Jdbc connection string (a.k.a jdbc url) * @return Database type or given jdbc connection string for unknown or bad urls. */ - public static String databaseType(@NonNull String url) { + public static String databaseType(String url) { return Arrays.stream(url.toLowerCase().split(":")) .filter(token -> !SKIP_TOKENS.contains(token)) .findFirst() @@ -249,7 +248,7 @@ public static String databaseType(@NonNull String url) { * @param url Jdbc connection string (a.k.a jdbc url) * @return Database name. */ - public static @NonNull String databaseName(@NonNull String url) { + public static String databaseName(String url) { int len = url.length(); int q = url.indexOf('?'); if (q == -1) { diff --git a/modules/jooby-hikari/src/main/java/io/jooby/hikari/package-info.java b/modules/jooby-hikari/src/main/java/io/jooby/hikari/package-info.java index 245c5da2a5..49d572f938 100644 --- a/modules/jooby-hikari/src/main/java/io/jooby/hikari/package-info.java +++ b/modules/jooby-hikari/src/main/java/io/jooby/hikari/package-info.java @@ -1,3 +1,3 @@ /** Hikari module. */ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.hikari; diff --git a/modules/jooby-hikari/src/main/java/module-info.java b/modules/jooby-hikari/src/main/java/module-info.java index 8090cc6e84..1a58d33e85 100644 --- a/modules/jooby-hikari/src/main/java/module-info.java +++ b/modules/jooby-hikari/src/main/java/module-info.java @@ -9,7 +9,7 @@ requires io.jooby; requires org.slf4j; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires typesafe.config; requires java.sql; requires com.zaxxer.hikari; diff --git a/modules/jooby-jackson/src/main/java/io/jooby/jackson/Jackson2Module.java b/modules/jooby-jackson/src/main/java/io/jooby/jackson/Jackson2Module.java index 0a53e685ff..1eca40efdb 100644 --- a/modules/jooby-jackson/src/main/java/io/jooby/jackson/Jackson2Module.java +++ b/modules/jooby-jackson/src/main/java/io/jooby/jackson/Jackson2Module.java @@ -23,7 +23,6 @@ import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.module.paramnames.ParameterNamesModule; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.*; import io.jooby.internal.jackson.*; import io.jooby.output.Output; @@ -100,7 +99,7 @@ private interface ProjectionMixIn {} * @param mapper Object mapper to use. * @param contentType Content type. */ - public Jackson2Module(@NonNull ObjectMapper mapper, @NonNull MediaType contentType) { + public Jackson2Module(ObjectMapper mapper, MediaType contentType) { this.mapper = mapper; this.typeFactory = mapper.getTypeFactory(); this.mediaType = contentType; @@ -111,7 +110,7 @@ public Jackson2Module(@NonNull ObjectMapper mapper, @NonNull MediaType contentTy * * @param mapper Object mapper to use. */ - public Jackson2Module(@NonNull ObjectMapper mapper) { + public Jackson2Module(ObjectMapper mapper) { this(mapper, defaultTypes.getOrDefault(mapper.getClass().getSimpleName(), MediaType.json)); } @@ -133,7 +132,7 @@ public Jackson2Module module(Class module) { } @Override - public void install(@NonNull Jooby application) { + public void install(Jooby application) { application.decoder(mediaType, this); application.encoder(mediaType, this); @@ -171,7 +170,7 @@ public void install(@NonNull Jooby application) { } @Override - public Output encode(@NonNull Context ctx, @NonNull Object value) throws Exception { + public Output encode(Context ctx, Object value) throws Exception { var factory = ctx.getOutputFactory(); ctx.setDefaultResponseType(mediaType); if (value instanceof Projected projected) { diff --git a/modules/jooby-jackson/src/main/java/io/jooby/jackson/JacksonModule.java b/modules/jooby-jackson/src/main/java/io/jooby/jackson/JacksonModule.java index 0e21925126..5371b596be 100644 --- a/modules/jooby-jackson/src/main/java/io/jooby/jackson/JacksonModule.java +++ b/modules/jooby-jackson/src/main/java/io/jooby/jackson/JacksonModule.java @@ -10,7 +10,6 @@ import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.module.paramnames.ParameterNamesModule; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.MediaType; /** @@ -60,7 +59,7 @@ @Deprecated(since = "4.3.0", forRemoval = true) public class JacksonModule extends Jackson2Module { - public JacksonModule(@NonNull ObjectMapper mapper, @NonNull MediaType contentType) { + public JacksonModule(ObjectMapper mapper, MediaType contentType) { super(mapper, contentType); } @@ -69,7 +68,7 @@ public JacksonModule(@NonNull ObjectMapper mapper, @NonNull MediaType contentTyp * * @param mapper Object mapper to use. */ - public JacksonModule(@NonNull ObjectMapper mapper) { + public JacksonModule(ObjectMapper mapper) { super(mapper); } diff --git a/modules/jooby-jackson/src/main/java/io/jooby/jackson/package-info.java b/modules/jooby-jackson/src/main/java/io/jooby/jackson/package-info.java index 50c4576c91..80e0f9d979 100644 --- a/modules/jooby-jackson/src/main/java/io/jooby/jackson/package-info.java +++ b/modules/jooby-jackson/src/main/java/io/jooby/jackson/package-info.java @@ -41,5 +41,5 @@ * @author edgar * @since 2.0.0 */ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.jackson; diff --git a/modules/jooby-jackson/src/main/java/module-info.java b/modules/jooby-jackson/src/main/java/module-info.java index 018fb55d15..9a54ac7b03 100644 --- a/modules/jooby-jackson/src/main/java/module-info.java +++ b/modules/jooby-jackson/src/main/java/module-info.java @@ -53,7 +53,7 @@ exports io.jooby.jackson; requires io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires typesafe.config; requires com.fasterxml.jackson.databind; requires com.fasterxml.jackson.datatype.jdk8; diff --git a/modules/jooby-jackson3/src/main/java/io/jooby/jackson3/Jackson3Module.java b/modules/jooby-jackson3/src/main/java/io/jooby/jackson3/Jackson3Module.java index f5253e7b0e..e8eaa6fe43 100644 --- a/modules/jooby-jackson3/src/main/java/io/jooby/jackson3/Jackson3Module.java +++ b/modules/jooby-jackson3/src/main/java/io/jooby/jackson3/Jackson3Module.java @@ -12,7 +12,6 @@ import java.util.stream.Stream; import com.fasterxml.jackson.annotation.JsonFilter; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.*; import io.jooby.internal.jackson3.*; import io.jooby.output.Output; @@ -91,7 +90,7 @@ public class Jackson3Module implements Extension, MessageDecoder, MessageEncoder * @param mapper Object mapper to use. * @param contentType Content type. */ - public Jackson3Module(@NonNull ObjectMapper mapper, @NonNull MediaType contentType) { + public Jackson3Module(ObjectMapper mapper, MediaType contentType) { this.mapper = mapper; this.typeFactory = mapper.getTypeFactory(); this.mediaType = contentType; @@ -102,7 +101,7 @@ public Jackson3Module(@NonNull ObjectMapper mapper, @NonNull MediaType contentTy * * @param mapper Object mapper to use. */ - public Jackson3Module(@NonNull ObjectMapper mapper) { + public Jackson3Module(ObjectMapper mapper) { this(mapper, defaultTypes.getOrDefault(mapper.getClass().getSimpleName(), MediaType.json)); } @@ -127,7 +126,7 @@ public Jackson3Module module(Class module) { } @Override - public void install(@NonNull Jooby application) { + public void install(Jooby application) { application.decoder(mediaType, this); application.encoder(mediaType, this); @@ -178,7 +177,7 @@ private List computeModules(Jooby application) { } @Override - public Output encode(@NonNull Context ctx, @NonNull Object value) { + public Output encode(Context ctx, Object value) { var factory = ctx.getOutputFactory(); ctx.setDefaultResponseType(mediaType); if (value instanceof Projected projected) { diff --git a/modules/jooby-jackson3/src/main/java/io/jooby/jackson3/package-info.java b/modules/jooby-jackson3/src/main/java/io/jooby/jackson3/package-info.java index 05d1271144..4962c1b73c 100644 --- a/modules/jooby-jackson3/src/main/java/io/jooby/jackson3/package-info.java +++ b/modules/jooby-jackson3/src/main/java/io/jooby/jackson3/package-info.java @@ -1,2 +1,2 @@ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.jackson3; diff --git a/modules/jooby-jackson3/src/main/java/module-info.java b/modules/jooby-jackson3/src/main/java/module-info.java index 5500abfdda..48897b1bcc 100644 --- a/modules/jooby-jackson3/src/main/java/module-info.java +++ b/modules/jooby-jackson3/src/main/java/module-info.java @@ -8,7 +8,7 @@ exports io.jooby.jackson3; requires io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires typesafe.config; requires tools.jackson.databind; } diff --git a/modules/jooby-jasypt/src/main/java/io/jooby/jasypt/JasyptModule.java b/modules/jooby-jasypt/src/main/java/io/jooby/jasypt/JasyptModule.java index 2a4815bd93..596dab5fd2 100644 --- a/modules/jooby-jasypt/src/main/java/io/jooby/jasypt/JasyptModule.java +++ b/modules/jooby-jasypt/src/main/java/io/jooby/jasypt/JasyptModule.java @@ -16,7 +16,6 @@ import com.typesafe.config.Config; import com.typesafe.config.ConfigFactory; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Environment; import io.jooby.Extension; import io.jooby.Jooby; @@ -59,7 +58,7 @@ public class JasyptModule implements Extension { * * @param encryptor Encryptor. */ - public JasyptModule(@NonNull PBEStringEncryptor encryptor) { + public JasyptModule(PBEStringEncryptor encryptor) { this.encryptor = encryptor; } @@ -73,7 +72,7 @@ public JasyptModule() { * * @param passwordProvider Password provider. */ - public JasyptModule(@NonNull SneakyThrows.Function passwordProvider) { + public JasyptModule(SneakyThrows.Function passwordProvider) { this.passwordProvider = passwordProvider; } @@ -84,13 +83,13 @@ public JasyptModule(@NonNull SneakyThrows.Function passwordProvi * @param prefix Prefix of encrypted properties. * @return This module. */ - public JasyptModule setPrefix(@NonNull String prefix) { + public JasyptModule setPrefix(String prefix) { this.prefix = prefix; return this; } @Override - public void install(@NonNull Jooby application) { + public void install(Jooby application) { PBEStringEncryptor encryptor = Optional.ofNullable(this.encryptor).orElseGet(() -> create(application, passwordProvider)); @@ -140,12 +139,12 @@ public void install(@NonNull Jooby application) { * @param application Application. * @return A new encryptor. */ - public static PBEStringEncryptor create(@NonNull Jooby application) { + public static PBEStringEncryptor create(Jooby application) { return create(application, DEFAULT_PASSWORD_PROVIDER); } private static PBEStringEncryptor create( - @NonNull Jooby application, @NonNull SneakyThrows.Function passwordProvider) { + Jooby application, SneakyThrows.Function passwordProvider) { Config config = application.getConfig(); String password = passwordProvider.apply(config); diff --git a/modules/jooby-jasypt/src/main/java/io/jooby/jasypt/package-info.java b/modules/jooby-jasypt/src/main/java/io/jooby/jasypt/package-info.java index f6a0485713..d110a69aef 100644 --- a/modules/jooby-jasypt/src/main/java/io/jooby/jasypt/package-info.java +++ b/modules/jooby-jasypt/src/main/java/io/jooby/jasypt/package-info.java @@ -1,2 +1,2 @@ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.jasypt; diff --git a/modules/jooby-javadoc/src/test/java/io/jooby/javadoc/input/ApiDoc.java b/modules/jooby-javadoc/src/test/java/io/jooby/javadoc/input/ApiDoc.java index 683474d3de..ce44dc76f0 100644 --- a/modules/jooby-javadoc/src/test/java/io/jooby/javadoc/input/ApiDoc.java +++ b/modules/jooby-javadoc/src/test/java/io/jooby/javadoc/input/ApiDoc.java @@ -7,7 +7,6 @@ import java.util.List; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.annotation.GET; import io.jooby.annotation.Path; import io.jooby.annotation.QueryParam; @@ -42,7 +41,7 @@ public class ApiDoc { * @return Welcome message 200. * @throws NullPointerException One something is null. */ - @NonNull @GET + @GET public String hello( @QueryParam List> name, @QueryParam int age, diff --git a/modules/jooby-javadoc/src/test/java/io/jooby/javadoc/input/LambdaRefApp.java b/modules/jooby-javadoc/src/test/java/io/jooby/javadoc/input/LambdaRefApp.java index 32a12bc038..2d21d3764d 100644 --- a/modules/jooby-javadoc/src/test/java/io/jooby/javadoc/input/LambdaRefApp.java +++ b/modules/jooby-javadoc/src/test/java/io/jooby/javadoc/input/LambdaRefApp.java @@ -5,7 +5,6 @@ */ package io.jooby.javadoc.input; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.Jooby; import io.jooby.javadoc.input.sub.SubPackageHandler; @@ -28,7 +27,7 @@ public class LambdaRefApp extends Jooby { * * @param id Pet ID. */ - private @NonNull String findPetById(Context ctx) { + private String findPetById(Context ctx) { var id = ctx.path("id").value(); return "Pets"; } @@ -39,7 +38,7 @@ public class LambdaRefApp extends Jooby { Description in next line. @param id Path ID. */ - private static @NonNull String staticFindPetById(Context ctx) { + private static String staticFindPetById(Context ctx) { var id = ctx.path("id").value(); return "Pets"; } diff --git a/modules/jooby-javadoc/src/test/java/io/jooby/javadoc/input/MultilineComment.java b/modules/jooby-javadoc/src/test/java/io/jooby/javadoc/input/MultilineComment.java index bcdb959664..f6ef50247e 100644 --- a/modules/jooby-javadoc/src/test/java/io/jooby/javadoc/input/MultilineComment.java +++ b/modules/jooby-javadoc/src/test/java/io/jooby/javadoc/input/MultilineComment.java @@ -5,7 +5,6 @@ */ package io.jooby.javadoc.input; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.Jooby; @@ -21,7 +20,7 @@ public class MultilineComment extends Jooby { line. @param id Path ID. */ - private @NonNull String multilineComment(Context ctx) { + private String multilineComment(Context ctx) { var id = ctx.path("id").value(); return "Pets"; } diff --git a/modules/jooby-javadoc/src/test/java/io/jooby/javadoc/input/NoClassDoc.java b/modules/jooby-javadoc/src/test/java/io/jooby/javadoc/input/NoClassDoc.java index 5b6a5a8071..26f118c6c3 100644 --- a/modules/jooby-javadoc/src/test/java/io/jooby/javadoc/input/NoClassDoc.java +++ b/modules/jooby-javadoc/src/test/java/io/jooby/javadoc/input/NoClassDoc.java @@ -5,7 +5,6 @@ */ package io.jooby.javadoc.input; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.annotation.GET; import io.jooby.annotation.Path; import io.jooby.annotation.QueryParam; @@ -19,7 +18,7 @@ public class NoClassDoc { * @param name Name. * @return Person name. */ - @NonNull @GET + @GET public String hello(@QueryParam String name) { return "hello"; } diff --git a/modules/jooby-javadoc/src/test/java/io/jooby/javadoc/input/NoDoc.java b/modules/jooby-javadoc/src/test/java/io/jooby/javadoc/input/NoDoc.java index 8ff0eeb8eb..e95879b5e4 100644 --- a/modules/jooby-javadoc/src/test/java/io/jooby/javadoc/input/NoDoc.java +++ b/modules/jooby-javadoc/src/test/java/io/jooby/javadoc/input/NoDoc.java @@ -5,7 +5,6 @@ */ package io.jooby.javadoc.input; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.annotation.GET; import io.jooby.annotation.Path; import io.jooby.annotation.QueryParam; @@ -13,7 +12,7 @@ @Path("/api") public class NoDoc { - @NonNull @GET + @GET public String hello(@QueryParam String name) { return "hello"; } diff --git a/modules/jooby-javadoc/src/test/java/io/jooby/javadoc/input/QueryBeanDoc.java b/modules/jooby-javadoc/src/test/java/io/jooby/javadoc/input/QueryBeanDoc.java index d0133a3485..0309875741 100644 --- a/modules/jooby-javadoc/src/test/java/io/jooby/javadoc/input/QueryBeanDoc.java +++ b/modules/jooby-javadoc/src/test/java/io/jooby/javadoc/input/QueryBeanDoc.java @@ -5,7 +5,6 @@ */ package io.jooby.javadoc.input; -import edu.umd.cs.findbugs.annotations.NonNull; import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotEmpty; @@ -30,7 +29,7 @@ public class QueryBeanDoc { * * @return Filter query. Works like internal filter. */ - @NonNull public String getFq() { + public String getFq() { return fq; } diff --git a/modules/jooby-jdbi/src/main/java/io/jooby/jdbi/JdbiModule.java b/modules/jooby-jdbi/src/main/java/io/jooby/jdbi/JdbiModule.java index 0359e7eae5..07eabe30cd 100644 --- a/modules/jooby-jdbi/src/main/java/io/jooby/jdbi/JdbiModule.java +++ b/modules/jooby-jdbi/src/main/java/io/jooby/jdbi/JdbiModule.java @@ -15,7 +15,6 @@ import org.jdbi.v3.core.Handle; import org.jdbi.v3.core.Jdbi; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Extension; import io.jooby.Jooby; import io.jooby.ServiceKey; @@ -102,7 +101,7 @@ public JdbiModule() { * * @param name The name/key of the data source to attach. */ - public JdbiModule(@NonNull String name) { + public JdbiModule(String name) { this.name = name; this.factory = null; } @@ -113,7 +112,7 @@ public JdbiModule(@NonNull String name) { * * @param factory Jdbi factory. */ - public JdbiModule(@NonNull Function factory) { + public JdbiModule(Function factory) { this("db", factory); } @@ -123,7 +122,7 @@ public JdbiModule(@NonNull Function factory) { * @param name Name for registering the service. * @param factory Jdbi factory. */ - public JdbiModule(@NonNull String name, @NonNull Function factory) { + public JdbiModule(String name, Function factory) { this(name); this.factory = factory; } @@ -150,13 +149,13 @@ public JdbiModule(@NonNull String name, @NonNull Function fact * @param sqlObjects List of SQL object to register as services. * @return This module. */ - public @NonNull JdbiModule sqlObjects(@NonNull Class... sqlObjects) { + public JdbiModule sqlObjects(Class... sqlObjects) { this.sqlObjects = Arrays.asList(sqlObjects); return this; } @Override - public void install(@NonNull Jooby application) throws Exception { + public void install(Jooby application) throws Exception { ServiceRegistry registry = application.getServices(); Jdbi jdbi; if (factory != null) { @@ -179,7 +178,7 @@ public void install(@NonNull Jooby application) throws Exception { } } - private DataSource findDataSource(@NonNull ServiceRegistry registry) { + private DataSource findDataSource(ServiceRegistry registry) { DataSource dataSource = registry.getOrNull(ServiceKey.key(DataSource.class, name)); if (dataSource == null) { // TODO: replace with usage exception diff --git a/modules/jooby-jdbi/src/main/java/io/jooby/jdbi/TransactionalRequest.java b/modules/jooby-jdbi/src/main/java/io/jooby/jdbi/TransactionalRequest.java index 2101bdafe9..9bf637c7e4 100644 --- a/modules/jooby-jdbi/src/main/java/io/jooby/jdbi/TransactionalRequest.java +++ b/modules/jooby-jdbi/src/main/java/io/jooby/jdbi/TransactionalRequest.java @@ -8,7 +8,6 @@ import org.jdbi.v3.core.Handle; import org.jdbi.v3.core.Jdbi; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.RequestScope; import io.jooby.Route; import io.jooby.Route.Filter; @@ -80,7 +79,7 @@ public class TransactionalRequest implements Filter { * * @param name Jdbi service name. */ - public TransactionalRequest(@NonNull String name) { + public TransactionalRequest(String name) { key = ServiceKey.key(Jdbi.class, name); } @@ -104,8 +103,8 @@ public TransactionalRequest enabledByDefault(boolean enabledByDefault) { return this; } - @NonNull @Override - public Route.Handler apply(@NonNull Route.Handler next) { + @Override + public Route.Handler apply(Route.Handler next) { return ctx -> { if (ctx.getRoute().isTransactional(enabledByDefault)) { Jdbi jdbi = ctx.require(key); diff --git a/modules/jooby-jdbi/src/main/java/io/jooby/jdbi/package-info.java b/modules/jooby-jdbi/src/main/java/io/jooby/jdbi/package-info.java index 5eed347d0a..a13ff719f4 100644 --- a/modules/jooby-jdbi/src/main/java/io/jooby/jdbi/package-info.java +++ b/modules/jooby-jdbi/src/main/java/io/jooby/jdbi/package-info.java @@ -1,3 +1,3 @@ /** Jdbi module. */ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.jdbi; diff --git a/modules/jooby-jdbi/src/main/java/module-info.java b/modules/jooby-jdbi/src/main/java/module-info.java index 0c82597d36..44ad93daa8 100644 --- a/modules/jooby-jdbi/src/main/java/module-info.java +++ b/modules/jooby-jdbi/src/main/java/module-info.java @@ -8,7 +8,7 @@ exports io.jooby.jdbi; requires io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires typesafe.config; requires java.sql; requires org.jdbi.v3.core; diff --git a/modules/jooby-jetty/src/main/java/io/jooby/internal/jetty/JettyContext.java b/modules/jooby-jetty/src/main/java/io/jooby/internal/jetty/JettyContext.java index f9d0d1d81b..5d12a2e25d 100644 --- a/modules/jooby-jetty/src/main/java/io/jooby/internal/jetty/JettyContext.java +++ b/modules/jooby-jetty/src/main/java/io/jooby/internal/jetty/JettyContext.java @@ -49,10 +49,9 @@ import org.eclipse.jetty.util.Fields; import org.eclipse.jetty.util.Promise; import org.eclipse.jetty.websocket.server.ServerWebSocketContainer; +import org.jspecify.annotations.Nullable; import org.slf4j.Logger; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; import io.jooby.*; import io.jooby.ByteRange; import io.jooby.internal.jetty.http2.JettyHeaders; @@ -124,13 +123,13 @@ public JettyContext( this.inEventLoop = invocationType == InvocationType.NON_BLOCKING; } - @NonNull @Override + @Override public Map getAttributes() { return attributes; } @Override - public @NonNull Map cookieMap() { + public Map cookieMap() { if (this.cookies == null) { this.cookies = Collections.emptyMap(); var cookies = Request.getCookies(request); @@ -144,7 +143,7 @@ public Map getAttributes() { return cookies; } - @NonNull @Override + @Override public Body body() { InputStream in = Content.Source.asInputStream(request); long len = request.getLength(); @@ -154,56 +153,56 @@ public Body body() { return Body.of(this, in, len); } - @NonNull @Override + @Override public Router getRouter() { return router; } - @NonNull @Override + @Override public String getMethod() { return method; } - @NonNull @Override - public Context setMethod(@NonNull String method) { + @Override + public Context setMethod(String method) { this.method = method.toUpperCase(); return this; } - @NonNull @Override + @Override public Route getRoute() { return route; } - @NonNull @Override + @Override public Context setRoute(Route route) { this.route = route; return this; } - @NonNull @Override + @Override public String getRequestPath() { return requestPath; } - @NonNull @Override - public Context setRequestPath(@NonNull String path) { + @Override + public Context setRequestPath(String path) { this.requestPath = path; return this; } - @NonNull @Override + @Override public Map pathMap() { return pathMap; } - @NonNull @Override + @Override public Context setPathMap(Map pathMap) { this.pathMap = pathMap; return this; } - @NonNull @Override + @Override public QueryString query() { if (query == null) { query = QueryString.create(getValueFactory(), request.getHttpURI().getQuery()); @@ -211,7 +210,7 @@ public QueryString query() { return query; } - @NonNull @Override + @Override public Formdata form() { if (formdata == null) { formdata = Formdata.create(getValueFactory()); @@ -271,12 +270,12 @@ public InvocationType getInvocationType() { return formdata; } - @NonNull @Override - public Value header(@NonNull String name) { + @Override + public Value header(String name) { return Value.create(getValueFactory(), name, request.getHeaders().getValuesList(name)); } - @NonNull @Override + @Override public Value header() { if (headers == null) { Map> headerMap = new LinkedHashMap<>(); @@ -288,13 +287,13 @@ public Value header() { return headers; } - @NonNull @Override + @Override public String getHost() { return host == null ? DefaultContext.super.getHost() : host; } - @NonNull @Override - public Context setHost(@NonNull String host) { + @Override + public Context setHost(String host) { this.host = host; return this; } @@ -304,13 +303,13 @@ public int getPort() { return port > 0 ? port : DefaultContext.super.getPort(); } - @NonNull @Override + @Override public Context setPort(int port) { this.port = port; return this; } - @NonNull @Override + @Override public String getRemoteAddress() { if (remoteAddress == null) { remoteAddress = Optional.ofNullable(Request.getRemoteAddr(request)).orElse("").trim(); @@ -318,24 +317,24 @@ public String getRemoteAddress() { return remoteAddress; } - @NonNull @Override - public Context setRemoteAddress(@NonNull String remoteAddress) { + @Override + public Context setRemoteAddress(String remoteAddress) { this.remoteAddress = remoteAddress; return this; } - @NonNull @Override + @Override public String getProtocol() { return request.getConnectionMetaData().getProtocol(); } - @NonNull @Override + @Override public List getClientCertificates() { var clientCertificates = request.getAttribute("org.eclipse.jetty.server.peerCertificates"); return clientCertificates == null ? List.of() : List.of((Certificate[]) clientCertificates); } - @NonNull @Override + @Override public String getScheme() { if (scheme == null) { scheme = request.isSecure() ? "https" : "http"; @@ -343,8 +342,8 @@ public String getScheme() { return scheme; } - @NonNull @Override - public Context setScheme(@NonNull String scheme) { + @Override + public Context setScheme(String scheme) { this.scheme = scheme; return this; } @@ -354,13 +353,13 @@ public boolean isInIoThread() { return inEventLoop; } - @NonNull @Override - public Context dispatch(@NonNull Runnable action) { + @Override + public Context dispatch(Runnable action) { return dispatch(router.getWorker(), action); } - @NonNull @Override - public Context dispatch(@NonNull Executor executor, @NonNull Runnable action) { + @Override + public Context dispatch(Executor executor, Runnable action) { if (inEventLoop) { inEventLoop = false; executor.execute(action); @@ -370,8 +369,8 @@ public Context dispatch(@NonNull Executor executor, @NonNull Runnable action) { return this; } - @NonNull @Override - public Context upgrade(@NonNull WebSocket.Initializer handler) { + @Override + public Context upgrade(WebSocket.Initializer handler) { try { responseStarted = true; request.setAttribute(JettyContext.class.getName(), this); @@ -386,8 +385,8 @@ public Context upgrade(@NonNull WebSocket.Initializer handler) { } } - @NonNull @Override - public Context upgrade(@NonNull ServerSentEmitter.Handler handler) { + @Override + public Context upgrade(ServerSentEmitter.Handler handler) { try { responseStarted = true; handler.handle(new JettyServerSentEmitter(this, response)); @@ -397,66 +396,66 @@ public Context upgrade(@NonNull ServerSentEmitter.Handler handler) { } } - @NonNull @Override + @Override public StatusCode getResponseCode() { return StatusCode.valueOf(response.getStatus()); } - @NonNull @Override + @Override public Context setResponseCode(int statusCode) { response.setStatus(statusCode); return this; } - @NonNull @Override + @Override public MediaType getResponseType() { return responseType == null ? MediaType.text : responseType; } - @NonNull @Override - public Context setDefaultResponseType(@NonNull MediaType contentType) { + @Override + public Context setDefaultResponseType(MediaType contentType) { if (responseType == null) { setResponseType(contentType); } return this; } - @NonNull @Override - public Context setResponseType(@NonNull MediaType contentType) { + @Override + public Context setResponseType(MediaType contentType) { this.responseType = contentType; response.getHeaders().put(JettyHeaders.contentType(contentType)); return this; } - @NonNull @Override - public Context setResponseType(@NonNull String contentType) { + @Override + public Context setResponseType(String contentType) { return setResponseType(MediaType.valueOf(contentType)); } - @NonNull @Override - public Context setResponseHeader(@NonNull String name, @NonNull String value) { + @Override + public Context setResponseHeader(String name, String value) { response.getHeaders().put(name, value); return this; } - @NonNull @Override - public Context removeResponseHeader(@NonNull String name) { + @Override + public Context removeResponseHeader(String name) { response.getHeaders().remove(name); return this; } - @NonNull @Override + @Override public Context removeResponseHeaders() { response.reset(); return this; } @Nullable @Override - public String getResponseHeader(@NonNull String name) { + public String getResponseHeader(String name) { return response.getHeaders().get(name); } - @NonNull @Override + @Override public Context setResponseLength(long length) { response.getHeaders().put(CONTENT_LENGTH, length); return this; @@ -467,7 +466,7 @@ public long getResponseLength() { return response.getHeaders().getLongField(CONTENT_LENGTH); } - @NonNull public Context setResponseCookie(@NonNull Cookie cookie) { + public Context setResponseCookie(Cookie cookie) { if (responseCookies == null) { responseCookies = new HashMap<>(); } @@ -480,28 +479,28 @@ public long getResponseLength() { return this; } - @NonNull @Override + @Override public Sender responseSender() { responseStarted = true; ifSetChunked(); return new JettySender(this, response); } - @NonNull @Override + @Override public OutputStream responseStream() { responseStarted = true; ifSetChunked(); return new JettyOutputStream(asOutputStream(response), this); } - @NonNull @Override + @Override public PrintWriter responseWriter(MediaType type) { setResponseType(type); return new PrintWriter( responseStream(), false, Optional.ofNullable(type.getCharset()).orElse(UTF_8)); } - @NonNull @Override + @Override public Context send(StatusCode statusCode) { responseStarted = true; response.setStatus(statusCode.value()); @@ -509,8 +508,8 @@ public Context send(StatusCode statusCode) { return this; } - @NonNull @Override - public Context send(@NonNull ByteBuffer[] data) { + @Override + public Context send(ByteBuffer[] data) { var length = response.getHeaders().getLongField(CONTENT_LENGTH); if (length <= 0) { setResponseLength(BufferUtil.remaining(data)); @@ -520,24 +519,24 @@ public Context send(@NonNull ByteBuffer[] data) { return this; } - @NonNull @Override - public Context send(@NonNull byte[] data) { + @Override + public Context send(byte[] data) { return send(ByteBuffer.wrap(data)); } - @NonNull @Override - public Context send(@NonNull String data, @NonNull Charset charset) { + @Override + public Context send(String data, Charset charset) { return send(ByteBuffer.wrap(data.getBytes(charset))); } - @NonNull @Override - public Context send(@NonNull Output output) { + @Override + public Context send(Output output) { output.send(this); return this; } - @NonNull @Override - public Context send(@NonNull ByteBuffer data) { + @Override + public Context send(ByteBuffer data) { var length = response.getHeaders().getLongField(CONTENT_LENGTH); if (length <= 0) { setResponseLength(BufferUtil.remaining(data)); @@ -547,22 +546,22 @@ public Context send(@NonNull ByteBuffer data) { return this; } - @NonNull @Override - public Context send(@NonNull ReadableByteChannel channel) { + @Override + public Context send(ReadableByteChannel channel) { ifSetChunked(); return sendStreamInternal(Channels.newInputStream(channel)); } @Override - public @NonNull Context send(@NonNull FileDownload file) { + public Context send(FileDownload file) { if (file.deleteOnComplete()) { register(DeleteFileTask.of(file)); } return DefaultContext.super.send(file); } - @NonNull @Override - public Context send(@NonNull InputStream in) { + @Override + public Context send(InputStream in) { try { if (in instanceof FileInputStream) { setResponseLength(((FileInputStream) in).getChannel().size()); @@ -573,7 +572,7 @@ public Context send(@NonNull InputStream in) { } } - private Context sendStreamInternal(@NonNull InputStream in) { + private Context sendStreamInternal(InputStream in) { try { var len = response.getHeaders().getLongField(CONTENT_LENGTH); InputStream stream; @@ -593,8 +592,8 @@ private Context sendStreamInternal(@NonNull InputStream in) { } } - @NonNull @Override - public Context send(@NonNull FileChannel file) { + @Override + public Context send(FileChannel file) { try { response.getHeaders().put(CONTENT_LENGTH, file.size()); return sendStreamInternal(Channels.newInputStream(file)); @@ -616,13 +615,13 @@ public boolean getResetHeadersOnError() { } @Override - public @NonNull Context setResetHeadersOnError(boolean resetHeadersOnError) { + public Context setResetHeadersOnError(boolean resetHeadersOnError) { this.resetHeadersOnError = resetHeadersOnError; return this; } - @NonNull @Override - public Context onComplete(@NonNull Route.Complete task) { + @Override + public Context onComplete(Route.Complete task) { if (listeners == null) { listeners = new CompletionListeners(); } diff --git a/modules/jooby-jetty/src/main/java/io/jooby/internal/jetty/JettyFileUpload.java b/modules/jooby-jetty/src/main/java/io/jooby/internal/jetty/JettyFileUpload.java index df89d0ab5e..1c16988606 100644 --- a/modules/jooby-jetty/src/main/java/io/jooby/internal/jetty/JettyFileUpload.java +++ b/modules/jooby-jetty/src/main/java/io/jooby/internal/jetty/JettyFileUpload.java @@ -13,7 +13,6 @@ import org.eclipse.jetty.http.MultiPart; import org.eclipse.jetty.io.Content; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.FileUpload; import io.jooby.SneakyThrows; @@ -26,18 +25,18 @@ public JettyFileUpload(Path tmpdir, MultiPart.Part upload) { this.upload = upload; } - @NonNull @Override + @Override public String getName() { return upload.getName(); } @Override - public @NonNull String getFileName() { + public String getFileName() { return upload.getFileName(); } @Override - public @NonNull byte[] bytes() { + public byte[] bytes() { try (var in = stream()) { return in.readAllBytes(); } catch (IOException x) { @@ -46,7 +45,7 @@ public String getName() { } @Override - public @NonNull InputStream stream() { + public InputStream stream() { try { return Content.Source.asInputStream(upload.getContentSource()); } catch (Exception c) { @@ -60,7 +59,7 @@ public String getContentType() { } @Override - public @NonNull Path path() { + public Path path() { try { if (upload instanceof MultiPart.PathPart pathPart) { return pathPart.getPath(); diff --git a/modules/jooby-jetty/src/main/java/io/jooby/internal/jetty/JettySender.java b/modules/jooby-jetty/src/main/java/io/jooby/internal/jetty/JettySender.java index c8f235041f..19e12f3646 100644 --- a/modules/jooby-jetty/src/main/java/io/jooby/internal/jetty/JettySender.java +++ b/modules/jooby-jetty/src/main/java/io/jooby/internal/jetty/JettySender.java @@ -11,7 +11,6 @@ import org.eclipse.jetty.server.Response; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Sender; import io.jooby.output.Output; @@ -25,13 +24,13 @@ public JettySender(JettyContext ctx, Response response) { } @Override - public Sender write(@NonNull byte[] data, @NonNull Callback callback) { + public Sender write(byte[] data, Callback callback) { response.write(false, ByteBuffer.wrap(data), toJettyCallback(ctx, callback)); return this; } - @NonNull @Override - public Sender write(@NonNull Output output, @NonNull Callback callback) { + @Override + public Sender write(Output output, Callback callback) { fromOutput(response, toJettyCallback(ctx, callback), output).send(false); return this; } diff --git a/modules/jooby-jetty/src/main/java/io/jooby/internal/jetty/JettyServerSentEmitter.java b/modules/jooby-jetty/src/main/java/io/jooby/internal/jetty/JettyServerSentEmitter.java index 6cf1ecee0a..80ad9d353f 100644 --- a/modules/jooby-jetty/src/main/java/io/jooby/internal/jetty/JettyServerSentEmitter.java +++ b/modules/jooby-jetty/src/main/java/io/jooby/internal/jetty/JettyServerSentEmitter.java @@ -15,7 +15,6 @@ import org.eclipse.jetty.server.Response; import org.eclipse.jetty.util.Callback; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.Server; import io.jooby.ServerSentEmitter; @@ -55,13 +54,13 @@ public boolean isOpen() { return open.get(); } - @NonNull @Override + @Override public Context getContext() { return Context.readOnly(jetty); } - @NonNull @Override - public ServerSentEmitter send(@NonNull ServerSentMessage data) { + @Override + public ServerSentEmitter send(ServerSentMessage data) { if (isOpen()) { fromOutput(response, this, data.encode(jetty)).send(false); } diff --git a/modules/jooby-jetty/src/main/java/io/jooby/internal/jetty/JettyWebSocket.java b/modules/jooby-jetty/src/main/java/io/jooby/internal/jetty/JettyWebSocket.java index 711c596ed4..f8c941ac69 100644 --- a/modules/jooby-jetty/src/main/java/io/jooby/internal/jetty/JettyWebSocket.java +++ b/modules/jooby-jetty/src/main/java/io/jooby/internal/jetty/JettyWebSocket.java @@ -25,7 +25,6 @@ import org.eclipse.jetty.websocket.api.Session; import org.eclipse.jetty.websocket.api.exceptions.CloseException; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.Server; import io.jooby.SneakyThrows; @@ -181,36 +180,36 @@ private boolean isTimeout(Throwable x) { return false; } - @NonNull @Override - public WebSocketConfigurer onConnect(@NonNull WebSocket.OnConnect callback) { + @Override + public WebSocketConfigurer onConnect(WebSocket.OnConnect callback) { onConnectCallback = callback; return this; } - @NonNull @Override - public WebSocketConfigurer onMessage(@NonNull WebSocket.OnMessage callback) { + @Override + public WebSocketConfigurer onMessage(WebSocket.OnMessage callback) { onMessageCallback = callback; return this; } - @NonNull @Override - public WebSocketConfigurer onError(@NonNull WebSocket.OnError callback) { + @Override + public WebSocketConfigurer onError(WebSocket.OnError callback) { onErrorCallback = callback; return this; } - @NonNull @Override - public WebSocketConfigurer onClose(@NonNull WebSocket.OnClose callback) { + @Override + public WebSocketConfigurer onClose(WebSocket.OnClose callback) { onCloseCallback.set(callback); return this; } - @NonNull @Override + @Override public Context getContext() { return Context.readOnly(ctx); } - @NonNull @Override + @Override public List getSessions() { List sessions = all.get(key); if (sessions == null) { @@ -237,65 +236,65 @@ public void forEach(SneakyThrows.Consumer callback) { } } - @NonNull @Override - public WebSocket sendPing(@NonNull String message, @NonNull WriteCallback callback) { + @Override + public WebSocket sendPing(String message, WriteCallback callback) { return sendMessage( (remote, writeCallback) -> remote.sendPing(ByteBuffer.wrap(message.getBytes(UTF_8)), writeCallback), new WriteCallbackAdaptor(this, callback)); } - @NonNull @Override - public WebSocket sendPing(@NonNull ByteBuffer message, @NonNull WriteCallback callback) { + @Override + public WebSocket sendPing(ByteBuffer message, WriteCallback callback) { return sendMessage( (remote, writeCallback) -> remote.sendPing(message, writeCallback), new WriteCallbackAdaptor(this, callback)); } - @NonNull @Override - public WebSocket sendBinary(@NonNull String message, @NonNull WriteCallback callback) { + @Override + public WebSocket sendBinary(String message, WriteCallback callback) { return sendMessage( (remote, writeCallback) -> remote.sendBinary(ByteBuffer.wrap(message.getBytes(UTF_8)), writeCallback), new WriteCallbackAdaptor(this, callback)); } - @NonNull @Override - public WebSocket send(@NonNull String message, @NonNull WriteCallback callback) { + @Override + public WebSocket send(String message, WriteCallback callback) { return sendMessage( (remote, writeCallback) -> remote.sendText(message, writeCallback), new WriteCallbackAdaptor(this, callback)); } - @NonNull @Override - public WebSocket send(@NonNull ByteBuffer message, @NonNull WriteCallback callback) { + @Override + public WebSocket send(ByteBuffer message, WriteCallback callback) { return sendMessage( (remote, writeCallback) -> remote.sendText(UTF_8.decode(message).toString(), writeCallback), new WriteCallbackAdaptor(this, callback)); } - @NonNull @Override - public WebSocket send(@NonNull byte[] message, @NonNull WriteCallback callback) { + @Override + public WebSocket send(byte[] message, WriteCallback callback) { return send(new String(message, UTF_8), callback); } - @NonNull @Override - public WebSocket sendBinary(@NonNull ByteBuffer message, @NonNull WriteCallback callback) { + @Override + public WebSocket sendBinary(ByteBuffer message, WriteCallback callback) { return sendMessage( (remote, writeCallback) -> remote.sendBinary(message, writeCallback), new WriteCallbackAdaptor(this, callback)); } - @NonNull @Override - public WebSocket send(@NonNull Output message, @NonNull WriteCallback callback) { + @Override + public WebSocket send(Output message, WriteCallback callback) { return sendMessage( (remote, writeCallback) -> remote.sendText(UTF_8.decode(message.asByteBuffer()).toString(), writeCallback), new WriteCallbackAdaptor(this, callback)); } - @NonNull @Override - public WebSocket sendBinary(@NonNull Output message, @NonNull WriteCallback callback) { + @Override + public WebSocket sendBinary(Output message, WriteCallback callback) { return sendMessage( (remote, writeCallback) -> new WebSocketOutputCallback(writeCallback, message, remote::sendBinary).send(), @@ -315,13 +314,13 @@ private WebSocket sendMessage(BiConsumer writer, Callback cal return this; } - @NonNull @Override - public WebSocket render(@NonNull Object value, @NonNull WriteCallback callback) { + @Override + public WebSocket render(Object value, WriteCallback callback) { return renderMessage(value, false, callback); } - @NonNull @Override - public WebSocket renderBinary(@NonNull Object value, @NonNull WriteCallback callback) { + @Override + public WebSocket renderBinary(Object value, WriteCallback callback) { return renderMessage(value, true, callback); } @@ -334,8 +333,8 @@ private WebSocket renderMessage(Object value, boolean binary, WriteCallback call return this; } - @NonNull @Override - public WebSocket close(@NonNull WebSocketCloseStatus closeStatus) { + @Override + public WebSocket close(WebSocketCloseStatus closeStatus) { handleClose(closeStatus); return this; } diff --git a/modules/jooby-jetty/src/main/java/io/jooby/jetty/JettyServer.java b/modules/jooby-jetty/src/main/java/io/jooby/jetty/JettyServer.java index c2821216dc..2362ae8b03 100644 --- a/modules/jooby-jetty/src/main/java/io/jooby/jetty/JettyServer.java +++ b/modules/jooby-jetty/src/main/java/io/jooby/jetty/JettyServer.java @@ -29,7 +29,6 @@ import org.eclipse.jetty.websocket.server.ServerWebSocketContainer; import com.typesafe.config.Config; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.*; import io.jooby.exception.StartupException; import io.jooby.internal.jetty.*; @@ -69,7 +68,7 @@ public class JettyServer extends io.jooby.Server.Base { * @param options Options. * @param threadPool Custom thread pool. */ - public JettyServer(@NonNull ServerOptions options, @NonNull QueuedThreadPool threadPool) { + public JettyServer(ServerOptions options, QueuedThreadPool threadPool) { setOptions(options); this.threadPool = threadPool; } @@ -79,7 +78,7 @@ public JettyServer(@NonNull ServerOptions options, @NonNull QueuedThreadPool thr * * @param threadPool Custom thread pool. */ - public JettyServer(@NonNull QueuedThreadPool threadPool) { + public JettyServer(QueuedThreadPool threadPool) { this.threadPool = threadPool; } @@ -88,7 +87,7 @@ public JettyServer(@NonNull QueuedThreadPool threadPool) { * * @param options Options. */ - public JettyServer(@NonNull ServerOptions options) { + public JettyServer(ServerOptions options) { setOptions(options); } @@ -120,7 +119,7 @@ public JettyServer configure(Consumer configurer) { } @Override - public io.jooby.Server start(@NonNull Jooby... application) { + public io.jooby.Server start(Jooby... application) { // force options to be non-null var options = getOptions(); var portInUse = options.getPort(); @@ -346,7 +345,7 @@ private void isNotInUse(List protocols, String protocol, Consumer iterator() { + public Iterator iterator() { if (batch) { return getRequests().iterator(); } diff --git a/modules/jooby-jsonrpc/src/main/java/io/jooby/jsonrpc/JsonRpcResponse.java b/modules/jooby-jsonrpc/src/main/java/io/jooby/jsonrpc/JsonRpcResponse.java index da0f0f5037..c71a20e959 100644 --- a/modules/jooby-jsonrpc/src/main/java/io/jooby/jsonrpc/JsonRpcResponse.java +++ b/modules/jooby-jsonrpc/src/main/java/io/jooby/jsonrpc/JsonRpcResponse.java @@ -5,7 +5,7 @@ */ package io.jooby.jsonrpc; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; /** * Represents a JSON-RPC 2.0 Response object. diff --git a/modules/jooby-jsonrpc/src/main/java/io/jooby/jsonrpc/JsonRpcService.java b/modules/jooby-jsonrpc/src/main/java/io/jooby/jsonrpc/JsonRpcService.java index 1dba6aca3c..d3024b87ac 100644 --- a/modules/jooby-jsonrpc/src/main/java/io/jooby/jsonrpc/JsonRpcService.java +++ b/modules/jooby-jsonrpc/src/main/java/io/jooby/jsonrpc/JsonRpcService.java @@ -7,7 +7,6 @@ import java.util.List; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.Jooby; @@ -33,7 +32,7 @@ public interface JsonRpcService { * Must not be null. * @throws Exception If registration fails. */ - void install(@NonNull Jooby application) throws Exception; + void install(Jooby application) throws Exception; /** * Executes the requested method using the provided context and request data. @@ -43,5 +42,5 @@ public interface JsonRpcService { * @return The result of the method invocation. * @throws Exception If an error occurs during execution. */ - Object execute(@NonNull Context ctx, @NonNull JsonRpcRequest req) throws Exception; + Object execute(Context ctx, JsonRpcRequest req) throws Exception; } diff --git a/modules/jooby-jsonrpc/src/main/java/io/jooby/jsonrpc/package-info.java b/modules/jooby-jsonrpc/src/main/java/io/jooby/jsonrpc/package-info.java index 5a3c01923f..93d13b529c 100644 --- a/modules/jooby-jsonrpc/src/main/java/io/jooby/jsonrpc/package-info.java +++ b/modules/jooby-jsonrpc/src/main/java/io/jooby/jsonrpc/package-info.java @@ -30,5 +30,5 @@ * @author Edgar Espina * @since 4.0.17 */ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.jsonrpc; diff --git a/modules/jooby-jsonrpc/src/main/java/module-info.java b/modules/jooby-jsonrpc/src/main/java/module-info.java index b38a605ecc..615165bc7b 100644 --- a/modules/jooby-jsonrpc/src/main/java/module-info.java +++ b/modules/jooby-jsonrpc/src/main/java/module-info.java @@ -35,7 +35,7 @@ exports io.jooby.annotation.jsonrpc; requires io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires typesafe.config; requires org.slf4j; } diff --git a/modules/jooby-jstachio/src/main/java/io/jooby/jstachio/JStachioMessageEncoder.java b/modules/jooby-jstachio/src/main/java/io/jooby/jstachio/JStachioMessageEncoder.java index 2249d8deac..8158a7ec2b 100644 --- a/modules/jooby-jstachio/src/main/java/io/jooby/jstachio/JStachioMessageEncoder.java +++ b/modules/jooby-jstachio/src/main/java/io/jooby/jstachio/JStachioMessageEncoder.java @@ -8,7 +8,6 @@ import java.io.IOException; import java.util.function.BiFunction; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.MessageEncoder; import io.jooby.output.Output; @@ -25,7 +24,7 @@ public JStachioMessageEncoder( } @Override - public Output encode(@NonNull Context ctx, @NonNull Object value) throws Exception { + public Output encode(Context ctx, Object value) throws Exception { if (supportsType(value.getClass())) { return render(ctx, value); } diff --git a/modules/jooby-jstachio/src/main/java/io/jooby/jstachio/JStachioModule.java b/modules/jooby-jstachio/src/main/java/io/jooby/jstachio/JStachioModule.java index 5661e24643..b54f02b85e 100644 --- a/modules/jooby-jstachio/src/main/java/io/jooby/jstachio/JStachioModule.java +++ b/modules/jooby-jstachio/src/main/java/io/jooby/jstachio/JStachioModule.java @@ -8,8 +8,8 @@ import java.util.ServiceLoader; import java.util.function.BiFunction; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.Context; import io.jooby.Extension; import io.jooby.Jooby; @@ -43,7 +43,7 @@ public class JStachioModule implements Extension { * @param jstachio the jstachio instance to be used instead of the default. * @return this */ - public @NonNull JStachioModule jstachio(@Nullable JStachio jstachio) { + public JStachioModule jstachio(@Nullable JStachio jstachio) { this.jstachio = jstachio; return this; } @@ -55,7 +55,7 @@ public class JStachioModule implements Extension { * @return this * @throws IllegalArgumentException if the bufferSize is less than 0. */ - public @NonNull JStachioModule bufferSize(int bufferSize) { + public JStachioModule bufferSize(int bufferSize) { if (bufferSize < 0) { throw new IllegalArgumentException("bufferSize should be greater than 0"); } @@ -83,7 +83,7 @@ public JStachioModule contextFunction(BiFunction contex * {@inheritDoc} */ @Override - public void install(@NonNull Jooby application) throws Exception { + public void install(Jooby application) throws Exception { JStachio j = this.jstachio; ServiceRegistry services = application.getServices(); if (j == null) { diff --git a/modules/jooby-jstachio/src/main/java/io/jooby/jstachio/JoobyJStachioConfig.java b/modules/jooby-jstachio/src/main/java/io/jooby/jstachio/JoobyJStachioConfig.java index 1c6431acf0..70b2123c16 100644 --- a/modules/jooby-jstachio/src/main/java/io/jooby/jstachio/JoobyJStachioConfig.java +++ b/modules/jooby-jstachio/src/main/java/io/jooby/jstachio/JoobyJStachioConfig.java @@ -5,8 +5,8 @@ */ package io.jooby.jstachio; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.Environment; import io.jstach.jstachio.spi.JStachioConfig; @@ -18,7 +18,7 @@ public JoobyJStachioConfig(Environment environment) { } @Override - public @Nullable String getProperty(@NonNull String key) { + public @Nullable String getProperty(String key) { return environment.getProperty(key); } } diff --git a/modules/jooby-jstachio/src/main/java/io/jooby/jstachio/package-info.java b/modules/jooby-jstachio/src/main/java/io/jooby/jstachio/package-info.java index c95af0e0a0..2cbcf177e5 100644 --- a/modules/jooby-jstachio/src/main/java/io/jooby/jstachio/package-info.java +++ b/modules/jooby-jstachio/src/main/java/io/jooby/jstachio/package-info.java @@ -1,2 +1,2 @@ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.jstachio; diff --git a/modules/jooby-jstachio/src/main/java/module-info.java b/modules/jooby-jstachio/src/main/java/module-info.java index bcadfca17e..5816362cfb 100644 --- a/modules/jooby-jstachio/src/main/java/module-info.java +++ b/modules/jooby-jstachio/src/main/java/module-info.java @@ -13,7 +13,7 @@ requires transitive io.jstach.jstachio; requires transitive io.jooby; requires jakarta.inject; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; exports io.jooby.jstachio; diff --git a/modules/jooby-jte/src/main/java/io/jooby/internal/jte/JteModelEncoder.java b/modules/jooby-jte/src/main/java/io/jooby/internal/jte/JteModelEncoder.java index 00e8a43dc8..1064ed9ceb 100644 --- a/modules/jooby-jte/src/main/java/io/jooby/internal/jte/JteModelEncoder.java +++ b/modules/jooby-jte/src/main/java/io/jooby/internal/jte/JteModelEncoder.java @@ -7,15 +7,15 @@ import java.nio.charset.StandardCharsets; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import gg.jte.models.runtime.JteModel; import io.jooby.Context; import io.jooby.output.Output; public class JteModelEncoder implements io.jooby.MessageEncoder { @Nullable @Override - public Output encode(@NonNull Context ctx, @NonNull Object value) throws Exception { + public Output encode(Context ctx, Object value) throws Exception { if (value instanceof JteModel jte) { var buffer = ctx.getOutputFactory().allocate(); jte.render(new BufferedTemplateOutput(buffer, StandardCharsets.UTF_8)); diff --git a/modules/jooby-jte/src/main/java/io/jooby/jte/JteModule.java b/modules/jooby-jte/src/main/java/io/jooby/jte/JteModule.java index 5a019f5014..c5d1bd5ad0 100644 --- a/modules/jooby-jte/src/main/java/io/jooby/jte/JteModule.java +++ b/modules/jooby-jte/src/main/java/io/jooby/jte/JteModule.java @@ -12,8 +12,8 @@ import java.util.Optional; import java.util.stream.Stream; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import gg.jte.ContentType; import gg.jte.TemplateEngine; import gg.jte.resolve.DirectoryCodeResolver; @@ -51,7 +51,7 @@ public class JteModule implements Extension { * @param sourceDirectory Where templates are located. * @param classDirectory Where compiled templates are located. Only for production mode. */ - public JteModule(@NonNull Path sourceDirectory, @NonNull Path classDirectory) { + public JteModule(Path sourceDirectory, Path classDirectory) { this.sourceDirectory = requireNonNull(sourceDirectory, "Source directory is required."); this.classDirectory = requireNonNull(classDirectory, "Class directory is required."); } @@ -65,7 +65,7 @@ public JteModule(@NonNull Path sourceDirectory, @NonNull Path classDirectory) { * * @param sourceDirectory Where templates are located. */ - public JteModule(@NonNull Path sourceDirectory) { + public JteModule(Path sourceDirectory) { this.sourceDirectory = requireNonNull(sourceDirectory, "Source directory is required."); } @@ -74,12 +74,12 @@ public JteModule(@NonNull Path sourceDirectory) { * * @param templateEngine Attach this module to provided template engine. */ - public JteModule(@NonNull TemplateEngine templateEngine) { + public JteModule(TemplateEngine templateEngine) { this.templateEngine = requireNonNull(templateEngine, "Template engine is required."); } @Override - public void install(@NonNull Jooby application) { + public void install(Jooby application) { if (templateEngine == null) { this.templateEngine = create(application.getEnvironment(), sourceDirectory, classDirectory); } @@ -107,9 +107,7 @@ public void install(@NonNull Jooby application) { * @return */ public static TemplateEngine create( - @NonNull Environment environment, - @NonNull Path sourceDirectory, - @Nullable Path classDirectory) { + Environment environment, Path sourceDirectory, @Nullable Path classDirectory) { boolean dev = environment.isActive("dev", "test"); if (dev) { requireNonNull(sourceDirectory, "Source directory is required."); diff --git a/modules/jooby-jte/src/main/java/io/jooby/jte/JteTemplateEngine.java b/modules/jooby-jte/src/main/java/io/jooby/jte/JteTemplateEngine.java index 18c8894062..9397c1dfbe 100644 --- a/modules/jooby-jte/src/main/java/io/jooby/jte/JteTemplateEngine.java +++ b/modules/jooby-jte/src/main/java/io/jooby/jte/JteTemplateEngine.java @@ -9,7 +9,6 @@ import java.util.HashMap; import java.util.List; -import edu.umd.cs.findbugs.annotations.NonNull; import gg.jte.TemplateEngine; import io.jooby.Context; import io.jooby.MapModelAndView; @@ -26,7 +25,7 @@ public JteTemplateEngine(TemplateEngine jte) { this.extensions = List.of(".jte", ".kte"); } - @NonNull @Override + @Override public List extensions() { return extensions; } diff --git a/modules/jooby-jte/src/main/java/io/jooby/jte/package-info.java b/modules/jooby-jte/src/main/java/io/jooby/jte/package-info.java index 7a8cdeea58..1c3880655c 100644 --- a/modules/jooby-jte/src/main/java/io/jooby/jte/package-info.java +++ b/modules/jooby-jte/src/main/java/io/jooby/jte/package-info.java @@ -1,2 +1,2 @@ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.jte; diff --git a/modules/jooby-jte/src/main/java/module-info.java b/modules/jooby-jte/src/main/java/module-info.java index a4e443fca6..ca2473e057 100644 --- a/modules/jooby-jte/src/main/java/module-info.java +++ b/modules/jooby-jte/src/main/java/module-info.java @@ -8,7 +8,7 @@ exports io.jooby.jte; requires transitive io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires gg.jte; requires gg.jte.runtime; requires static gg.jte.models; diff --git a/modules/jooby-jwt/src/main/java/io/jooby/jwt/JwtSessionStore.java b/modules/jooby-jwt/src/main/java/io/jooby/jwt/JwtSessionStore.java index 732ae2e600..e3772713ca 100644 --- a/modules/jooby-jwt/src/main/java/io/jooby/jwt/JwtSessionStore.java +++ b/modules/jooby-jwt/src/main/java/io/jooby/jwt/JwtSessionStore.java @@ -13,8 +13,8 @@ import javax.crypto.SecretKey; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.Context; import io.jooby.Cookie; import io.jooby.Session; @@ -58,7 +58,7 @@ public class JwtSessionStore implements SessionStore { * @param token Session token. * @param key Secret key. */ - public JwtSessionStore(@NonNull SessionToken token, @NonNull String key) { + public JwtSessionStore(SessionToken token, String key) { this(token, Keys.hmacShaKeyFor(key.getBytes(StandardCharsets.UTF_8))); } @@ -69,37 +69,37 @@ public JwtSessionStore(@NonNull SessionToken token, @NonNull String key) { * @param token Session token. * @param key Secret key. */ - public JwtSessionStore(@NonNull SessionToken token, @NonNull SecretKey key) { + public JwtSessionStore(SessionToken token, SecretKey key) { this.store = SessionStore.signed(token, decoder(key), encoder(key)); } - @NonNull @Override - public Session newSession(@NonNull Context ctx) { + @Override + public Session newSession(Context ctx) { return store.newSession(ctx); } @Nullable @Override - public Session findSession(@NonNull Context ctx) { + public Session findSession(Context ctx) { return store.findSession(ctx); } @Override - public void deleteSession(@NonNull Context ctx, @NonNull Session session) { + public void deleteSession(Context ctx, Session session) { store.deleteSession(ctx, session); } @Override - public void touchSession(@NonNull Context ctx, @NonNull Session session) { + public void touchSession(Context ctx, Session session) { store.touchSession(ctx, session); } @Override - public void saveSession(@NonNull Context ctx, @NonNull Session session) { + public void saveSession(Context ctx, Session session) { store.saveSession(ctx, session); } @Override - public void renewSessionId(@NonNull Context ctx, @NonNull Session session) { + public void renewSessionId(Context ctx, Session session) { store.renewSessionId(ctx, session); } diff --git a/modules/jooby-jwt/src/main/java/io/jooby/jwt/package-info.java b/modules/jooby-jwt/src/main/java/io/jooby/jwt/package-info.java index 40df65d921..104b4e67cf 100644 --- a/modules/jooby-jwt/src/main/java/io/jooby/jwt/package-info.java +++ b/modules/jooby-jwt/src/main/java/io/jooby/jwt/package-info.java @@ -1,2 +1,2 @@ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.jwt; diff --git a/modules/jooby-kafka/src/main/java/io/jooby/kafka/KafkaConsumerModule.java b/modules/jooby-kafka/src/main/java/io/jooby/kafka/KafkaConsumerModule.java index 4fabf46e7d..c79eebcf3f 100644 --- a/modules/jooby-kafka/src/main/java/io/jooby/kafka/KafkaConsumerModule.java +++ b/modules/jooby-kafka/src/main/java/io/jooby/kafka/KafkaConsumerModule.java @@ -7,7 +7,6 @@ import org.apache.kafka.clients.consumer.KafkaConsumer; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Extension; import io.jooby.Jooby; @@ -48,7 +47,7 @@ public class KafkaConsumerModule implements Extension { * * @param key Kafka key. */ - public KafkaConsumerModule(@NonNull String key) { + public KafkaConsumerModule(String key) { this.key = key; } @@ -58,7 +57,7 @@ public KafkaConsumerModule() { } @Override - public void install(@NonNull Jooby application) { + public void install(Jooby application) { KafkaHelper.install(application, key, KafkaConsumer::new); } } diff --git a/modules/jooby-kafka/src/main/java/io/jooby/kafka/KafkaModule.java b/modules/jooby-kafka/src/main/java/io/jooby/kafka/KafkaModule.java index ea2fc49b89..d3f60c68b9 100644 --- a/modules/jooby-kafka/src/main/java/io/jooby/kafka/KafkaModule.java +++ b/modules/jooby-kafka/src/main/java/io/jooby/kafka/KafkaModule.java @@ -5,7 +5,6 @@ */ package io.jooby.kafka; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Extension; import io.jooby.Jooby; @@ -70,13 +69,13 @@ public KafkaModule() { * @param producerKey Database key * @param consumerKey Database key */ - public KafkaModule(@NonNull String producerKey, @NonNull String consumerKey) { + public KafkaModule(String producerKey, String consumerKey) { this.producerKey = producerKey; this.consumerKey = consumerKey; } @Override - public void install(@NonNull Jooby application) { + public void install(Jooby application) { new KafkaConsumerModule(consumerKey).install(application); new KafkaProducerModule(producerKey).install(application); diff --git a/modules/jooby-kafka/src/main/java/io/jooby/kafka/KafkaProducerModule.java b/modules/jooby-kafka/src/main/java/io/jooby/kafka/KafkaProducerModule.java index 2d9f63b312..dd6fb6e4f3 100644 --- a/modules/jooby-kafka/src/main/java/io/jooby/kafka/KafkaProducerModule.java +++ b/modules/jooby-kafka/src/main/java/io/jooby/kafka/KafkaProducerModule.java @@ -7,7 +7,6 @@ import org.apache.kafka.clients.producer.KafkaProducer; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Extension; import io.jooby.Jooby; @@ -48,7 +47,7 @@ public class KafkaProducerModule implements Extension { * * @param key Kafka key. */ - public KafkaProducerModule(@NonNull String key) { + public KafkaProducerModule(String key) { this.key = key; } @@ -58,7 +57,7 @@ public KafkaProducerModule() { } @Override - public void install(@NonNull Jooby application) { + public void install(Jooby application) { KafkaHelper.install(application, key, KafkaProducer::new); } } diff --git a/modules/jooby-kafka/src/main/java/io/jooby/kafka/package-info.java b/modules/jooby-kafka/src/main/java/io/jooby/kafka/package-info.java index 7445f9c327..6e1b18aea4 100644 --- a/modules/jooby-kafka/src/main/java/io/jooby/kafka/package-info.java +++ b/modules/jooby-kafka/src/main/java/io/jooby/kafka/package-info.java @@ -1,2 +1,2 @@ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.kafka; diff --git a/modules/jooby-kotlin/src/main/kotlin/io/jooby/kt/Kooby.kt b/modules/jooby-kotlin/src/main/kotlin/io/jooby/kt/Kooby.kt index c7b044df34..c9d4cdd339 100644 --- a/modules/jooby-kotlin/src/main/kotlin/io/jooby/kt/Kooby.kt +++ b/modules/jooby-kotlin/src/main/kotlin/io/jooby/kt/Kooby.kt @@ -49,11 +49,11 @@ annotation class RouterDsl annotation class OptionsDsl /** Registry: */ -inline fun Registry.require(): T { +inline fun Registry.require(): T { return this.require(T::class.java) } -inline fun Registry.require(name: String): T { +inline fun Registry.require(name: String): T { return this.require(T::class.java, name) } diff --git a/modules/jooby-langchain4j/src/main/java/io/jooby/internal/langchain4j/BuiltInModel.java b/modules/jooby-langchain4j/src/main/java/io/jooby/internal/langchain4j/BuiltInModel.java index a144e41942..4d33c289d7 100644 --- a/modules/jooby-langchain4j/src/main/java/io/jooby/internal/langchain4j/BuiltInModel.java +++ b/modules/jooby-langchain4j/src/main/java/io/jooby/internal/langchain4j/BuiltInModel.java @@ -18,7 +18,6 @@ import dev.langchain4j.model.ollama.OllamaStreamingChatModel; import dev.langchain4j.model.openai.OpenAiChatModel; import dev.langchain4j.model.openai.OpenAiStreamingChatModel; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.langchain4j.ChatModelFactory; /** @@ -28,7 +27,7 @@ public enum BuiltInModel implements ChatModelFactory { OPENAI { @Override - public ChatModel createChatModel(@NonNull Config config) { + public ChatModel createChatModel(Config config) { check("dev.langchain4j.model.openai.OpenAiChatModel", "langchain4j-open-ai"); return OpenAiChatModel.builder() .apiKey(config.getString("api-key")) @@ -39,7 +38,7 @@ public ChatModel createChatModel(@NonNull Config config) { } @Override - public StreamingChatModel createStreamingModel(@NonNull Config config) { + public StreamingChatModel createStreamingModel(Config config) { return OpenAiStreamingChatModel.builder() .apiKey(config.getString("api-key")) .modelName(config.hasPath("model-name") ? config.getString("model-name") : "gpt-4o-mini") @@ -51,7 +50,7 @@ public StreamingChatModel createStreamingModel(@NonNull Config config) { ANTHROPIC { @Override - public ChatModel createChatModel(@NonNull Config config) { + public ChatModel createChatModel(Config config) { check("dev.langchain4j.model.anthropic.AnthropicChatModel", "langchain4j-anthropic"); return AnthropicChatModel.builder() .apiKey(config.getString("api-key")) @@ -65,7 +64,7 @@ public ChatModel createChatModel(@NonNull Config config) { } @Override - public StreamingChatModel createStreamingModel(@NonNull Config config) { + public StreamingChatModel createStreamingModel(Config config) { return AnthropicStreamingChatModel.builder() .apiKey(config.getString("api-key")) .modelName( @@ -80,7 +79,7 @@ public StreamingChatModel createStreamingModel(@NonNull Config config) { OLLAMA { @Override - public ChatModel createChatModel(@NonNull Config config) { + public ChatModel createChatModel(Config config) { check("dev.langchain4j.model.ollama.OllamaChatModel", "langchain4j-ollama"); return OllamaChatModel.builder() .baseUrl(config.getString("base-url")) @@ -90,7 +89,7 @@ public ChatModel createChatModel(@NonNull Config config) { } @Override - public StreamingChatModel createStreamingModel(@NonNull Config config) { + public StreamingChatModel createStreamingModel(Config config) { return OllamaStreamingChatModel.builder() .baseUrl(config.getString("base-url")) .modelName(config.getString("model-name")) @@ -101,7 +100,7 @@ public StreamingChatModel createStreamingModel(@NonNull Config config) { JLAMA { @Override - public ChatModel createChatModel(@NonNull Config config) { + public ChatModel createChatModel(Config config) { check("dev.langchain4j.model.jlama.JlamaChatModel", "langchain4j-jlama"); return JlamaChatModel.builder() .modelName(config.getString("model-name")) @@ -110,7 +109,7 @@ public ChatModel createChatModel(@NonNull Config config) { } @Override - public StreamingChatModel createStreamingModel(@NonNull Config config) { + public StreamingChatModel createStreamingModel(Config config) { return JlamaStreamingChatModel.builder() .modelName(config.getString("model-name")) .workingDirectory(getOrCreateWorkingDir(config)) diff --git a/modules/jooby-langchain4j/src/main/java/io/jooby/langchain4j/ChatModelFactory.java b/modules/jooby-langchain4j/src/main/java/io/jooby/langchain4j/ChatModelFactory.java index ed9cffad65..1cf2f5bc77 100644 --- a/modules/jooby-langchain4j/src/main/java/io/jooby/langchain4j/ChatModelFactory.java +++ b/modules/jooby-langchain4j/src/main/java/io/jooby/langchain4j/ChatModelFactory.java @@ -5,11 +5,11 @@ */ package io.jooby.langchain4j; +import org.jspecify.annotations.Nullable; + import com.typesafe.config.Config; import dev.langchain4j.model.chat.ChatModel; import dev.langchain4j.model.chat.StreamingChatModel; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; /** * Factory contract for creating LangChain4j chat models from Jooby configuration. Implementations @@ -26,7 +26,7 @@ public interface ChatModelFactory { * @param config The configuration block for this model. * @return A non-null instance of a {@link ChatModel}. */ - ChatModel createChatModel(@NonNull Config config); + ChatModel createChatModel(Config config); /** * Creates a streaming chat model. Returns {@code null} if the provider does not support @@ -35,7 +35,7 @@ public interface ChatModelFactory { * @param config The configuration block for this model. * @return A {@link StreamingChatModel} or {@code null}. */ - @Nullable default StreamingChatModel createStreamingModel(@NonNull Config config) { + @Nullable default StreamingChatModel createStreamingModel(Config config) { return null; } } diff --git a/modules/jooby-langchain4j/src/main/java/io/jooby/langchain4j/package-info.java b/modules/jooby-langchain4j/src/main/java/io/jooby/langchain4j/package-info.java index 48d5c35797..d70c1ae29e 100644 --- a/modules/jooby-langchain4j/src/main/java/io/jooby/langchain4j/package-info.java +++ b/modules/jooby-langchain4j/src/main/java/io/jooby/langchain4j/package-info.java @@ -100,5 +100,5 @@ * @author edgar * @since 4.1.0 */ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.langchain4j; diff --git a/modules/jooby-langchain4j/src/test/java/io/jooby/langchain4j/LangChain4jModuleTest.java b/modules/jooby-langchain4j/src/test/java/io/jooby/langchain4j/LangChain4jModuleTest.java index 16cb1120ca..0c559dd6db 100644 --- a/modules/jooby-langchain4j/src/test/java/io/jooby/langchain4j/LangChain4jModuleTest.java +++ b/modules/jooby-langchain4j/src/test/java/io/jooby/langchain4j/LangChain4jModuleTest.java @@ -17,7 +17,6 @@ import com.typesafe.config.ConfigFactory; import dev.langchain4j.model.chat.ChatModel; import dev.langchain4j.model.chat.StreamingChatModel; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Environment; import io.jooby.Jooby; import io.jooby.ServiceKey; @@ -58,7 +57,7 @@ void customFactoryRegistration() { assertEquals(mockStreamModel, services.get(StreamingChatModel.class)); } - @NonNull private static Jooby createApp(Config config) { + private static Jooby createApp(Config config) { var app = new Jooby(); var environment = mock(Environment.class); when(environment.getConfig()).thenReturn(config); diff --git a/modules/jooby-log4j/src/main/java/io/jooby/log4j/package-info.java b/modules/jooby-log4j/src/main/java/io/jooby/log4j/package-info.java index 1441b9b325..4c4560047b 100644 --- a/modules/jooby-log4j/src/main/java/io/jooby/log4j/package-info.java +++ b/modules/jooby-log4j/src/main/java/io/jooby/log4j/package-info.java @@ -1,3 +1,3 @@ /** Log4j logging system. */ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.log4j; diff --git a/modules/jooby-log4j/src/main/java/module-info.java b/modules/jooby-log4j/src/main/java/module-info.java index 68841a2528..b8c17d9cce 100644 --- a/modules/jooby-log4j/src/main/java/module-info.java +++ b/modules/jooby-log4j/src/main/java/module-info.java @@ -6,11 +6,10 @@ exports io.jooby.log4j; requires io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires org.slf4j; requires org.apache.logging.log4j; requires org.apache.logging.log4j.core; - requires org.jspecify; provides LoggingService with Log4jService; diff --git a/modules/jooby-logback/src/main/java/io/jooby/logback/package-info.java b/modules/jooby-logback/src/main/java/io/jooby/logback/package-info.java index d8f4992619..912439d6c6 100644 --- a/modules/jooby-logback/src/main/java/io/jooby/logback/package-info.java +++ b/modules/jooby-logback/src/main/java/io/jooby/logback/package-info.java @@ -1,5 +1,3 @@ /** Logback as logging service. */ -@ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.logback; - -import edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault; diff --git a/modules/jooby-logback/src/main/java/module-info.java b/modules/jooby-logback/src/main/java/module-info.java index f469b3e0ee..9b09656f7b 100644 --- a/modules/jooby-logback/src/main/java/module-info.java +++ b/modules/jooby-logback/src/main/java/module-info.java @@ -6,7 +6,7 @@ exports io.jooby.logback; requires io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires org.slf4j; requires ch.qos.logback.classic; diff --git a/modules/jooby-maven-plugin/src/main/java/io/jooby/maven/BaseMojo.java b/modules/jooby-maven-plugin/src/main/java/io/jooby/maven/BaseMojo.java index 6cf1c853d3..67d247595d 100644 --- a/modules/jooby-maven-plugin/src/main/java/io/jooby/maven/BaseMojo.java +++ b/modules/jooby-maven-plugin/src/main/java/io/jooby/maven/BaseMojo.java @@ -38,8 +38,6 @@ import org.apache.maven.project.ProjectDependenciesResolver; import org.eclipse.aether.graph.Dependency; -import edu.umd.cs.findbugs.annotations.NonNull; - /** * Base class which provides common utility method to more specific plugins: like classpath * resources. @@ -109,8 +107,7 @@ protected String mojoName() { * @param mainClass Main class. * @throws Throwable If something goes wrong. */ - protected abstract void doExecute(@NonNull List projects, @NonNull String mainClass) - throws Throwable; + protected abstract void doExecute(List projects, String mainClass) throws Throwable; /** * Multiple projects for multimodule project. Otherwise single project. diff --git a/modules/jooby-maven-plugin/src/main/java/io/jooby/maven/OpenAPIMojo.java b/modules/jooby-maven-plugin/src/main/java/io/jooby/maven/OpenAPIMojo.java index 8f8d1786cd..9c4bf4caef 100644 --- a/modules/jooby-maven-plugin/src/main/java/io/jooby/maven/OpenAPIMojo.java +++ b/modules/jooby-maven-plugin/src/main/java/io/jooby/maven/OpenAPIMojo.java @@ -19,9 +19,8 @@ import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.project.MavenProject; +import org.jspecify.annotations.Nullable; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; import io.jooby.openapi.OpenAPIGenerator; /** @@ -55,8 +54,7 @@ public class OpenAPIMojo extends BaseMojo { @Parameter private List adoc; @Override - protected void doExecute(@NonNull List projects, @NonNull String mainClass) - throws Exception { + protected void doExecute(List projects, String mainClass) throws Exception { ClassLoader classLoader = createClassLoader(projects); Path outputDir = Paths.get(project.getBuild().getOutputDirectory()); var sources = diff --git a/modules/jooby-maven-plugin/src/main/java/io/jooby/maven/TrpcMojo.java b/modules/jooby-maven-plugin/src/main/java/io/jooby/maven/TrpcMojo.java index bd767ff292..c6086626dc 100644 --- a/modules/jooby-maven-plugin/src/main/java/io/jooby/maven/TrpcMojo.java +++ b/modules/jooby-maven-plugin/src/main/java/io/jooby/maven/TrpcMojo.java @@ -19,7 +19,6 @@ import cz.habarta.typescript.generator.DateMapping; import cz.habarta.typescript.generator.EnumMapping; import cz.habarta.typescript.generator.JsonLibrary; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.trpc.TrpcGenerator; /** @@ -62,8 +61,7 @@ public class TrpcMojo extends BaseMojo { @Parameter private List importDeclarations; @Override - protected void doExecute(@NonNull List projects, @NonNull String mainClass) - throws Exception { + protected void doExecute(List projects, String mainClass) throws Exception { var classLoader = createClassLoader(projects); var generator = new TrpcGenerator(); diff --git a/modules/jooby-mcp-jackson2/src/main/java/io/jooby/mcp/jackson2/McpJackson2Module.java b/modules/jooby-mcp-jackson2/src/main/java/io/jooby/mcp/jackson2/McpJackson2Module.java index bf64fd8e0e..391819eef9 100644 --- a/modules/jooby-mcp-jackson2/src/main/java/io/jooby/mcp/jackson2/McpJackson2Module.java +++ b/modules/jooby-mcp-jackson2/src/main/java/io/jooby/mcp/jackson2/McpJackson2Module.java @@ -10,7 +10,6 @@ import com.github.victools.jsonschema.generator.SchemaGenerator; import com.github.victools.jsonschema.generator.SchemaGeneratorConfigBuilder; import com.github.victools.jsonschema.generator.SchemaVersion; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Extension; import io.jooby.Jooby; import io.modelcontextprotocol.json.McpJsonMapper; @@ -18,7 +17,7 @@ public class McpJackson2Module implements Extension { @Override - public void install(@NonNull Jooby application) throws Exception { + public void install(Jooby application) throws Exception { var services = application.getServices(); var jsonMapper = services.require(ObjectMapper.class); var mcpJsonMapper = new JacksonMcpJsonMapper(jsonMapper); diff --git a/modules/jooby-mcp-jackson3/src/main/java/io/jooby/mcp/jackson3/McpJackson3Module.java b/modules/jooby-mcp-jackson3/src/main/java/io/jooby/mcp/jackson3/McpJackson3Module.java index ef9e34b173..6105448668 100644 --- a/modules/jooby-mcp-jackson3/src/main/java/io/jooby/mcp/jackson3/McpJackson3Module.java +++ b/modules/jooby-mcp-jackson3/src/main/java/io/jooby/mcp/jackson3/McpJackson3Module.java @@ -9,7 +9,6 @@ import com.github.victools.jsonschema.generator.SchemaGenerator; import com.github.victools.jsonschema.generator.SchemaGeneratorConfigBuilder; import com.github.victools.jsonschema.generator.SchemaVersion; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Extension; import io.jooby.Jooby; import io.modelcontextprotocol.json.McpJsonMapper; @@ -18,7 +17,7 @@ public class McpJackson3Module implements Extension { @Override - public void install(@NonNull Jooby application) throws Exception { + public void install(Jooby application) throws Exception { var services = application.getServices(); var jsonMapper = services.require(JsonMapper.class); var mcpJsonMapper = new JacksonMcpJsonMapper(jsonMapper); diff --git a/modules/jooby-mcp/src/main/java/io/jooby/internal/mcp/DefaultMcpInvoker.java b/modules/jooby-mcp/src/main/java/io/jooby/internal/mcp/DefaultMcpInvoker.java index ea10f0158f..8bc8bbb70a 100644 --- a/modules/jooby-mcp/src/main/java/io/jooby/internal/mcp/DefaultMcpInvoker.java +++ b/modules/jooby-mcp/src/main/java/io/jooby/internal/mcp/DefaultMcpInvoker.java @@ -7,7 +7,6 @@ import org.slf4j.LoggerFactory; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Jooby; import io.jooby.SneakyThrows; import io.jooby.StatusCode; @@ -25,7 +24,7 @@ public DefaultMcpInvoker(Jooby application) { @SuppressWarnings("unchecked") @Override - public @NonNull R invoke(McpOperation operation, SneakyThrows.Supplier action) { + public R invoke(McpOperation operation, SneakyThrows.Supplier action) { try { return action.get(); } catch (McpError mcpError) { diff --git a/modules/jooby-mcp/src/main/java/io/jooby/mcp/McpInspectorModule.java b/modules/jooby-mcp/src/main/java/io/jooby/mcp/McpInspectorModule.java index 1fe85baff6..ee21d65d9e 100644 --- a/modules/jooby-mcp/src/main/java/io/jooby/mcp/McpInspectorModule.java +++ b/modules/jooby-mcp/src/main/java/io/jooby/mcp/McpInspectorModule.java @@ -7,7 +7,6 @@ import java.util.List; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.*; import io.jooby.exception.RegistryException; import io.jooby.exception.StartupException; @@ -98,7 +97,7 @@ public class McpInspectorModule implements Extension { private McpServerConfig mcpSrvConfig; private String indexHtml; - public McpInspectorModule path(@NonNull String inspectorEndpoint) { + public McpInspectorModule path(String inspectorEndpoint) { this.inspectorEndpoint = inspectorEndpoint; return this; } @@ -108,13 +107,13 @@ public McpInspectorModule autoConnect(boolean autoConnect) { return this; } - public McpInspectorModule defaultServer(@NonNull String mcpServerName) { + public McpInspectorModule defaultServer(String mcpServerName) { this.defaultServer = mcpServerName; return this; } @Override - public void install(@NonNull Jooby app) { + public void install(Jooby app) { this.indexHtml = buildIndexHtml(); this.mcpSrvConfig = resolveMcpServerConfig(app); diff --git a/modules/jooby-mcp/src/main/java/io/jooby/mcp/McpModule.java b/modules/jooby-mcp/src/main/java/io/jooby/mcp/McpModule.java index cc98c1e1cc..cccc4d388d 100644 --- a/modules/jooby-mcp/src/main/java/io/jooby/mcp/McpModule.java +++ b/modules/jooby-mcp/src/main/java/io/jooby/mcp/McpModule.java @@ -14,7 +14,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.Extension; import io.jooby.Jooby; @@ -183,7 +182,7 @@ public McpModule(McpService mcpService, McpService... mcpServices) { * @param transport The desired default transport protocol. * @return This module instance for method chaining. */ - public McpModule transport(@NonNull Transport transport) { + public McpModule transport(Transport transport) { this.defaultTransport = transport; return this; } @@ -201,7 +200,7 @@ public McpModule transport(@NonNull Transport transport) { * @param invoker The custom invoker to register. * @return This module instance for method chaining. */ - public McpModule invoker(@NonNull McpInvoker invoker) { + public McpModule invoker(McpInvoker invoker) { if (this.invoker != null) { this.invoker = invoker.then(this.invoker); } else { @@ -223,7 +222,7 @@ public McpModule generateOutputSchema(boolean generateOutputSchema) { } @Override - public void install(@NonNull Jooby app) { + public void install(Jooby app) { var services = app.getServices(); var mcpJsonMapper = services.require(McpJsonMapper.class); var globalGenerateOutputSchema = diff --git a/modules/jooby-mcp/src/main/java/io/jooby/mcp/package-info.java b/modules/jooby-mcp/src/main/java/io/jooby/mcp/package-info.java index 339dc9ebe1..4758a2f31e 100644 --- a/modules/jooby-mcp/src/main/java/io/jooby/mcp/package-info.java +++ b/modules/jooby-mcp/src/main/java/io/jooby/mcp/package-info.java @@ -105,5 +105,5 @@ * @author edgar * @since 4.2.0 */ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.mcp; diff --git a/modules/jooby-metrics/src/main/java/io/jooby/metrics/HealthCheckHandler.java b/modules/jooby-metrics/src/main/java/io/jooby/metrics/HealthCheckHandler.java index 71c341b8b6..36048d39e0 100644 --- a/modules/jooby-metrics/src/main/java/io/jooby/metrics/HealthCheckHandler.java +++ b/modules/jooby-metrics/src/main/java/io/jooby/metrics/HealthCheckHandler.java @@ -10,15 +10,14 @@ import com.codahale.metrics.health.HealthCheck.Result; import com.codahale.metrics.health.HealthCheckRegistry; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.Route; import io.jooby.StatusCode; public class HealthCheckHandler implements Route.Handler { - @NonNull @Override - public Object apply(@NonNull Context ctx) { + @Override + public Object apply(Context ctx) { HealthCheckRegistry registry = ctx.require(HealthCheckRegistry.class); SortedMap checks = diff --git a/modules/jooby-metrics/src/main/java/io/jooby/metrics/MetricHandler.java b/modules/jooby-metrics/src/main/java/io/jooby/metrics/MetricHandler.java index 84fe7c8db7..9e415452b5 100644 --- a/modules/jooby-metrics/src/main/java/io/jooby/metrics/MetricHandler.java +++ b/modules/jooby-metrics/src/main/java/io/jooby/metrics/MetricHandler.java @@ -24,15 +24,14 @@ import com.codahale.metrics.Sampling; import com.codahale.metrics.Snapshot; import com.codahale.metrics.Timer; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.Route; import io.jooby.StatusCode; public class MetricHandler implements Route.Handler { - @NonNull @Override - public Object apply(@NonNull Context ctx) { + @Override + public Object apply(Context ctx) { MetricRegistry registry = ctx.require(MetricRegistry.class); Map allMetrics = registry.getMetrics(); diff --git a/modules/jooby-metrics/src/main/java/io/jooby/metrics/MetricsFilter.java b/modules/jooby-metrics/src/main/java/io/jooby/metrics/MetricsFilter.java index dfe5bc7fad..ab75e610fc 100644 --- a/modules/jooby-metrics/src/main/java/io/jooby/metrics/MetricsFilter.java +++ b/modules/jooby-metrics/src/main/java/io/jooby/metrics/MetricsFilter.java @@ -8,13 +8,12 @@ import com.codahale.metrics.Counter; import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.Timer; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Route; public class MetricsFilter implements Route.Filter { - @NonNull @Override - public Route.Handler apply(@NonNull Route.Handler next) { + @Override + public Route.Handler apply(Route.Handler next) { return ctx -> { MetricRegistry registry = ctx.require(MetricRegistry.class); Counter counter = registry.counter("request.actives"); diff --git a/modules/jooby-metrics/src/main/java/io/jooby/metrics/MetricsModule.java b/modules/jooby-metrics/src/main/java/io/jooby/metrics/MetricsModule.java index dec60280e5..d79933d369 100644 --- a/modules/jooby-metrics/src/main/java/io/jooby/metrics/MetricsModule.java +++ b/modules/jooby-metrics/src/main/java/io/jooby/metrics/MetricsModule.java @@ -26,7 +26,6 @@ import com.codahale.metrics.health.HealthCheck; import com.codahale.metrics.health.HealthCheckRegistry; import com.typesafe.config.Config; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Extension; import io.jooby.Jooby; import io.jooby.Router; @@ -223,7 +222,7 @@ public MetricsModule reporter(final Function callback) } @Override - public void install(@NonNull Jooby application) { + public void install(Jooby application) { MetricHandler metricHandler = new MetricHandler(); application.get(this.pattern + "/metrics", metricHandler); application.get(this.pattern + "/metrics/:type", metricHandler); diff --git a/modules/jooby-metrics/src/main/java/io/jooby/metrics/PingHandler.java b/modules/jooby-metrics/src/main/java/io/jooby/metrics/PingHandler.java index c17b8e9f8d..4e867a4694 100644 --- a/modules/jooby-metrics/src/main/java/io/jooby/metrics/PingHandler.java +++ b/modules/jooby-metrics/src/main/java/io/jooby/metrics/PingHandler.java @@ -5,15 +5,14 @@ */ package io.jooby.metrics; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.MediaType; import io.jooby.Route; public class PingHandler implements Route.Handler { - @NonNull @Override - public Object apply(@NonNull Context ctx) { + @Override + public Object apply(Context ctx) { ctx.setResponseType(MediaType.text); ctx.setResponseHeader(MetricsModule.CACHE_HEADER_NAME, MetricsModule.CACHE_HEADER_VALUE); return "pong"; diff --git a/modules/jooby-metrics/src/main/java/io/jooby/metrics/ThreadDumpHandler.java b/modules/jooby-metrics/src/main/java/io/jooby/metrics/ThreadDumpHandler.java index ed1e2161c3..c3076ccdd0 100644 --- a/modules/jooby-metrics/src/main/java/io/jooby/metrics/ThreadDumpHandler.java +++ b/modules/jooby-metrics/src/main/java/io/jooby/metrics/ThreadDumpHandler.java @@ -12,7 +12,6 @@ import org.slf4j.LoggerFactory; import com.codahale.metrics.jvm.ThreadDump; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.MediaType; import io.jooby.Route; @@ -33,8 +32,8 @@ public class ThreadDumpHandler implements Route.Handler { } } - @NonNull @Override - public Object apply(@NonNull Context ctx) { + @Override + public Object apply(Context ctx) { Object data; if (threadDump == null) { data = "Sorry your runtime environment does not allow to dump threads."; diff --git a/modules/jooby-metrics/src/main/java/io/jooby/metrics/package-info.java b/modules/jooby-metrics/src/main/java/io/jooby/metrics/package-info.java index 15dcc4fb71..2851049abf 100644 --- a/modules/jooby-metrics/src/main/java/io/jooby/metrics/package-info.java +++ b/modules/jooby-metrics/src/main/java/io/jooby/metrics/package-info.java @@ -1,2 +1,2 @@ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.metrics; diff --git a/modules/jooby-metrics/src/main/java/module-info.java b/modules/jooby-metrics/src/main/java/module-info.java index 4cffe27b41..62d48dd3e6 100644 --- a/modules/jooby-metrics/src/main/java/module-info.java +++ b/modules/jooby-metrics/src/main/java/module-info.java @@ -8,7 +8,7 @@ exports io.jooby.metrics; requires io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires typesafe.config; requires org.slf4j; requires com.codahale.metrics; diff --git a/modules/jooby-mutiny/pom.xml b/modules/jooby-mutiny/pom.xml index 0206a0dc6b..4b4ec92dce 100644 --- a/modules/jooby-mutiny/pom.xml +++ b/modules/jooby-mutiny/pom.xml @@ -12,11 +12,6 @@ jooby-mutiny - - com.github.spotbugs - spotbugs-annotations - - io.jooby jooby diff --git a/modules/jooby-mutiny/src/main/java/io/jooby/mutiny/Mutiny.java b/modules/jooby-mutiny/src/main/java/io/jooby/mutiny/Mutiny.java index 36e1e4b368..263dc437a4 100644 --- a/modules/jooby-mutiny/src/main/java/io/jooby/mutiny/Mutiny.java +++ b/modules/jooby-mutiny/src/main/java/io/jooby/mutiny/Mutiny.java @@ -9,7 +9,6 @@ import org.slf4j.Logger; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.Route; import io.smallrye.mutiny.Multi; @@ -37,8 +36,8 @@ private void after(Context ctx, Object value, Throwable failure) { } } - @NonNull @Override - public Route.Handler apply(@NonNull Route.Handler next) { + @Override + public Route.Handler apply(Route.Handler next) { return ctx -> { Object result = next.apply(ctx); if (ctx.isResponseStarted()) { diff --git a/modules/jooby-mutiny/src/main/java/io/jooby/mutiny/package-info.java b/modules/jooby-mutiny/src/main/java/io/jooby/mutiny/package-info.java index 1c7b10c04e..fbedc58bfc 100644 --- a/modules/jooby-mutiny/src/main/java/io/jooby/mutiny/package-info.java +++ b/modules/jooby-mutiny/src/main/java/io/jooby/mutiny/package-info.java @@ -1,2 +1,2 @@ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.mutiny; diff --git a/modules/jooby-mutiny/src/main/java/module-info.java b/modules/jooby-mutiny/src/main/java/module-info.java index c7c3f1743e..25065149a6 100644 --- a/modules/jooby-mutiny/src/main/java/module-info.java +++ b/modules/jooby-mutiny/src/main/java/module-info.java @@ -8,7 +8,7 @@ exports io.jooby.mutiny; requires io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires io.smallrye.mutiny; requires org.slf4j; } diff --git a/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyBody.java b/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyBody.java index ea584546e9..7afc513538 100644 --- a/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyBody.java +++ b/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyBody.java @@ -18,8 +18,8 @@ import java.util.List; import java.util.Map; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.Body; import io.jooby.Context; import io.jooby.MediaType; @@ -61,12 +61,12 @@ public InputStream stream() { } @Override - public Value get(@NonNull String name) { + public Value get(String name) { return Value.missing(ctx.getValueFactory(), name); } @Override - public Value getOrDefault(@NonNull String name, @NonNull String defaultValue) { + public Value getOrDefault(String name, String defaultValue) { return Value.value(ctx.getValueFactory(), name, defaultValue); } @@ -87,7 +87,7 @@ public byte[] bytes() { } } - @NonNull @Override + @Override public String value() { return value(StandardCharsets.UTF_8); } @@ -97,13 +97,13 @@ public String name() { return "body"; } - @NonNull @Override - public T to(@NonNull Type type) { + @Override + public T to(Type type) { return ctx.decode(type, ctx.getRequestType(MediaType.text)); } @Nullable @Override - public T toNullable(@NonNull Type type) { + public T toNullable(Type type) { return ctx.decode(type, ctx.getRequestType(MediaType.text)); } diff --git a/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyByteBufOutput.java b/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyByteBufOutput.java index bd0ea49877..117762a14b 100644 --- a/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyByteBufOutput.java +++ b/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyByteBufOutput.java @@ -8,44 +8,43 @@ import java.nio.CharBuffer; import java.nio.charset.Charset; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.output.BufferedOutput; import io.netty.buffer.ByteBuf; public record NettyByteBufOutput(ByteBuf buffer) implements BufferedOutput, NettyByteBufRef { @Override - @NonNull public BufferedOutput write(byte b) { + public BufferedOutput write(byte b) { buffer.writeByte(b); return this; } @Override - @NonNull public BufferedOutput write(byte[] source) { + public BufferedOutput write(byte[] source) { buffer.writeBytes(source); return this; } @Override - @NonNull public BufferedOutput write(byte[] source, int offset, int length) { + public BufferedOutput write(byte[] source, int offset, int length) { this.buffer.writeBytes(source, offset, length); return this; } @Override - @NonNull public BufferedOutput write(@NonNull String source, @NonNull Charset charset) { + public BufferedOutput write(String source, Charset charset) { this.buffer.writeBytes(source.getBytes(charset)); return this; } @Override - @NonNull public BufferedOutput write(@NonNull CharBuffer source, @NonNull Charset charset) { + public BufferedOutput write(CharBuffer source, Charset charset) { this.buffer.writeBytes(charset.encode(source)); return this; } @Override - @NonNull public BufferedOutput clear() { + public BufferedOutput clear() { this.buffer.clear(); return this; } @@ -55,7 +54,7 @@ public int size() { return buffer.readableBytes(); } - @NonNull @Override + @Override public ByteBuf byteBuf() { return buffer; } diff --git a/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyByteBufRef.java b/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyByteBufRef.java index 017cae6b29..bc3ac86494 100644 --- a/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyByteBufRef.java +++ b/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyByteBufRef.java @@ -7,7 +7,6 @@ import java.nio.ByteBuffer; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.SneakyThrows; import io.jooby.output.Output; @@ -15,15 +14,15 @@ import io.netty.buffer.Unpooled; public interface NettyByteBufRef extends Output { - @NonNull ByteBuf byteBuf(); + ByteBuf byteBuf(); @Override - default void transferTo(@NonNull SneakyThrows.Consumer consumer) { + default void transferTo(SneakyThrows.Consumer consumer) { consumer.accept(asByteBuffer()); } @Override - @NonNull default ByteBuffer asByteBuffer() { + default ByteBuffer asByteBuffer() { return byteBuf().slice().nioBuffer(); } diff --git a/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyContext.java b/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyContext.java index a49bad2776..8d9f575f92 100644 --- a/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyContext.java +++ b/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyContext.java @@ -35,10 +35,9 @@ import javax.net.ssl.SSLPeerUnverifiedException; +import org.jspecify.annotations.Nullable; import org.slf4j.Logger; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; import io.jooby.*; import io.jooby.Cookie; import io.jooby.output.Output; @@ -168,7 +167,7 @@ public NettyContext( } } - @NonNull @Override + @Override public Router getRouter() { return router; } @@ -178,7 +177,7 @@ public Router getRouter() { * ********************************************************************************************** */ - @NonNull @Override + @Override public Map getAttributes() { if (attributes == null) { attributes = new HashMap<>(); @@ -186,46 +185,46 @@ public Map getAttributes() { return attributes; } - @NonNull @Override + @Override public String getMethod() { return method; } - @NonNull @Override - public Context setMethod(@NonNull String method) { + @Override + public Context setMethod(String method) { this.method = method.toUpperCase(); return this; } - @NonNull @Override + @Override public Route getRoute() { return route; } - @NonNull @Override - public Context setRoute(@NonNull Route route) { + @Override + public Context setRoute(Route route) { this.route = route; return this; } - @NonNull @Override + @Override public String getRequestPath() { return path; } - @NonNull @Override + @Override public Context setRequestPath(String path) { this.path = path; return this; } - @NonNull @Override + @Override public Map pathMap() { return pathMap; } - @NonNull @Override - public Context setPathMap(@NonNull Map pathMap) { + @Override + public Context setPathMap(Map pathMap) { this.pathMap = pathMap; return this; } @@ -235,8 +234,8 @@ public final boolean isInIoThread() { return ctx.channel().eventLoop().inEventLoop(); } - @NonNull @Override - public Context dispatch(@NonNull Runnable action) { + @Override + public Context dispatch(Runnable action) { return dispatch(router.getWorker(), action); } @@ -246,7 +245,7 @@ public Context dispatch(Executor executor, Runnable action) { return this; } - @NonNull @Override + @Override public QueryString query() { if (query == null) { String uri = req.uri(); @@ -256,7 +255,7 @@ public QueryString query() { return query; } - @NonNull @Override + @Override public Formdata form() { if (formdata == null) { formdata = Formdata.create(getValueFactory()); @@ -265,23 +264,23 @@ public Formdata form() { return formdata; } - @NonNull @Override - public Value header(@NonNull String name) { + @Override + public Value header(String name) { return Value.create(getValueFactory(), name, req.headers().getAll(name)); } - @NonNull @Override + @Override public String getHost() { return host == null ? DefaultContext.super.getHost() : host; } - @NonNull @Override - public Context setHost(@NonNull String host) { + @Override + public Context setHost(String host) { this.host = host; return this; } - @NonNull @Override + @Override public String getRemoteAddress() { if (this.remoteAddress == null) { InetSocketAddress inetAddress = (InetSocketAddress) ctx.channel().remoteAddress(); @@ -296,13 +295,13 @@ public String getRemoteAddress() { return remoteAddress; } - @NonNull @Override - public Context setRemoteAddress(@NonNull String remoteAddress) { + @Override + public Context setRemoteAddress(String remoteAddress) { this.remoteAddress = remoteAddress; return this; } - @NonNull @Override + @Override public String getProtocol() { if (ctx.pipeline().get("http2") == null) { return req.protocolVersion().text(); @@ -311,7 +310,7 @@ public String getProtocol() { } } - @NonNull @Override + @Override public List getClientCertificates() { var sslHandler = ssl(); if (sslHandler != null) { @@ -324,7 +323,7 @@ public List getClientCertificates() { return Collections.emptyList(); } - @NonNull @Override + @Override public String getScheme() { if (scheme == null) { scheme = ssl() == null ? "http" : "https"; @@ -343,8 +342,8 @@ private SslHandler ssl() { .orElse(null); } - @NonNull @Override - public Context setScheme(@NonNull String scheme) { + @Override + public Context setScheme(String scheme) { this.scheme = scheme; return this; } @@ -354,13 +353,13 @@ public int getPort() { return port > 0 ? port : DefaultContext.super.getPort(); } - @NonNull @Override + @Override public Context setPort(int port) { this.port = port; return this; } - @NonNull @Override + @Override public Value header() { if (headers == null) { Map> headerMap = new LinkedHashMap<>(); @@ -374,7 +373,7 @@ public Value header() { return headers; } - @NonNull @Override + @Override public Body body() { if (decoder != null && decoder.hasNext()) { return new NettyBody(this, (HttpData) decoder.next(), HttpUtil.getContentLength(req, -1L)); @@ -383,7 +382,7 @@ public Body body() { } @Override - public @NonNull Map cookieMap() { + public Map cookieMap() { if (this.cookies == null) { this.cookies = Collections.emptyMap(); String cookieString = req.headers().get(HttpHeaderNames.COOKIE); @@ -401,8 +400,8 @@ public Body body() { return this.cookies; } - @NonNull @Override - public Context onComplete(@NonNull Route.Complete task) { + @Override + public Context onComplete(Route.Complete task) { if (listeners == null) { listeners = new CompletionListeners(); } @@ -410,7 +409,7 @@ public Context onComplete(@NonNull Route.Complete task) { return this; } - // @NonNull @Override + // @Override // public Context upgrade(WebSocket.Initializer handler) { // try { // responseStarted = true; @@ -458,7 +457,7 @@ public Context onComplete(@NonNull Route.Complete task) { // } // return this; // } - @NonNull @Override + @Override public Context upgrade(WebSocket.Initializer handler) { try { responseStarted = true; @@ -524,8 +523,8 @@ public Context upgrade(WebSocket.Initializer handler) { return this; } - @NonNull @Override - public Context upgrade(@NonNull ServerSentEmitter.Handler handler) { + @Override + public Context upgrade(ServerSentEmitter.Handler handler) { responseStarted = true; ctx.writeAndFlush(new DefaultHttpResponse(HTTP_1_1, status, setHeaders)); @@ -542,43 +541,43 @@ public Context upgrade(@NonNull ServerSentEmitter.Handler handler) { * ********************************************************************************************** */ - @NonNull @Override + @Override public StatusCode getResponseCode() { return StatusCode.valueOf(this.status.code()); } - @NonNull @Override + @Override public Context setResponseCode(int statusCode) { this.status = HttpResponseStatus.valueOf(statusCode); return this; } - @NonNull @Override - public Context setResponseHeader(@NonNull String name, @NonNull String value) { + @Override + public Context setResponseHeader(String name, String value) { setHeaders.set(name, value); return this; } - @NonNull @Override - public Context removeResponseHeader(@NonNull String name) { + @Override + public Context removeResponseHeader(String name) { setHeaders.remove(name); return this; } - @NonNull @Override + @Override public Context removeResponseHeaders() { setHeaders.clear(); ifStreamId(this.streamId); return this; } - @NonNull @Override + @Override public MediaType getResponseType() { return responseType == null ? MediaType.text : responseType; } - @NonNull @Override - public Context setDefaultResponseType(@NonNull MediaType contentType) { + @Override + public Context setDefaultResponseType(MediaType contentType) { if (responseType == null) { setResponseType(contentType); } @@ -586,24 +585,24 @@ public Context setDefaultResponseType(@NonNull MediaType contentType) { } @Override - public final Context setResponseType(@NonNull MediaType contentType) { + public final Context setResponseType(MediaType contentType) { this.responseType = contentType; setHeaders.set(CONTENT_TYPE, NettyString.valueOf(contentType)); return this; } - @NonNull @Override - public Context setResponseType(@NonNull String contentType) { + @Override + public Context setResponseType(String contentType) { this.setResponseType(MediaType.valueOf(contentType)); return this; } @Nullable @Override - public String getResponseHeader(@NonNull String name) { + public String getResponseHeader(String name) { return setHeaders.get(name); } - @NonNull @Override + @Override public Context setResponseLength(long length) { contentLength = length; setHeaders.set(CONTENT_LENGTH, Long.toString(length)); @@ -618,7 +617,7 @@ public long getResponseLength() { return contentLength; } - @NonNull public Context setResponseCookie(@NonNull Cookie cookie) { + public Context setResponseCookie(Cookie cookie) { if (responseCookies == null) { responseCookies = new HashMap<>(); } @@ -631,7 +630,7 @@ public long getResponseLength() { return this; } - @NonNull @Override + @Override public PrintWriter responseWriter(MediaType type) { setResponseType(type); @@ -639,59 +638,59 @@ public PrintWriter responseWriter(MediaType type) { new NettyWriter(newOutputStream(), ofNullable(type.getCharset()).orElse(UTF_8))); } - @NonNull @Override + @Override public Sender responseSender() { prepareChunked(); ctx.write(new DefaultHttpResponse(HTTP_1_1, status, setHeaders)); return new NettySender(this); } - @NonNull @Override + @Override public OutputStream responseStream() { return newOutputStream(); } - @NonNull @Override - public Context send(@NonNull String data) { + @Override + public Context send(String data) { return send(data, UTF_8); } - @NonNull @Override - public final Context send(@NonNull String data, @NonNull Charset charset) { + @Override + public final Context send(String data, Charset charset) { return send(wrappedBuffer(data.getBytes(charset))); } - @NonNull @Override - public final Context send(@NonNull byte[] data) { + @Override + public final Context send(byte[] data) { return send(wrappedBuffer(data)); } - @NonNull @Override - public Context send(@NonNull byte[]... data) { + @Override + public Context send(byte[]... data) { return send(Unpooled.wrappedBuffer(data)); } - @NonNull @Override - public Context send(@NonNull ByteBuffer[] data) { + @Override + public Context send(ByteBuffer[] data) { return send(Unpooled.wrappedBuffer(data)); } - @NonNull @Override - public final Context send(@NonNull ByteBuffer data) { + @Override + public final Context send(ByteBuffer data) { return send(wrappedBuffer(data)); } @Override - @NonNull public Context send(@NonNull Output output) { + public Context send(Output output) { output.send(this); return this; } - private Context send(@NonNull ByteBuf data) { + private Context send(ByteBuf data) { return send(data, Integer.toString(data.readableBytes())); } - Context send(@NonNull ByteBuf data, CharSequence contentLength) { + Context send(ByteBuf data, CharSequence contentLength) { try { responseStarted = true; setHeaders.set(CONTENT_LENGTH, contentLength); @@ -703,8 +702,8 @@ Context send(@NonNull ByteBuf data, CharSequence contentLength) { } } - @NonNull @Override - public Context send(@NonNull ReadableByteChannel channel) { + @Override + public Context send(ReadableByteChannel channel) { try { prepareChunked(); int bufferSize = contentLength > 0 ? (int) contentLength : this.bufferSize; @@ -720,7 +719,7 @@ public Context send(@NonNull ReadableByteChannel channel) { } @Override - public @NonNull Context send(@NonNull FileDownload file) { + public Context send(FileDownload file) { if (file.deleteOnComplete()) { register( new DeleteFileTask( @@ -729,8 +728,8 @@ public Context send(@NonNull ReadableByteChannel channel) { return DefaultContext.super.send(file); } - @NonNull @Override - public Context send(@NonNull InputStream in) { + @Override + public Context send(InputStream in) { if (in instanceof FileInputStream) { // use channel return send(((FileInputStream) in).getChannel()); @@ -753,8 +752,8 @@ public Context send(@NonNull InputStream in) { } } - @NonNull @Override - public Context send(@NonNull FileChannel file) { + @Override + public Context send(FileChannel file) { try { long len = file.size(); setHeaders.set(CONTENT_LENGTH, Long.toString(len)); @@ -812,8 +811,8 @@ public Context setResetHeadersOnError(boolean value) { return this; } - @NonNull @Override - public Context send(@NonNull StatusCode statusCode) { + @Override + public Context send(StatusCode statusCode) { try { setResponseCode(statusCode.value()); responseStarted = true; diff --git a/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyEventLoopGroupImpl.java b/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyEventLoopGroupImpl.java index a37600e62a..18ef141ce5 100644 --- a/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyEventLoopGroupImpl.java +++ b/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyEventLoopGroupImpl.java @@ -8,7 +8,6 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.TimeUnit; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.netty.NettyEventLoopGroup; import io.netty.channel.EventLoopGroup; @@ -30,17 +29,17 @@ public NettyEventLoopGroupImpl( } @Override - public @NonNull EventLoopGroup acceptor() { + public EventLoopGroup acceptor() { return parent; } @Override - public @NonNull EventLoopGroup eventLoop() { + public EventLoopGroup eventLoop() { return child; } @Override - public @NonNull ExecutorService worker() { + public ExecutorService worker() { return worker; } diff --git a/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyFileUpload.java b/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyFileUpload.java index f7c1f8c372..aa4d8a2831 100644 --- a/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyFileUpload.java +++ b/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyFileUpload.java @@ -10,7 +10,6 @@ import java.nio.file.Files; import java.nio.file.Path; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.FileUpload; import io.jooby.SneakyThrows; import io.netty.buffer.ByteBufInputStream; @@ -26,7 +25,7 @@ public NettyFileUpload(Path basedir, io.netty.handler.codec.http.multipart.FileU this.upload = upload; } - @NonNull @Override + @Override public String getName() { return upload.getName(); } diff --git a/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyOutputFactory.java b/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyOutputFactory.java index 7c707b121a..0b1ad1ecfe 100644 --- a/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyOutputFactory.java +++ b/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyOutputFactory.java @@ -8,7 +8,6 @@ import java.nio.ByteBuffer; import java.nio.charset.Charset; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.output.BufferedOutput; import io.jooby.output.Output; import io.jooby.output.OutputFactory; @@ -35,22 +34,22 @@ public NettyContextOutputFactory(ByteBufAllocator allocator, OutputOptions optio } @Override - @NonNull public Output wrap(@NonNull String value, @NonNull Charset charset) { + public Output wrap(String value, Charset charset) { return new NettyWrappedOutput(Unpooled.wrappedBuffer(value.getBytes(charset))); } @Override - @NonNull public Output wrap(@NonNull ByteBuffer buffer) { + public Output wrap(ByteBuffer buffer) { return new NettyWrappedOutput(Unpooled.wrappedBuffer(buffer)); } @Override - @NonNull public Output wrap(@NonNull byte[] bytes) { + public Output wrap(byte[] bytes) { return new NettyWrappedOutput(Unpooled.wrappedBuffer(bytes)); } @Override - @NonNull public Output wrap(@NonNull byte[] bytes, int offset, int length) { + public Output wrap(byte[] bytes, int offset, int length) { return new NettyWrappedOutput(Unpooled.wrappedBuffer(bytes, offset, length)); } } @@ -68,38 +67,38 @@ public ByteBufAllocator getAllocator() { } @Override - @NonNull public OutputOptions getOptions() { + public OutputOptions getOptions() { return options; } @Override - public @NonNull BufferedOutput allocate(boolean direct, int size) { + public BufferedOutput allocate(boolean direct, int size) { return new NettyByteBufOutput( direct ? this.allocator.directBuffer(size) : this.allocator.heapBuffer(size)); } @Override - @NonNull public Output wrap(@NonNull ByteBuffer buffer) { + public Output wrap(ByteBuffer buffer) { return new NettyOutputStatic(buffer); } @Override - @NonNull public Output wrap(@NonNull byte[] bytes) { + public Output wrap(byte[] bytes) { return wrap(bytes, 0, bytes.length); } @Override - @NonNull public Output wrap(@NonNull byte[] bytes, int offset, int length) { + public Output wrap(byte[] bytes, int offset, int length) { return new NettyOutputUnsafeHeapByteBuf(bytes, offset, length); } @Override - @NonNull public BufferedOutput newComposite() { + public BufferedOutput newComposite() { return new NettyByteBufOutput(allocator.compositeBuffer(48)); } @Override - @NonNull public OutputFactory getContextFactory() { + public OutputFactory getContextFactory() { return new NettyContextOutputFactory(allocator, options); } } diff --git a/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyOutputStatic.java b/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyOutputStatic.java index 16ed1518ac..b1988f0419 100644 --- a/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyOutputStatic.java +++ b/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyOutputStatic.java @@ -7,7 +7,6 @@ import java.nio.ByteBuffer; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; @@ -26,7 +25,7 @@ public int size() { return buffer.remaining(); } - @NonNull public ByteBuf byteBuf() { + public ByteBuf byteBuf() { return Unpooled.wrappedBuffer(buffer); } diff --git a/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyOutputUnsafeHeapByteBuf.java b/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyOutputUnsafeHeapByteBuf.java index 81af5010d4..b133f8c791 100644 --- a/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyOutputUnsafeHeapByteBuf.java +++ b/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyOutputUnsafeHeapByteBuf.java @@ -5,7 +5,6 @@ */ package io.jooby.internal.netty; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.netty.buffer.ByteBuf; @@ -26,7 +25,7 @@ public int size() { return length; } - @NonNull public ByteBuf byteBuf() { + public ByteBuf byteBuf() { return buf.slice(0, length); } diff --git a/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettySender.java b/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettySender.java index 1fb339fae0..24e6824245 100644 --- a/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettySender.java +++ b/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettySender.java @@ -7,7 +7,6 @@ import static io.jooby.internal.netty.NettyByteBufRef.byteBuf; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Sender; import io.jooby.output.Output; import io.netty.buffer.Unpooled; @@ -27,15 +26,15 @@ public NettySender(NettyContext ctx) { } @Override - public Sender write(@NonNull byte[] data, @NonNull Callback callback) { + public Sender write(byte[] data, Callback callback) { context .writeAndFlush(new DefaultHttpContent(Unpooled.wrappedBuffer(data))) .addListener(newChannelFutureListener(ctx, callback)); return this; } - @NonNull @Override - public Sender write(@NonNull Output output, @NonNull Callback callback) { + @Override + public Sender write(Output output, Callback callback) { context .writeAndFlush(new DefaultHttpContent(byteBuf(output))) .addListener(newChannelFutureListener(ctx, callback)); diff --git a/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyServerSentEmitter.java b/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyServerSentEmitter.java index 838baf5d78..12ca86ae21 100644 --- a/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyServerSentEmitter.java +++ b/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyServerSentEmitter.java @@ -14,7 +14,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.Server; import io.jooby.ServerSentEmitter; @@ -57,12 +56,12 @@ public ServerSentEmitter setId(String id) { return this; } - @NonNull @Override + @Override public Context getContext() { return Context.readOnly(netty); } - @NonNull @Override + @Override public ServerSentEmitter send(ServerSentMessage data) { if (checkOpen()) { var output = data.encode(netty); @@ -87,7 +86,7 @@ public void onClose(SneakyThrows.Runnable task) { this.closeTask = task; } - @NonNull @Override + @Override public void close() { if (open.compareAndSet(true, false)) { try { diff --git a/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyString.java b/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyString.java index e528a0b624..64a6ca00da 100644 --- a/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyString.java +++ b/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyString.java @@ -7,7 +7,6 @@ import java.nio.charset.StandardCharsets; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.MediaType; import io.netty.util.AsciiString; @@ -48,7 +47,7 @@ public char charAt(int index) { } @Override - @NonNull public CharSequence subSequence(int start, int end) { + public CharSequence subSequence(int start, int end) { return value.subSequence(start, end); } @@ -66,7 +65,7 @@ public int hashCode() { } @Override - @NonNull public String toString() { + public String toString() { return value; } diff --git a/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyWebSocket.java b/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyWebSocket.java index 56daa86829..37571c9efb 100644 --- a/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyWebSocket.java +++ b/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyWebSocket.java @@ -19,7 +19,6 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.Router; import io.jooby.Server; @@ -109,53 +108,53 @@ public NettyWebSocket(NettyContext ctx) { channel.closeFuture().addListener(future -> handleClose(WebSocketCloseStatus.GOING_AWAY)); } - @NonNull @Override - public WebSocket send(@NonNull String message, @NonNull WriteCallback callback) { + @Override + public WebSocket send(String message, WriteCallback callback) { return sendMessage(Unpooled.copiedBuffer(message, StandardCharsets.UTF_8), false, callback); } - @NonNull @Override - public WebSocket send(byte[] bytes, @NonNull WriteCallback callback) { + @Override + public WebSocket send(byte[] bytes, WriteCallback callback) { return sendMessage(Unpooled.wrappedBuffer(bytes), false, callback); } - @NonNull @Override - public WebSocket send(@NonNull ByteBuffer message, @NonNull WriteCallback callback) { + @Override + public WebSocket send(ByteBuffer message, WriteCallback callback) { return sendMessage(Unpooled.wrappedBuffer(message), false, callback); } - @NonNull @Override - public WebSocket sendBinary(@NonNull ByteBuffer message, @NonNull WriteCallback callback) { + @Override + public WebSocket sendBinary(ByteBuffer message, WriteCallback callback) { return sendMessage(Unpooled.wrappedBuffer(message), true, callback); } - @NonNull @Override - public WebSocket sendBinary(@NonNull String message, @NonNull WriteCallback callback) { + @Override + public WebSocket sendBinary(String message, WriteCallback callback) { return sendMessage(Unpooled.copiedBuffer(message, StandardCharsets.UTF_8), true, callback); } - @NonNull @Override - public WebSocket sendBinary(@NonNull byte[] message, @NonNull WriteCallback callback) { + @Override + public WebSocket sendBinary(byte[] message, WriteCallback callback) { return sendMessage(Unpooled.wrappedBuffer(message), true, callback); } - @NonNull @Override - public WebSocket send(@NonNull Output message, @NonNull WriteCallback callback) { + @Override + public WebSocket send(Output message, WriteCallback callback) { return sendMessage(byteBuf(message), false, callback); } - @NonNull @Override - public WebSocket sendBinary(@NonNull Output message, @NonNull WriteCallback callback) { + @Override + public WebSocket sendBinary(Output message, WriteCallback callback) { return sendMessage(byteBuf(message), true, callback); } @Override - public WebSocket render(Object value, @NonNull WriteCallback callback) { + public WebSocket render(Object value, WriteCallback callback) { return renderMessage(value, false, callback); } @Override - public WebSocket renderBinary(Object value, @NonNull WriteCallback callback) { + public WebSocket renderBinary(Object value, WriteCallback callback) { return renderMessage(value, true, callback); } @@ -191,7 +190,7 @@ public Context getContext() { return Context.readOnly(netty); } - @NonNull @Override + @Override public List getSessions() { List sessions = all.get(key); if (sessions == null) { @@ -220,15 +219,15 @@ public void forEach(SneakyThrows.Consumer callback) { } } - @NonNull @Override - public WebSocket sendPing(@NonNull String message, @NonNull WriteCallback callback) { + @Override + public WebSocket sendPing(String message, WriteCallback callback) { return sendMessage( new PingWebSocketFrame(Unpooled.wrappedBuffer(message.getBytes(StandardCharsets.UTF_8))), callback); } @Override - public WebSocket sendPing(@NonNull ByteBuffer message, @NonNull WriteCallback callback) { + public WebSocket sendPing(ByteBuffer message, WriteCallback callback) { return sendMessage(new PingWebSocketFrame(Unpooled.wrappedBuffer(message)), callback); } diff --git a/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyWrappedOutput.java b/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyWrappedOutput.java index a9a4a0a227..bb8b5d5a84 100644 --- a/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyWrappedOutput.java +++ b/modules/jooby-netty/src/main/java/io/jooby/internal/netty/NettyWrappedOutput.java @@ -5,7 +5,6 @@ */ package io.jooby.internal.netty; -import edu.umd.cs.findbugs.annotations.NonNull; import io.netty.buffer.ByteBuf; public record NettyWrappedOutput(ByteBuf buffer) implements NettyByteBufRef { @@ -15,7 +14,7 @@ public int size() { return buffer.readableBytes(); } - @NonNull public ByteBuf byteBuf() { + public ByteBuf byteBuf() { return buffer; } } diff --git a/modules/jooby-netty/src/main/java/io/jooby/netty/NettyServer.java b/modules/jooby-netty/src/main/java/io/jooby/netty/NettyServer.java index e649539abc..217c04faf8 100644 --- a/modules/jooby-netty/src/main/java/io/jooby/netty/NettyServer.java +++ b/modules/jooby-netty/src/main/java/io/jooby/netty/NettyServer.java @@ -16,8 +16,8 @@ import javax.net.ssl.SSLContext; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.*; import io.jooby.exception.StartupException; import io.jooby.internal.netty.*; @@ -70,7 +70,7 @@ public class NettyServer extends Server.Base { * @param options Options. * @param worker Thread-pool to use. */ - public NettyServer(@NonNull ServerOptions options, @NonNull ExecutorService worker) { + public NettyServer(ServerOptions options, ExecutorService worker) { super.setOptions(options); this.worker = worker; } @@ -80,7 +80,7 @@ public NettyServer(@NonNull ServerOptions options, @NonNull ExecutorService work * * @param worker Thread-pool to use. */ - public NettyServer(@NonNull ExecutorService worker) { + public NettyServer(ExecutorService worker) { this.worker = worker; } @@ -89,7 +89,7 @@ public NettyServer(@NonNull ExecutorService worker) { * * @param options Configuration options. */ - public NettyServer(@NonNull ServerOptions options) { + public NettyServer(ServerOptions options) { setOptions(options); } @@ -122,7 +122,7 @@ public String getName() { } @Override - public Server start(@NonNull Jooby... application) { + public Server start(Jooby... application) { // force options to be non-null var options = getOptions(); var portInUse = options.getPort(); diff --git a/modules/jooby-netty/src/main/java/io/jooby/netty/package-info.java b/modules/jooby-netty/src/main/java/io/jooby/netty/package-info.java index 4eae5f7301..479690f4a7 100644 --- a/modules/jooby-netty/src/main/java/io/jooby/netty/package-info.java +++ b/modules/jooby-netty/src/main/java/io/jooby/netty/package-info.java @@ -1,3 +1,3 @@ /** Netty Web Server. */ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.netty; diff --git a/modules/jooby-netty/src/main/java/module-info.java b/modules/jooby-netty/src/main/java/module-info.java index 0831e5136c..907fb46e9d 100644 --- a/modules/jooby-netty/src/main/java/module-info.java +++ b/modules/jooby-netty/src/main/java/module-info.java @@ -11,7 +11,7 @@ exports io.jooby.netty; requires io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires typesafe.config; requires org.slf4j; requires io.netty.transport; diff --git a/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/AnnotationParser.java b/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/AnnotationParser.java index 1538e8cad4..08f5fc0fe3 100644 --- a/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/AnnotationParser.java +++ b/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/AnnotationParser.java @@ -17,6 +17,7 @@ import org.objectweb.asm.Opcodes; import org.objectweb.asm.Type; +import org.objectweb.asm.TypeReference; import org.objectweb.asm.tree.*; import io.jooby.*; @@ -437,17 +438,10 @@ private static List routerArguments( } /* HTTP Type: */ - List annotations; - if (method.visibleParameterAnnotations != null - && i < method.visibleParameterAnnotations.length) { - annotations = method.visibleParameterAnnotations[i]; - } else { - annotations = Collections.emptyList(); - } + var annotations = getParameterAnnotations(method, i); - if (annotations != null - && annotations.stream() - .anyMatch(n -> IGNORED_ANNOTATIONS.contains(ASMType.parse(n.desc)))) { + if (annotations.stream() + .anyMatch(n -> IGNORED_ANNOTATIONS.contains(ASMType.parse(n.desc)))) { continue; } @@ -527,6 +521,39 @@ private static List routerArguments( return result; } + public static List getParameterAnnotations(MethodNode method, int paramIndex) { + List allAnnotations = new ArrayList<>(); + + // 1. Extract standard parameter annotations (Visible & Invisible) + var vis = method.visibleParameterAnnotations; + var invis = method.invisibleParameterAnnotations; + + if (vis != null && paramIndex < vis.length && vis[paramIndex] != null) { + allAnnotations.addAll(vis[paramIndex]); + } + if (invis != null && paramIndex < invis.length && invis[paramIndex] != null) { + allAnnotations.addAll(invis[paramIndex]); + } + + // 2. Extract type annotations for this specific parameter (Visible & Invisible) + // By packing them into a list, we avoid writing the same extraction loop twice. + for (var typeList : + Arrays.asList(method.visibleTypeAnnotations, method.invisibleTypeAnnotations)) { + if (typeList != null) { + for (TypeAnnotationNode typeAnno : typeList) { + TypeReference typeRef = new TypeReference(typeAnno.typeRef); + + if (typeRef.getSort() == TypeReference.METHOD_FORMAL_PARAMETER + && typeRef.getFormalParameterIndex() == paramIndex) { + allAnnotations.add(typeAnno); + } + } + } + } + + return allAnnotations.isEmpty() ? Collections.emptyList() : allAnnotations; + } + private static Optional convertValue(ParserContext ctx, String javaType, String value) { try { switch (javaType) { @@ -562,13 +589,31 @@ private static Optional convertValue(ParserContext ctx, String javaType, Stri } private static boolean isNullable(MethodNode method, int paramIndex) { - if (paramIndex < method.invisibleAnnotableParameterCount) { - List annotations = method.invisibleParameterAnnotations[paramIndex]; - if (annotations != null) { - return annotations.stream() - .anyMatch(a -> a.desc.equals("Lorg/jetbrains/annotations/Nullable;")); + var allAnnotations = getParameterAnnotations(method, paramIndex); + boolean hasNullable = false; + boolean hasNonNull = false; + + for (var anno : allAnnotations) { + if (anno.desc.contains("Nullable")) { + hasNullable = true; + } else if (anno.desc.contains("NonNull") || anno.desc.contains("NotNull")) { + hasNonNull = true; } } + + // Explicit @NonNull or @NotNull always wins + if (hasNonNull) { + return false; + } + + // Explicit @Nullable wins + if (hasNullable) { + return true; + } + + // Default fallback: If there are no explicit nullability annotations, + // assume it is nullable (standard Java behavior). + // This fixes the bug where ANY unrelated annotation made it return false! return true; } diff --git a/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/ParameterExt.java b/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/ParameterExt.java index b75d583e50..bf6476a4c2 100644 --- a/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/ParameterExt.java +++ b/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/ParameterExt.java @@ -8,11 +8,10 @@ import java.util.List; import java.util.Objects; +import org.jspecify.annotations.Nullable; import org.objectweb.asm.tree.AnnotationNode; import com.fasterxml.jackson.annotation.JsonIgnore; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; import io.swagger.v3.oas.models.media.Schema; import io.swagger.v3.oas.models.media.StringSchema; import io.swagger.v3.oas.models.parameters.Parameter; @@ -76,7 +75,7 @@ public String toString() { return javaType + " " + getName(); } - public static Parameter header(@NonNull String name, @Nullable String value) { + public static Parameter header(String name, @Nullable String value) { return basic(name, "header", value); } @@ -96,7 +95,7 @@ public void setAnnotations(List annotations) { this.annotations = annotations; } - public static Parameter basic(@NonNull String name, @NonNull String in, @Nullable String value) { + public static Parameter basic(String name, String in, @Nullable String value) { ParameterExt param = new ParameterExt(); param.setName(name); param.setIn(in); diff --git a/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/asciidoc/HttpRequest.java b/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/asciidoc/HttpRequest.java index ac2ce2b8fd..11c65f7b9c 100644 --- a/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/asciidoc/HttpRequest.java +++ b/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/asciidoc/HttpRequest.java @@ -15,7 +15,6 @@ import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ListMultimap; import com.google.common.net.UrlEscapers; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Router; import io.jooby.internal.openapi.OperationExt; import io.jooby.internal.openapi.ParameterExt; @@ -170,7 +169,7 @@ public Schema getForm() { return getBody(List.of("application/x-www-form-urlencoded)", "multipart/form-data")); } - @NonNull public ListMultimap formUrlEncoded( + public ListMultimap formUrlEncoded( BiFunction, Map.Entry, Map.Entry> formatter) { var output = ArrayListMultimap.create(); var form = getForm(); @@ -276,7 +275,7 @@ private static Predicate inFilter(String in) { return p -> "*".equals(in) || in.equals(p.getIn()); } - @NonNull @Override + @Override public String toString() { return getMethod() + " " + getPath(); } diff --git a/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/asciidoc/HttpRequestList.java b/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/asciidoc/HttpRequestList.java index 565e82a634..86be635689 100644 --- a/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/asciidoc/HttpRequestList.java +++ b/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/asciidoc/HttpRequestList.java @@ -12,17 +12,16 @@ import java.util.stream.Collectors; import com.fasterxml.jackson.annotation.JsonIncludeProperties; -import edu.umd.cs.findbugs.annotations.NonNull; @JsonIncludeProperties({"operations"}) public record HttpRequestList(AsciiDocContext context, List operations) implements Iterable, ToAsciiDoc { - @NonNull @Override + @Override public Iterator iterator() { return operations.iterator(); } - @NonNull @Override + @Override public String toString() { return operations.toString(); } diff --git a/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/asciidoc/HttpResponse.java b/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/asciidoc/HttpResponse.java index 097cd2fb9b..fdc02ae2e1 100644 --- a/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/asciidoc/HttpResponse.java +++ b/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/asciidoc/HttpResponse.java @@ -11,7 +11,6 @@ import java.util.Optional; import com.fasterxml.jackson.annotation.JsonIncludeProperties; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.StatusCode; import io.jooby.internal.openapi.OperationExt; import io.jooby.internal.openapi.ParameterExt; @@ -111,7 +110,7 @@ private Schema getBody(ResponseExt response) { .orElse(null); } - @NonNull @Override + @Override public String toString() { return operation.getMethod() + " " + operation.getPath(); } diff --git a/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/asciidoc/Lookup.java b/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/asciidoc/Lookup.java index 46feb364f6..f0c4b1b361 100644 --- a/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/asciidoc/Lookup.java +++ b/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/asciidoc/Lookup.java @@ -8,7 +8,6 @@ import java.util.*; import java.util.stream.Stream; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.StatusCode; import io.pebbletemplates.pebble.extension.Function; import io.pebbletemplates.pebble.template.EvaluationContext; @@ -196,7 +195,7 @@ public Object execute( return new StatusCodeList(toMap(code).toList()); } - @NonNull private Stream> toMap(Object candidate) { + private Stream> toMap(Object candidate) { if (candidate instanceof Number code) { Map map = new LinkedHashMap<>(); map.put("code", code.intValue()); diff --git a/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/asciidoc/ParameterList.java b/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/asciidoc/ParameterList.java index 9cf432b560..a9acb6bcb1 100644 --- a/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/asciidoc/ParameterList.java +++ b/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/asciidoc/ParameterList.java @@ -10,7 +10,6 @@ import java.util.stream.Collectors; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import edu.umd.cs.findbugs.annotations.NonNull; import io.swagger.v3.oas.models.parameters.Parameter; @JsonIgnoreProperties({"includes"}) @@ -39,7 +38,7 @@ public int size() { return parameters.size(); } - @NonNull @Override + @Override public String toString() { return parameters.stream().map(Parameter::getName).collect(Collectors.joining(", ")); } diff --git a/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/asciidoc/StatusCodeList.java b/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/asciidoc/StatusCodeList.java index 6b4adebeb8..ac07ddbb9e 100644 --- a/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/asciidoc/StatusCodeList.java +++ b/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/asciidoc/StatusCodeList.java @@ -10,18 +10,17 @@ import java.util.Map; import com.fasterxml.jackson.annotation.JsonIncludeProperties; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.internal.openapi.asciidoc.display.MapToAsciiDoc; @JsonIncludeProperties({"codes"}) public record StatusCodeList(List> codes) implements Iterable>, ToAsciiDoc { - @NonNull @Override + @Override public String toString() { return codes.toString(); } - @NonNull @Override + @Override public Iterator> iterator() { return codes.iterator(); } diff --git a/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/asciidoc/display/RequestToCurl.java b/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/asciidoc/display/RequestToCurl.java index 9da8674661..9878cd3d91 100644 --- a/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/asciidoc/display/RequestToCurl.java +++ b/modules/jooby-openapi/src/main/java/io/jooby/internal/openapi/asciidoc/display/RequestToCurl.java @@ -10,7 +10,6 @@ import com.google.common.base.Splitter; import com.google.common.collect.LinkedHashMultimap; import com.google.common.collect.Multimap; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Router; import io.jooby.internal.openapi.asciidoc.*; @@ -114,7 +113,7 @@ private Multimap parseHeaders(Collection headers) return result; } - @NonNull private static String removeOption( + private static String removeOption( Multimap options, String name, String defaultValue) { return Optional.of(options.removeAll(name)) .map(Collection::iterator) @@ -167,13 +166,13 @@ public char charAt(int index) { return value.charAt(index); } - @NonNull @Override + @Override public CharSequence subSequence(int start, int end) { return value.subSequence(start, end); } @Override - @NonNull public String toString() { + public String toString() { return value; } } diff --git a/modules/jooby-openapi/src/main/java/io/jooby/openapi/OpenAPIGenerator.java b/modules/jooby-openapi/src/main/java/io/jooby/openapi/OpenAPIGenerator.java index de950dcc94..103b1a7689 100644 --- a/modules/jooby-openapi/src/main/java/io/jooby/openapi/OpenAPIGenerator.java +++ b/modules/jooby-openapi/src/main/java/io/jooby/openapi/OpenAPIGenerator.java @@ -14,12 +14,11 @@ import java.util.regex.Pattern; import java.util.stream.Stream; +import org.jspecify.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.fasterxml.jackson.databind.ObjectMapper; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; import io.jooby.Router; import io.jooby.SneakyThrows; import io.jooby.internal.openapi.*; @@ -48,10 +47,8 @@ public enum Format { /** JSON. */ JSON { @Override - @NonNull protected String toString( - @NonNull OpenAPIGenerator tool, - @NonNull OpenAPI result, - @NonNull Map options) { + protected String toString( + OpenAPIGenerator tool, OpenAPI result, Map options) { return tool.toJson(result); } }, @@ -59,29 +56,22 @@ public enum Format { /** YAML. */ YAML { @Override - @NonNull protected String toString( - @NonNull OpenAPIGenerator tool, - @NonNull OpenAPI result, - @NonNull Map options) { + protected String toString( + OpenAPIGenerator tool, OpenAPI result, Map options) { return tool.toYaml(result); } }, ADOC { @Override - @NonNull protected String toString( - @NonNull OpenAPIGenerator tool, - @NonNull OpenAPI result, - @NonNull Map options) { + protected String toString( + OpenAPIGenerator tool, OpenAPI result, Map options) { return tool.toAdoc(result, options); } @SuppressWarnings("unchecked") - @NonNull @Override - public List write( - @NonNull OpenAPIGenerator tool, - @NonNull OpenAPI result, - @NonNull Map options) + @Override + public List write(OpenAPIGenerator tool, OpenAPI result, Map options) throws IOException { var files = (List) options.get("adoc"); if (files == null || files.isEmpty()) { @@ -109,7 +99,7 @@ public List write( * * @return File extension. */ - public @NonNull String extension() { + public String extension() { return name().toLowerCase(); } @@ -120,10 +110,8 @@ public List write( * @param result Model. * @return String (json or yaml content). */ - protected abstract @NonNull String toString( - @NonNull OpenAPIGenerator tool, - @NonNull OpenAPI result, - @NonNull Map options); + protected abstract String toString( + OpenAPIGenerator tool, OpenAPI result, Map options); /** * Convert an {@link OpenAPI} model to the current format. @@ -132,10 +120,7 @@ public List write( * @param result Model. * @return String (json or yaml content). */ - public @NonNull List write( - @NonNull OpenAPIGenerator tool, - @NonNull OpenAPI result, - @NonNull Map options) + public List write(OpenAPIGenerator tool, OpenAPI result, Map options) throws IOException { var output = (Path) options.get("output"); var content = toString(tool, result, options); @@ -177,8 +162,7 @@ public OpenAPIGenerator() {} * @return Output file. * @throws IOException If fails to process input. */ - public @NonNull List export( - @NonNull OpenAPI openAPI, @NonNull Format format, @NonNull Map options) + public List export(OpenAPI openAPI, Format format, Map options) throws IOException { Path output; if (openAPI instanceof OpenAPIExt) { @@ -215,7 +199,7 @@ public OpenAPIGenerator() {} * @param classname Application class name. * @return Model. */ - public @NonNull OpenAPI generate(@NonNull String classname) { + public OpenAPI generate(String classname) { var classLoader = Optional.ofNullable(this.classLoader).orElseGet(getClass()::getClassLoader); var source = new ClassSource(classLoader); @@ -379,7 +363,7 @@ private void defaults(String classname, String contextPath, OpenAPIExt openapi) * @param openAPI Model. * @return YAML content. */ - public @NonNull String toYaml(@NonNull OpenAPI openAPI) { + public String toYaml(OpenAPI openAPI) { try { return yamlMapper().writeValueAsString(openAPI); } catch (IOException x) { @@ -393,7 +377,7 @@ private void defaults(String classname, String contextPath, OpenAPIExt openapi) * @param openAPI Model. * @return YAML content. */ - public @NonNull String toAdoc(@NonNull OpenAPI openAPI, @NonNull Map options) { + public String toAdoc(OpenAPI openAPI, Map options) { try { var file = (Path) options.get("adoc"); if (file == null) { @@ -411,7 +395,7 @@ private void defaults(String classname, String contextPath, OpenAPIExt openapi) * @param openAPI Model. * @return JSON content. */ - public @NonNull String toJson(@NonNull OpenAPI openAPI) { + public String toJson(OpenAPI openAPI) { try { return jsonMapper().writer().withDefaultPrettyPrinter().writeValueAsString(openAPI); } catch (IOException x) { @@ -424,7 +408,7 @@ private void defaults(String classname, String contextPath, OpenAPIExt openapi) * * @param classLoader Class loader. */ - public void setClassLoader(@NonNull ClassLoader classLoader) { + public void setClassLoader(ClassLoader classLoader) { this.classLoader = classLoader; } @@ -451,7 +435,7 @@ public String getTemplateName() { * * @param templateName OpenAPI template file name, defaults is: openapi.yaml. */ - public void setTemplateName(@NonNull String templateName) { + public void setTemplateName(String templateName) { this.templateName = templateName; } @@ -461,7 +445,7 @@ public void setTemplateName(@NonNull String templateName) { * * @param basedir Base directory. */ - public void setBasedir(@NonNull Path basedir) { + public void setBasedir(Path basedir) { this.basedir = basedir; } @@ -470,7 +454,7 @@ public void setBasedir(@NonNull Path basedir) { * * @param sources Source code location. */ - public void setSources(@NonNull List sources) { + public void setSources(List sources) { this.sources = sources; } @@ -537,7 +521,7 @@ public void setExcludes(@Nullable String excludes) { * * @param outputDir Output directory. */ - public void setOutputDir(@NonNull Path outputDir) { + public void setOutputDir(Path outputDir) { this.outputDir = outputDir; } diff --git a/modules/jooby-openapi/src/main/java/module-info.java b/modules/jooby-openapi/src/main/java/module-info.java index 92d3949123..9718060737 100644 --- a/modules/jooby-openapi/src/main/java/module-info.java +++ b/modules/jooby-openapi/src/main/java/module-info.java @@ -4,7 +4,7 @@ requires io.jooby; requires io.jooby.javadoc; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires typesafe.config; requires org.slf4j; requires com.fasterxml.jackson.databind; diff --git a/modules/jooby-openapi/src/test/java/examples/ABean.java b/modules/jooby-openapi/src/test/java/examples/ABean.java index 83023511c8..8b5d3f9ca3 100644 --- a/modules/jooby-openapi/src/test/java/examples/ABean.java +++ b/modules/jooby-openapi/src/test/java/examples/ABean.java @@ -5,10 +5,8 @@ */ package examples; -import edu.umd.cs.findbugs.annotations.NonNull; - public class ABean extends Bean { - @NonNull private String foo; + private String foo; public String getFoo() { return foo; diff --git a/modules/jooby-openapi/src/test/java/examples/HandlerA.java b/modules/jooby-openapi/src/test/java/examples/HandlerA.java index 069bc8a0b5..7d3d816a3d 100644 --- a/modules/jooby-openapi/src/test/java/examples/HandlerA.java +++ b/modules/jooby-openapi/src/test/java/examples/HandlerA.java @@ -5,13 +5,12 @@ */ package examples; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.Route; public class HandlerA implements Route.Handler { - @NonNull @Override - public Object apply(@NonNull Context ctx) throws Exception { + @Override + public Object apply(Context ctx) throws Exception { return null; } } diff --git a/modules/jooby-openapi/src/test/java/examples/PetRepo.java b/modules/jooby-openapi/src/test/java/examples/PetRepo.java index 20700aa85b..e2134d48c3 100644 --- a/modules/jooby-openapi/src/test/java/examples/PetRepo.java +++ b/modules/jooby-openapi/src/test/java/examples/PetRepo.java @@ -7,17 +7,15 @@ import java.util.List; -import edu.umd.cs.findbugs.annotations.NonNull; - public interface PetRepo { - @NonNull List pets(PetQuery query); + List pets(PetQuery query); - @NonNull Pet findById(long id); + Pet findById(long id); - @NonNull Pet save(@NonNull Pet pet); + Pet save(Pet pet); - @NonNull Pet update(@NonNull Pet pet); + Pet update(Pet pet); void deleteById(long id); } diff --git a/modules/jooby-openapi/src/test/java/issues/i2542/Controller2542.java b/modules/jooby-openapi/src/test/java/issues/i2542/Controller2542.java index 85b0af83b9..30134544ea 100644 --- a/modules/jooby-openapi/src/test/java/issues/i2542/Controller2542.java +++ b/modules/jooby-openapi/src/test/java/issues/i2542/Controller2542.java @@ -5,7 +5,8 @@ */ package issues.i2542; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.annotation.GET; import io.jooby.annotation.Path; import io.swagger.v3.oas.annotations.media.ArraySchema; diff --git a/modules/jooby-openapi/src/test/java/issues/i3412/App3412.java b/modules/jooby-openapi/src/test/java/issues/i3412/App3412.java index bb13c209a0..06c3c90fd2 100644 --- a/modules/jooby-openapi/src/test/java/issues/i3412/App3412.java +++ b/modules/jooby-openapi/src/test/java/issues/i3412/App3412.java @@ -5,7 +5,8 @@ */ package issues.i3412; -import edu.umd.cs.findbugs.annotations.NonNull; +import org.jspecify.annotations.NonNull; + import io.jooby.Jooby; import io.jooby.OpenAPIModule; import io.jooby.annotation.GET; diff --git a/modules/jooby-openapi/src/test/kotlin/kt/i3746/Server3746.kt b/modules/jooby-openapi/src/test/kotlin/kt/i3746/Server3746.kt index 17d57f5abd..f6afa89d58 100644 --- a/modules/jooby-openapi/src/test/kotlin/kt/i3746/Server3746.kt +++ b/modules/jooby-openapi/src/test/kotlin/kt/i3746/Server3746.kt @@ -18,7 +18,7 @@ class Server3746 : Server.Base() { TODO("Not yet implemented") } - override fun start(vararg application: Jooby?): Server { + override fun start(vararg application: Jooby): Server { TODO("Not yet implemented") } diff --git a/modules/jooby-opentelemetry/src/main/java/io/jooby/opentelemetry/OtelModule.java b/modules/jooby-opentelemetry/src/main/java/io/jooby/opentelemetry/OtelModule.java index 1b6f9436b6..72a2b86d32 100644 --- a/modules/jooby-opentelemetry/src/main/java/io/jooby/opentelemetry/OtelModule.java +++ b/modules/jooby-opentelemetry/src/main/java/io/jooby/opentelemetry/OtelModule.java @@ -14,7 +14,6 @@ import org.slf4j.bridge.SLF4JBridgeHandler; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Extension; import io.jooby.Jooby; import io.opentelemetry.api.GlobalOpenTelemetry; @@ -158,7 +157,7 @@ public OtelModule(OtelExtension... extensions) { } @Override - public void install(@NonNull Jooby application) { + public void install(Jooby application) { var otel = getOrCreate(application); if (!isRunningInJoobyRun() && otel instanceof AutoCloseable closeableOtel) { // Close the OpenTelemetry instance when the application is stopped, and we are not running @@ -189,7 +188,7 @@ private boolean isRunningInJoobyRun() { .equals("org.jboss.modules.ModuleClassLoader"); } - private OpenTelemetry getOrCreate(@NonNull Jooby application) { + private OpenTelemetry getOrCreate(Jooby application) { if (this.openTelemetry == null) { var appConfig = application.getConfig(); Map otelProperties = new HashMap<>(); diff --git a/modules/jooby-opentelemetry/src/main/java/io/jooby/opentelemetry/package-info.java b/modules/jooby-opentelemetry/src/main/java/io/jooby/opentelemetry/package-info.java index 6b67e54c73..f9a7b4b2ca 100644 --- a/modules/jooby-opentelemetry/src/main/java/io/jooby/opentelemetry/package-info.java +++ b/modules/jooby-opentelemetry/src/main/java/io/jooby/opentelemetry/package-info.java @@ -101,5 +101,5 @@ * @since 4.3.1 * @author edgar */ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.opentelemetry; diff --git a/modules/jooby-opentelemetry/src/main/java/module-info.java b/modules/jooby-opentelemetry/src/main/java/module-info.java index 75c94b0b06..640cd578c3 100644 --- a/modules/jooby-opentelemetry/src/main/java/module-info.java +++ b/modules/jooby-opentelemetry/src/main/java/module-info.java @@ -106,7 +106,7 @@ exports io.jooby.opentelemetry.instrumentation; requires io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires typesafe.config; requires org.slf4j; requires jul.to.slf4j; diff --git a/modules/jooby-pac4j/src/main/java/io/jooby/internal/pac4j/CallbackFilterImpl.java b/modules/jooby-pac4j/src/main/java/io/jooby/internal/pac4j/CallbackFilterImpl.java index cea5ddce38..99502c1174 100644 --- a/modules/jooby-pac4j/src/main/java/io/jooby/internal/pac4j/CallbackFilterImpl.java +++ b/modules/jooby-pac4j/src/main/java/io/jooby/internal/pac4j/CallbackFilterImpl.java @@ -5,7 +5,6 @@ */ package io.jooby.internal.pac4j; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.Route; import io.jooby.SneakyThrows; @@ -20,8 +19,8 @@ public CallbackFilterImpl(Pac4jOptions config) { this.config = config; } - @NonNull @Override - public Object apply(@NonNull Context ctx) throws Exception { + @Override + public Object apply(Context ctx) throws Exception { try { var result = config diff --git a/modules/jooby-pac4j/src/main/java/io/jooby/internal/pac4j/DevLoginForm.java b/modules/jooby-pac4j/src/main/java/io/jooby/internal/pac4j/DevLoginForm.java index da19585169..6ca783fbc1 100644 --- a/modules/jooby-pac4j/src/main/java/io/jooby/internal/pac4j/DevLoginForm.java +++ b/modules/jooby-pac4j/src/main/java/io/jooby/internal/pac4j/DevLoginForm.java @@ -8,7 +8,6 @@ import org.pac4j.core.config.Config; import org.pac4j.core.http.url.UrlResolver; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.MediaType; import io.jooby.Route; @@ -67,8 +66,8 @@ public DevLoginForm(Config pac4j, String callbackPath) { this.callbackPath = callbackPath; } - @NonNull @Override - public Object apply(@NonNull Context ctx) throws Exception { + @Override + public Object apply(Context ctx) throws Exception { String error = ctx.query("error").value(""); String username = ctx.query("username").value(""); diff --git a/modules/jooby-pac4j/src/main/java/io/jooby/internal/pac4j/LogoutImpl.java b/modules/jooby-pac4j/src/main/java/io/jooby/internal/pac4j/LogoutImpl.java index a3de0a0a9a..11fa95c7ee 100644 --- a/modules/jooby-pac4j/src/main/java/io/jooby/internal/pac4j/LogoutImpl.java +++ b/modules/jooby-pac4j/src/main/java/io/jooby/internal/pac4j/LogoutImpl.java @@ -7,7 +7,6 @@ import org.pac4j.core.config.Config; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.Route; import io.jooby.SneakyThrows; @@ -25,8 +24,8 @@ public LogoutImpl(Config config, Pac4jOptions options) { this.options = options; } - @NonNull @Override - public Object apply(@NonNull Context ctx) throws Exception { + @Override + public Object apply(Context ctx) throws Exception { try { var redirectTo = (String) ctx.getAttributes().get("pac4j.logout.redirectTo"); if (redirectTo == null || redirectTo.isEmpty()) { diff --git a/modules/jooby-pac4j/src/main/java/io/jooby/internal/pac4j/Pac4jSession.java b/modules/jooby-pac4j/src/main/java/io/jooby/internal/pac4j/Pac4jSession.java index 4ebde0fd54..b77c716f61 100644 --- a/modules/jooby-pac4j/src/main/java/io/jooby/internal/pac4j/Pac4jSession.java +++ b/modules/jooby-pac4j/src/main/java/io/jooby/internal/pac4j/Pac4jSession.java @@ -8,8 +8,8 @@ import java.time.Instant; import java.util.Map; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.*; import io.jooby.pac4j.Pac4jUntrustedDataFound; import io.jooby.value.Value; @@ -21,7 +21,7 @@ class Pac4jSession implements Session { private final Session session; - public Pac4jSession(@NonNull Session session) { + public Pac4jSession(Session session) { this.session = session; } @@ -29,11 +29,11 @@ public Pac4jSession(@NonNull Session session) { return session.getId(); } - @NonNull public Value get(@NonNull String name) { + public Value get(String name) { return session.get(name); } - @NonNull public Instant getLastAccessedTime() { + public Instant getLastAccessedTime() { return session.getLastAccessedTime(); } @@ -41,12 +41,12 @@ public void destroy() { session.destroy(); } - @NonNull public Session setId(String id) { + public Session setId(String id) { session.setId(id); return this; } - @NonNull public Value remove(@NonNull String name) { + public Value remove(String name) { return session.remove(name); } @@ -54,12 +54,12 @@ public boolean isNew() { return session.isNew(); } - @NonNull public Session setNew(boolean isNew) { + public Session setNew(boolean isNew) { session.setNew(isNew); return this; } - @NonNull public Session setLastAccessedTime(@NonNull Instant lastAccessedTime) { + public Session setLastAccessedTime(Instant lastAccessedTime) { session.setLastAccessedTime(lastAccessedTime); return this; } @@ -68,12 +68,12 @@ public boolean isModify() { return session.isModify(); } - @NonNull public Session setCreationTime(@NonNull Instant creationTime) { + public Session setCreationTime(Instant creationTime) { session.setCreationTime(creationTime); return this; } - @NonNull public Session setModify(boolean modify) { + public Session setModify(boolean modify) { session.setModify(modify); return this; } @@ -83,11 +83,11 @@ public Session renewId() { return this; } - @NonNull public Instant getCreationTime() { + public Instant getCreationTime() { return session.getCreationTime(); } - @NonNull public Map toMap() { + public Map toMap() { return session.toMap(); } @@ -102,7 +102,7 @@ public Session getSession() { public static Context create(Context ctx) { return new ForwardingContext(ctx) { - @NonNull @Override + @Override public Session session() { return new Pac4jSession(super.session()); } @@ -115,8 +115,8 @@ public Session sessionOrNull() { }; } - @NonNull @Override - public Session put(@NonNull String name, @NonNull String value) { + @Override + public Session put(String name, String value) { if (value != null) { if (value.startsWith(PAC4J) || value.startsWith(BIN)) { throw new Pac4jUntrustedDataFound(name); diff --git a/modules/jooby-pac4j/src/main/java/io/jooby/internal/pac4j/SecurityFilterImpl.java b/modules/jooby-pac4j/src/main/java/io/jooby/internal/pac4j/SecurityFilterImpl.java index 8a751f7ba6..f35e4eeb24 100644 --- a/modules/jooby-pac4j/src/main/java/io/jooby/internal/pac4j/SecurityFilterImpl.java +++ b/modules/jooby-pac4j/src/main/java/io/jooby/internal/pac4j/SecurityFilterImpl.java @@ -18,7 +18,6 @@ import org.pac4j.core.matching.matcher.DefaultMatchers; import org.pac4j.core.util.Pac4jConstants; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.Route; import io.jooby.SneakyThrows; @@ -51,8 +50,8 @@ public void addAuthorizer(String authorizer) { } } - @NonNull @Override - public Route.Handler apply(@NonNull Route.Handler next) { + @Override + public Route.Handler apply(Route.Handler next) { return ctx -> { if (pattern == null) { return perform(ctx, new GrantAccessAdapterImpl(ctx, config, next)); @@ -66,8 +65,8 @@ public Route.Handler apply(@NonNull Route.Handler next) { }; } - @NonNull @Override - public Object apply(@NonNull Context ctx) throws Exception { + @Override + public Object apply(Context ctx) throws Exception { return perform(ctx, new GrantAccessAdapterImpl(ctx, config)); } diff --git a/modules/jooby-pac4j/src/main/java/io/jooby/internal/pac4j/UntrustedSessionDataDetector.java b/modules/jooby-pac4j/src/main/java/io/jooby/internal/pac4j/UntrustedSessionDataDetector.java index 2a703e1d5b..4ef2291f27 100644 --- a/modules/jooby-pac4j/src/main/java/io/jooby/internal/pac4j/UntrustedSessionDataDetector.java +++ b/modules/jooby-pac4j/src/main/java/io/jooby/internal/pac4j/UntrustedSessionDataDetector.java @@ -5,13 +5,12 @@ */ package io.jooby.internal.pac4j; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Route; import io.jooby.Session; public class UntrustedSessionDataDetector implements Route.Filter { @Override - @NonNull public Route.Handler apply(@NonNull Route.Handler next) { + public Route.Handler apply(Route.Handler next) { return ctx -> { Session session = ctx.sessionOrNull(); if (session instanceof Pac4jSession) { diff --git a/modules/jooby-pac4j/src/main/java/io/jooby/internal/pac4j/WebContextImpl.java b/modules/jooby-pac4j/src/main/java/io/jooby/internal/pac4j/WebContextImpl.java index 2597a16014..5c8af8e595 100644 --- a/modules/jooby-pac4j/src/main/java/io/jooby/internal/pac4j/WebContextImpl.java +++ b/modules/jooby-pac4j/src/main/java/io/jooby/internal/pac4j/WebContextImpl.java @@ -17,7 +17,6 @@ import org.pac4j.core.context.Cookie; import org.pac4j.core.context.session.SessionStore; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.SameSite; import io.jooby.pac4j.Pac4jContext; @@ -35,7 +34,7 @@ public WebContextImpl(Context context) { } @Override - public @NonNull Context getContext() { + public Context getContext() { return context; } @@ -157,7 +156,7 @@ public String getPath() { return context.getRequestPath(); } - @NonNull @Override + @Override public SessionStore getSessionStore() { return sessionStore; } diff --git a/modules/jooby-pac4j/src/main/java/io/jooby/pac4j/Pac4jContext.java b/modules/jooby-pac4j/src/main/java/io/jooby/pac4j/Pac4jContext.java index 8d2a2228f9..4f6842eee8 100644 --- a/modules/jooby-pac4j/src/main/java/io/jooby/pac4j/Pac4jContext.java +++ b/modules/jooby-pac4j/src/main/java/io/jooby/pac4j/Pac4jContext.java @@ -8,7 +8,6 @@ import org.pac4j.core.context.WebContext; import org.pac4j.core.context.session.SessionStore; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.internal.pac4j.WebContextImpl; @@ -39,7 +38,7 @@ public interface Pac4jContext extends WebContext { * @param ctx Web context. * @return Pac4j web context. */ - static Pac4jContext create(@NonNull Context ctx) { + static Pac4jContext create(Context ctx) { String key = Pac4jContext.class.getName(); WebContextImpl impl = ctx.getAttribute(key); if (impl == null) { diff --git a/modules/jooby-pac4j/src/main/java/io/jooby/pac4j/Pac4jModule.java b/modules/jooby-pac4j/src/main/java/io/jooby/pac4j/Pac4jModule.java index a57c077397..643707ea00 100644 --- a/modules/jooby-pac4j/src/main/java/io/jooby/pac4j/Pac4jModule.java +++ b/modules/jooby-pac4j/src/main/java/io/jooby/pac4j/Pac4jModule.java @@ -13,6 +13,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; +import org.jspecify.annotations.Nullable; import org.pac4j.core.authorization.authorizer.Authorizer; import org.pac4j.core.client.Client; import org.pac4j.core.client.Clients; @@ -31,8 +32,6 @@ import org.pac4j.http.client.indirect.FormClient; import org.pac4j.http.credentials.authenticator.test.SimpleTestUsernamePasswordAuthenticator; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; import io.jooby.Context; import io.jooby.Extension; import io.jooby.Jooby; @@ -162,9 +161,8 @@ public Pac4jModule client( * @param provider Client factory. * @return This module. */ - public @NonNull Pac4jModule client( - @NonNull Authorizer authorizer, - @NonNull Function provider) { + public Pac4jModule client( + Authorizer authorizer, Function provider) { return client("*", authorizer, provider); } @@ -179,10 +177,10 @@ public Pac4jModule client( * @param provider Client factory. * @return This module. */ - public @NonNull Pac4jModule client( - @NonNull String pattern, - @NonNull Class authorizer, - @NonNull Function provider) { + public Pac4jModule client( + String pattern, + Class authorizer, + Function provider) { return client( pattern, registerAuthorizer(authorizer, new ForwardingAuthorizer(authorizer)), provider); } @@ -198,10 +196,10 @@ public Pac4jModule client( * @param provider Client factory. * @return This module. */ - public @NonNull Pac4jModule client( - @NonNull String pattern, - @NonNull Authorizer authorizer, - @NonNull Function provider) { + public Pac4jModule client( + String pattern, + Authorizer authorizer, + Function provider) { return client(pattern, registerAuthorizer(authorizer.getClass(), authorizer), provider); } @@ -217,10 +215,10 @@ public Pac4jModule client( * @param provider Client factory. * @return This module. */ - public @NonNull Pac4jModule client( - @NonNull String pattern, + public Pac4jModule client( + String pattern, @Nullable String authorizer, - @NonNull Function provider) { + Function provider) { if (clientMap == null) { clientMap = initializeClients(options); } @@ -234,7 +232,7 @@ public Pac4jModule client( * @param client Client class. * @return This module. */ - public Pac4jModule client(@NonNull Class client) { + public Pac4jModule client(Class client) { return client("*", client); } @@ -245,7 +243,7 @@ public Pac4jModule client(@NonNull Class client) { * @param client Client class. * @return This module. */ - public Pac4jModule client(@NonNull String pattern, @NonNull Class client) { + public Pac4jModule client(String pattern, Class client) { return client(pattern, (String) null, client); } @@ -260,7 +258,7 @@ public Pac4jModule client(@NonNull String pattern, @NonNull Class authorizer, @NonNull Class client) { + Class authorizer, Class client) { return client("*", authorizer, client); } @@ -274,8 +272,7 @@ public Pac4jModule client( * @param client Client class. * @return This module. */ - public @NonNull Pac4jModule client( - @NonNull Authorizer authorizer, @NonNull Class client) { + public Pac4jModule client(Authorizer authorizer, Class client) { return client("*", authorizer, client); } @@ -290,10 +287,8 @@ public Pac4jModule client( * @param client Client class. * @return This module. */ - public @NonNull Pac4jModule client( - @NonNull String pattern, - @NonNull Class authorizer, - @NonNull Class client) { + public Pac4jModule client( + String pattern, Class authorizer, Class client) { return client( pattern, registerAuthorizer(authorizer, new ForwardingAuthorizer(authorizer)), client); } @@ -309,10 +304,7 @@ public Pac4jModule client( * @param client Client class. * @return This module. */ - public @NonNull Pac4jModule client( - @NonNull String pattern, - @NonNull Authorizer authorizer, - @NonNull Class client) { + public Pac4jModule client(String pattern, Authorizer authorizer, Class client) { return client(pattern, registerAuthorizer(authorizer.getClass(), authorizer), client); } @@ -328,10 +320,8 @@ public Pac4jModule client( * @param client Client class. * @return This module. */ - public @NonNull Pac4jModule client( - @NonNull String pattern, - @Nullable String authorizer, - @NonNull Class client) { + public Pac4jModule client( + String pattern, @Nullable String authorizer, Class client) { if (clientMap == null) { clientMap = initializeClients(options); } @@ -340,7 +330,7 @@ public Pac4jModule client( } @Override - public void install(@NonNull Jooby app) throws Exception { + public void install(Jooby app) throws Exception { var services = app.getServices(); services.putIfAbsent(Pac4jOptions.class, options); app.getServices().put(Config.class, options); diff --git a/modules/jooby-pac4j/src/main/java/io/jooby/pac4j/Pac4jOptions.java b/modules/jooby-pac4j/src/main/java/io/jooby/pac4j/Pac4jOptions.java index 97f7ecbf5a..d85d8622ca 100644 --- a/modules/jooby-pac4j/src/main/java/io/jooby/pac4j/Pac4jOptions.java +++ b/modules/jooby-pac4j/src/main/java/io/jooby/pac4j/Pac4jOptions.java @@ -8,14 +8,13 @@ import java.util.List; import java.util.Optional; +import org.jspecify.annotations.Nullable; import org.pac4j.core.client.Client; import org.pac4j.core.client.Clients; import org.pac4j.core.config.Config; import org.pac4j.core.util.serializer.JavaSerializer; import org.pac4j.core.util.serializer.Serializer; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; import io.jooby.SameSite; /** @@ -129,7 +128,7 @@ public Pac4jOptions(String callbackPath, List clients) { * @param config Config object. * @return Pac4j options. */ - public static Pac4jOptions from(@NonNull Config config) { + public static Pac4jOptions from(Config config) { return config instanceof Pac4jOptions options ? options : new Pac4jOptions(config); } @@ -170,7 +169,7 @@ public Pac4jOptions setDefaultUrl(@Nullable String defaultUrl) { * @param saveInSession True to save profile in HTTP session. * @return This session. */ - public @NonNull Pac4jOptions setSaveInSession(@Nullable Boolean saveInSession) { + public Pac4jOptions setSaveInSession(@Nullable Boolean saveInSession) { this.saveInSession = saveInSession; return this; } @@ -251,7 +250,7 @@ public String getCallbackPath() { * @param callbackPath Callback path. * @return This options. */ - public Pac4jOptions setCallbackPath(@NonNull String callbackPath) { + public Pac4jOptions setCallbackPath(String callbackPath) { this.callbackPath = callbackPath; return this; } @@ -272,7 +271,7 @@ public String getLogoutPath() { * @param logoutPath Logout path. * @return This options. */ - public Pac4jOptions setLogoutPath(@NonNull String logoutPath) { + public Pac4jOptions setLogoutPath(String logoutPath) { this.logoutPath = logoutPath; return this; } @@ -410,7 +409,7 @@ public Pac4jOptions setForceLogoutRoutes(boolean forceLogoutRoutes) { * optional parameter and only relative URLs are allowed by default. * @return This instance. */ - public @NonNull Pac4jOptions setLogoutUrlPattern(String logoutUrlPattern) { + public Pac4jOptions setLogoutUrlPattern(String logoutUrlPattern) { this.logoutUrlPattern = logoutUrlPattern; return this; } @@ -420,7 +419,7 @@ public Pac4jOptions setForceLogoutRoutes(boolean forceLogoutRoutes) { * * @return Serializer, defaults to {@link JavaSerializer}. */ - public @NonNull Serializer getSerializer() { + public Serializer getSerializer() { return serializer; } @@ -430,7 +429,7 @@ public Pac4jOptions setForceLogoutRoutes(boolean forceLogoutRoutes) { * @param serializer Serializer. * @return This instance. */ - public @NonNull Pac4jOptions setSerializer(@NonNull Serializer serializer) { + public Pac4jOptions setSerializer(Serializer serializer) { this.serializer = serializer; return this; } diff --git a/modules/jooby-pac4j/src/main/java/io/jooby/pac4j/package-info.java b/modules/jooby-pac4j/src/main/java/io/jooby/pac4j/package-info.java index 01497fced5..445c0b98d6 100644 --- a/modules/jooby-pac4j/src/main/java/io/jooby/pac4j/package-info.java +++ b/modules/jooby-pac4j/src/main/java/io/jooby/pac4j/package-info.java @@ -1,3 +1,3 @@ /** Pac4j module. */ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.pac4j; diff --git a/modules/jooby-pac4j/src/main/java/module-info.java b/modules/jooby-pac4j/src/main/java/module-info.java index 667096a8fe..8307dd4e46 100644 --- a/modules/jooby-pac4j/src/main/java/module-info.java +++ b/modules/jooby-pac4j/src/main/java/module-info.java @@ -8,10 +8,9 @@ exports io.jooby.pac4j; requires io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires typesafe.config; requires org.slf4j; requires pac4j.core; requires pac4j.http; - requires jsr305; } diff --git a/modules/jooby-pebble/src/main/java/io/jooby/pebble/PebbleModule.java b/modules/jooby-pebble/src/main/java/io/jooby/pebble/PebbleModule.java index 33eadae574..29e6a77500 100644 --- a/modules/jooby-pebble/src/main/java/io/jooby/pebble/PebbleModule.java +++ b/modules/jooby-pebble/src/main/java/io/jooby/pebble/PebbleModule.java @@ -16,7 +16,6 @@ import java.util.concurrent.ExecutorService; import com.typesafe.config.Config; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Environment; import io.jooby.Extension; import io.jooby.Jooby; @@ -104,7 +103,7 @@ public static class Builder { * @param cache Template cache. * @return This builder. */ - public @NonNull Builder setTemplateCache(@NonNull PebbleCache cache) { + public Builder setTemplateCache(PebbleCache cache) { this.templateCache = cache; return this; } @@ -115,7 +114,7 @@ public static class Builder { * @param tagCache Tag cache. * @return This builder. */ - public @NonNull Builder setTagCache(@NonNull PebbleCache tagCache) { + public Builder setTagCache(PebbleCache tagCache) { this.tagCache = tagCache; return this; } @@ -126,7 +125,7 @@ public static class Builder { * @param templatesPath Set template path. * @return This builder. */ - public @NonNull Builder setTemplatesPath(@NonNull String templatesPath) { + public Builder setTemplatesPath(String templatesPath) { this.templatesPath = templatesPath; return this; } @@ -137,7 +136,7 @@ public static class Builder { * @param executorService Set ExecutorService. * @return This builder. */ - public @NonNull Builder setExecutorService(@NonNull ExecutorService executorService) { + public Builder setExecutorService(ExecutorService executorService) { this.executorService = executorService; return this; } @@ -148,7 +147,7 @@ public static class Builder { * @param defaultLocale Locale. * @return This builder. */ - public @NonNull Builder setDefaultLocale(@NonNull Locale defaultLocale) { + public Builder setDefaultLocale(Locale defaultLocale) { this.defaultLocale = defaultLocale; return this; } @@ -159,7 +158,7 @@ public static class Builder { * @param loader Template loader to use. * @return This builder. */ - public @NonNull Builder setTemplateLoader(@NonNull Loader loader) { + public Builder setTemplateLoader(Loader loader) { this.loader = loader; return this; } @@ -170,7 +169,7 @@ public static class Builder { * @param env Application environment. * @return A new PebbleEngine instance. */ - public @NonNull PebbleEngine.Builder build(@NonNull Environment env) { + public PebbleEngine.Builder build(Environment env) { PebbleEngine.Builder builder = new PebbleEngine.Builder(); @@ -266,7 +265,7 @@ private static String stripLeadingSlash(String value) { * * @param builder PebbleEngine.Builder instance to use. */ - public PebbleModule(@NonNull PebbleEngine.Builder builder) { + public PebbleModule(PebbleEngine.Builder builder) { this.builder = builder; } @@ -276,7 +275,7 @@ public PebbleModule(@NonNull PebbleEngine.Builder builder) { * @param templatesPath Template location to use. First try to file-system or fallback to * classpath. */ - public PebbleModule(@NonNull String templatesPath) { + public PebbleModule(String templatesPath) { this.templatesPath = templatesPath; } @@ -286,7 +285,7 @@ public PebbleModule() { } @Override - public void install(@NonNull Jooby application) throws Exception { + public void install(Jooby application) throws Exception { if (builder == null) { builder = create().setTemplatesPath(templatesPath).build(application.getEnvironment()); } @@ -301,7 +300,7 @@ public void install(@NonNull Jooby application) throws Exception { * * @return A builder. */ - public static @NonNull PebbleModule.Builder create() { + public static PebbleModule.Builder create() { return new PebbleModule.Builder(); } } diff --git a/modules/jooby-pebble/src/main/java/io/jooby/pebble/PebbleTemplateEngine.java b/modules/jooby-pebble/src/main/java/io/jooby/pebble/PebbleTemplateEngine.java index d4408dc406..abfe235906 100644 --- a/modules/jooby-pebble/src/main/java/io/jooby/pebble/PebbleTemplateEngine.java +++ b/modules/jooby-pebble/src/main/java/io/jooby/pebble/PebbleTemplateEngine.java @@ -10,7 +10,6 @@ import java.util.List; import java.util.Map; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.MapModelAndView; import io.jooby.ModelAndView; @@ -28,7 +27,7 @@ class PebbleTemplateEngine implements TemplateEngine { this.extensions = Collections.unmodifiableList(extensions); } - @NonNull @Override + @Override public List extensions() { return extensions; } diff --git a/modules/jooby-pebble/src/main/java/io/jooby/pebble/package-info.java b/modules/jooby-pebble/src/main/java/io/jooby/pebble/package-info.java index b9cdf0ec0c..3e2ef1159d 100644 --- a/modules/jooby-pebble/src/main/java/io/jooby/pebble/package-info.java +++ b/modules/jooby-pebble/src/main/java/io/jooby/pebble/package-info.java @@ -1,2 +1,2 @@ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.pebble; diff --git a/modules/jooby-pebble/src/main/java/module-info.java b/modules/jooby-pebble/src/main/java/module-info.java index eaa0583444..3885490135 100644 --- a/modules/jooby-pebble/src/main/java/module-info.java +++ b/modules/jooby-pebble/src/main/java/module-info.java @@ -8,7 +8,7 @@ exports io.jooby.pebble; requires io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires typesafe.config; requires io.pebbletemplates; } diff --git a/modules/jooby-quartz/src/main/java/io/jooby/internal/quartz/ExtendedJobExecutionContextImpl.java b/modules/jooby-quartz/src/main/java/io/jooby/internal/quartz/ExtendedJobExecutionContextImpl.java index af68c4798e..9cfc4127cb 100644 --- a/modules/jooby-quartz/src/main/java/io/jooby/internal/quartz/ExtendedJobExecutionContextImpl.java +++ b/modules/jooby-quartz/src/main/java/io/jooby/internal/quartz/ExtendedJobExecutionContextImpl.java @@ -16,7 +16,6 @@ import org.quartz.Trigger; import org.quartz.TriggerKey; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Registry; import io.jooby.Reified; import io.jooby.ServiceKey; @@ -35,28 +34,28 @@ public ExtendedJobExecutionContextImpl( this.registry = registry; } - @NonNull @Override - public T require(@NonNull Class type) throws RegistryException { + @Override + public T require(Class type) throws RegistryException { return registry.require(type); } - @NonNull @Override - public T require(@NonNull Class type, @NonNull String name) throws RegistryException { + @Override + public T require(Class type, String name) throws RegistryException { return registry.require(type, name); } - @NonNull @Override - public T require(@NonNull ServiceKey key) throws RegistryException { + @Override + public T require(ServiceKey key) throws RegistryException { return registry.require(key); } - @NonNull @Override - public T require(@NonNull Reified type) throws RegistryException { + @Override + public T require(Reified type) throws RegistryException { return registry.require(type); } - @NonNull @Override - public T require(@NonNull Reified type, @NonNull String name) throws RegistryException { + @Override + public T require(Reified type, String name) throws RegistryException { return registry.require(type, name); } diff --git a/modules/jooby-quartz/src/main/java/io/jooby/quartz/QuartzApp.java b/modules/jooby-quartz/src/main/java/io/jooby/quartz/QuartzApp.java index 3ad7bc689b..2bb57ae8d4 100644 --- a/modules/jooby-quartz/src/main/java/io/jooby/quartz/QuartzApp.java +++ b/modules/jooby-quartz/src/main/java/io/jooby/quartz/QuartzApp.java @@ -16,6 +16,7 @@ import java.util.Optional; import java.util.stream.Collectors; +import org.jspecify.annotations.Nullable; import org.quartz.CalendarIntervalTrigger; import org.quartz.CronTrigger; import org.quartz.DailyTimeIntervalTrigger; @@ -30,7 +31,6 @@ import org.quartz.Trigger; import org.quartz.impl.matchers.GroupMatcher; -import edu.umd.cs.findbugs.annotations.Nullable; import io.jooby.Context; import io.jooby.Jooby; import io.jooby.Route; diff --git a/modules/jooby-quartz/src/main/java/io/jooby/quartz/QuartzModule.java b/modules/jooby-quartz/src/main/java/io/jooby/quartz/QuartzModule.java index 4df6d49d18..4613a7fc53 100644 --- a/modules/jooby-quartz/src/main/java/io/jooby/quartz/QuartzModule.java +++ b/modules/jooby-quartz/src/main/java/io/jooby/quartz/QuartzModule.java @@ -35,7 +35,6 @@ import org.slf4j.Logger; import com.typesafe.config.Config; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Extension; import io.jooby.Jooby; import io.jooby.ServiceKey; @@ -133,7 +132,7 @@ public QuartzModule(final List> jobs) { * @param scheduler Provided scheduler. * @param jobs Job classes. */ - public QuartzModule(@NonNull Scheduler scheduler, final Class... jobs) { + public QuartzModule(Scheduler scheduler, final Class... jobs) { this.scheduler = scheduler; this.jobs = Arrays.asList(jobs); } @@ -145,7 +144,7 @@ public QuartzModule(@NonNull Scheduler scheduler, final Class... jobs) { * @param scheduler Provided scheduler. * @param jobs Job classes. */ - public QuartzModule(@NonNull Scheduler scheduler, final List> jobs) { + public QuartzModule(Scheduler scheduler, final List> jobs) { this.scheduler = scheduler; this.jobs = jobs; } @@ -174,7 +173,7 @@ public QuartzModule cleanJobs(boolean cleanJobs) { } @Override - public void install(@NonNull Jooby application) throws Exception { + public void install(Jooby application) throws Exception { Config config = application.getConfig(); Map jobMap = JobGenerator.build(application, jobs); @@ -282,7 +281,7 @@ private static void cleanStaleJobs(Logger log, Scheduler scheduler, Listjooby-reactor - - com.github.spotbugs - spotbugs-annotations - - io.jooby jooby diff --git a/modules/jooby-reactor/src/main/java/io/jooby/reactor/Reactor.java b/modules/jooby-reactor/src/main/java/io/jooby/reactor/Reactor.java index fff0ab8914..cd4976e735 100644 --- a/modules/jooby-reactor/src/main/java/io/jooby/reactor/Reactor.java +++ b/modules/jooby-reactor/src/main/java/io/jooby/reactor/Reactor.java @@ -10,7 +10,6 @@ import org.slf4j.Logger; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.Route; import reactor.core.publisher.Flux; @@ -39,7 +38,7 @@ private void after(Context ctx, Object value, Throwable failure) { } @Override - public Route.Handler apply(@NonNull Route.Handler next) { + public Route.Handler apply(Route.Handler next) { return ctx -> { Object result = next.apply(ctx); if (ctx.isResponseStarted()) { diff --git a/modules/jooby-reactor/src/main/java/io/jooby/reactor/package-info.java b/modules/jooby-reactor/src/main/java/io/jooby/reactor/package-info.java index e4b6ba2adc..776fde9f78 100644 --- a/modules/jooby-reactor/src/main/java/io/jooby/reactor/package-info.java +++ b/modules/jooby-reactor/src/main/java/io/jooby/reactor/package-info.java @@ -1,2 +1,2 @@ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.reactor; diff --git a/modules/jooby-reactor/src/main/java/module-info.java b/modules/jooby-reactor/src/main/java/module-info.java index a1afa0bce6..1cdd1d26a3 100644 --- a/modules/jooby-reactor/src/main/java/module-info.java +++ b/modules/jooby-reactor/src/main/java/module-info.java @@ -9,7 +9,7 @@ exports io.jooby.reactor; requires io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires reactor.core; requires org.reactivestreams; requires org.slf4j; diff --git a/modules/jooby-redis/src/main/java/io/jooby/redis/RedisModule.java b/modules/jooby-redis/src/main/java/io/jooby/redis/RedisModule.java index d343d14b92..40b38cafef 100644 --- a/modules/jooby-redis/src/main/java/io/jooby/redis/RedisModule.java +++ b/modules/jooby-redis/src/main/java/io/jooby/redis/RedisModule.java @@ -13,7 +13,6 @@ import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import com.typesafe.config.Config; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Extension; import io.jooby.Jooby; import io.jooby.ServiceKey; @@ -72,7 +71,7 @@ public class RedisModule implements Extension { * * @param value Redis URI or property name. */ - public RedisModule(@NonNull String value) { + public RedisModule(String value) { try { uri = RedisURI.create(value); name = "redis"; @@ -93,7 +92,7 @@ public RedisModule() { } @Override - public void install(@NonNull Jooby application) throws Exception { + public void install(Jooby application) throws Exception { if (uri == null) { Config config = application.getConfig(); uri = diff --git a/modules/jooby-redis/src/main/java/io/jooby/redis/RedisSessionStore.java b/modules/jooby-redis/src/main/java/io/jooby/redis/RedisSessionStore.java index 227655b25a..45ca1fe358 100644 --- a/modules/jooby-redis/src/main/java/io/jooby/redis/RedisSessionStore.java +++ b/modules/jooby-redis/src/main/java/io/jooby/redis/RedisSessionStore.java @@ -15,11 +15,10 @@ import org.apache.commons.pool2.impl.GenericObjectPool; import org.apache.commons.pool2.impl.GenericObjectPoolConfig; +import org.jspecify.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; import io.jooby.*; import io.lettuce.core.RedisClient; import io.lettuce.core.api.StatefulRedisConnection; @@ -52,8 +51,7 @@ public class RedisSessionStore implements SessionStore { * @param pool Redis connection pool. */ public RedisSessionStore( - @NonNull SessionToken token, - @NonNull GenericObjectPool> pool) { + SessionToken token, GenericObjectPool> pool) { this.token = token; this.pool = pool; } @@ -64,7 +62,7 @@ public RedisSessionStore( * @param token Session token. * @param redis Redis connection. */ - public RedisSessionStore(@NonNull SessionToken token, @NonNull RedisClient redis) { + public RedisSessionStore(SessionToken token, RedisClient redis) { this( token, ConnectionPoolSupport.createGenericObjectPool( @@ -76,7 +74,7 @@ public RedisSessionStore(@NonNull SessionToken token, @NonNull RedisClient redis * * @return Redis namespace (key prefix). Default is: sessions. */ - public @NonNull String getNamespace() { + public String getNamespace() { return namespace; } @@ -86,7 +84,7 @@ public RedisSessionStore(@NonNull SessionToken token, @NonNull RedisClient redis * @param namespace Redis namespace or key prefix. * @return This store. */ - public @NonNull RedisSessionStore setNamespace(@NonNull String namespace) { + public RedisSessionStore setNamespace(String namespace) { this.namespace = namespace; return this; } @@ -106,7 +104,7 @@ public RedisSessionStore(@NonNull SessionToken token, @NonNull RedisClient redis * @param timeout Timeout must be positive value. Otherwise, timeout is disabled. * @return This store. */ - public @NonNull RedisSessionStore setTimeout(@NonNull Duration timeout) { + public RedisSessionStore setTimeout(Duration timeout) { this.timeout = timeout; return this; } @@ -116,7 +114,7 @@ public RedisSessionStore(@NonNull SessionToken token, @NonNull RedisClient redis * * @return This store. */ - public @NonNull RedisSessionStore noTimeout() { + public RedisSessionStore noTimeout() { this.timeout = null; return this; } @@ -126,12 +124,12 @@ public RedisSessionStore(@NonNull SessionToken token, @NonNull RedisClient redis * * @return Session token. */ - public @NonNull SessionToken getToken() { + public SessionToken getToken() { return token; } - @NonNull @Override - public Session newSession(@NonNull Context ctx) { + @Override + public Session newSession(Context ctx) { String sessionId = token.newToken(); Instant now = Instant.now(); @@ -151,7 +149,7 @@ public Session newSession(@NonNull Context ctx) { } @Nullable @Override - public Session findSession(@NonNull Context ctx) { + public Session findSession(Context ctx) { String sessionId = token.findToken(ctx); if (sessionId == null) { return null; @@ -179,7 +177,7 @@ public Session findSession(@NonNull Context ctx) { } @Override - public void deleteSession(@NonNull Context ctx, @NonNull Session session) { + public void deleteSession(Context ctx, Session session) { String sessionId = session.getId(); withConnection(connection -> connection.async().del(key(sessionId))); @@ -188,19 +186,19 @@ public void deleteSession(@NonNull Context ctx, @NonNull Session session) { } @Override - public void touchSession(@NonNull Context ctx, @NonNull Session session) { + public void touchSession(Context ctx, Session session) { saveSession(ctx, session); token.saveToken(ctx, session.getId()); } @Override - public void saveSession(@NonNull Context ctx, @NonNull Session session) { + public void saveSession(Context ctx, Session session) { saveSession(session.getId(), new HashMap<>(session.toMap())); } @Override - public void renewSessionId(@NonNull Context ctx, @NonNull Session session) {} + public void renewSessionId(Context ctx, Session session) {} private void saveSession(String sessionId, Map data) { withConnection( diff --git a/modules/jooby-redis/src/main/java/io/jooby/redis/package-info.java b/modules/jooby-redis/src/main/java/io/jooby/redis/package-info.java index 7a67afa228..e445e45695 100644 --- a/modules/jooby-redis/src/main/java/io/jooby/redis/package-info.java +++ b/modules/jooby-redis/src/main/java/io/jooby/redis/package-info.java @@ -1,2 +1,2 @@ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.redis; diff --git a/modules/jooby-redis/src/main/java/module-info.java b/modules/jooby-redis/src/main/java/module-info.java index ea304bd380..c978adc82d 100644 --- a/modules/jooby-redis/src/main/java/module-info.java +++ b/modules/jooby-redis/src/main/java/module-info.java @@ -9,7 +9,7 @@ exports io.jooby.redis; requires io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires typesafe.config; requires org.slf4j; requires org.apache.commons.pool2; diff --git a/modules/jooby-rocker/src/main/java/io/jooby/internal/BufferedRockerOutputImpl.java b/modules/jooby-rocker/src/main/java/io/jooby/internal/BufferedRockerOutputImpl.java index 812f8ff917..4cd5ff1220 100644 --- a/modules/jooby-rocker/src/main/java/io/jooby/internal/BufferedRockerOutputImpl.java +++ b/modules/jooby-rocker/src/main/java/io/jooby/internal/BufferedRockerOutputImpl.java @@ -9,7 +9,6 @@ import com.fizzed.rocker.ContentType; import com.fizzed.rocker.RockerOutputFactory; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.output.BufferedOutput; import io.jooby.output.Output; import io.jooby.output.OutputFactory; @@ -68,7 +67,7 @@ public int getByteLength() { * * @return Byte buffer. */ - public @NonNull Output toOutput() { + public Output toOutput() { return output; } diff --git a/modules/jooby-rocker/src/main/java/io/jooby/internal/HeapRockerOutput.java b/modules/jooby-rocker/src/main/java/io/jooby/internal/HeapRockerOutput.java index 9854775076..c576e86d7a 100644 --- a/modules/jooby-rocker/src/main/java/io/jooby/internal/HeapRockerOutput.java +++ b/modules/jooby-rocker/src/main/java/io/jooby/internal/HeapRockerOutput.java @@ -10,7 +10,6 @@ import com.fizzed.rocker.ContentType; import com.fizzed.rocker.RockerOutputFactory; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.output.Output; import io.jooby.output.OutputFactory; import io.jooby.rocker.BufferedRockerOutput; @@ -90,7 +89,7 @@ public int getByteLength() { * * @return Byte buffer. */ - public @NonNull Output toOutput() { + public Output toOutput() { return factory.wrap(buf, 0, count); } diff --git a/modules/jooby-rocker/src/main/java/io/jooby/rocker/RockerMessageEncoder.java b/modules/jooby-rocker/src/main/java/io/jooby/rocker/RockerMessageEncoder.java index 38efa0ee36..194f1e78ab 100644 --- a/modules/jooby-rocker/src/main/java/io/jooby/rocker/RockerMessageEncoder.java +++ b/modules/jooby-rocker/src/main/java/io/jooby/rocker/RockerMessageEncoder.java @@ -7,7 +7,6 @@ import com.fizzed.rocker.RockerModel; import com.fizzed.rocker.RockerOutputFactory; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.MediaType; import io.jooby.MessageEncoder; @@ -17,7 +16,7 @@ record RockerMessageEncoder(RockerOutputFactory factory) implements MessageEncoder { @Override - public Output encode(@NonNull Context ctx, @NonNull Object value) { + public Output encode(Context ctx, Object value) { if (value instanceof RockerModel template) { var output = template.render(factory); ctx.setResponseLength(output.getByteLength()); diff --git a/modules/jooby-rocker/src/main/java/io/jooby/rocker/RockerModule.java b/modules/jooby-rocker/src/main/java/io/jooby/rocker/RockerModule.java index 750235d563..2cdf985015 100644 --- a/modules/jooby-rocker/src/main/java/io/jooby/rocker/RockerModule.java +++ b/modules/jooby-rocker/src/main/java/io/jooby/rocker/RockerModule.java @@ -10,7 +10,6 @@ import com.fizzed.rocker.RockerOutputFactory; import com.fizzed.rocker.runtime.RockerRuntime; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.ExecutionMode; import io.jooby.Extension; import io.jooby.Jooby; @@ -30,7 +29,7 @@ public class RockerModule implements Extension { private final Charset charset; private Boolean reuseBuffer; - public RockerModule(@NonNull Charset charset) { + public RockerModule(Charset charset) { this.charset = charset; } @@ -63,7 +62,7 @@ public RockerModule reuseBuffer(boolean reuseBuffer) { } @Override - public void install(@NonNull Jooby application) { + public void install(Jooby application) { var env = application.getEnvironment(); var runtime = RockerRuntime.getInstance(); boolean reloading = diff --git a/modules/jooby-rocker/src/main/java/io/jooby/rocker/package-info.java b/modules/jooby-rocker/src/main/java/io/jooby/rocker/package-info.java index db688bf4d1..23489cdbd5 100644 --- a/modules/jooby-rocker/src/main/java/io/jooby/rocker/package-info.java +++ b/modules/jooby-rocker/src/main/java/io/jooby/rocker/package-info.java @@ -1,2 +1,2 @@ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.rocker; diff --git a/modules/jooby-rxjava3/pom.xml b/modules/jooby-rxjava3/pom.xml index 0b7dc0cf16..0c9d638c83 100644 --- a/modules/jooby-rxjava3/pom.xml +++ b/modules/jooby-rxjava3/pom.xml @@ -12,11 +12,6 @@ jooby-rxjava3 - - com.github.spotbugs - spotbugs-annotations - - io.jooby jooby diff --git a/modules/jooby-rxjava3/src/main/java/io/jooby/rxjava3/Reactivex.java b/modules/jooby-rxjava3/src/main/java/io/jooby/rxjava3/Reactivex.java index c4204aa619..3021767940 100644 --- a/modules/jooby-rxjava3/src/main/java/io/jooby/rxjava3/Reactivex.java +++ b/modules/jooby-rxjava3/src/main/java/io/jooby/rxjava3/Reactivex.java @@ -8,7 +8,6 @@ import static io.jooby.ReactiveSupport.newSubscriber; import static org.reactivestreams.FlowAdapters.toSubscriber; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Route; import io.jooby.internal.rxjava3.RxObserver; import io.jooby.internal.rxjava3.RxSubscriber; @@ -28,7 +27,7 @@ public class Reactivex { private static final Route.Filter RX = new Route.Reactive() { @Override - public Route.Handler apply(@NonNull Route.Handler next) { + public Route.Handler apply(Route.Handler next) { return ctx -> { Object result = next.apply(ctx); if (ctx.isResponseStarted()) { diff --git a/modules/jooby-rxjava3/src/main/java/io/jooby/rxjava3/package-info.java b/modules/jooby-rxjava3/src/main/java/io/jooby/rxjava3/package-info.java index e2f7345e1f..cc1a695f9d 100644 --- a/modules/jooby-rxjava3/src/main/java/io/jooby/rxjava3/package-info.java +++ b/modules/jooby-rxjava3/src/main/java/io/jooby/rxjava3/package-info.java @@ -1,2 +1,2 @@ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.rxjava3; diff --git a/modules/jooby-rxjava3/src/main/java/module-info.java b/modules/jooby-rxjava3/src/main/java/module-info.java index fbc33057fe..accd19f4f2 100644 --- a/modules/jooby-rxjava3/src/main/java/module-info.java +++ b/modules/jooby-rxjava3/src/main/java/module-info.java @@ -9,7 +9,7 @@ exports io.jooby.rxjava3; requires io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires io.reactivex.rxjava3; requires org.reactivestreams; requires org.slf4j; diff --git a/modules/jooby-test/src/main/java/io/jooby/test/JoobyExtension.java b/modules/jooby-test/src/main/java/io/jooby/test/JoobyExtension.java index d2a65c87a1..1d5c4fb6d1 100644 --- a/modules/jooby-test/src/main/java/io/jooby/test/JoobyExtension.java +++ b/modules/jooby-test/src/main/java/io/jooby/test/JoobyExtension.java @@ -27,7 +27,6 @@ import org.junit.jupiter.api.extension.TestInstancePostProcessor; import com.typesafe.config.Config; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.*; /** @@ -94,8 +93,7 @@ private Jooby startApp(ExtensionContext context, JoobyTest metadata) throws Exce return app; } - private static Supplier reflectionProvider( - @NonNull Class applicationType) { + private static Supplier reflectionProvider(Class applicationType) { return () -> (Jooby) Stream.of(applicationType.getDeclaredConstructors()) diff --git a/modules/jooby-test/src/main/java/io/jooby/test/MockContext.java b/modules/jooby-test/src/main/java/io/jooby/test/MockContext.java index 66686d4189..a379ffdf2e 100644 --- a/modules/jooby-test/src/main/java/io/jooby/test/MockContext.java +++ b/modules/jooby-test/src/main/java/io/jooby/test/MockContext.java @@ -30,8 +30,8 @@ import java.util.stream.Collectors; import java.util.stream.IntStream; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.Body; import io.jooby.CompletionListeners; import io.jooby.Context; @@ -152,7 +152,7 @@ public OutputFactory getOutputFactory() { * @return This context. */ @Override - public MockContext setMethod(@NonNull String method) { + public MockContext setMethod(String method) { this.method = method.toUpperCase(); return this; } @@ -171,7 +171,7 @@ public Session session() { * @param session Mock session. * @return This context. */ - public MockContext setSession(@NonNull MockSession session) { + public MockContext setSession(MockSession session) { this.session = session; return this; } @@ -187,7 +187,7 @@ public Map cookieMap() { } @Override - public Object forward(@NonNull String path) { + public Object forward(String path) { setRequestPath(path); if (mockRouter != null) { return mockRouter.call(getMethod(), path, this, consumer).value(); @@ -201,7 +201,7 @@ public Object forward(@NonNull String path) { * @param cookies Cookie map. * @return This context. */ - public MockContext setCookieMap(@NonNull Map cookies) { + public MockContext setCookieMap(Map cookies) { this.cookies = cookies; return this; } @@ -217,7 +217,7 @@ public FlashMap flash() { * @param flashMap Flash map. * @return This context. */ - public MockContext setFlashMap(@NonNull FlashMap flashMap) { + public MockContext setFlashMap(FlashMap flashMap) { this.flashMap = flashMap; return this; } @@ -229,7 +229,7 @@ public MockContext setFlashMap(@NonNull FlashMap flashMap) { * @param value Flash value. * @return This context. */ - public MockContext setFlashAttribute(@NonNull String name, @NonNull String value) { + public MockContext setFlashAttribute(String name, String value) { flashMap.put(name, value); return this; } @@ -240,7 +240,7 @@ public Route getRoute() { } @Override - public MockContext setRoute(@NonNull Route route) { + public MockContext setRoute(Route route) { this.route = route; return this; } @@ -257,7 +257,7 @@ public String getRequestPath() { * @return This context. */ @Override - public MockContext setRequestPath(@NonNull String pathString) { + public MockContext setRequestPath(String pathString) { int q = pathString.indexOf("?"); if (q > 0) { this.requestPath = pathString.substring(0, q); @@ -273,7 +273,7 @@ public Map pathMap() { } @Override - public MockContext setPathMap(@NonNull Map pathMap) { + public MockContext setPathMap(Map pathMap) { this.pathMap = pathMap; return this; } @@ -294,7 +294,7 @@ public String queryString() { * @param queryString Query string (starting with ?). * @return This context. */ - public MockContext setQueryString(@NonNull String queryString) { + public MockContext setQueryString(String queryString) { this.queryString = queryString; return this; } @@ -310,7 +310,7 @@ public Value header() { * @param headers Request headers. * @return This context. */ - public MockContext setHeaders(@NonNull Map> headers) { + public MockContext setHeaders(Map> headers) { this.headers = headers; return this; } @@ -322,7 +322,7 @@ public MockContext setHeaders(@NonNull Map> headers) * @param value Request value. * @return This context. */ - public MockContext setRequestHeader(@NonNull String name, @NonNull String value) { + public MockContext setRequestHeader(String name, String value) { Collection values = this.headers.computeIfAbsent(name, k -> new ArrayList<>()); values.add(value); return this; @@ -345,13 +345,13 @@ public List files() { * @param file Mock files. * @return This context. */ - public MockContext setFile(@NonNull String name, @NonNull FileUpload file) { + public MockContext setFile(String name, FileUpload file) { this.files.computeIfAbsent(name, k -> new ArrayList<>()).add(file); return this; } @Override - public List files(@NonNull String name) { + public List files(String name) { return files.entrySet().stream() .filter(it -> it.getKey().equals(name)) .flatMap(it -> it.getValue().stream()) @@ -359,7 +359,7 @@ public List files(@NonNull String name) { } @Override - public FileUpload file(@NonNull String name) { + public FileUpload file(String name) { return files.entrySet().stream() .filter(it -> it.getKey().equals(name)) .findFirst() @@ -373,7 +373,7 @@ public FileUpload file(@NonNull String name) { * @param formdata Form. * @return This context. */ - public MockContext setForm(@NonNull Formdata formdata) { + public MockContext setForm(Formdata formdata) { this.formdata = formdata; return this; } @@ -387,17 +387,17 @@ public Body body() { } @Override - public T body(@NonNull Class type) { + public T body(Class type) { return decode(type, MediaType.text); } @Override - public T body(@NonNull Type type) { + public T body(Type type) { return decode(type, MediaType.text); } @Override - public T decode(@NonNull Type type, @NonNull MediaType contentType) { + public T decode(Type type, MediaType contentType) { if (bodyObject == null) { throw new IllegalStateException("No body was set, use setBodyObject() to set one."); } @@ -414,7 +414,7 @@ public T decode(@NonNull Type type, @NonNull MediaType contentType) { * @param body Request body. * @return This context. */ - public MockContext setBody(@NonNull Body body) { + public MockContext setBody(Body body) { this.body = body; return this; } @@ -425,7 +425,7 @@ public MockContext setBody(@NonNull Body body) { * @param body Request body. * @return This context. */ - public MockContext setBodyObject(@NonNull Object body) { + public MockContext setBodyObject(Object body) { this.bodyObject = body; return this; } @@ -436,7 +436,7 @@ public MockContext setBodyObject(@NonNull Object body) { * @param body Request body. * @return This context. */ - public MockContext setBody(@NonNull String body) { + public MockContext setBody(String body) { byte[] bytes = body.getBytes(StandardCharsets.UTF_8); return setBody(bytes); } @@ -447,13 +447,13 @@ public MockContext setBody(@NonNull String body) { * @param body Request body. * @return This context. */ - public MockContext setBody(@NonNull byte[] body) { + public MockContext setBody(byte[] body) { setBody(Body.of(this, new ByteArrayInputStream(body), body.length)); return this; } @Override - public MessageDecoder decoder(@NonNull MediaType contentType) { + public MessageDecoder decoder(MediaType contentType) { return decoders.getOrDefault(contentType, MessageDecoder.UNSUPPORTED_MEDIA_TYPE); } @@ -463,13 +463,13 @@ public boolean isInIoThread() { } @Override - public MockContext dispatch(@NonNull Runnable action) { + public MockContext dispatch(Runnable action) { action.run(); return this; } @Override - public MockContext dispatch(@NonNull Executor executor, @NonNull Runnable action) { + public MockContext dispatch(Executor executor, Runnable action) { action.run(); return this; } @@ -480,19 +480,19 @@ public Map getAttributes() { } @Override - public MockContext removeResponseHeader(@NonNull String name) { + public MockContext removeResponseHeader(String name) { responseHeaders.remove(name); return this; } @Nullable @Override - public String getResponseHeader(@NonNull String name) { + public String getResponseHeader(String name) { Object value = responseHeaders.get(name); return value == null ? null : value.toString(); } @Override - public MockContext setResponseHeader(@NonNull String name, @NonNull String value) { + public MockContext setResponseHeader(String name, String value) { responseHeaders.put(name, value); return this; } @@ -509,13 +509,13 @@ public long getResponseLength() { } @Override - public MockContext setResponseType(@NonNull String contentType) { + public MockContext setResponseType(String contentType) { response.setContentType(MediaType.valueOf(contentType)); return this; } @Override - public MockContext setResponseType(@NonNull MediaType contentType) { + public MockContext setResponseType(MediaType contentType) { response.setContentType(contentType); return this; } @@ -532,7 +532,7 @@ public StatusCode getResponseCode() { } @Override - public MockContext render(@NonNull Object result) { + public MockContext render(Object result) { responseStarted = true; this.response.setResult(result); return this; @@ -561,14 +561,14 @@ public Sender responseSender() { responseStarted = true; return new Sender() { @Override - public Sender write(@NonNull byte[] data, @NonNull Callback callback) { + public Sender write(byte[] data, Callback callback) { response.setResult(data); callback.onComplete(MockContext.this, null); return this; } - @NonNull @Override - public Sender write(@NonNull Output output, @NonNull Callback callback) { + @Override + public Sender write(Output output, Callback callback) { response.setResult(output); callback.onComplete(MockContext.this, null); return this; @@ -587,7 +587,7 @@ public String getHost() { } @Override - public Context setHost(@NonNull String host) { + public Context setHost(String host) { this.host = host; return this; } @@ -598,7 +598,7 @@ public String getRemoteAddress() { } @Override - public Context setRemoteAddress(@NonNull String remoteAddress) { + public Context setRemoteAddress(String remoteAddress) { this.remoteAddress = remoteAddress; return this; } @@ -619,7 +619,7 @@ public String getScheme() { } @Override - public Context setScheme(@NonNull String scheme) { + public Context setScheme(String scheme) { this.scheme = scheme; return this; } @@ -632,7 +632,7 @@ public PrintWriter responseWriter(MediaType type) { } @Override - public MockContext send(@NonNull String data, @NonNull Charset charset) { + public MockContext send(String data, Charset charset) { responseStarted = true; this.response.setResult(data).setContentLength(data.length()); listeners.run(this); @@ -640,7 +640,7 @@ public MockContext send(@NonNull String data, @NonNull Charset charset) { } @Override - public MockContext send(@NonNull byte[] data) { + public MockContext send(byte[] data) { responseStarted = true; this.response.setResult(data).setContentLength(data.length); listeners.run(this); @@ -648,7 +648,7 @@ public MockContext send(@NonNull byte[] data) { } @Override - public MockContext send(@NonNull byte[]... data) { + public MockContext send(byte[]... data) { responseStarted = true; this.response .setResult(data) @@ -658,7 +658,7 @@ public MockContext send(@NonNull byte[]... data) { } @Override - public MockContext send(@NonNull ByteBuffer data) { + public MockContext send(ByteBuffer data) { responseStarted = true; this.response.setResult(data).setContentLength(data.remaining()); listeners.run(this); @@ -666,7 +666,7 @@ public MockContext send(@NonNull ByteBuffer data) { } @Override - public Context send(@NonNull Output output) { + public Context send(Output output) { responseStarted = true; this.response.setResult(output).setContentLength(output.size()); listeners.run(this); @@ -674,7 +674,7 @@ public Context send(@NonNull Output output) { } @Override - public Context send(@NonNull ByteBuffer[] data) { + public Context send(ByteBuffer[] data) { responseStarted = true; this.response .setResult(data) @@ -692,7 +692,7 @@ public MockContext send(InputStream input) { } @Override - public Context send(@NonNull FileDownload file) { + public Context send(FileDownload file) { responseStarted = true; this.response.setResult(file); listeners.run(this); @@ -700,7 +700,7 @@ public Context send(@NonNull FileDownload file) { } @Override - public Context send(@NonNull Path file) { + public Context send(Path file) { responseStarted = true; this.response.setResult(file); listeners.run(this); @@ -708,7 +708,7 @@ public Context send(@NonNull Path file) { } @Override - public MockContext send(@NonNull ReadableByteChannel channel) { + public MockContext send(ReadableByteChannel channel) { responseStarted = true; this.response.setResult(channel); listeners.run(this); @@ -716,7 +716,7 @@ public MockContext send(@NonNull ReadableByteChannel channel) { } @Override - public MockContext send(@NonNull FileChannel file) { + public MockContext send(FileChannel file) { responseStarted = true; this.response.setResult(file); listeners.run(this); @@ -731,12 +731,12 @@ public MockContext send(StatusCode statusCode) { } @Override - public MockContext sendError(@NonNull Throwable cause) { + public MockContext sendError(Throwable cause) { return sendError(cause, router.errorCode(cause)); } @Override - public MockContext sendError(@NonNull Throwable cause, @NonNull StatusCode code) { + public MockContext sendError(Throwable cause, StatusCode code) { responseStarted = true; this.response.setResult(cause).setStatusCode(router.errorCode(cause)); listeners.run(this); @@ -744,13 +744,13 @@ public MockContext sendError(@NonNull Throwable cause, @NonNull StatusCode code) } @Override - public MockContext setDefaultResponseType(@NonNull MediaType contentType) { + public MockContext setDefaultResponseType(MediaType contentType) { response.setContentType(contentType); return this; } @Override - public MockContext setResponseCookie(@NonNull Cookie cookie) { + public MockContext setResponseCookie(Cookie cookie) { String setCookie = (String) response.getHeaders().get("Set-Cookie"); if (setCookie == null) { setCookie = cookie.toCookieString(); @@ -767,7 +767,7 @@ public MediaType getResponseType() { } @Override - public MockContext setResponseCode(@NonNull StatusCode statusCode) { + public MockContext setResponseCode(StatusCode statusCode) { response.setStatusCode(statusCode); return this; } @@ -805,23 +805,23 @@ public Router getRouter() { * @param router Mock router. * @return This context. */ - public MockContext setRouter(@NonNull Router router) { + public MockContext setRouter(Router router) { this.router = router; return this; } @Override - public MockContext upgrade(@NonNull WebSocket.Initializer handler) { + public MockContext upgrade(WebSocket.Initializer handler) { return this; } @Override - public Context upgrade(@NonNull ServerSentEmitter.Handler handler) { + public Context upgrade(ServerSentEmitter.Handler handler) { return this; } @Override - public Context onComplete(@NonNull Route.Complete task) { + public Context onComplete(Route.Complete task) { listeners.addListener(task); return this; } diff --git a/modules/jooby-test/src/main/java/io/jooby/test/MockResponse.java b/modules/jooby-test/src/main/java/io/jooby/test/MockResponse.java index a28f04433a..b8bd2d06fa 100644 --- a/modules/jooby-test/src/main/java/io/jooby/test/MockResponse.java +++ b/modules/jooby-test/src/main/java/io/jooby/test/MockResponse.java @@ -10,8 +10,8 @@ import java.util.TreeMap; import java.util.concurrent.CountDownLatch; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.MediaType; import io.jooby.StatusCode; @@ -76,7 +76,7 @@ public Map getHeaders() { * @param headers Response headers. * @return This response. */ - public MockResponse setHeaders(@NonNull Map headers) { + public MockResponse setHeaders(Map headers) { headers.forEach(this::setHeader); return this; } @@ -88,7 +88,7 @@ public MockResponse setHeaders(@NonNull Map headers) { * @param value Header value. * @return This response. */ - public @NonNull MockResponse setHeader(@NonNull String name, @NonNull String value) { + public MockResponse setHeader(String name, String value) { if ("content-type".equalsIgnoreCase(name)) { setContentType(MediaType.valueOf(value)); } else if ("content-length".equalsIgnoreCase(name)) { @@ -106,7 +106,7 @@ public MockResponse setHeaders(@NonNull Map headers) { * @param value Header value. * @return This response. */ - public @NonNull MockResponse setHeader(@NonNull String name, @NonNull Object value) { + public MockResponse setHeader(String name, Object value) { return setHeader(name, value.toString()); } @@ -125,7 +125,7 @@ public MockResponse setHeaders(@NonNull Map headers) { * @param contentType Response content type. * @return This response. */ - public @NonNull MockResponse setContentType(@NonNull MediaType contentType) { + public MockResponse setContentType(MediaType contentType) { this.contentType = contentType; headers.put("content-type", contentType.toContentTypeHeader()); return this; @@ -146,7 +146,7 @@ public long getContentLength() { * @param length Response content length. * @return This response. */ - public @NonNull MockResponse setContentLength(long length) { + public MockResponse setContentLength(long length) { this.length = length; headers.put("content-length", Long.toString(length)); return this; @@ -157,7 +157,7 @@ public long getContentLength() { * * @return Response status code. */ - public @NonNull StatusCode getStatusCode() { + public StatusCode getStatusCode() { return statusCode; } @@ -167,7 +167,7 @@ public long getContentLength() { * @param statusCode Response status code. * @return This response. */ - public @NonNull MockResponse setStatusCode(@NonNull StatusCode statusCode) { + public MockResponse setStatusCode(StatusCode statusCode) { this.statusCode = statusCode; return this; } @@ -183,7 +183,7 @@ public Object value() { * @param result Route response value. * @return This response. */ - public @NonNull MockResponse setResult(@Nullable Object result) { + public MockResponse setResult(@Nullable Object result) { this.result = result; latch.countDown(); return this; diff --git a/modules/jooby-test/src/main/java/io/jooby/test/MockRouter.java b/modules/jooby-test/src/main/java/io/jooby/test/MockRouter.java index 0cfd91ce15..28bd4d4e78 100644 --- a/modules/jooby-test/src/main/java/io/jooby/test/MockRouter.java +++ b/modules/jooby-test/src/main/java/io/jooby/test/MockRouter.java @@ -11,7 +11,6 @@ import java.util.function.Consumer; import java.util.function.Supplier; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.Jooby; import io.jooby.Route; @@ -53,7 +52,7 @@ private static class SingleMockValue implements MockValue { this.value = value; } - @NonNull @Override + @Override public Object value() { return value; } @@ -74,7 +73,7 @@ public Object value() { * * @param application Source application. */ - public MockRouter(@NonNull Jooby application) { + public MockRouter(Jooby application) { if (application.problemDetailsIsEnabled()) { application.error(ProblemDetailsHandler.from(application.getConfig())); } @@ -88,7 +87,7 @@ public MockRouter(@NonNull Jooby application) { * @param session Global session. * @return This router. */ - public @NonNull MockRouter setSession(@NonNull MockSession session) { + public MockRouter setSession(MockSession session) { this.session = session; return this; } @@ -108,7 +107,7 @@ public Executor getWorker() { * @param worker Worker executor. * @return This router. */ - public MockRouter setWorker(@NonNull Executor worker) { + public MockRouter setWorker(Executor worker) { this.worker = worker; return this; } @@ -119,7 +118,7 @@ public MockRouter setWorker(@NonNull Executor worker) { * @param path Path to match. Might includes the queryString. * @return Route response. */ - @NonNull public MockValue get(@NonNull String path) { + public MockValue get(String path) { return get(path, newContext()); } @@ -155,7 +154,7 @@ public MockRouter setWorker(@NonNull Executor worker) { * @param callback Websocket client callback. * @return Web socket client. */ - public MockWebSocketClient ws(@NonNull String path, Consumer callback) { + public MockWebSocketClient ws(String path, Consumer callback) { MockValue value = get(path, newContext()); if (value.value() instanceof MockWebSocketConfigurer) { MockWebSocketConfigurer configurer = value.value(MockWebSocketConfigurer.class); @@ -184,7 +183,7 @@ private MockContext newContext() { * @param context Context to use. * @return Route response. */ - @NonNull public MockValue get(@NonNull String path, @NonNull Context context) { + public MockValue get(String path, Context context) { return call(Router.GET, path, context); } @@ -195,7 +194,7 @@ private MockContext newContext() { * @param consumer Response metadata callback. * @return Route response. */ - public MockValue get(@NonNull String path, @NonNull Consumer consumer) { + public MockValue get(String path, Consumer consumer) { return get(path, newContext(), consumer); } @@ -207,10 +206,7 @@ public MockValue get(@NonNull String path, @NonNull Consumer consu * @param consumer Response metadata callback. * @return Route response. */ - public MockValue get( - @NonNull String path, - @NonNull MockContext context, - @NonNull Consumer consumer) { + public MockValue get(String path, MockContext context, Consumer consumer) { return call(Router.GET, path, context, consumer); } @@ -220,7 +216,7 @@ public MockValue get( * @param path Path to match. Might includes the queryString. * @return Route response. */ - public MockValue post(@NonNull String path) { + public MockValue post(String path) { return post(path, newContext()); } @@ -231,7 +227,7 @@ public MockValue post(@NonNull String path) { * @param context Context to use. * @return Route response. */ - @NonNull public MockValue post(@NonNull String path, @NonNull Context context) { + public MockValue post(String path, Context context) { return call(Router.POST, path, context); } @@ -242,7 +238,7 @@ public MockValue post(@NonNull String path) { * @param consumer Response metadata callback. * @return Route response. */ - public MockValue post(@NonNull String path, @NonNull Consumer consumer) { + public MockValue post(String path, Consumer consumer) { return post(path, newContext(), consumer); } @@ -254,10 +250,7 @@ public MockValue post(@NonNull String path, @NonNull Consumer cons * @param consumer Response metadata callback. * @return Route response. */ - public MockValue post( - @NonNull String path, - @NonNull MockContext context, - @NonNull Consumer consumer) { + public MockValue post(String path, MockContext context, Consumer consumer) { return call(Router.POST, path, context, consumer); } @@ -267,7 +260,7 @@ public MockValue post( * @param path Path to match. Might includes the queryString. * @return Route response. */ - public MockValue delete(@NonNull String path) { + public MockValue delete(String path) { return delete(path, newContext()); } @@ -278,7 +271,7 @@ public MockValue delete(@NonNull String path) { * @param context Context to use. * @return Route response. */ - @NonNull public MockValue delete(@NonNull String path, @NonNull Context context) { + public MockValue delete(String path, Context context) { return call(Router.DELETE, path, context); } @@ -289,7 +282,7 @@ public MockValue delete(@NonNull String path) { * @param consumer Response metadata callback. * @return Route response. */ - public MockValue delete(@NonNull String path, @NonNull Consumer consumer) { + public MockValue delete(String path, Consumer consumer) { return delete(path, newContext(), consumer); } @@ -301,10 +294,7 @@ public MockValue delete(@NonNull String path, @NonNull Consumer co * @param consumer Response metadata callback. * @return Route response. */ - public MockValue delete( - @NonNull String path, - @NonNull MockContext context, - @NonNull Consumer consumer) { + public MockValue delete(String path, MockContext context, Consumer consumer) { return call(Router.DELETE, path, context, consumer); } @@ -314,7 +304,7 @@ public MockValue delete( * @param path Path to match. Might includes the queryString. * @return Route response. */ - public MockValue put(@NonNull String path) { + public MockValue put(String path) { return put(path, newContext()); } @@ -325,7 +315,7 @@ public MockValue put(@NonNull String path) { * @param context Context to use. * @return Route response. */ - @NonNull public MockValue put(@NonNull String path, @NonNull Context context) { + public MockValue put(String path, Context context) { return call(Router.PUT, path, context); } @@ -336,7 +326,7 @@ public MockValue put(@NonNull String path) { * @param consumer Response metadata callback. * @return Route response. */ - public MockValue put(@NonNull String path, @NonNull Consumer consumer) { + public MockValue put(String path, Consumer consumer) { return put(path, newContext(), consumer); } @@ -348,10 +338,7 @@ public MockValue put(@NonNull String path, @NonNull Consumer consu * @param consumer Response metadata callback. * @return Route response. */ - public MockValue put( - @NonNull String path, - @NonNull MockContext context, - @NonNull Consumer consumer) { + public MockValue put(String path, MockContext context, Consumer consumer) { return call(Router.PUT, path, context, consumer); } @@ -361,7 +348,7 @@ public MockValue put( * @param path Path to match. Might includes the queryString. * @return Route response. */ - public MockValue patch(@NonNull String path) { + public MockValue patch(String path) { return patch(path, newContext()); } @@ -372,7 +359,7 @@ public MockValue patch(@NonNull String path) { * @param context Context to use. * @return Route response. */ - @NonNull public MockValue patch(@NonNull String path, @NonNull Context context) { + public MockValue patch(String path, Context context) { return call(Router.PATCH, path, context); } @@ -383,7 +370,7 @@ public MockValue patch(@NonNull String path) { * @param consumer Response metadata callback. * @return Route response. */ - public MockValue patch(@NonNull String path, @NonNull Consumer consumer) { + public MockValue patch(String path, Consumer consumer) { return patch(path, newContext(), consumer); } @@ -395,10 +382,7 @@ public MockValue patch(@NonNull String path, @NonNull Consumer con * @param consumer Response metadata callback. * @return Route response. */ - public MockValue patch( - @NonNull String path, - @NonNull MockContext context, - @NonNull Consumer consumer) { + public MockValue patch(String path, MockContext context, Consumer consumer) { return call(Router.PATCH, path, context, consumer); } @@ -410,7 +394,7 @@ public MockValue patch( * @param context Web context. * @return Route response. */ - public MockValue call(@NonNull String method, @NonNull String path, @NonNull Context context) { + public MockValue call(String method, String path, Context context) { return call(supplier.get(), method, path, context, NOOP); } @@ -422,8 +406,7 @@ public MockValue call(@NonNull String method, @NonNull String path, @NonNull Con * @param consumer Response metadata callback. * @return Route response. */ - public MockValue call( - @NonNull String method, @NonNull String path, @NonNull Consumer consumer) { + public MockValue call(String method, String path, Consumer consumer) { return call(method, path, newContext(), consumer); } @@ -437,10 +420,7 @@ public MockValue call( * @return Route response. */ public MockValue call( - @NonNull String method, - @NonNull String path, - @NonNull MockContext ctx, - @NonNull Consumer consumer) { + String method, String path, MockContext ctx, Consumer consumer) { return call(supplier.get(), method, path, ctx, consumer); } diff --git a/modules/jooby-test/src/main/java/io/jooby/test/MockSession.java b/modules/jooby-test/src/main/java/io/jooby/test/MockSession.java index ef77be2c74..3e071f41d1 100644 --- a/modules/jooby-test/src/main/java/io/jooby/test/MockSession.java +++ b/modules/jooby-test/src/main/java/io/jooby/test/MockSession.java @@ -11,8 +11,8 @@ import java.util.Optional; import java.util.UUID; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.Session; import io.jooby.value.Value; import io.jooby.value.ValueFactory; @@ -35,7 +35,7 @@ public class MockSession implements Session { * @param ctx Mock context. * @param session Session. */ - MockSession(@NonNull MockContext ctx, @NonNull MockSession session) { + MockSession(MockContext ctx, MockSession session) { this.ctx = ctx.setSession(this); this.data = session.data; this.isNew = session.isNew; @@ -51,7 +51,7 @@ public class MockSession implements Session { * @param ctx Mock context. * @param sessionId Session ID. */ - public MockSession(@NonNull MockContext ctx, @NonNull String sessionId) { + public MockSession(MockContext ctx, String sessionId) { this.ctx = ctx.setSession(this); this.sessionId = sessionId; this.creationTime = Instant.now(); @@ -63,7 +63,7 @@ public MockSession(@NonNull MockContext ctx, @NonNull String sessionId) { * * @param ctx Mock context. */ - public MockSession(@NonNull MockContext ctx) { + public MockSession(MockContext ctx) { this(ctx, UUID.randomUUID().toString()); } @@ -77,60 +77,60 @@ public MockSession() { this.lastAccessedTime = Instant.now(); } - @NonNull @Override + @Override public String getId() { return sessionId; } - @NonNull @Override + @Override public MockSession setId(@Nullable String id) { this.sessionId = id; return this; } - @NonNull @Override - public Value get(@NonNull String name) { + @Override + public Value get(String name) { return Optional.ofNullable(data.get(name)) .map(value -> Value.create(valueFactory, name, value)) .orElse(Value.missing(valueFactory, name)); } - @NonNull @Override - public Session put(@NonNull String name, @NonNull String value) { + @Override + public Session put(String name, String value) { data.put(name, value); return this; } - @NonNull @Override - public Value remove(@NonNull String name) { + @Override + public Value remove(String name) { Value value = get(name); data.remove(name); return value; } - @NonNull @Override + @Override public Map toMap() { return data; } - @NonNull @Override + @Override public Instant getCreationTime() { return creationTime; } - @NonNull @Override - public Session setCreationTime(@NonNull Instant creationTime) { + @Override + public Session setCreationTime(Instant creationTime) { this.creationTime = creationTime; return this; } - @NonNull @Override + @Override public Instant getLastAccessedTime() { return lastAccessedTime; } - @NonNull @Override - public Session setLastAccessedTime(@NonNull Instant lastAccessedTime) { + @Override + public Session setLastAccessedTime(Instant lastAccessedTime) { this.lastAccessedTime = lastAccessedTime; return this; } @@ -140,7 +140,7 @@ public boolean isNew() { return isNew; } - @NonNull @Override + @Override public Session setNew(boolean isNew) { this.isNew = isNew; return this; @@ -151,7 +151,7 @@ public boolean isModify() { return modified; } - @NonNull @Override + @Override public Session setModify(boolean modify) { this.modified = modify; return this; diff --git a/modules/jooby-test/src/main/java/io/jooby/test/MockValue.java b/modules/jooby-test/src/main/java/io/jooby/test/MockValue.java index 36edaa3ed0..a4a28053c0 100644 --- a/modules/jooby-test/src/main/java/io/jooby/test/MockValue.java +++ b/modules/jooby-test/src/main/java/io/jooby/test/MockValue.java @@ -5,8 +5,7 @@ */ package io.jooby.test; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; /** * Access to raw response value from {@link MockRouter} or cast response to something else. @@ -29,7 +28,7 @@ public interface MockValue { * @param Response type. * @return Response value. */ - default @NonNull T value(@NonNull Class type) { + default T value(Class type) { Object instance = value(); if (instance == null) { throw new ClassCastException("Found: null, expected: " + type); diff --git a/modules/jooby-test/src/main/java/io/jooby/test/MockWebSocket.java b/modules/jooby-test/src/main/java/io/jooby/test/MockWebSocket.java index 77d609c2c3..f62340d732 100644 --- a/modules/jooby-test/src/main/java/io/jooby/test/MockWebSocket.java +++ b/modules/jooby-test/src/main/java/io/jooby/test/MockWebSocket.java @@ -9,7 +9,6 @@ import java.util.Collections; import java.util.List; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.SneakyThrows; import io.jooby.WebSocket; @@ -56,12 +55,12 @@ public class MockWebSocket implements WebSocket { this.configurer = configurer; } - @NonNull @Override + @Override public Context getContext() { return ctx; } - @NonNull @Override + @Override public List getSessions() { return Collections.emptyList(); } @@ -77,67 +76,67 @@ public void forEach(SneakyThrows.Consumer callback) { } @Override - public WebSocket sendPing(@NonNull String message, @NonNull WriteCallback callback) { + public WebSocket sendPing(String message, WriteCallback callback) { return sendObject(message, callback); } @Override - public WebSocket sendPing(@NonNull ByteBuffer message, @NonNull WriteCallback callback) { + public WebSocket sendPing(ByteBuffer message, WriteCallback callback) { return sendObject(message, callback); } @Override - public WebSocket send(@NonNull String message, @NonNull WriteCallback callback) { + public WebSocket send(String message, WriteCallback callback) { return sendObject(message, callback); } - @NonNull @Override - public WebSocket send(@NonNull byte[] message, @NonNull WriteCallback callback) { + @Override + public WebSocket send(byte[] message, WriteCallback callback) { return sendObject(message, callback); } - @NonNull @Override - public WebSocket send(@NonNull ByteBuffer message, @NonNull WriteCallback callback) { + @Override + public WebSocket send(ByteBuffer message, WriteCallback callback) { return sendObject(message, callback); } - @NonNull @Override - public WebSocket send(@NonNull Output message, @NonNull WriteCallback callback) { + @Override + public WebSocket send(Output message, WriteCallback callback) { return sendObject(message, callback); } - @NonNull @Override - public WebSocket sendBinary(@NonNull String message, @NonNull WriteCallback callback) { + @Override + public WebSocket sendBinary(String message, WriteCallback callback) { return sendObject(message, callback); } - @NonNull @Override - public WebSocket sendBinary(@NonNull byte[] message, @NonNull WriteCallback callback) { + @Override + public WebSocket sendBinary(byte[] message, WriteCallback callback) { return sendObject(message, callback); } - @NonNull @Override - public WebSocket sendBinary(@NonNull ByteBuffer message, @NonNull WriteCallback callback) { + @Override + public WebSocket sendBinary(ByteBuffer message, WriteCallback callback) { return sendObject(message, callback); } - @NonNull @Override - public WebSocket sendBinary(@NonNull Output message, @NonNull WriteCallback callback) { + @Override + public WebSocket sendBinary(Output message, WriteCallback callback) { return sendObject(message, callback); } - @NonNull @Override - public WebSocket render(@NonNull Object value, @NonNull WriteCallback callback) { + @Override + public WebSocket render(Object value, WriteCallback callback) { return sendObject(value, callback); } - @NonNull @Override - public WebSocket renderBinary(@NonNull Object value, @NonNull WriteCallback callback) { + @Override + public WebSocket renderBinary(Object value, WriteCallback callback) { return sendObject(value, callback); } - @NonNull @Override - public WebSocket close(@NonNull WebSocketCloseStatus closeStatus) { + @Override + public WebSocket close(WebSocketCloseStatus closeStatus) { try { open = false; configurer.fireClose(closeStatus); diff --git a/modules/jooby-test/src/main/java/io/jooby/test/MockWebSocketClient.java b/modules/jooby-test/src/main/java/io/jooby/test/MockWebSocketClient.java index 78c8a5f093..6fd75025c2 100644 --- a/modules/jooby-test/src/main/java/io/jooby/test/MockWebSocketClient.java +++ b/modules/jooby-test/src/main/java/io/jooby/test/MockWebSocketClient.java @@ -8,8 +8,8 @@ import java.util.ArrayList; import java.util.List; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.SneakyThrows; import io.jooby.WebSocketCloseStatus; @@ -41,7 +41,7 @@ public boolean isOpen() { * @param message Message. * @return This client. */ - public MockWebSocketClient send(@NonNull Object message) { + public MockWebSocketClient send(Object message) { if (isOpen()) { configurer.fireOnMessage(message); } else { diff --git a/modules/jooby-test/src/main/java/io/jooby/test/MockWebSocketConfigurer.java b/modules/jooby-test/src/main/java/io/jooby/test/MockWebSocketConfigurer.java index 9d6f0fb006..576ac96905 100644 --- a/modules/jooby-test/src/main/java/io/jooby/test/MockWebSocketConfigurer.java +++ b/modules/jooby-test/src/main/java/io/jooby/test/MockWebSocketConfigurer.java @@ -7,7 +7,6 @@ import org.slf4j.LoggerFactory; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.WebSocket; import io.jooby.WebSocketCloseStatus; @@ -36,26 +35,26 @@ public class MockWebSocketConfigurer implements WebSocketConfigurer { this.ws = new MockWebSocket(ctx, this); } - @NonNull @Override - public WebSocketConfigurer onConnect(@NonNull WebSocket.OnConnect callback) { + @Override + public WebSocketConfigurer onConnect(WebSocket.OnConnect callback) { this.onConnect = callback; return this; } - @NonNull @Override - public WebSocketConfigurer onMessage(@NonNull WebSocket.OnMessage callback) { + @Override + public WebSocketConfigurer onMessage(WebSocket.OnMessage callback) { this.onMessage = callback; return this; } - @NonNull @Override - public WebSocketConfigurer onError(@NonNull WebSocket.OnError callback) { + @Override + public WebSocketConfigurer onError(WebSocket.OnError callback) { this.onError = callback; return this; } - @NonNull @Override - public WebSocketConfigurer onClose(@NonNull WebSocket.OnClose callback) { + @Override + public WebSocketConfigurer onClose(WebSocket.OnClose callback) { this.onClose = callback; return this; } diff --git a/modules/jooby-test/src/main/java/io/jooby/test/package-info.java b/modules/jooby-test/src/main/java/io/jooby/test/package-info.java index da8e4dfeec..aff41b2904 100644 --- a/modules/jooby-test/src/main/java/io/jooby/test/package-info.java +++ b/modules/jooby-test/src/main/java/io/jooby/test/package-info.java @@ -1,3 +1,3 @@ /** Unit test support for Jooby. */ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.test; diff --git a/modules/jooby-test/src/main/java/module-info.java b/modules/jooby-test/src/main/java/module-info.java index 4c38e35f1c..7939b6a328 100644 --- a/modules/jooby-test/src/main/java/module-info.java +++ b/modules/jooby-test/src/main/java/module-info.java @@ -3,7 +3,7 @@ exports io.jooby.test; requires io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires typesafe.config; requires org.slf4j; requires org.junit.jupiter.api; diff --git a/modules/jooby-thymeleaf/src/main/java/io/jooby/internal/thymeleaf/ThymeleafTemplateEngine.java b/modules/jooby-thymeleaf/src/main/java/io/jooby/internal/thymeleaf/ThymeleafTemplateEngine.java index ae16dffd35..153d969ec3 100644 --- a/modules/jooby-thymeleaf/src/main/java/io/jooby/internal/thymeleaf/ThymeleafTemplateEngine.java +++ b/modules/jooby-thymeleaf/src/main/java/io/jooby/internal/thymeleaf/ThymeleafTemplateEngine.java @@ -13,7 +13,6 @@ import org.thymeleaf.TemplateEngine; import org.thymeleaf.context.Context; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.MapModelAndView; import io.jooby.ModelAndView; import io.jooby.output.Output; @@ -27,13 +26,13 @@ public ThymeleafTemplateEngine(TemplateEngine templateEngine, List exten this.extensions = Collections.unmodifiableList(extensions); } - @NonNull @Override + @Override public List extensions() { return extensions; } @Override - public @NonNull Output render(io.jooby.Context ctx, ModelAndView modelAndView) { + public Output render(io.jooby.Context ctx, ModelAndView modelAndView) { if (modelAndView instanceof MapModelAndView mapModelAndView) { Map model = new HashMap<>(ctx.getAttributes()); model.putAll(mapModelAndView.getModel()); diff --git a/modules/jooby-thymeleaf/src/main/java/io/jooby/thymeleaf/ThymeleafModule.java b/modules/jooby-thymeleaf/src/main/java/io/jooby/thymeleaf/ThymeleafModule.java index d11e2a455d..a0c286e56c 100644 --- a/modules/jooby-thymeleaf/src/main/java/io/jooby/thymeleaf/ThymeleafModule.java +++ b/modules/jooby-thymeleaf/src/main/java/io/jooby/thymeleaf/ThymeleafModule.java @@ -23,7 +23,6 @@ import org.thymeleaf.templateresolver.FileTemplateResolver; import org.thymeleaf.templateresolver.ITemplateResolver; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Environment; import io.jooby.Extension; import io.jooby.Jooby; @@ -103,7 +102,7 @@ public static class Builder { * @param templatesPath Set template path. * @return This builder. */ - public @NonNull Builder setTemplatesPath(@NonNull String templatesPath) { + public Builder setTemplatesPath(String templatesPath) { this.templatesPathString = templatesPath; return this; } @@ -114,7 +113,7 @@ public static class Builder { * @param templatesPath Set template path. * @return This builder. */ - public @NonNull Builder setTemplatesPath(@NonNull Path templatesPath) { + public Builder setTemplatesPath(Path templatesPath) { this.templatesPath = templatesPath; return this; } @@ -125,7 +124,7 @@ public static class Builder { * @param templateResolver Template resolver to use. * @return This builder. */ - public @NonNull Builder setTemplateResolver(@NonNull ITemplateResolver templateResolver) { + public Builder setTemplateResolver(ITemplateResolver templateResolver) { this.templateResolver = templateResolver; return this; } @@ -137,7 +136,7 @@ public static class Builder { * @param cacheable Turn on/off cache. * @return This builder. */ - public @NonNull Builder setCacheable(boolean cacheable) { + public Builder setCacheable(boolean cacheable) { this.cacheable = cacheable; return this; } @@ -148,7 +147,7 @@ public static class Builder { * @param cacheManager Cache manager. * @return This builder. */ - public @NonNull Builder setCacheManager(@NonNull ICacheManager cacheManager) { + public Builder setCacheManager(ICacheManager cacheManager) { this.cacheManager = cacheManager; return this; } @@ -159,7 +158,7 @@ public static class Builder { * @param env Environment. * @return Template engine. */ - public @NonNull TemplateEngine build(@NonNull Environment env) { + public TemplateEngine build(Environment env) { TemplateEngine engine = new TemplateEngine(); if (templateResolver == null) { @@ -222,7 +221,7 @@ private ITemplateResolver defaultTemplateLoader( * * @param templateEngine Template engine. */ - public ThymeleafModule(@NonNull TemplateEngine templateEngine) { + public ThymeleafModule(TemplateEngine templateEngine) { this.templateEngine = templateEngine; } @@ -232,7 +231,7 @@ public ThymeleafModule(@NonNull TemplateEngine templateEngine) { * * @param templatesPath Template path. */ - public ThymeleafModule(@NonNull String templatesPath) { + public ThymeleafModule(String templatesPath) { this.templatesPathString = templatesPath; } @@ -241,7 +240,7 @@ public ThymeleafModule(@NonNull String templatesPath) { * * @param templatesPath Template path. */ - public ThymeleafModule(@NonNull Path templatesPath) { + public ThymeleafModule(Path templatesPath) { this.templatesPath = templatesPath; } @@ -254,7 +253,7 @@ public ThymeleafModule() { } @Override - public void install(@NonNull Jooby application) { + public void install(Jooby application) { if (templateEngine == null) { templateEngine = create() @@ -274,7 +273,7 @@ public void install(@NonNull Jooby application) { * * @return A builder. */ - public static @NonNull ThymeleafModule.Builder create() { + public static ThymeleafModule.Builder create() { return new ThymeleafModule.Builder(); } } diff --git a/modules/jooby-thymeleaf/src/main/java/io/jooby/thymeleaf/package-info.java b/modules/jooby-thymeleaf/src/main/java/io/jooby/thymeleaf/package-info.java index afc93739e3..1ae87566eb 100644 --- a/modules/jooby-thymeleaf/src/main/java/io/jooby/thymeleaf/package-info.java +++ b/modules/jooby-thymeleaf/src/main/java/io/jooby/thymeleaf/package-info.java @@ -1,2 +1,2 @@ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.thymeleaf; diff --git a/modules/jooby-thymeleaf/src/main/java/module-info.java b/modules/jooby-thymeleaf/src/main/java/module-info.java index 0e59f1cf70..2149c6c3c5 100644 --- a/modules/jooby-thymeleaf/src/main/java/module-info.java +++ b/modules/jooby-thymeleaf/src/main/java/module-info.java @@ -9,7 +9,7 @@ exports io.jooby.thymeleaf; requires io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires typesafe.config; requires thymeleaf; } diff --git a/modules/jooby-trpc-avaje-jsonb/src/main/java/io/jooby/trpc/avaje/jsonb/TrpcAvajeJsonbModule.java b/modules/jooby-trpc-avaje-jsonb/src/main/java/io/jooby/trpc/avaje/jsonb/TrpcAvajeJsonbModule.java index 9020242bbe..0d8772e7ae 100644 --- a/modules/jooby-trpc-avaje-jsonb/src/main/java/io/jooby/trpc/avaje/jsonb/TrpcAvajeJsonbModule.java +++ b/modules/jooby-trpc-avaje-jsonb/src/main/java/io/jooby/trpc/avaje/jsonb/TrpcAvajeJsonbModule.java @@ -5,7 +5,6 @@ */ package io.jooby.trpc.avaje.jsonb; -import edu.umd.cs.findbugs.annotations.NonNull; import io.avaje.json.JsonDataException; import io.avaje.jsonb.Jsonb; import io.jooby.Extension; @@ -34,7 +33,7 @@ */ public class TrpcAvajeJsonbModule implements Extension { @Override - public void install(@NonNull Jooby application) throws Exception { + public void install(Jooby application) throws Exception { var services = application.getServices(); // tRpc services.put(TrpcParser.class, new AvajeTrpcParser(application.require(Jsonb.class))); diff --git a/modules/jooby-trpc-avaje-jsonb/src/main/java/io/jooby/trpc/avaje/jsonb/package-info.java b/modules/jooby-trpc-avaje-jsonb/src/main/java/io/jooby/trpc/avaje/jsonb/package-info.java index 1ef22c3835..eb836203ab 100644 --- a/modules/jooby-trpc-avaje-jsonb/src/main/java/io/jooby/trpc/avaje/jsonb/package-info.java +++ b/modules/jooby-trpc-avaje-jsonb/src/main/java/io/jooby/trpc/avaje/jsonb/package-info.java @@ -15,5 +15,5 @@ * @since 4.3.0 * @author edgar */ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.trpc.avaje.jsonb; diff --git a/modules/jooby-trpc-avaje-jsonb/src/main/java/module-info.java b/modules/jooby-trpc-avaje-jsonb/src/main/java/module-info.java index fe1129d043..39e05dda45 100644 --- a/modules/jooby-trpc-avaje-jsonb/src/main/java/module-info.java +++ b/modules/jooby-trpc-avaje-jsonb/src/main/java/module-info.java @@ -20,7 +20,7 @@ requires io.jooby; requires io.jooby.trpc; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires typesafe.config; requires io.avaje.jsonb; diff --git a/modules/jooby-trpc-jackson2/src/main/java/io/jooby/trpc/jackson2/TrpcJackson2Module.java b/modules/jooby-trpc-jackson2/src/main/java/io/jooby/trpc/jackson2/TrpcJackson2Module.java index 8bffdf17f9..08b2c0229a 100644 --- a/modules/jooby-trpc-jackson2/src/main/java/io/jooby/trpc/jackson2/TrpcJackson2Module.java +++ b/modules/jooby-trpc-jackson2/src/main/java/io/jooby/trpc/jackson2/TrpcJackson2Module.java @@ -8,7 +8,6 @@ import com.fasterxml.jackson.databind.Module; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.module.SimpleModule; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Extension; import io.jooby.Jooby; import io.jooby.internal.trpc.jackson2.JacksonTrpcParser; @@ -35,7 +34,7 @@ */ public class TrpcJackson2Module implements Extension { @Override - public void install(@NonNull Jooby application) throws Exception { + public void install(Jooby application) throws Exception { var services = application.getServices(); services.put(TrpcParser.class, new JacksonTrpcParser(application.require(ObjectMapper.class))); var rpc = new SimpleModule(); diff --git a/modules/jooby-trpc-jackson2/src/main/java/io/jooby/trpc/jackson2/package-info.java b/modules/jooby-trpc-jackson2/src/main/java/io/jooby/trpc/jackson2/package-info.java index d715f4a72b..bbecb34e14 100644 --- a/modules/jooby-trpc-jackson2/src/main/java/io/jooby/trpc/jackson2/package-info.java +++ b/modules/jooby-trpc-jackson2/src/main/java/io/jooby/trpc/jackson2/package-info.java @@ -15,5 +15,5 @@ * @since 4.3.0 * @author edgar */ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.trpc.jackson2; diff --git a/modules/jooby-trpc-jackson2/src/main/java/module-info.java b/modules/jooby-trpc-jackson2/src/main/java/module-info.java index 82ee1e3aac..020ea6de64 100644 --- a/modules/jooby-trpc-jackson2/src/main/java/module-info.java +++ b/modules/jooby-trpc-jackson2/src/main/java/module-info.java @@ -20,7 +20,7 @@ requires io.jooby; requires io.jooby.trpc; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires typesafe.config; requires com.fasterxml.jackson.databind; } diff --git a/modules/jooby-trpc-jackson3/src/main/java/io/jooby/trpc/jackson3/TrpcJackson3Module.java b/modules/jooby-trpc-jackson3/src/main/java/io/jooby/trpc/jackson3/TrpcJackson3Module.java index e8b0031815..6628f3372f 100644 --- a/modules/jooby-trpc-jackson3/src/main/java/io/jooby/trpc/jackson3/TrpcJackson3Module.java +++ b/modules/jooby-trpc-jackson3/src/main/java/io/jooby/trpc/jackson3/TrpcJackson3Module.java @@ -5,7 +5,6 @@ */ package io.jooby.trpc.jackson3; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Extension; import io.jooby.Jooby; import io.jooby.internal.trpc.jackson3.JacksonTrpcParser; @@ -39,7 +38,7 @@ */ public class TrpcJackson3Module implements Extension { @Override - public void install(@NonNull Jooby application) { + public void install(Jooby application) { var services = application.getServices(); // tRPC error codes services diff --git a/modules/jooby-trpc-jackson3/src/main/java/io/jooby/trpc/jackson3/package-info.java b/modules/jooby-trpc-jackson3/src/main/java/io/jooby/trpc/jackson3/package-info.java index f7d311e92d..5ba48dc531 100644 --- a/modules/jooby-trpc-jackson3/src/main/java/io/jooby/trpc/jackson3/package-info.java +++ b/modules/jooby-trpc-jackson3/src/main/java/io/jooby/trpc/jackson3/package-info.java @@ -15,5 +15,5 @@ * @since 4.3.0 * @author edgar */ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.trpc.jackson3; diff --git a/modules/jooby-trpc-jackson3/src/main/java/module-info.java b/modules/jooby-trpc-jackson3/src/main/java/module-info.java index d4346c0c76..2e55e2b117 100644 --- a/modules/jooby-trpc-jackson3/src/main/java/module-info.java +++ b/modules/jooby-trpc-jackson3/src/main/java/module-info.java @@ -20,7 +20,7 @@ requires io.jooby; requires io.jooby.trpc; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires typesafe.config; requires tools.jackson.core; requires tools.jackson.databind; diff --git a/modules/jooby-trpc/src/main/java/io/jooby/trpc/TrpcErrorHandler.java b/modules/jooby-trpc/src/main/java/io/jooby/trpc/TrpcErrorHandler.java index aef5d3124b..7d90e3ea7e 100644 --- a/modules/jooby-trpc/src/main/java/io/jooby/trpc/TrpcErrorHandler.java +++ b/modules/jooby-trpc/src/main/java/io/jooby/trpc/TrpcErrorHandler.java @@ -8,7 +8,6 @@ import java.util.Map; import java.util.Optional; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.ErrorHandler; import io.jooby.Reified; @@ -42,7 +41,7 @@ public class TrpcErrorHandler implements ErrorHandler { * @param code The default HTTP status code resolved by Jooby. */ @Override - public void apply(@NonNull Context ctx, @NonNull Throwable cause, @NonNull StatusCode code) { + public void apply(Context ctx, Throwable cause, StatusCode code) { if (ctx.getRequestPath().startsWith("/trpc/")) { TrpcException trpcError; if (cause instanceof TrpcException) { diff --git a/modules/jooby-trpc/src/main/java/io/jooby/trpc/TrpcModule.java b/modules/jooby-trpc/src/main/java/io/jooby/trpc/TrpcModule.java index ce38a5b5a2..ff492c81c0 100644 --- a/modules/jooby-trpc/src/main/java/io/jooby/trpc/TrpcModule.java +++ b/modules/jooby-trpc/src/main/java/io/jooby/trpc/TrpcModule.java @@ -8,7 +8,6 @@ import java.util.List; import java.util.stream.Stream; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Extension; import io.jooby.Jooby; @@ -88,7 +87,7 @@ public TrpcModule(TrpcService service, TrpcService... services) { * registry. */ @Override - public void install(@NonNull Jooby app) throws Exception { + public void install(Jooby app) throws Exception { var registry = app.getServices(); // Ensure a JSON module has provided the necessary parser diff --git a/modules/jooby-trpc/src/main/java/io/jooby/trpc/TrpcResponse.java b/modules/jooby-trpc/src/main/java/io/jooby/trpc/TrpcResponse.java index 5bfcc9938f..27431121de 100644 --- a/modules/jooby-trpc/src/main/java/io/jooby/trpc/TrpcResponse.java +++ b/modules/jooby-trpc/src/main/java/io/jooby/trpc/TrpcResponse.java @@ -5,8 +5,7 @@ */ package io.jooby.trpc; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; /** * A standardized envelope for successful tRPC responses. @@ -33,7 +32,7 @@ public record TrpcResponse(@Nullable T data) { * @param The type of the data. * @return A tRPC response envelope containing the provided data. */ - public static @NonNull TrpcResponse of(@NonNull T data) { + public static TrpcResponse of(T data) { return new TrpcResponse<>(data); } @@ -46,7 +45,7 @@ public record TrpcResponse(@Nullable T data) { * @param The inferred type (usually {@code Void} or {@code Object}). * @return A tRPC response envelope where the data property is explicitly null. */ - public static @NonNull TrpcResponse empty() { + public static TrpcResponse empty() { return new TrpcResponse<>(null); } } diff --git a/modules/jooby-trpc/src/main/java/io/jooby/trpc/TrpcService.java b/modules/jooby-trpc/src/main/java/io/jooby/trpc/TrpcService.java index a080d35af6..2e057fb327 100644 --- a/modules/jooby-trpc/src/main/java/io/jooby/trpc/TrpcService.java +++ b/modules/jooby-trpc/src/main/java/io/jooby/trpc/TrpcService.java @@ -5,7 +5,6 @@ */ package io.jooby.trpc; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Jooby; /** @@ -23,5 +22,5 @@ public interface TrpcService { * @param application Main application. * @throws Exception If something goes wrong. */ - void install(@NonNull String path, @NonNull Jooby application) throws Exception; + void install(String path, Jooby application) throws Exception; } diff --git a/modules/jooby-trpc/src/main/java/module-info.java b/modules/jooby-trpc/src/main/java/module-info.java index 6a7be84fa6..bb633b1d9a 100644 --- a/modules/jooby-trpc/src/main/java/module-info.java +++ b/modules/jooby-trpc/src/main/java/module-info.java @@ -3,6 +3,6 @@ exports io.jooby.annotation.trpc; requires io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires typesafe.config; } diff --git a/modules/jooby-undertow/src/main/java/io/jooby/internal/undertow/UndertowContext.java b/modules/jooby-undertow/src/main/java/io/jooby/internal/undertow/UndertowContext.java index 7eba730fce..b978306a0f 100644 --- a/modules/jooby-undertow/src/main/java/io/jooby/internal/undertow/UndertowContext.java +++ b/modules/jooby-undertow/src/main/java/io/jooby/internal/undertow/UndertowContext.java @@ -31,10 +31,9 @@ import javax.net.ssl.SSLPeerUnverifiedException; +import org.jspecify.annotations.Nullable; import org.slf4j.Logger; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; import io.jooby.*; import io.jooby.ByteRange; import io.jooby.output.Output; @@ -88,18 +87,18 @@ boolean isHttpGet() { && this.method.charAt(2) == 'T'; } - @NonNull @Override + @Override public Router getRouter() { return router; } - @NonNull @Override + @Override public Body body() { return body == null ? Body.empty(this) : body; } @Override - public @NonNull Map cookieMap() { + public Map cookieMap() { if (this.cookies == null) { this.cookies = new LinkedHashMap<>(); for (var it : exchange.requestCookies()) { @@ -109,7 +108,7 @@ public Body body() { return cookies; } - @NonNull @Override + @Override public Map getAttributes() { if (attributes == null) { attributes = new HashMap<>(); @@ -117,23 +116,23 @@ public Map getAttributes() { return attributes; } - @NonNull @Override + @Override public String getMethod() { return method; } - @NonNull @Override - public Context setMethod(@NonNull String method) { + @Override + public Context setMethod(String method) { this.method = method.toUpperCase(); return this; } - @NonNull @Override + @Override public Route getRoute() { return route; } - @NonNull @Override + @Override public Context setRoute(Route route) { this.route = route; if (this.route.isNonBlocking()) { @@ -142,23 +141,23 @@ public Context setRoute(Route route) { return this; } - @NonNull @Override + @Override public String getRequestPath() { return requestPath; } - @NonNull @Override - public Context setRequestPath(@NonNull String path) { + @Override + public Context setRequestPath(String path) { this.requestPath = path; return this; } - @NonNull @Override + @Override public Map pathMap() { return pathMap; } - @NonNull @Override + @Override public Context setPathMap(Map pathMap) { this.pathMap = pathMap; return this; @@ -169,18 +168,18 @@ public boolean isInIoThread() { return exchange.isInIoThread(); } - @NonNull @Override + @Override public String getHost() { return host == null ? DefaultContext.super.getHost() : host; } - @NonNull @Override - public Context setHost(@NonNull String host) { + @Override + public Context setHost(String host) { this.host = host; return this; } - @NonNull @Override + @Override public String getRemoteAddress() { if (remoteAddress == null) { String remoteAddr = @@ -193,18 +192,18 @@ public String getRemoteAddress() { return remoteAddress; } - @NonNull @Override - public Context setRemoteAddress(@NonNull String remoteAddress) { + @Override + public Context setRemoteAddress(String remoteAddress) { this.remoteAddress = remoteAddress; return this; } - @NonNull @Override + @Override public String getProtocol() { return exchange.getProtocol().toString(); } - @NonNull @Override + @Override public List getClientCertificates() { SSLSessionInfo ssl = exchange.getConnection().getSslSessionInfo(); if (ssl != null) { @@ -217,14 +216,14 @@ public List getClientCertificates() { return Collections.emptyList(); } - @NonNull @Override + @Override public String getScheme() { String scheme = exchange.getRequestScheme(); return scheme == null ? "http" : scheme.toLowerCase(); } - @NonNull @Override - public Context setScheme(@NonNull String scheme) { + @Override + public Context setScheme(String scheme) { exchange.setRequestScheme(scheme); return this; } @@ -234,18 +233,18 @@ public int getPort() { return port > 0 ? port : DefaultContext.super.getPort(); } - @NonNull @Override + @Override public Context setPort(int port) { this.port = port; return this; } - @NonNull @Override - public Value header(@NonNull String name) { + @Override + public Value header(String name) { return Value.create(getValueFactory(), name, exchange.getRequestHeaders().get(name)); } - @NonNull @Override + @Override public Value header() { HeaderMap map = exchange.getRequestHeaders(); if (headers == null) { @@ -260,7 +259,7 @@ public Value header() { return headers; } - @NonNull @Override + @Override public QueryString query() { if (query == null) { query = QueryString.create(getValueFactory(), exchange.getQueryString()); @@ -268,7 +267,7 @@ public QueryString query() { return query; } - @NonNull @Override + @Override public Formdata form() { if (formdata == null) { formdata = Formdata.create(getValueFactory()); @@ -277,19 +276,19 @@ public Formdata form() { return formdata; } - @NonNull @Override - public Context dispatch(@NonNull Runnable action) { + @Override + public Context dispatch(Runnable action) { return dispatch(router.getWorker(), action); } - @NonNull @Override - public Context dispatch(@NonNull Executor executor, @NonNull Runnable action) { + @Override + public Context dispatch(Executor executor, Runnable action) { exchange.dispatch(executor, action); return this; } - @NonNull @Override - public Context upgrade(@NonNull WebSocket.Initializer handler) { + @Override + public Context upgrade(WebSocket.Initializer handler) { try { Handlers.websocket( (exchange, channel) -> { @@ -304,8 +303,8 @@ public Context upgrade(@NonNull WebSocket.Initializer handler) { } } - @NonNull @Override - public Context upgrade(@NonNull ServerSentEmitter.Handler handler) { + @Override + public Context upgrade(ServerSentEmitter.Handler handler) { try { handler.handle(new UndertowSeverSentEmitter(this)); } catch (Throwable x) { @@ -314,66 +313,66 @@ public Context upgrade(@NonNull ServerSentEmitter.Handler handler) { return this; } - @NonNull @Override + @Override public StatusCode getResponseCode() { return StatusCode.valueOf(exchange.getStatusCode()); } - @NonNull @Override + @Override public Context setResponseCode(int statusCode) { exchange.setStatusCode(statusCode); return this; } - @NonNull @Override - public Context setResponseHeader(@NonNull String name, @NonNull String value) { + @Override + public Context setResponseHeader(String name, String value) { exchange.getResponseHeaders().put(HttpString.tryFromString(name), value); return this; } - @NonNull @Override - public Context removeResponseHeader(@NonNull String name) { + @Override + public Context removeResponseHeader(String name) { exchange.getResponseHeaders().remove(name); return this; } - @NonNull @Override + @Override public Context removeResponseHeaders() { exchange.getResponseHeaders().clear(); return this; } - @NonNull @Override + @Override public MediaType getResponseType() { return responseType == null ? MediaType.text : responseType; } - @NonNull @Override - public Context setDefaultResponseType(@NonNull MediaType contentType) { + @Override + public Context setDefaultResponseType(MediaType contentType) { if (responseType == null) { setResponseType(contentType); } return this; } - @NonNull @Override - public Context setResponseType(@NonNull MediaType contentType) { + @Override + public Context setResponseType(MediaType contentType) { this.responseType = contentType; exchange.getResponseHeaders().put(CONTENT_TYPE, contentType.toContentTypeHeader()); return this; } - @NonNull @Override - public Context setResponseType(@NonNull String contentType) { + @Override + public Context setResponseType(String contentType) { return setResponseType(MediaType.valueOf(contentType)); } @Nullable @Override - public String getResponseHeader(@NonNull String name) { + public String getResponseHeader(String name) { return exchange.getResponseHeaders().getFirst(name); } - @NonNull @Override + @Override public Context setResponseLength(long length) { responseLength = length; exchange.getResponseHeaders().put(CONTENT_LENGTH, Long.toString(length)); @@ -388,7 +387,7 @@ public long getResponseLength() { return responseLength; } - @NonNull public Context setResponseCookie(@NonNull Cookie cookie) { + public Context setResponseCookie(Cookie cookie) { if (responseCookies == null) { responseCookies = new HashMap<>(); } @@ -402,7 +401,7 @@ public long getResponseLength() { return this; } - @NonNull @Override + @Override public OutputStream responseStream() { ifStartBlocking(); @@ -411,12 +410,12 @@ public OutputStream responseStream() { return exchange.getOutputStream(); } - @NonNull @Override + @Override public io.jooby.Sender responseSender() { return new UndertowSender(this, exchange); } - @NonNull @Override + @Override public PrintWriter responseWriter(MediaType type) { ifStartBlocking(); @@ -428,13 +427,13 @@ public PrintWriter responseWriter(MediaType type) { exchange.getOutputStream(), ofNullable(type.getCharset()).orElse(UTF_8))); } - @NonNull @Override - public Context send(@NonNull byte[] data) { + @Override + public Context send(byte[] data) { return send(ByteBuffer.wrap(data)); } @Override - public @NonNull Context send(@NonNull FileDownload file) { + public Context send(FileDownload file) { if (file.deleteOnComplete()) { if (files == null) { files = new ArrayList<>(); @@ -444,20 +443,20 @@ public Context send(@NonNull byte[] data) { return DefaultContext.super.send(file); } - @NonNull @Override - public Context send(@NonNull ReadableByteChannel channel) { + @Override + public Context send(ReadableByteChannel channel) { ifSetChunked(); new UndertowChunkedStream(exchange.getRequestContentLength()).send(channel, exchange, this); return this; } - @NonNull @Override - public Context send(@NonNull String data, @NonNull Charset charset) { + @Override + public Context send(String data, Charset charset) { return send(ByteBuffer.wrap(data.getBytes(charset))); } - @NonNull @Override - public Context send(@NonNull ByteBuffer[] data) { + @Override + public Context send(ByteBuffer[] data) { HeaderMap headers = exchange.getResponseHeaders(); if (!headers.contains(CONTENT_LENGTH)) { long len = 0; @@ -471,8 +470,8 @@ public Context send(@NonNull ByteBuffer[] data) { return this; } - @NonNull @Override - public Context send(@NonNull ByteBuffer data) { + @Override + public Context send(ByteBuffer data) { ifUnDispatch(data); exchange.setResponseContentLength(data.remaining()); exchange.getResponseHeaders().put(Headers.CONTENT_LENGTH, Long.toString(data.remaining())); @@ -480,21 +479,21 @@ public Context send(@NonNull ByteBuffer data) { return this; } - @NonNull @Override - public Context send(@NonNull Output output) { + @Override + public Context send(Output output) { output.send(this); return this; } - @NonNull @Override + @Override public Context send(StatusCode statusCode) { exchange.setStatusCode(statusCode.value()); exchange.getResponseSender().send(EMPTY, this); return this; } - @NonNull @Override - public Context send(@NonNull InputStream in) { + @Override + public Context send(InputStream in) { if (in instanceof FileInputStream) { // use channel return send(((FileInputStream) in).getChannel()); @@ -511,8 +510,8 @@ public Context send(@NonNull InputStream in) { } } - @NonNull @Override - public Context send(@NonNull FileChannel file) { + @Override + public Context send(FileChannel file) { try { long len = file.size(); exchange.setResponseContentLength(len); @@ -568,8 +567,8 @@ private void clearFiles() { } } - @NonNull @Override - public Context onComplete(@NonNull Route.Complete task) { + @Override + public Context onComplete(Route.Complete task) { if (completionListener == null) { completionListener = new UndertowCompletionListener(this); exchange.addExchangeCompleteListener(completionListener); diff --git a/modules/jooby-undertow/src/main/java/io/jooby/internal/undertow/UndertowFileUpload.java b/modules/jooby-undertow/src/main/java/io/jooby/internal/undertow/UndertowFileUpload.java index a55b8ebf02..ed8e5489a7 100644 --- a/modules/jooby-undertow/src/main/java/io/jooby/internal/undertow/UndertowFileUpload.java +++ b/modules/jooby-undertow/src/main/java/io/jooby/internal/undertow/UndertowFileUpload.java @@ -10,7 +10,6 @@ import java.io.InputStream; import java.nio.file.Path; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.FileUpload; import io.jooby.ServerOptions; import io.jooby.SneakyThrows; @@ -51,7 +50,7 @@ public InputStream stream() { } } - @NonNull @Override + @Override public String getName() { return name; } diff --git a/modules/jooby-undertow/src/main/java/io/jooby/internal/undertow/UndertowSender.java b/modules/jooby-undertow/src/main/java/io/jooby/internal/undertow/UndertowSender.java index a3844cfc6f..c9477c660c 100644 --- a/modules/jooby-undertow/src/main/java/io/jooby/internal/undertow/UndertowSender.java +++ b/modules/jooby-undertow/src/main/java/io/jooby/internal/undertow/UndertowSender.java @@ -8,7 +8,6 @@ import java.io.IOException; import java.nio.ByteBuffer; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Sender; import io.jooby.output.Output; import io.undertow.io.IoCallback; @@ -24,13 +23,13 @@ public UndertowSender(UndertowContext ctx, HttpServerExchange exchange) { } @Override - public Sender write(@NonNull byte[] data, @NonNull Callback callback) { + public Sender write(byte[] data, Callback callback) { exchange.getResponseSender().send(ByteBuffer.wrap(data), newIoCallback(ctx, callback)); return this; } - @NonNull @Override - public Sender write(@NonNull Output output, @NonNull Callback callback) { + @Override + public Sender write(Output output, Callback callback) { new UndertowOutputCallback(output, newIoCallback(ctx, callback)).send(exchange); return this; } diff --git a/modules/jooby-undertow/src/main/java/io/jooby/internal/undertow/UndertowServerSentConnection.java b/modules/jooby-undertow/src/main/java/io/jooby/internal/undertow/UndertowServerSentConnection.java index 0ba3230b7b..f96d81f1b9 100644 --- a/modules/jooby-undertow/src/main/java/io/jooby/internal/undertow/UndertowServerSentConnection.java +++ b/modules/jooby-undertow/src/main/java/io/jooby/internal/undertow/UndertowServerSentConnection.java @@ -22,7 +22,6 @@ import org.xnio.IoUtils; import org.xnio.channels.StreamSinkChannel; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.ServerSentMessage; import io.jooby.output.Output; @@ -169,7 +168,7 @@ private void fillBuffer() { * * @param dest Destination buffer. */ - private void transferTo(@NonNull Output source, @NonNull ByteBuffer dest) { + private void transferTo(Output source, ByteBuffer dest) { transferTo(source, 0, dest, dest.position(), source.size()); } @@ -183,8 +182,7 @@ private void transferTo(@NonNull Output source, @NonNull ByteBuffer dest) { * @param destPos the position in {@code dest} to where copying should start * @param length the amount of data to copy */ - private void transferTo( - @NonNull Output source, int srcPos, @NonNull ByteBuffer dest, int destPos, int length) { + private void transferTo(Output source, int srcPos, ByteBuffer dest, int destPos, int length) { dest = dest.duplicate().clear(); dest.put(destPos, source.asByteBuffer(), srcPos, length); } diff --git a/modules/jooby-undertow/src/main/java/io/jooby/internal/undertow/UndertowSeverSentEmitter.java b/modules/jooby-undertow/src/main/java/io/jooby/internal/undertow/UndertowSeverSentEmitter.java index b699260153..1740326e6e 100644 --- a/modules/jooby-undertow/src/main/java/io/jooby/internal/undertow/UndertowSeverSentEmitter.java +++ b/modules/jooby-undertow/src/main/java/io/jooby/internal/undertow/UndertowSeverSentEmitter.java @@ -14,7 +14,6 @@ import org.slf4j.LoggerFactory; import org.xnio.XnioIoThread; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.Server; import io.jooby.ServerSentEmitter; @@ -41,12 +40,12 @@ public UndertowSeverSentEmitter(UndertowContext context) { this.connection = new UndertowServerSentConnection(context); } - @NonNull @Override + @Override public Context getContext() { return Context.readOnly(context); } - @NonNull @Override + @Override public ServerSentEmitter send(ServerSentMessage data) { if (checkOpen()) { connection.send(data, null); @@ -86,7 +85,7 @@ public void onClose(SneakyThrows.Runnable task) { this.closeTask = task; } - @NonNull @Override + @Override public void close() { if (open.compareAndSet(true, false)) { if (closeTask != null) { diff --git a/modules/jooby-undertow/src/main/java/io/jooby/internal/undertow/UndertowWebSocket.java b/modules/jooby-undertow/src/main/java/io/jooby/internal/undertow/UndertowWebSocket.java index 339603aacd..d98d3497de 100644 --- a/modules/jooby-undertow/src/main/java/io/jooby/internal/undertow/UndertowWebSocket.java +++ b/modules/jooby-undertow/src/main/java/io/jooby/internal/undertow/UndertowWebSocket.java @@ -25,7 +25,6 @@ import org.xnio.IoUtils; import com.typesafe.config.Config; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.Server; import io.jooby.SneakyThrows; @@ -170,12 +169,12 @@ protected long getMaxBinaryBufferSize() { return maxSize; } - @NonNull @Override + @Override public Context getContext() { return Context.readOnly(ctx); } - @NonNull @Override + @Override public List getSessions() { List sessions = all.get(key); if (sessions == null) { @@ -204,46 +203,46 @@ public void forEach(SneakyThrows.Consumer callback) { } } - @NonNull @Override - public WebSocket sendPing(@NonNull String message, @NonNull WriteCallback callback) { + @Override + public WebSocket sendPing(String message, WriteCallback callback) { return sendMessage( ByteBuffer.wrap(message.getBytes(StandardCharsets.UTF_8)), FrameType.PING, callback); } - @NonNull @Override - public WebSocket sendPing(@NonNull ByteBuffer message, @NonNull WriteCallback callback) { + @Override + public WebSocket sendPing(ByteBuffer message, WriteCallback callback) { return sendMessage(message, FrameType.PING, callback); } - @NonNull @Override - public WebSocket send(@NonNull String message, @NonNull WriteCallback callback) { + @Override + public WebSocket send(String message, WriteCallback callback) { return sendMessage( ByteBuffer.wrap(message.getBytes(StandardCharsets.UTF_8)), FrameType.TEXT, callback); } - @NonNull @Override - public WebSocket send(@NonNull ByteBuffer message, @NonNull WriteCallback callback) { + @Override + public WebSocket send(ByteBuffer message, WriteCallback callback) { return sendMessage(message, FrameType.TEXT, callback); } - @NonNull @Override - public WebSocket sendBinary(@NonNull String message, @NonNull WriteCallback callback) { + @Override + public WebSocket sendBinary(String message, WriteCallback callback) { return sendMessage( ByteBuffer.wrap(message.getBytes(StandardCharsets.UTF_8)), FrameType.BINARY, callback); } - @NonNull @Override - public WebSocket sendBinary(@NonNull Output message, @NonNull WriteCallback callback) { + @Override + public WebSocket sendBinary(Output message, WriteCallback callback) { return sendMessage(message, FrameType.BINARY, callback); } - @NonNull @Override - public WebSocket send(@NonNull Output message, @NonNull WriteCallback callback) { + @Override + public WebSocket send(Output message, WriteCallback callback) { return sendMessage(message, FrameType.TEXT, callback); } - @NonNull @Override - public WebSocket sendBinary(@NonNull ByteBuffer message, @NonNull WriteCallback callback) { + @Override + public WebSocket sendBinary(ByteBuffer message, WriteCallback callback) { return sendMessage(message, FrameType.BINARY, callback); } @@ -292,13 +291,13 @@ static WebSocket sendMessage( return ws; } - @NonNull @Override - public WebSocket render(@NonNull Object value, @NonNull WriteCallback callback) { + @Override + public WebSocket render(Object value, WriteCallback callback) { return renderMessage(value, false, callback); } - @NonNull @Override - public WebSocket renderBinary(@NonNull Object value, @NonNull WriteCallback callback) { + @Override + public WebSocket renderBinary(Object value, WriteCallback callback) { return renderMessage(value, true, callback); } @@ -311,32 +310,32 @@ private WebSocket renderMessage(Object value, boolean binary, WriteCallback call return this; } - @NonNull @Override - public WebSocket close(@NonNull WebSocketCloseStatus closeStatus) { + @Override + public WebSocket close(WebSocketCloseStatus closeStatus) { handleClose(closeStatus); return this; } - @NonNull @Override - public WebSocketConfigurer onConnect(@NonNull OnConnect callback) { + @Override + public WebSocketConfigurer onConnect(OnConnect callback) { onConnectCallback = callback; return this; } - @NonNull @Override - public WebSocketConfigurer onMessage(@NonNull OnMessage callback) { + @Override + public WebSocketConfigurer onMessage(OnMessage callback) { onMessageCallback = callback; return this; } - @NonNull @Override - public WebSocketConfigurer onError(@NonNull OnError callback) { + @Override + public WebSocketConfigurer onError(OnError callback) { onErrorCallback = callback; return this; } - @NonNull @Override - public WebSocketConfigurer onClose(@NonNull OnClose callback) { + @Override + public WebSocketConfigurer onClose(OnClose callback) { onCloseCallback.set(callback); return this; } diff --git a/modules/jooby-undertow/src/main/java/io/jooby/undertow/UndertowServer.java b/modules/jooby-undertow/src/main/java/io/jooby/undertow/UndertowServer.java index fcae0a8667..b6e4d0fdac 100644 --- a/modules/jooby-undertow/src/main/java/io/jooby/undertow/UndertowServer.java +++ b/modules/jooby-undertow/src/main/java/io/jooby/undertow/UndertowServer.java @@ -15,7 +15,6 @@ import org.xnio.*; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.*; import io.jooby.exception.StartupException; import io.jooby.internal.undertow.UndertowGrpcHandler; @@ -66,7 +65,7 @@ public class UndertowServer extends Server.Base { * * @param options Options. */ - public UndertowServer(@NonNull ServerOptions options) { + public UndertowServer(ServerOptions options) { setOptions(options); } @@ -87,7 +86,7 @@ public String getName() { } @Override - public Server start(@NonNull Jooby... application) { + public Server start(Jooby... application) { // force options to be non-null var options = getOptions(); var portInUse = options.getPort(); diff --git a/modules/jooby-undertow/src/main/java/io/jooby/undertow/package-info.java b/modules/jooby-undertow/src/main/java/io/jooby/undertow/package-info.java index 378c7da9af..408997eeeb 100644 --- a/modules/jooby-undertow/src/main/java/io/jooby/undertow/package-info.java +++ b/modules/jooby-undertow/src/main/java/io/jooby/undertow/package-info.java @@ -1,3 +1,3 @@ /** Undertow Web Server. */ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.undertow; diff --git a/modules/jooby-undertow/src/main/java/module-info.java b/modules/jooby-undertow/src/main/java/module-info.java index f052abda7f..0098457f0d 100644 --- a/modules/jooby-undertow/src/main/java/module-info.java +++ b/modules/jooby-undertow/src/main/java/module-info.java @@ -3,7 +3,7 @@ exports io.jooby.undertow; requires io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires typesafe.config; requires org.slf4j; requires java.logging; diff --git a/modules/jooby-vertx-mysql-client/src/main/java/io/jooby/vertx/mysqlclient/VertxMySQLModule.java b/modules/jooby-vertx-mysql-client/src/main/java/io/jooby/vertx/mysqlclient/VertxMySQLModule.java index 1f118984de..a5c36c5b2c 100644 --- a/modules/jooby-vertx-mysql-client/src/main/java/io/jooby/vertx/mysqlclient/VertxMySQLModule.java +++ b/modules/jooby-vertx-mysql-client/src/main/java/io/jooby/vertx/mysqlclient/VertxMySQLModule.java @@ -7,7 +7,6 @@ import java.util.function.Supplier; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.vertx.sqlclient.VertxSqlClientModule; import io.vertx.core.json.JsonObject; import io.vertx.mysqlclient.MySQLBuilder; @@ -52,8 +51,7 @@ public class VertxMySQLModule extends VertxSqlClientModule { * @param name Database key. * @param builder Client supplier. */ - public VertxMySQLModule( - @NonNull String name, @NonNull Supplier> builder) { + public VertxMySQLModule(String name, Supplier> builder) { super(name); this.builder = builder; } @@ -63,7 +61,7 @@ public VertxMySQLModule( * * @param builder Client supplier. */ - public VertxMySQLModule(@NonNull Supplier> builder) { + public VertxMySQLModule(Supplier> builder) { this("db", builder); } diff --git a/modules/jooby-vertx-pg-client/src/main/java/io/jooby/vertx/pgclient/VertxPgModule.java b/modules/jooby-vertx-pg-client/src/main/java/io/jooby/vertx/pgclient/VertxPgModule.java index 600e3b1b46..00fa096c20 100644 --- a/modules/jooby-vertx-pg-client/src/main/java/io/jooby/vertx/pgclient/VertxPgModule.java +++ b/modules/jooby-vertx-pg-client/src/main/java/io/jooby/vertx/pgclient/VertxPgModule.java @@ -7,7 +7,6 @@ import java.util.function.Supplier; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.vertx.sqlclient.VertxSqlClientModule; import io.vertx.core.json.JsonObject; import io.vertx.pgclient.PgBuilder; @@ -46,13 +45,12 @@ public class VertxPgModule extends VertxSqlClientModule { private final Supplier> builder; - public VertxPgModule( - @NonNull String name, @NonNull Supplier> builder) { + public VertxPgModule(String name, Supplier> builder) { super(name); this.builder = builder; } - public VertxPgModule(@NonNull Supplier> builder) { + public VertxPgModule(Supplier> builder) { this("db", builder); } diff --git a/modules/jooby-vertx-sql-client/src/main/java/io/jooby/internal/vertx/sqlclient/VertxPreparedQueryProxy.java b/modules/jooby-vertx-sql-client/src/main/java/io/jooby/internal/vertx/sqlclient/VertxPreparedQueryProxy.java index 150f306c98..d6a583266f 100644 --- a/modules/jooby-vertx-sql-client/src/main/java/io/jooby/internal/vertx/sqlclient/VertxPreparedQueryProxy.java +++ b/modules/jooby-vertx-sql-client/src/main/java/io/jooby/internal/vertx/sqlclient/VertxPreparedQueryProxy.java @@ -9,7 +9,6 @@ import java.util.function.Function; import java.util.stream.Collector; -import edu.umd.cs.findbugs.annotations.NonNull; import io.vertx.core.Future; import io.vertx.core.impl.VertxThread; import io.vertx.sqlclient.*; @@ -23,7 +22,7 @@ private PreparedQuery> get() { return VertxThreadLocalPreparedObject.>>get(name).get(0); } - @NonNull public String toString() { + public String toString() { return Thread.currentThread().getName() + ":" + name; } diff --git a/modules/jooby-vertx-sql-client/src/main/java/io/jooby/internal/vertx/sqlclient/VertxPreparedStatementProxy.java b/modules/jooby-vertx-sql-client/src/main/java/io/jooby/internal/vertx/sqlclient/VertxPreparedStatementProxy.java index 6ca62d281e..27e29521aa 100644 --- a/modules/jooby-vertx-sql-client/src/main/java/io/jooby/internal/vertx/sqlclient/VertxPreparedStatementProxy.java +++ b/modules/jooby-vertx-sql-client/src/main/java/io/jooby/internal/vertx/sqlclient/VertxPreparedStatementProxy.java @@ -5,7 +5,6 @@ */ package io.jooby.internal.vertx.sqlclient; -import edu.umd.cs.findbugs.annotations.NonNull; import io.vertx.core.Future; import io.vertx.core.impl.VertxThread; import io.vertx.sqlclient.*; @@ -50,7 +49,7 @@ public Future close() { } @Override - @NonNull public String toString() { + public String toString() { return Thread.currentThread().getName() + ":" + name; } } diff --git a/modules/jooby-vertx-sql-client/src/main/java/io/jooby/internal/vertx/sqlclient/VertxThreadLocalSqlConnection.java b/modules/jooby-vertx-sql-client/src/main/java/io/jooby/internal/vertx/sqlclient/VertxThreadLocalSqlConnection.java index eb4c8988b0..b80ba915d7 100644 --- a/modules/jooby-vertx-sql-client/src/main/java/io/jooby/internal/vertx/sqlclient/VertxThreadLocalSqlConnection.java +++ b/modules/jooby-vertx-sql-client/src/main/java/io/jooby/internal/vertx/sqlclient/VertxThreadLocalSqlConnection.java @@ -8,7 +8,6 @@ import java.util.HashMap; import java.util.Map; -import edu.umd.cs.findbugs.annotations.NonNull; import io.vertx.core.Future; import io.vertx.core.Handler; import io.vertx.core.impl.VertxThread; @@ -73,7 +72,7 @@ public Future close() { } @Override - @NonNull public String toString() { + public String toString() { return Thread.currentThread().getName() + ":" + name; } diff --git a/modules/jooby-vertx-sql-client/src/main/java/io/jooby/vertx/sqlclient/VertxSqlClientModule.java b/modules/jooby-vertx-sql-client/src/main/java/io/jooby/vertx/sqlclient/VertxSqlClientModule.java index 253bd810d9..7fd5eaa621 100644 --- a/modules/jooby-vertx-sql-client/src/main/java/io/jooby/vertx/sqlclient/VertxSqlClientModule.java +++ b/modules/jooby-vertx-sql-client/src/main/java/io/jooby/vertx/sqlclient/VertxSqlClientModule.java @@ -6,7 +6,6 @@ package io.jooby.vertx.sqlclient; import com.typesafe.config.ConfigValueType; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Extension; import io.jooby.Jooby; import io.jooby.ServiceKey; @@ -17,12 +16,12 @@ public abstract class VertxSqlClientModule implements Extension { private final String name; - public VertxSqlClientModule(@NonNull String name) { + public VertxSqlClientModule(String name) { this.name = name; } @Override - public void install(@NonNull Jooby application) throws Exception { + public void install(Jooby application) throws Exception { var registry = application.getServices(); var config = application.getConfig(); var configOptions = config.getValue(name); diff --git a/modules/jooby-vertx-sql-client/src/main/java/io/jooby/vertx/sqlclient/VertxSqlConnectionModule.java b/modules/jooby-vertx-sql-client/src/main/java/io/jooby/vertx/sqlclient/VertxSqlConnectionModule.java index 552190fc10..b9ec6f1eb8 100644 --- a/modules/jooby-vertx-sql-client/src/main/java/io/jooby/vertx/sqlclient/VertxSqlConnectionModule.java +++ b/modules/jooby-vertx-sql-client/src/main/java/io/jooby/vertx/sqlclient/VertxSqlConnectionModule.java @@ -9,7 +9,6 @@ import java.util.Map; import com.typesafe.config.ConfigValueType; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.*; import io.jooby.internal.vertx.sqlclient.VertxPreparedQueryProxy; import io.jooby.internal.vertx.sqlclient.VertxPreparedQueryProxyList; @@ -42,13 +41,13 @@ public VertxSqlConnectionModule() { this("db"); } - public VertxSqlConnectionModule prepare(@NonNull Map> statements) { + public VertxSqlConnectionModule prepare(Map> statements) { preparedStatements = statements; return this; } @Override - public final void install(@NonNull Jooby application) throws Exception { + public final void install(Jooby application) throws Exception { var registry = application.getServices(); var config = application.getConfig(); var configOptions = config.getValue(name); diff --git a/modules/jooby-vertx/src/main/java/io/jooby/internal/vertx/VertxEventLoopGroup.java b/modules/jooby-vertx/src/main/java/io/jooby/internal/vertx/VertxEventLoopGroup.java index a94b31b5bc..6bb7bf19cc 100644 --- a/modules/jooby-vertx/src/main/java/io/jooby/internal/vertx/VertxEventLoopGroup.java +++ b/modules/jooby-vertx/src/main/java/io/jooby/internal/vertx/VertxEventLoopGroup.java @@ -7,7 +7,6 @@ import java.util.concurrent.ExecutorService; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.netty.NettyEventLoopGroup; import io.netty.channel.EventLoopGroup; import io.vertx.core.Vertx; @@ -16,17 +15,17 @@ public record VertxEventLoopGroup(Vertx vertx) implements NettyEventLoopGroup { @Override - public @NonNull EventLoopGroup acceptor() { + public EventLoopGroup acceptor() { return ((VertxInternal) vertx).acceptorEventLoopGroup(); } @Override - public @NonNull EventLoopGroup eventLoop() { + public EventLoopGroup eventLoop() { return ((VertxInternal) vertx).nettyEventLoopGroup(); } @Override - public @NonNull ExecutorService worker() { + public ExecutorService worker() { return ((VertxInternal) vertx).workerPool().executor(); } diff --git a/modules/jooby-vertx/src/main/java/io/jooby/vertx/VertxModule.java b/modules/jooby-vertx/src/main/java/io/jooby/vertx/VertxModule.java index c3fe40eacb..a3258dc6ab 100644 --- a/modules/jooby-vertx/src/main/java/io/jooby/vertx/VertxModule.java +++ b/modules/jooby-vertx/src/main/java/io/jooby/vertx/VertxModule.java @@ -8,7 +8,6 @@ import java.util.function.Function; import java.util.function.Supplier; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Extension; import io.jooby.Jooby; import io.jooby.internal.vertx.VertxRegistry; @@ -90,7 +89,7 @@ public VertxModule(Supplier> vertx) { } @Override - public void install(@NonNull Jooby application) throws Exception { + public void install(Jooby application) throws Exception { // Ensure single instance if (application.getServices().getOrNull(Vertx.class) != null) { throw new IllegalStateException("Vertx already exists."); diff --git a/modules/jooby-vertx/src/main/java/io/jooby/vertx/VertxServer.java b/modules/jooby-vertx/src/main/java/io/jooby/vertx/VertxServer.java index 9b357cf8ca..610da46844 100644 --- a/modules/jooby-vertx/src/main/java/io/jooby/vertx/VertxServer.java +++ b/modules/jooby-vertx/src/main/java/io/jooby/vertx/VertxServer.java @@ -5,8 +5,8 @@ */ package io.jooby.vertx; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.Jooby; import io.jooby.Server; import io.jooby.internal.vertx.VertxEventLoopGroup; @@ -45,7 +45,7 @@ public class VertxServer extends NettyServer { * * @param vertx Use the provided vertx instance. */ - public VertxServer(@NonNull Vertx vertx) { + public VertxServer(Vertx vertx) { this.vertx = vertx; } @@ -54,7 +54,7 @@ public VertxServer(@NonNull Vertx vertx) { * * @param options Use the provided vertx options. */ - public VertxServer(@NonNull VertxOptions options) { + public VertxServer(VertxOptions options) { this(Vertx.vertx(options)); } @@ -65,7 +65,7 @@ public VertxServer(@NonNull VertxOptions options) { public VertxServer() {} @Override - public Server init(@NonNull Jooby application) { + public Server init(Jooby application) { if (this.vertx == null) { var nThreads = getOptions().getIoThreads(); var options = diff --git a/modules/jooby-vertx/src/main/java/io/jooby/vertx/package-info.java b/modules/jooby-vertx/src/main/java/io/jooby/vertx/package-info.java index 885d35189d..38881befd2 100644 --- a/modules/jooby-vertx/src/main/java/io/jooby/vertx/package-info.java +++ b/modules/jooby-vertx/src/main/java/io/jooby/vertx/package-info.java @@ -1,3 +1,3 @@ /** Vertx Web Server. */ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.vertx; diff --git a/modules/jooby-vertx/src/main/java/module-info.java b/modules/jooby-vertx/src/main/java/module-info.java index 18a87c5a89..8f3e38dd61 100644 --- a/modules/jooby-vertx/src/main/java/module-info.java +++ b/modules/jooby-vertx/src/main/java/module-info.java @@ -6,11 +6,12 @@ exports io.jooby.vertx; requires io.jooby; + requires typesafe.config; + requires static org.jspecify; requires io.jooby.netty; requires io.vertx.core; requires io.netty.transport; requires org.slf4j; - requires static com.github.spotbugs.annotations; requires jakarta.inject; requires io.netty.common; diff --git a/modules/jooby-whoops/src/main/java/io/jooby/internal/whoops/Whoops.java b/modules/jooby-whoops/src/main/java/io/jooby/internal/whoops/Whoops.java index d3c78479a0..b667f2cf3d 100644 --- a/modules/jooby-whoops/src/main/java/io/jooby/internal/whoops/Whoops.java +++ b/modules/jooby-whoops/src/main/java/io/jooby/internal/whoops/Whoops.java @@ -23,7 +23,6 @@ import org.slf4j.Logger; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.ErrorHandler; import io.jooby.MediaType; @@ -86,8 +85,8 @@ public Whoops(Path basedir, Logger log) { this.log = log; } - @NonNull @Override - public void apply(@NonNull Context ctx, @NonNull Throwable cause, @NonNull StatusCode code) { + @Override + public void apply(Context ctx, Throwable cause, StatusCode code) { if (ctx.accept(MediaType.html)) { render(ctx, cause, code) .handle( diff --git a/modules/jooby-whoops/src/main/java/io/jooby/whoops/WhoopsModule.java b/modules/jooby-whoops/src/main/java/io/jooby/whoops/WhoopsModule.java index 24800e138b..e45159b549 100644 --- a/modules/jooby-whoops/src/main/java/io/jooby/whoops/WhoopsModule.java +++ b/modules/jooby-whoops/src/main/java/io/jooby/whoops/WhoopsModule.java @@ -9,7 +9,6 @@ import java.nio.file.Paths; import com.typesafe.config.Config; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Extension; import io.jooby.Jooby; import io.jooby.internal.whoops.Whoops; @@ -43,7 +42,7 @@ public class WhoopsModule implements Extension { * * @param basedir Base dir. */ - public WhoopsModule(@NonNull Path basedir) { + public WhoopsModule(Path basedir) { this.basedir = basedir; } @@ -53,7 +52,7 @@ public WhoopsModule() { } @Override - public void install(@NonNull Jooby application) { + public void install(Jooby application) { Config config = application.getConfig(); boolean enabled = diff --git a/modules/jooby-whoops/src/main/java/io/jooby/whoops/package-info.java b/modules/jooby-whoops/src/main/java/io/jooby/whoops/package-info.java index c8ba2cc617..20ac44ec15 100644 --- a/modules/jooby-whoops/src/main/java/io/jooby/whoops/package-info.java +++ b/modules/jooby-whoops/src/main/java/io/jooby/whoops/package-info.java @@ -1,2 +1,2 @@ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.whoops; diff --git a/modules/jooby-yasson/src/main/java/io/jooby/yasson/YassonModule.java b/modules/jooby-yasson/src/main/java/io/jooby/yasson/YassonModule.java index b136a16a9f..c97968ae27 100644 --- a/modules/jooby-yasson/src/main/java/io/jooby/yasson/YassonModule.java +++ b/modules/jooby-yasson/src/main/java/io/jooby/yasson/YassonModule.java @@ -10,8 +10,8 @@ import java.io.InputStreamReader; import java.lang.reflect.Type; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.Body; import io.jooby.Context; import io.jooby.Extension; @@ -78,12 +78,12 @@ public YassonModule() { * * @param jsonb Jsonb to use. */ - public YassonModule(@NonNull final Jsonb jsonb) { + public YassonModule(final Jsonb jsonb) { this.jsonb = jsonb; } @Override - public void install(@NonNull final Jooby application) throws Exception { + public void install(final Jooby application) throws Exception { application.decoder(MediaType.json, this); application.encoder(MediaType.json, this); @@ -91,8 +91,8 @@ public void install(@NonNull final Jooby application) throws Exception { services.put(Jsonb.class, jsonb); } - @NonNull @Override - public Object decode(@NonNull final Context ctx, @NonNull final Type type) throws IOException { + @Override + public Object decode(final Context ctx, final Type type) throws IOException { Body body = ctx.body(); try (InputStream stream = body.stream()) { @@ -101,7 +101,7 @@ public Object decode(@NonNull final Context ctx, @NonNull final Type type) throw } @Nullable @Override - public Output encode(@NonNull final Context ctx, @NonNull final Object value) { + public Output encode(final Context ctx, final Object value) { ctx.setDefaultResponseType(MediaType.json); var factory = ctx.getOutputFactory(); var output = factory.allocate(); diff --git a/modules/jooby-yasson/src/main/java/io/jooby/yasson/package-info.java b/modules/jooby-yasson/src/main/java/io/jooby/yasson/package-info.java index 2e7c0b91ac..d5cfc250ad 100644 --- a/modules/jooby-yasson/src/main/java/io/jooby/yasson/package-info.java +++ b/modules/jooby-yasson/src/main/java/io/jooby/yasson/package-info.java @@ -1,2 +1,2 @@ -@edu.umd.cs.findbugs.annotations.ReturnValuesAreNonnullByDefault +@org.jspecify.annotations.NullMarked package io.jooby.yasson; diff --git a/modules/jooby-yasson/src/main/java/module-info.java b/modules/jooby-yasson/src/main/java/module-info.java index 4e1ef78e91..4ccbda62ea 100644 --- a/modules/jooby-yasson/src/main/java/module-info.java +++ b/modules/jooby-yasson/src/main/java/module-info.java @@ -9,7 +9,7 @@ exports io.jooby.yasson; requires io.jooby; - requires static com.github.spotbugs.annotations; + requires static org.jspecify; requires typesafe.config; requires jakarta.json.bind; } diff --git a/pom.xml b/pom.xml index 0c461391d6..52f5476ffe 100644 --- a/pom.xml +++ b/pom.xml @@ -129,7 +129,6 @@ 2.0.1.MR 3.1.1 4.0.0 - 4.9.8 5.3.2 @@ -948,9 +947,9 @@ - com.github.spotbugs - spotbugs-annotations - ${spotbugs-annotations.version} + org.jspecify + jspecify + 1.0.0 diff --git a/tests/src/test/java/io/jooby/i1786/Controller1786.java b/tests/src/test/java/io/jooby/i1786/Controller1786.java index d9e8f798a1..d9fcbfeed2 100644 --- a/tests/src/test/java/io/jooby/i1786/Controller1786.java +++ b/tests/src/test/java/io/jooby/i1786/Controller1786.java @@ -7,7 +7,8 @@ import java.util.UUID; -import edu.umd.cs.findbugs.annotations.NonNull; +import org.jspecify.annotations.NonNull; + import io.jooby.annotation.GET; import io.jooby.annotation.QueryParam; diff --git a/tests/src/test/java/io/jooby/i2325/VC2325.java b/tests/src/test/java/io/jooby/i2325/VC2325.java index d493252de4..eecdc51683 100644 --- a/tests/src/test/java/io/jooby/i2325/VC2325.java +++ b/tests/src/test/java/io/jooby/i2325/VC2325.java @@ -7,7 +7,6 @@ import java.lang.reflect.Type; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.QueryString; import io.jooby.value.ConversionHint; import io.jooby.value.Converter; @@ -15,7 +14,7 @@ public class VC2325 implements Converter { @Override - public Object convert(@NonNull Type type, @NonNull Value value, @NonNull ConversionHint hint) { + public Object convert(Type type, Value value, ConversionHint hint) { var v = value instanceof QueryString query ? query.get("value").value() : value.value(); return new MyID2325(v); } diff --git a/tests/src/test/java/io/jooby/i2352/C2352.java b/tests/src/test/java/io/jooby/i2352/C2352.java index 96cd62a59e..868f4780b8 100644 --- a/tests/src/test/java/io/jooby/i2352/C2352.java +++ b/tests/src/test/java/io/jooby/i2352/C2352.java @@ -5,8 +5,9 @@ */ package io.jooby.i2352; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.Nullable; + import io.jooby.annotation.FormParam; import io.jooby.annotation.POST; diff --git a/tests/src/test/java/io/jooby/i2613/Issue2613.java b/tests/src/test/java/io/jooby/i2613/Issue2613.java index a3bb38b072..276596f6c9 100644 --- a/tests/src/test/java/io/jooby/i2613/Issue2613.java +++ b/tests/src/test/java/io/jooby/i2613/Issue2613.java @@ -10,7 +10,6 @@ import java.nio.charset.StandardCharsets; import com.google.common.collect.ImmutableMap; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.Context; import io.jooby.MediaType; import io.jooby.MessageEncoder; @@ -30,7 +29,7 @@ public String html() { public static class ThemeResultEncoder implements MessageEncoder { @Override - public Output encode(@NonNull Context ctx, @NonNull Object value) throws Exception { + public Output encode(Context ctx, Object value) throws Exception { if (value instanceof ThemeResult) { ctx.setDefaultResponseType(MediaType.html); return ctx.getOutputFactory() diff --git a/tests/src/test/java/io/jooby/i3813/Issue3813.java b/tests/src/test/java/io/jooby/i3813/Issue3813.java index 45196c2547..91e6fac690 100644 --- a/tests/src/test/java/io/jooby/i3813/Issue3813.java +++ b/tests/src/test/java/io/jooby/i3813/Issue3813.java @@ -5,8 +5,8 @@ */ package io.jooby.i3813; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.junit.ServerTest; import io.jooby.junit.ServerTestRunner; import okhttp3.Response; @@ -36,35 +36,31 @@ public void shouldSendPingMessage(ServerTestRunner runner) { "/3813", new WebSocketListener() { @Override - public void onOpen(@NonNull WebSocket ws, @NonNull Response response) {} + public void onOpen(WebSocket ws, Response response) {} @Override - public void onMessage(@NonNull WebSocket webSocket, @NonNull String text) { + public void onMessage(WebSocket webSocket, String text) { super.onMessage(webSocket, text); } @Override - public void onMessage(@NonNull WebSocket webSocket, @NonNull ByteString bytes) { + public void onMessage(WebSocket webSocket, ByteString bytes) { super.onMessage(webSocket, bytes); } @Override - public void onClosing( - @NonNull WebSocket webSocket, int code, @NonNull String reason) { + public void onClosing(WebSocket webSocket, int code, String reason) { super.onClosing(webSocket, code, reason); } @Override - public void onClosed( - @NonNull WebSocket webSocket, int code, @NonNull String reason) { + public void onClosed(WebSocket webSocket, int code, String reason) { super.onClosed(webSocket, code, reason); } @Override public void onFailure( - @NonNull WebSocket webSocket, - @NonNull Throwable t, - @Nullable Response response) { + WebSocket webSocket, Throwable t, @Nullable Response response) { super.onFailure(webSocket, t, response); } }); diff --git a/tests/src/test/java/io/jooby/i3814/Issue3814.java b/tests/src/test/java/io/jooby/i3814/Issue3814.java index 48feb8583a..5c50eb05a4 100644 --- a/tests/src/test/java/io/jooby/i3814/Issue3814.java +++ b/tests/src/test/java/io/jooby/i3814/Issue3814.java @@ -7,8 +7,8 @@ import java.util.concurrent.CountDownLatch; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.junit.ServerTest; import io.jooby.junit.ServerTestRunner; import okhttp3.Response; @@ -40,39 +40,35 @@ public void shouldJettyWebSocketWorks(ServerTestRunner runner) { "/3814", new WebSocketListener() { @Override - public void onOpen(@NonNull WebSocket ws, @NonNull Response response) { + public void onOpen(WebSocket ws, Response response) { for (int i = 0; i < messageCount; i++) { ws.send(">" + i); } } @Override - public void onMessage(@NonNull WebSocket webSocket, @NonNull String text) { + public void onMessage(WebSocket webSocket, String text) { super.onMessage(webSocket, text); } @Override - public void onMessage(@NonNull WebSocket webSocket, @NonNull ByteString bytes) { + public void onMessage(WebSocket webSocket, ByteString bytes) { super.onMessage(webSocket, bytes); } @Override - public void onClosing( - @NonNull WebSocket webSocket, int code, @NonNull String reason) { + public void onClosing(WebSocket webSocket, int code, String reason) { super.onClosing(webSocket, code, reason); } @Override - public void onClosed( - @NonNull WebSocket webSocket, int code, @NonNull String reason) { + public void onClosed(WebSocket webSocket, int code, String reason) { super.onClosed(webSocket, code, reason); } @Override public void onFailure( - @NonNull WebSocket webSocket, - @NonNull Throwable t, - @Nullable Response response) { + WebSocket webSocket, Throwable t, @Nullable Response response) { super.onFailure(webSocket, t, response); } }); diff --git a/tests/src/test/java/io/jooby/i3863/MovieServiceTs.java b/tests/src/test/java/io/jooby/i3863/MovieServiceTs.java index 964a269ac5..6347de1856 100644 --- a/tests/src/test/java/io/jooby/i3863/MovieServiceTs.java +++ b/tests/src/test/java/io/jooby/i3863/MovieServiceTs.java @@ -9,7 +9,6 @@ import java.util.Map; import java.util.stream.Collectors; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.annotation.*; import io.jooby.annotation.trpc.Trpc; import io.jooby.exception.NotFoundException; @@ -56,7 +55,7 @@ public String ping() { /** Procedure: movies.getById Single primitive argument */ @Trpc @GET("/{id}") - public @NonNull Movie getById(@PathParam int id) { + public Movie getById(@PathParam int id) { return database.stream() .filter(m -> m.id() == id) .findFirst() diff --git a/tests/src/test/java/io/jooby/i3868/MovieServiceRpc.java b/tests/src/test/java/io/jooby/i3868/MovieServiceRpc.java index f61abf9690..c6f4f5e786 100644 --- a/tests/src/test/java/io/jooby/i3868/MovieServiceRpc.java +++ b/tests/src/test/java/io/jooby/i3868/MovieServiceRpc.java @@ -7,7 +7,6 @@ import java.util.List; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.annotation.*; import io.jooby.annotation.jsonrpc.JsonRpc; import io.jooby.exception.NotFoundException; @@ -27,7 +26,7 @@ public Movie create(Movie movie) { return movie; } - public @NonNull Movie getById(int id) { + public Movie getById(int id) { return database.stream() .filter(m -> m.id() == id) .findFirst() diff --git a/tests/src/test/java/io/jooby/junit/ServerExtensionImpl.java b/tests/src/test/java/io/jooby/junit/ServerExtensionImpl.java index c253815f81..6c5a28f628 100644 --- a/tests/src/test/java/io/jooby/junit/ServerExtensionImpl.java +++ b/tests/src/test/java/io/jooby/junit/ServerExtensionImpl.java @@ -20,7 +20,6 @@ import org.junit.jupiter.api.extension.TestTemplateInvocationContext; import org.junit.jupiter.api.extension.TestTemplateInvocationContextProvider; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.ExecutionMode; import io.jooby.jetty.JettyServer; import io.jooby.netty.NettyServer; @@ -69,7 +68,7 @@ public boolean supportsTestTemplate(ExtensionContext context) { } @Override - public @NonNull Stream provideTestTemplateInvocationContexts( + public Stream provideTestTemplateInvocationContexts( ExtensionContext context) { ServerTest serverTest = context.getRequiredTestMethod().getAnnotation(ServerTest.class); Class[] servers = serverTest.server(); diff --git a/tests/src/test/java/io/jooby/test/FeaturedTest.java b/tests/src/test/java/io/jooby/test/FeaturedTest.java index 5ef043f2fa..89a85fec0e 100644 --- a/tests/src/test/java/io/jooby/test/FeaturedTest.java +++ b/tests/src/test/java/io/jooby/test/FeaturedTest.java @@ -54,7 +54,6 @@ import org.junit.jupiter.api.DisplayName; import com.google.common.base.Splitter; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.*; import io.jooby.handlebars.HandlebarsModule; import io.jooby.handler.AccessLogHandler; @@ -1042,13 +1041,11 @@ public String toString() { app -> { app.encoder( io.jooby.MediaType.json, - (@NonNull Context ctx, @NonNull Object value) -> - ctx.getOutputFactory().wrap("{" + value + "}")); + (Context ctx, Object value) -> ctx.getOutputFactory().wrap("{" + value + "}")); app.encoder( io.jooby.MediaType.xml, - (@NonNull Context ctx, @NonNull Object value) -> - ctx.getOutputFactory().wrap("<" + value + ">")); + (Context ctx, Object value) -> ctx.getOutputFactory().wrap("<" + value + ">")); app.get( "/defaults", diff --git a/tests/src/test/java/io/jooby/test/MvcTest.java b/tests/src/test/java/io/jooby/test/MvcTest.java index a58c39eefc..051ce1b380 100644 --- a/tests/src/test/java/io/jooby/test/MvcTest.java +++ b/tests/src/test/java/io/jooby/test/MvcTest.java @@ -13,7 +13,6 @@ import org.junit.jupiter.api.Assertions; -import edu.umd.cs.findbugs.annotations.NonNull; import examples.*; import io.jooby.Context; import io.jooby.ExecutionMode; @@ -123,22 +122,21 @@ public void producesAndConsumes(ServerTestRunner runner) { app -> { app.encoder( io.jooby.MediaType.json, - (@NonNull Context ctx, @NonNull Object value) -> + (Context ctx, Object value) -> ctx.getOutputFactory() .wrap(("{" + value + "}").getBytes(StandardCharsets.UTF_8))); app.encoder( io.jooby.MediaType.xml, - (@NonNull Context ctx, @NonNull Object value) -> + (Context ctx, Object value) -> ctx.getOutputFactory() .wrap(("<" + value + ">").getBytes(StandardCharsets.UTF_8))); app.decoder( io.jooby.MediaType.json, new MessageDecoder() { - @NonNull @Override - public Message decode(@NonNull Context ctx, @NonNull Type type) - throws Exception { + @Override + public Message decode(Context ctx, Type type) throws Exception { return new Message("{" + ctx.body().value("") + "}"); } }); @@ -146,9 +144,8 @@ public Message decode(@NonNull Context ctx, @NonNull Type type) app.decoder( xml, new MessageDecoder() { - @NonNull @Override - public Message decode(@NonNull Context ctx, @NonNull Type type) - throws Exception { + @Override + public Message decode(Context ctx, Type type) throws Exception { return new Message("<" + ctx.body().value("") + ">"); } }); diff --git a/tests/src/test/java/io/jooby/test/MyValueBeanConverter.java b/tests/src/test/java/io/jooby/test/MyValueBeanConverter.java index 667ec19bc0..387e2cdc25 100644 --- a/tests/src/test/java/io/jooby/test/MyValueBeanConverter.java +++ b/tests/src/test/java/io/jooby/test/MyValueBeanConverter.java @@ -7,7 +7,6 @@ import java.lang.reflect.Type; -import edu.umd.cs.findbugs.annotations.NonNull; import io.jooby.value.ConversionHint; import io.jooby.value.Converter; import io.jooby.value.Value; @@ -15,7 +14,7 @@ public class MyValueBeanConverter implements Converter { @Override - public Object convert(@NonNull Type type, @NonNull Value value, @NonNull ConversionHint hint) { + public Object convert(Type type, Value value, ConversionHint hint) { MyValue result = new MyValue(); result.setString(value.get("string").value()); return result; diff --git a/tests/src/test/java/io/jooby/test/WebClient.java b/tests/src/test/java/io/jooby/test/WebClient.java index 8ed789c3c9..2993ab4c28 100644 --- a/tests/src/test/java/io/jooby/test/WebClient.java +++ b/tests/src/test/java/io/jooby/test/WebClient.java @@ -26,8 +26,8 @@ import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; -import edu.umd.cs.findbugs.annotations.NonNull; -import edu.umd.cs.findbugs.annotations.Nullable; +import org.jspecify.annotations.Nullable; + import io.jooby.Server; import io.jooby.ServerSentMessage; import io.jooby.SneakyThrows; @@ -55,18 +55,17 @@ public SyncWebSocketListener(String testName) { } @Override - public void onOpen(@NonNull WebSocket webSocket, @NonNull Response response) { + public void onOpen(WebSocket webSocket, Response response) { opened.countDown(); } @Override - public void onClosed(@NonNull WebSocket webSocket, int code, @NonNull String reason) { + public void onClosed(WebSocket webSocket, int code, String reason) { closed.set(true); } @Override - public void onFailure( - @NonNull WebSocket webSocket, @NonNull Throwable e, @Nullable Response response) { + public void onFailure(WebSocket webSocket, Throwable e, @Nullable Response response) { if (!Server.connectionLost(e)) { System.err.println("Unexpected web socket error: " + testName); e.printStackTrace(); @@ -74,12 +73,12 @@ public void onFailure( } @Override - public void onMessage(@NonNull WebSocket webSocket, @NonNull String text) { + public void onMessage(WebSocket webSocket, String text) { messages.offer(text); } @Override - public void onMessage(@NonNull WebSocket webSocket, @NonNull ByteString bytes) { + public void onMessage(WebSocket webSocket, ByteString bytes) { messages.offer(new String(bytes.toByteArray(), StandardCharsets.UTF_8)); } @@ -92,7 +91,7 @@ public String lastMessage() { } @Override - public void onClosing(@NonNull WebSocket webSocket, int code, @NonNull String reason) { + public void onClosing(WebSocket webSocket, int code, String reason) { super.onClosing(webSocket, code, reason); } } @@ -272,16 +271,16 @@ public ServerSentMessageIterator sse(String path) { req.build(), new EventSourceListener() { @Override - public void onClosed(@NonNull EventSource eventSource) { + public void onClosed(EventSource eventSource) { eventSource.cancel(); } @Override public void onEvent( - @NonNull EventSource eventSource, + EventSource eventSource, @Nullable String id, @Nullable String type, - @NonNull String data) { + String data) { // retry is not part of public API ServerSentMessage message = new ServerSentMessage(data).setId(id).setEvent(type); messages.offer(message); @@ -289,14 +288,12 @@ public void onEvent( @Override public void onFailure( - @NonNull EventSource eventSource, - @Nullable Throwable t, - @Nullable Response response) { + EventSource eventSource, @Nullable Throwable t, @Nullable Response response) { super.onFailure(eventSource, t, response); } @Override - public void onOpen(@NonNull EventSource eventSource, @NonNull Response response) { + public void onOpen(EventSource eventSource, Response response) { super.onOpen(eventSource, response); } });