From 2c3afd61f046eb2ec67ecbf9e3017b3b53d91cc7 Mon Sep 17 00:00:00 2001 From: Serge Rider Date: Thu, 28 May 2026 14:10:27 +0200 Subject: [PATCH] dbeaver/pro#9392 Nullability annos. DEad code delete. --- .../service/session/CBSessionManager.java | 13 +++++++++---- .../server/WebAppSessionManager.java | 16 ++++++++++++---- .../io/cloudbeaver/server/WebApplication.java | 4 +++- .../service/WebServiceBindingBase.java | 17 ++++++++++++----- 4 files changed, 36 insertions(+), 14 deletions(-) diff --git a/server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/service/session/CBSessionManager.java b/server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/service/session/CBSessionManager.java index 00bb0c50be..24d47005f8 100644 --- a/server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/service/session/CBSessionManager.java +++ b/server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/service/session/CBSessionManager.java @@ -1,6 +1,6 @@ /* * DBeaver - Universal Database Manager - * Copyright (C) 2010-2025 DBeaver Corp and others + * Copyright (C) 2010-2026 DBeaver Corp and others * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -60,6 +60,7 @@ public class CBSessionManager implements WebAppSessionManager { /** * Closes Web Session, associated to HttpSession from {@code request} */ + @Nullable @Override public BaseWebSession closeSession(@NotNull HttpServletRequest request) { HttpSession session = request.getSession(); @@ -69,11 +70,13 @@ public class CBSessionManager implements WebAppSessionManager { return null; } + @Nullable @Override public BaseWebSession closeSession(@NotNull String sessionId) { return closeSession(sessionId, true); } + @Nullable @Override public BaseWebSession closeSession(@NotNull String sessionId, boolean sendSessionExpiredEvent) { BaseWebSession webSession; @@ -204,7 +207,7 @@ public class CBSessionManager implements WebAppSessionManager { * * @return WebSession object or null, if session expired or invalid */ - @Nullable + @NotNull public WebSession getOrRestoreWebSession(@NotNull WebHttpRequestInfo requestInfo) { final var sessionId = requestInfo.getId(); if (sessionId == null) { @@ -283,7 +286,7 @@ public class CBSessionManager implements WebAppSessionManager { @Override @Nullable - public WebSession findWebSession(HttpServletRequest request) { + public WebSession findWebSession(@NotNull HttpServletRequest request) { String sessionId = getSessionId(request); synchronized (sessionMap) { var session = sessionMap.get(sessionId); @@ -294,8 +297,9 @@ public class CBSessionManager implements WebAppSessionManager { } } + @Nullable @Override - public WebSession findWebSession(HttpServletRequest request, boolean errorOnNoFound) throws DBWebException { + public WebSession findWebSession(@NotNull HttpServletRequest request, boolean errorOnNoFound) throws DBWebException { WebSession webSession = findWebSession(request); if (webSession != null) { return webSession; @@ -323,6 +327,7 @@ public class CBSessionManager implements WebAppSessionManager { } } + @NotNull @Override public Collection getAllActiveSessions() { synchronized (sessionMap) { diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/WebAppSessionManager.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/WebAppSessionManager.java index f123cdfea0..6add757947 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/WebAppSessionManager.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/WebAppSessionManager.java @@ -24,16 +24,20 @@ import io.cloudbeaver.model.session.WebSession; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import org.jkiss.code.NotNull; +import org.jkiss.code.NotNullWhen; import org.jkiss.code.Nullable; import org.jkiss.dbeaver.DBException; import java.util.Collection; public interface WebAppSessionManager { + @Nullable BaseWebSession closeSession(@NotNull HttpServletRequest request); + @Nullable BaseWebSession closeSession(@NotNull String sessionId); + @Nullable BaseWebSession closeSession(@NotNull String sessionId, boolean sendSessionExpiredEvent); @NotNull @@ -53,21 +57,25 @@ public interface WebAppSessionManager { BaseWebSession getSession(@NotNull String sessionId); @Nullable - WebSession findWebSession(HttpServletRequest request); + WebSession findWebSession(@NotNull HttpServletRequest request); - WebSession findWebSession(HttpServletRequest request, boolean errorOnNoFound) throws DBWebException; + @NotNullWhen("errorOnNoFound") + WebSession findWebSession(@NotNull HttpServletRequest request, boolean errorOnNoFound) throws DBWebException; + @NotNull Collection getAllActiveSessions(); - WebSession getOrRestoreWebSession(WebHttpRequestInfo httpRequest); + @NotNull + WebSession getOrRestoreWebSession(@NotNull WebHttpRequestInfo httpRequest); + @NotNullWhen("!create") WebHeadlessSession getHeadlessSession( @Nullable String smAccessToken, @NotNull WebHttpRequestInfo requestInfo, boolean create ) throws DBException; - boolean touchSession(HttpServletRequest request, HttpServletResponse response) throws DBWebException; + boolean touchSession(@NotNull HttpServletRequest request, @NotNull HttpServletResponse response) throws DBWebException; default void expireIdleSessions() { diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/WebApplication.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/WebApplication.java index 69294d01eb..7fed9f6054 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/WebApplication.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/WebApplication.java @@ -1,6 +1,6 @@ /* * DBeaver - Universal Database Manager - * Copyright (C) 2010-2024 DBeaver Corp and others + * Copyright (C) 2010-2026 DBeaver Corp and others * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,6 +22,7 @@ import io.cloudbeaver.model.app.WebAppConfiguration; import io.cloudbeaver.model.app.WebServerConfiguration; import io.cloudbeaver.registry.WebDriverRegistry; import org.jkiss.code.NotNull; +import org.jkiss.code.Nullable; import java.net.InetAddress; import java.util.List; @@ -54,6 +55,7 @@ public interface WebApplication extends ServletApplication { boolean isLicenseValid(); + @Nullable String getLicenseStatus(); @NotNull diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/WebServiceBindingBase.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/WebServiceBindingBase.java index 3de3816361..b4da6019fd 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/WebServiceBindingBase.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/WebServiceBindingBase.java @@ -77,6 +77,7 @@ public abstract class WebServiceBindingBase impleme /** * Creates proxy for permission checks and other general API calls validation/logging. */ + @NotNull protected API_TYPE getService(DataFetchingEnvironment env) { Object proxyImpl = Proxy.newProxyInstance(getClass().getClassLoader(), new Class[]{apiInterface}, new ServiceInvocationHandler(serviceImpl, env)); return apiInterface.cast(proxyImpl); @@ -99,20 +100,23 @@ public abstract class WebServiceBindingBase impleme } } - protected static HttpServletResponse getServletResponse(DataFetchingEnvironment env) { + @NotNull + protected static HttpServletResponse getServletResponse(@NotNull DataFetchingEnvironment env) { return GraphQLEndpoint.getServletResponse(env); } - protected static DBWBindingContext getBindingContext(DataFetchingEnvironment env) { + @NotNull + protected static DBWBindingContext getBindingContext(@NotNull DataFetchingEnvironment env) { return GraphQLEndpoint.getBindingContext(env); } - protected static WebSession getWebSession(DataFetchingEnvironment env) throws DBWebException { + @NotNull + protected static WebSession getWebSession(@NotNull DataFetchingEnvironment env) throws DBWebException { return getWebSession(env, true); } @Nullable - protected static WebSession getSessionFromContext(DataFetchingEnvironment env) { + protected static WebSession getSessionFromContext(@NotNull DataFetchingEnvironment env) { return env.getGraphQlContext().get(WebSession.class.getName()); } @@ -125,6 +129,7 @@ public abstract class WebServiceBindingBase impleme return webSession; } + @NotNull protected static WebSession getWebSession(@NotNull DataFetchingEnvironment env, boolean errorOnNotFound) throws DBWebException { if (env.getGraphQlContext().getBoolean(CloudbeaverCliConstants.CLI_MODE)) { return getSessionFromContextOrThrow(env); @@ -133,6 +138,7 @@ public abstract class WebServiceBindingBase impleme GraphQLEndpoint.getServletRequestOrThrow(env), getServletResponse(env), errorOnNotFound); } + @Nullable protected static String getProjectReference(@NotNull DataFetchingEnvironment env) { return env.getArgument("projectId"); } @@ -154,6 +160,7 @@ public abstract class WebServiceBindingBase impleme GraphQLEndpoint.getServletRequestOrThrow(env)); } + @NotNull public static WebSession findWebSession(@NotNull DataFetchingEnvironment env, boolean errorOnNotFound) throws DBWebException { return WebAppUtils.getWebApplication().getSessionManager().findWebSession( GraphQLEndpoint.getServletRequestOrThrow(env), errorOnNotFound); @@ -261,7 +268,7 @@ public abstract class WebServiceBindingBase impleme throw new DBException("Web session not instantiated"); } - String projectId = args[objectIdArgumentIndex] == null ? null : String.valueOf(args[objectIdArgumentIndex]); + String projectId = args[objectIdArgumentIndex] == null ? "" : String.valueOf(args[objectIdArgumentIndex]); // we should always get the project from the session, even if projectId is null - the active project // will be returned WebProjectImpl project = webSession.getProjectById(projectId);