diff --git a/src/main/java/dev/openfeature/sdk/HookSupport.java b/src/main/java/dev/openfeature/sdk/HookSupport.java index 821e4fd06..78a4f61b2 100644 --- a/src/main/java/dev/openfeature/sdk/HookSupport.java +++ b/src/main/java/dev/openfeature/sdk/HookSupport.java @@ -48,6 +48,8 @@ public void setHookContexts( } } + // S2789: Hook is user-implemented; defensive null check against non-conforming impls returning null. + @SuppressWarnings("java:S2789") public void executeBeforeHooks(HookSupportData data) { // These traverse backwards from normal. List> hooks = data.getHooks(); @@ -56,10 +58,8 @@ public void executeBeforeHooks(HookSupportData data) { var hook = hookContextPair.getKey(); var hookContext = hookContextPair.getValue(); - Optional returnedEvalContext = Optional.ofNullable( - hook.before(hookContext, data.getHints())) - .orElse(Optional.empty()); - if (returnedEvalContext.isPresent()) { + Optional returnedEvalContext = hook.before(hookContext, data.getHints()); + if (returnedEvalContext != null && returnedEvalContext.isPresent()) { var returnedContext = returnedEvalContext.get(); // yes, we want to check for reference equality here, this prevents recursive layered contexts if (returnedContext != hookContext.getCtx() && !returnedContext.isEmpty()) {