From 5de258310a3b89de62c172e4561a12d373b0dd12 Mon Sep 17 00:00:00 2001 From: Max Weber Date: Sat, 6 Feb 2021 12:00:48 -0700 Subject: [PATCH] http-api: allow gsoning classes outside of net.runelite This broke plugin hub plugins using our gson, which is valid since you can reflect into any unnamed module. --- .../http/api/gson/IllegalReflectionExclusion.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/http-api/src/main/java/net/runelite/http/api/gson/IllegalReflectionExclusion.java b/http-api/src/main/java/net/runelite/http/api/gson/IllegalReflectionExclusion.java index d7611cf83f..a25ffb79f7 100644 --- a/http-api/src/main/java/net/runelite/http/api/gson/IllegalReflectionExclusion.java +++ b/http-api/src/main/java/net/runelite/http/api/gson/IllegalReflectionExclusion.java @@ -27,13 +27,26 @@ package net.runelite.http.api.gson; import com.google.gson.ExclusionStrategy; import com.google.gson.FieldAttributes; import java.lang.reflect.Modifier; +import java.util.HashSet; +import java.util.Set; public class IllegalReflectionExclusion implements ExclusionStrategy { + private static final Set PRIVATE_CLASSLOADERS = new HashSet<>(); + + static + { + for (ClassLoader cl = ClassLoader.getSystemClassLoader(); cl != null; ) + { + cl = cl.getParent(); + PRIVATE_CLASSLOADERS.add(cl); + } + } + @Override public boolean shouldSkipField(FieldAttributes f) { - if (f.getDeclaringClass().getName().startsWith("net.runelite")) + if (!PRIVATE_CLASSLOADERS.contains(f.getDeclaringClass().getClassLoader())) { return false; }