From c12de8f639044eac21918340e8acf6e81cd1e35d Mon Sep 17 00:00:00 2001 From: Andrey Belonogov Date: Sun, 27 Sep 2026 16:34:41 -0700 Subject: [PATCH] fix: Don't use computeIfAbsent in PerContextEventSummarizer Android below API 24 has neither Map.computeIfAbsent nor java.util.function. D8 turns the EventSummarizer::new reference into a synthetic Function, so the first evaluation in a client-side SDK on API 21-23 throws NoClassDefFoundError. Co-authored-by: Cursor --- .../sdk/internal/events/PerContextEventSummarizer.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/shared/internal/src/main/java/com/launchdarkly/sdk/internal/events/PerContextEventSummarizer.java b/lib/shared/internal/src/main/java/com/launchdarkly/sdk/internal/events/PerContextEventSummarizer.java index d621378c..35e34348 100644 --- a/lib/shared/internal/src/main/java/com/launchdarkly/sdk/internal/events/PerContextEventSummarizer.java +++ b/lib/shared/internal/src/main/java/com/launchdarkly/sdk/internal/events/PerContextEventSummarizer.java @@ -47,8 +47,12 @@ public void summarizeEvent( LDValue defaultValue, LDContext context ) { - // Get or create summarizer for this context - EventSummarizer summarizer = summarizersByContext.computeIfAbsent(context, EventSummarizer::new); + // Not computeIfAbsent: Android below API 24 has neither it nor java.util.function. + EventSummarizer summarizer = summarizersByContext.get(context); + if (summarizer == null) { + summarizer = new EventSummarizer(context); + summarizersByContext.put(context, summarizer); + } // Delegate to the per-context summarizer summarizer.summarizeEvent(timestamp, flagKey, flagVersion, variation, value, defaultValue, context);