From 9b0655900adb71090dc1dca1cf0ff63c075565f0 Mon Sep 17 00:00:00 2001 From: NightTripperId Date: Thu, 23 May 2024 07:41:08 -0700 Subject: [PATCH 01/14] enhancement: adds caching to DiscordResponseParser --- .../jdi/core/api/DiscordResponseParser.java | 52 +++++++++++++++---- .../java/com/javadiscord/jdi/core/Guild.java | 2 +- 2 files changed, 43 insertions(+), 11 deletions(-) diff --git a/api/src/main/java/com/javadiscord/jdi/core/api/DiscordResponseParser.java b/api/src/main/java/com/javadiscord/jdi/core/api/DiscordResponseParser.java index 233f8829..0e9153a0 100644 --- a/api/src/main/java/com/javadiscord/jdi/core/api/DiscordResponseParser.java +++ b/api/src/main/java/com/javadiscord/jdi/core/api/DiscordResponseParser.java @@ -6,16 +6,20 @@ import com.javadiscord.jdi.internal.api.DiscordRequestDispatcher; import com.javadiscord.jdi.internal.api.DiscordResponse; import com.javadiscord.jdi.internal.api.DiscordResponseFuture; +import com.javadiscord.jdi.internal.cache.Cache; +import java.lang.reflect.Field; import java.util.List; import java.util.Map; public class DiscordResponseParser { private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); private final DiscordRequestDispatcher dispatcher; + private final Cache cache; - public DiscordResponseParser(DiscordRequestDispatcher dispatcher) { + public DiscordResponseParser(DiscordRequestDispatcher dispatcher, Cache cache) { this.dispatcher = dispatcher; + this.cache = cache; } public AsyncResponse> callAndParseList(Class clazz, DiscordRequest request) { @@ -27,6 +31,10 @@ public AsyncResponse> callAndParseList(Class clazz, DiscordReques try { List resultList = parseResponseFromList(clazz, response.body()); asyncResponse.setResult(resultList); + for (T result : resultList) { + cacheResult(result); + } + } catch (NoSuchFieldException e) { // ignore } catch (Exception e) { asyncResponse.setException(e); } @@ -38,6 +46,13 @@ public AsyncResponse> callAndParseList(Class clazz, DiscordReques return asyncResponse; } + private List parseResponseFromList(Class elementType, String response) + throws JsonProcessingException { + return OBJECT_MAPPER.readValue( + response, + OBJECT_MAPPER.getTypeFactory().constructCollectionType(List.class, elementType)); + } + public AsyncResponse> callAndParseMap(String key, DiscordRequest request) { AsyncResponse> asyncResponse = new AsyncResponse<>(); DiscordResponseFuture future = dispatcher.queue(request); @@ -47,7 +62,11 @@ public AsyncResponse> callAndParseMap(String key, DiscordRequest req try { List resultList = parseResponseFromMap(key, response.body()); asyncResponse.setResult(resultList); - } catch (Exception e) { + for(T result : resultList) { + cacheResult(result); + } + } catch (NoSuchFieldException e) { // ignore + } catch (Exception e){ asyncResponse.setException(e); } } else { @@ -58,13 +77,6 @@ public AsyncResponse> callAndParseMap(String key, DiscordRequest req return asyncResponse; } - private List parseResponseFromList(Class elementType, String response) - throws JsonProcessingException { - return OBJECT_MAPPER.readValue( - response, - OBJECT_MAPPER.getTypeFactory().constructCollectionType(List.class, elementType)); - } - private List parseResponseFromMap(String key, String response) throws JsonProcessingException { Map> res = @@ -90,7 +102,9 @@ private void success( try { T result = OBJECT_MAPPER.readValue(response.body(), type); asyncResponse.setResult(result); - } catch (JsonProcessingException e) { + cacheResult(result); + } catch(NoSuchFieldException e) { // ignore + } catch (JsonProcessingException | IllegalAccessException e) { asyncResponse.setException(e); } } else { @@ -98,6 +112,24 @@ private void success( } } + private void cacheResult(T result) throws IllegalAccessException, NoSuchFieldException { + Field guildIdField = result.getClass().getDeclaredField("guildId"); + Field idField = result.getClass().getDeclaredField("id"); + + long guildId = getLongFromField(guildIdField); + long id = getLongFromField(idField); + + cache.getCacheForGuild(guildId).add(id, result); + } + + private long getLongFromField(Field field) throws IllegalAccessException { + field.setAccessible(true); + if (field.getType() == String.class) { + return Long.parseLong((String) field.get(field.getName())); + } + return (long) field.get(field.getName()); + } + private boolean isSuccessfulResponse(DiscordResponse response) { return response.status() >= 200 && response.status() < 300; } diff --git a/core/src/main/java/com/javadiscord/jdi/core/Guild.java b/core/src/main/java/com/javadiscord/jdi/core/Guild.java index 1f88a5c9..e13c2d70 100644 --- a/core/src/main/java/com/javadiscord/jdi/core/Guild.java +++ b/core/src/main/java/com/javadiscord/jdi/core/Guild.java @@ -31,7 +31,7 @@ public Guild(com.javadiscord.jdi.core.models.guild.Guild guild, Cache cache, Dis long guildId = guild.id(); DiscordResponseParser discordResponseParser = - new DiscordResponseParser(discord.getDiscordRequestDispatcher()); + new DiscordResponseParser(discord.getDiscordRequestDispatcher(), cache); this.applicationRequest = new ApplicationRequest(discordResponseParser, guildId); this.applicationRoleConnectionMetaRequest = From 8bebf2de1379410dcc5969d30e271b70013a4e0e Mon Sep 17 00:00:00 2001 From: NightTripperId Date: Thu, 23 May 2024 08:40:36 -0700 Subject: [PATCH 02/14] enhancement: adds CacheHandler --- .../jdi/core/api/DiscordResponseParser.java | 39 ++++-------------- .../jdi/core/api/utils/CacheHandler.java | 41 +++++++++++++++++++ 2 files changed, 48 insertions(+), 32 deletions(-) create mode 100644 api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheHandler.java diff --git a/api/src/main/java/com/javadiscord/jdi/core/api/DiscordResponseParser.java b/api/src/main/java/com/javadiscord/jdi/core/api/DiscordResponseParser.java index 0e9153a0..87df7cf7 100644 --- a/api/src/main/java/com/javadiscord/jdi/core/api/DiscordResponseParser.java +++ b/api/src/main/java/com/javadiscord/jdi/core/api/DiscordResponseParser.java @@ -2,24 +2,24 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import com.javadiscord.jdi.core.api.utils.CacheHandler; import com.javadiscord.jdi.internal.api.DiscordRequest; import com.javadiscord.jdi.internal.api.DiscordRequestDispatcher; import com.javadiscord.jdi.internal.api.DiscordResponse; import com.javadiscord.jdi.internal.api.DiscordResponseFuture; import com.javadiscord.jdi.internal.cache.Cache; -import java.lang.reflect.Field; import java.util.List; import java.util.Map; public class DiscordResponseParser { private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); private final DiscordRequestDispatcher dispatcher; - private final Cache cache; + private final CacheHandler cacheHandler; public DiscordResponseParser(DiscordRequestDispatcher dispatcher, Cache cache) { this.dispatcher = dispatcher; - this.cache = cache; + this.cacheHandler = new CacheHandler(cache); } public AsyncResponse> callAndParseList(Class clazz, DiscordRequest request) { @@ -31,10 +31,7 @@ public AsyncResponse> callAndParseList(Class clazz, DiscordReques try { List resultList = parseResponseFromList(clazz, response.body()); asyncResponse.setResult(resultList); - for (T result : resultList) { - cacheResult(result); - } - } catch (NoSuchFieldException e) { // ignore + cacheHandler.cacheResult(resultList); } catch (Exception e) { asyncResponse.setException(e); } @@ -62,10 +59,7 @@ public AsyncResponse> callAndParseMap(String key, DiscordRequest req try { List resultList = parseResponseFromMap(key, response.body()); asyncResponse.setResult(resultList); - for(T result : resultList) { - cacheResult(result); - } - } catch (NoSuchFieldException e) { // ignore + cacheHandler.cacheResult(resultList); } catch (Exception e){ asyncResponse.setException(e); } @@ -102,9 +96,8 @@ private void success( try { T result = OBJECT_MAPPER.readValue(response.body(), type); asyncResponse.setResult(result); - cacheResult(result); - } catch(NoSuchFieldException e) { // ignore - } catch (JsonProcessingException | IllegalAccessException e) { + cacheHandler.cacheResult(result); + } catch (JsonProcessingException e) { asyncResponse.setException(e); } } else { @@ -112,24 +105,6 @@ private void success( } } - private void cacheResult(T result) throws IllegalAccessException, NoSuchFieldException { - Field guildIdField = result.getClass().getDeclaredField("guildId"); - Field idField = result.getClass().getDeclaredField("id"); - - long guildId = getLongFromField(guildIdField); - long id = getLongFromField(idField); - - cache.getCacheForGuild(guildId).add(id, result); - } - - private long getLongFromField(Field field) throws IllegalAccessException { - field.setAccessible(true); - if (field.getType() == String.class) { - return Long.parseLong((String) field.get(field.getName())); - } - return (long) field.get(field.getName()); - } - private boolean isSuccessfulResponse(DiscordResponse response) { return response.status() >= 200 && response.status() < 300; } diff --git a/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheHandler.java b/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheHandler.java new file mode 100644 index 00000000..90a9ec40 --- /dev/null +++ b/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheHandler.java @@ -0,0 +1,41 @@ +package com.javadiscord.jdi.core.api.utils; + +import com.javadiscord.jdi.internal.cache.Cache; + +import java.lang.reflect.Field; +import java.util.List; + +public class CacheHandler { + + private final Cache cache; + + public CacheHandler(Cache cache) { + this.cache = cache; + } + + public void cacheResult(T result) { + try { + Field guildIdField = result.getClass().getDeclaredField("guildId"); + Field idField = result.getClass().getDeclaredField("id"); + + long guildId = getLongFromField(guildIdField); + long id = getLongFromField(idField); + + cache.getCacheForGuild(guildId).add(id, result); + } catch (IllegalAccessException | NoSuchFieldException e) { + // NoSuchFieldException means we don't want to cache result + } + } + + public void cacheResult(List resultList) { + resultList.forEach(this::cacheResult); + } + + private long getLongFromField(Field field) throws IllegalAccessException { + field.setAccessible(true); + if (field.getType() == String.class) { + return Long.parseLong((String) field.get(field.getName())); + } + return (long) field.get(field.getName()); + } +} From 9d9d537b80cd9032b81c1d36f33fc58dffc1a688 Mon Sep 17 00:00:00 2001 From: NightTripperId Date: Thu, 23 May 2024 08:59:34 -0700 Subject: [PATCH 03/14] chore: updates naming --- .../jdi/core/api/DiscordResponseParser.java | 12 ++++++------ .../{CacheHandler.java => CacheUpdateHandler.java} | 11 ++++++----- 2 files changed, 12 insertions(+), 11 deletions(-) rename api/src/main/java/com/javadiscord/jdi/core/api/utils/{CacheHandler.java => CacheUpdateHandler.java} (77%) diff --git a/api/src/main/java/com/javadiscord/jdi/core/api/DiscordResponseParser.java b/api/src/main/java/com/javadiscord/jdi/core/api/DiscordResponseParser.java index 87df7cf7..90032eda 100644 --- a/api/src/main/java/com/javadiscord/jdi/core/api/DiscordResponseParser.java +++ b/api/src/main/java/com/javadiscord/jdi/core/api/DiscordResponseParser.java @@ -2,7 +2,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import com.javadiscord.jdi.core.api.utils.CacheHandler; +import com.javadiscord.jdi.core.api.utils.CacheUpdateHandler; import com.javadiscord.jdi.internal.api.DiscordRequest; import com.javadiscord.jdi.internal.api.DiscordRequestDispatcher; import com.javadiscord.jdi.internal.api.DiscordResponse; @@ -15,11 +15,11 @@ public class DiscordResponseParser { private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); private final DiscordRequestDispatcher dispatcher; - private final CacheHandler cacheHandler; + private final CacheUpdateHandler cacheUpdateHandler; public DiscordResponseParser(DiscordRequestDispatcher dispatcher, Cache cache) { this.dispatcher = dispatcher; - this.cacheHandler = new CacheHandler(cache); + this.cacheUpdateHandler = new CacheUpdateHandler(cache); } public AsyncResponse> callAndParseList(Class clazz, DiscordRequest request) { @@ -31,7 +31,7 @@ public AsyncResponse> callAndParseList(Class clazz, DiscordReques try { List resultList = parseResponseFromList(clazz, response.body()); asyncResponse.setResult(resultList); - cacheHandler.cacheResult(resultList); + cacheUpdateHandler.updateCache(resultList); } catch (Exception e) { asyncResponse.setException(e); } @@ -59,7 +59,7 @@ public AsyncResponse> callAndParseMap(String key, DiscordRequest req try { List resultList = parseResponseFromMap(key, response.body()); asyncResponse.setResult(resultList); - cacheHandler.cacheResult(resultList); + cacheUpdateHandler.updateCache(resultList); } catch (Exception e){ asyncResponse.setException(e); } @@ -96,7 +96,7 @@ private void success( try { T result = OBJECT_MAPPER.readValue(response.body(), type); asyncResponse.setResult(result); - cacheHandler.cacheResult(result); + cacheUpdateHandler.updateCache(result); } catch (JsonProcessingException e) { asyncResponse.setException(e); } diff --git a/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheHandler.java b/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdateHandler.java similarity index 77% rename from api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheHandler.java rename to api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdateHandler.java index 90a9ec40..e948b6d9 100644 --- a/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheHandler.java +++ b/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdateHandler.java @@ -5,15 +5,15 @@ import java.lang.reflect.Field; import java.util.List; -public class CacheHandler { +public class CacheUpdateHandler { private final Cache cache; - public CacheHandler(Cache cache) { + public CacheUpdateHandler(Cache cache) { this.cache = cache; } - public void cacheResult(T result) { + public void updateCache(T result) { try { Field guildIdField = result.getClass().getDeclaredField("guildId"); Field idField = result.getClass().getDeclaredField("id"); @@ -24,11 +24,12 @@ public void cacheResult(T result) { cache.getCacheForGuild(guildId).add(id, result); } catch (IllegalAccessException | NoSuchFieldException e) { // NoSuchFieldException means we don't want to cache result + // Other exceptions should be caught in payload validation layer } } - public void cacheResult(List resultList) { - resultList.forEach(this::cacheResult); + public void updateCache(List resultList) { + resultList.forEach(this::updateCache); } private long getLongFromField(Field field) throws IllegalAccessException { From 63cf503e2d888cb3b389ba9614dee56c2271489d Mon Sep 17 00:00:00 2001 From: NightTripperId Date: Thu, 23 May 2024 18:30:52 -0700 Subject: [PATCH 04/14] chore: updates comment --- .../com/javadiscord/jdi/core/api/utils/CacheUpdateHandler.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdateHandler.java b/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdateHandler.java index e948b6d9..f14acb48 100644 --- a/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdateHandler.java +++ b/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdateHandler.java @@ -23,8 +23,7 @@ public void updateCache(T result) { cache.getCacheForGuild(guildId).add(id, result); } catch (IllegalAccessException | NoSuchFieldException e) { - // NoSuchFieldException means we don't want to cache result - // Other exceptions should be caught in payload validation layer + // NoSuchFieldException: don't cache result } } From bae9b841ec371a7a5245686b6e773bd4b4a17fc3 Mon Sep 17 00:00:00 2001 From: NightTripperId Date: Sat, 25 May 2024 08:25:31 -0700 Subject: [PATCH 05/14] chore: adds null check to CacheUpdater --- .../jdi/core/api/DiscordResponseParser.java | 37 +++---------------- ...heUpdateHandler.java => CacheUpdater.java} | 7 +++- 2 files changed, 10 insertions(+), 34 deletions(-) rename api/src/main/java/com/javadiscord/jdi/core/api/utils/{CacheUpdateHandler.java => CacheUpdater.java} (90%) diff --git a/api/src/main/java/com/javadiscord/jdi/core/api/DiscordResponseParser.java b/api/src/main/java/com/javadiscord/jdi/core/api/DiscordResponseParser.java index acd6df82..f9552d64 100644 --- a/api/src/main/java/com/javadiscord/jdi/core/api/DiscordResponseParser.java +++ b/api/src/main/java/com/javadiscord/jdi/core/api/DiscordResponseParser.java @@ -3,9 +3,7 @@ import java.util.List; import java.util.Map; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.javadiscord.jdi.core.api.utils.CacheUpdateHandler; +import com.javadiscord.jdi.core.api.utils.CacheUpdater; import com.javadiscord.jdi.internal.api.DiscordRequest; import com.javadiscord.jdi.internal.api.DiscordRequestDispatcher; import com.javadiscord.jdi.internal.api.DiscordResponse; @@ -18,11 +16,11 @@ public class DiscordResponseParser { private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); private final DiscordRequestDispatcher dispatcher; - private final CacheUpdateHandler cacheUpdateHandler; + private final CacheUpdater cacheUpdater; public DiscordResponseParser(DiscordRequestDispatcher dispatcher, Cache cache) { this.dispatcher = dispatcher; - this.cacheUpdateHandler = new CacheUpdateHandler(cache); + this.cacheUpdater = new CacheUpdater(cache); } public AsyncResponse> callAndParseList(Class clazz, DiscordRequest request) { @@ -34,6 +32,7 @@ public AsyncResponse> callAndParseList(Class clazz, DiscordReques try { List resultList = parseResponseFromList(clazz, response.body()); asyncResponse.setResult(resultList); + cacheUpdater.updateCache(resultList); } catch (Exception e) { asyncResponse.setException(e); } @@ -42,19 +41,6 @@ public AsyncResponse> callAndParseList(Class clazz, DiscordReques } } ); - response -> { - if (isSuccessfulResponse(response)) { - try { - List resultList = parseResponseFromList(clazz, response.body()); - asyncResponse.setResult(resultList); - cacheUpdateHandler.updateCache(resultList); - } catch (Exception e) { - asyncResponse.setException(e); - } - } else { - asyncResponse.setException(errorResponseException(response)); - } - }); future.onError(asyncResponse::setException); return asyncResponse; } @@ -76,19 +62,6 @@ public AsyncResponse> callAndParseMap(String key, DiscordRequest req } } ); - response -> { - if (isSuccessfulResponse(response)) { - try { - List resultList = parseResponseFromMap(key, response.body()); - asyncResponse.setResult(resultList); - cacheUpdateHandler.updateCache(resultList); - } catch (Exception e){ - asyncResponse.setException(e); - } - } else { - asyncResponse.setException(errorResponseException(response)); - } - }); future.onError(asyncResponse::setException); return asyncResponse; } @@ -137,7 +110,7 @@ private void success( result = OBJECT_MAPPER.readValue(response.body(), type); } asyncResponse.setResult(result); - cacheUpdateHandler.updateCache(result); + cacheUpdater.updateCache(result); } catch (JsonProcessingException e) { asyncResponse.setException(e); } diff --git a/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdateHandler.java b/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java similarity index 90% rename from api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdateHandler.java rename to api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java index f14acb48..2f84e041 100644 --- a/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdateHandler.java +++ b/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java @@ -5,15 +5,18 @@ import java.lang.reflect.Field; import java.util.List; -public class CacheUpdateHandler { +public class CacheUpdater { private final Cache cache; - public CacheUpdateHandler(Cache cache) { + public CacheUpdater(Cache cache) { this.cache = cache; } public void updateCache(T result) { + if (result == null) { + return; + } try { Field guildIdField = result.getClass().getDeclaredField("guildId"); Field idField = result.getClass().getDeclaredField("id"); From 6517867c7e13a9bf73275ffda85e92ba66e1dc10 Mon Sep 17 00:00:00 2001 From: NightTripperId Date: Sat, 25 May 2024 09:04:38 -0700 Subject: [PATCH 06/14] chore: fixes field fetching in CacheUpdater --- .../javadiscord/jdi/core/api/utils/CacheUpdater.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java b/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java index 2f84e041..03fde504 100644 --- a/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java +++ b/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java @@ -21,8 +21,8 @@ public void updateCache(T result) { Field guildIdField = result.getClass().getDeclaredField("guildId"); Field idField = result.getClass().getDeclaredField("id"); - long guildId = getLongFromField(guildIdField); - long id = getLongFromField(idField); + long guildId = getLongFromField(guildIdField, result); + long id = getLongFromField(idField, result); cache.getCacheForGuild(guildId).add(id, result); } catch (IllegalAccessException | NoSuchFieldException e) { @@ -34,11 +34,11 @@ public void updateCache(List resultList) { resultList.forEach(this::updateCache); } - private long getLongFromField(Field field) throws IllegalAccessException { + private long getLongFromField(Field field, T result) throws IllegalAccessException { field.setAccessible(true); if (field.getType() == String.class) { - return Long.parseLong((String) field.get(field.getName())); + return Long.parseLong((String) field.get(result)); } - return (long) field.get(field.getName()); + return (long) field.get(result); } } From 700b1fa46cb523e6ada930625dcb3e07c24a87b8 Mon Sep 17 00:00:00 2001 From: NightTripperId Date: Sat, 25 May 2024 09:20:00 -0700 Subject: [PATCH 07/14] chore: fixes formatting (spotlessApply) --- .../java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java b/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java index 03fde504..2916b3a5 100644 --- a/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java +++ b/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java @@ -1,10 +1,10 @@ package com.javadiscord.jdi.core.api.utils; -import com.javadiscord.jdi.internal.cache.Cache; - import java.lang.reflect.Field; import java.util.List; +import com.javadiscord.jdi.internal.cache.Cache; + public class CacheUpdater { private final Cache cache; From b94f6ab4b357cc0d0ce999f60d8393d8f5595c12 Mon Sep 17 00:00:00 2001 From: NightTripperId Date: Sat, 25 May 2024 11:52:50 -0700 Subject: [PATCH 08/14] chore: adds null check to CacheUpdater --- .../java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java b/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java index 2916b3a5..f1ecc802 100644 --- a/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java +++ b/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java @@ -24,7 +24,9 @@ public void updateCache(T result) { long guildId = getLongFromField(guildIdField, result); long id = getLongFromField(idField, result); - cache.getCacheForGuild(guildId).add(id, result); + if (cache.getCacheForGuild(guildId) != null) { + cache.getCacheForGuild(guildId).add(id, result); + } } catch (IllegalAccessException | NoSuchFieldException e) { // NoSuchFieldException: don't cache result } From f432fbfac913f77c09808171e213204d4ca8a4a4 Mon Sep 17 00:00:00 2001 From: NightTripperId Date: Sat, 25 May 2024 13:09:32 -0700 Subject: [PATCH 09/14] chore: adds tracing logs --- .../jdi/core/api/utils/CacheUpdater.java | 36 ++++++++++++++++--- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java b/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java index f1ecc802..451ab49c 100644 --- a/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java +++ b/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java @@ -5,10 +5,16 @@ import com.javadiscord.jdi.internal.cache.Cache; +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + public class CacheUpdater { private final Cache cache; + private static final Logger LOGGER = LogManager.getLogger(CacheUpdater.class); + public CacheUpdater(Cache cache) { this.cache = cache; } @@ -24,11 +30,20 @@ public void updateCache(T result) { long guildId = getLongFromField(guildIdField, result); long id = getLongFromField(idField, result); - if (cache.getCacheForGuild(guildId) != null) { + if (cache.getCacheForGuild(guildId) == null) { + LOGGER.log( + Level.TRACE, "Failed to cache result of type {} with guildId of {}", + result.getClass().getName(), guildId + ); + } else { cache.getCacheForGuild(guildId).add(id, result); } - } catch (IllegalAccessException | NoSuchFieldException e) { - // NoSuchFieldException: don't cache result + + } catch (IllegalAccessException | NoSuchFieldException | NumberFormatException e) { + LOGGER.log( + Level.TRACE, "Failed to cache result of type {}, cause: {}", + result.getClass().getName(), e.getMessage() + ); } } @@ -36,10 +51,21 @@ public void updateCache(List resultList) { resultList.forEach(this::updateCache); } - private long getLongFromField(Field field, T result) throws IllegalAccessException { + private long getLongFromField( + Field field, + T result + ) throws IllegalAccessException, NumberFormatException { field.setAccessible(true); if (field.getType() == String.class) { - return Long.parseLong((String) field.get(result)); + try { + return Long.parseLong((String) field.get(result)); + } catch (NumberFormatException e) { + throw new NumberFormatException( + String.format( + "Failed to parse %s=%s as a long", field.getName(), field.get(result) + ) + ); + } } return (long) field.get(result); } From e33edf01dc8011767056012dada3eeff432ae3c1 Mon Sep 17 00:00:00 2001 From: NightTripperId Date: Sat, 25 May 2024 16:17:48 -0700 Subject: [PATCH 10/14] chore: adds cache updating to parseFromMap --- .../java/com/javadiscord/jdi/core/api/DiscordResponseParser.java | 1 + 1 file changed, 1 insertion(+) diff --git a/api/src/main/java/com/javadiscord/jdi/core/api/DiscordResponseParser.java b/api/src/main/java/com/javadiscord/jdi/core/api/DiscordResponseParser.java index f9552d64..d33fc9d3 100644 --- a/api/src/main/java/com/javadiscord/jdi/core/api/DiscordResponseParser.java +++ b/api/src/main/java/com/javadiscord/jdi/core/api/DiscordResponseParser.java @@ -54,6 +54,7 @@ public AsyncResponse> callAndParseMap(String key, DiscordRequest req try { List resultList = parseResponseFromMap(key, response.body()); asyncResponse.setResult(resultList); + cacheUpdater.updateCache(resultList); } catch (Exception e) { asyncResponse.setException(e); } From 924be7b52d24a57d0a0501b961acdc3a04a14ff1 Mon Sep 17 00:00:00 2001 From: NightTripperId Date: Sat, 25 May 2024 17:16:12 -0700 Subject: [PATCH 11/14] chore: fixes exception message formatting --- .../java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java b/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java index 451ab49c..a536bd6e 100644 --- a/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java +++ b/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java @@ -62,7 +62,7 @@ private long getLongFromField( } catch (NumberFormatException e) { throw new NumberFormatException( String.format( - "Failed to parse %s=%s as a long", field.getName(), field.get(result) + "Failed to parse %s=%s as a long: ", field.getName(), field.get(result) ) ); } From 8b02a3777234d952757c143c3ac2963d75593018 Mon Sep 17 00:00:00 2001 From: NightTripperId Date: Sat, 25 May 2024 17:17:02 -0700 Subject: [PATCH 12/14] chore: fixes exception message formatting --- .../java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java b/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java index a536bd6e..451ab49c 100644 --- a/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java +++ b/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java @@ -62,7 +62,7 @@ private long getLongFromField( } catch (NumberFormatException e) { throw new NumberFormatException( String.format( - "Failed to parse %s=%s as a long: ", field.getName(), field.get(result) + "Failed to parse %s=%s as a long", field.getName(), field.get(result) ) ); } From 7f43674a91470634f9d95659789b791f97a1cddf Mon Sep 17 00:00:00 2001 From: NightTripperId Date: Sun, 26 May 2024 04:19:16 -0700 Subject: [PATCH 13/14] chore: updates trace loggging --- .../com/javadiscord/jdi/core/api/utils/CacheUpdater.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java b/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java index 451ab49c..3cbdb125 100644 --- a/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java +++ b/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java @@ -5,7 +5,6 @@ import com.javadiscord.jdi.internal.cache.Cache; -import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -31,8 +30,7 @@ public void updateCache(T result) { long id = getLongFromField(idField, result); if (cache.getCacheForGuild(guildId) == null) { - LOGGER.log( - Level.TRACE, "Failed to cache result of type {} with guildId of {}", + LOGGER.trace("Failed to cache result of type {} with guildId of {}", result.getClass().getName(), guildId ); } else { @@ -40,8 +38,7 @@ public void updateCache(T result) { } } catch (IllegalAccessException | NoSuchFieldException | NumberFormatException e) { - LOGGER.log( - Level.TRACE, "Failed to cache result of type {}, cause: {}", + LOGGER.trace( "Failed to cache result of type {}, cause: {}", result.getClass().getName(), e.getMessage() ); } From 22c54301792f07165b71ceb86778c12e1841443a Mon Sep 17 00:00:00 2001 From: NightTripperId Date: Sun, 26 May 2024 04:23:11 -0700 Subject: [PATCH 14/14] chore: updates exception handling --- .../jdi/core/api/utils/CacheUpdater.java | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java b/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java index 3cbdb125..9d323375 100644 --- a/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java +++ b/api/src/main/java/com/javadiscord/jdi/core/api/utils/CacheUpdater.java @@ -30,7 +30,8 @@ public void updateCache(T result) { long id = getLongFromField(idField, result); if (cache.getCacheForGuild(guildId) == null) { - LOGGER.trace("Failed to cache result of type {} with guildId of {}", + LOGGER.trace( + "Failed to cache result of type {} with guildId of {}", result.getClass().getName(), guildId ); } else { @@ -38,7 +39,8 @@ public void updateCache(T result) { } } catch (IllegalAccessException | NoSuchFieldException | NumberFormatException e) { - LOGGER.trace( "Failed to cache result of type {}, cause: {}", + LOGGER.trace( + "Failed to cache result of type {}, cause: {}", result.getClass().getName(), e.getMessage() ); } @@ -54,15 +56,7 @@ private long getLongFromField( ) throws IllegalAccessException, NumberFormatException { field.setAccessible(true); if (field.getType() == String.class) { - try { - return Long.parseLong((String) field.get(result)); - } catch (NumberFormatException e) { - throw new NumberFormatException( - String.format( - "Failed to parse %s=%s as a long", field.getName(), field.get(result) - ) - ); - } + return Long.parseLong((String) field.get(result)); } return (long) field.get(result); }