From e85b11665a92e8a6bffb11b76b45ee3c97138bd2 Mon Sep 17 00:00:00 2001 From: Wyvest <45589059+Wyvest@users.noreply.github.com> Date: Tue, 28 Jun 2022 17:29:26 +0700 Subject: revert funny diamond hud stuff add ExcludeType again fix INSTANCE field stuff --- .../polyfrost/oneconfig/config/gson/ExclusionUtils.java | 15 +++++++++++++++ .../config/gson/NonProfileSpecificExclusionStrategy.java | 11 ++++++++--- .../oneconfig/config/gson/ProfileExclusionStrategy.java | 11 ++++++++--- 3 files changed, 31 insertions(+), 6 deletions(-) create mode 100644 src/main/java/cc/polyfrost/oneconfig/config/gson/ExclusionUtils.java (limited to 'src/main/java/cc/polyfrost/oneconfig/config/gson') diff --git a/src/main/java/cc/polyfrost/oneconfig/config/gson/ExclusionUtils.java b/src/main/java/cc/polyfrost/oneconfig/config/gson/ExclusionUtils.java new file mode 100644 index 0000000..3981134 --- /dev/null +++ b/src/main/java/cc/polyfrost/oneconfig/config/gson/ExclusionUtils.java @@ -0,0 +1,15 @@ +package cc.polyfrost.oneconfig.config.gson; + +public class ExclusionUtils { + protected static boolean isSuperClassOf(Class clazz, Class parentClass) { + Class tempClass = clazz; + Class lastClass; + if (tempClass == parentClass) return true; + while (true) { + lastClass = tempClass; + tempClass = tempClass.getSuperclass(); + if (tempClass == lastClass) return false; + if (tempClass == parentClass) return true; + } + } +} diff --git a/src/main/java/cc/polyfrost/oneconfig/config/gson/NonProfileSpecificExclusionStrategy.java b/src/main/java/cc/polyfrost/oneconfig/config/gson/NonProfileSpecificExclusionStrategy.java index 8efa0b7..7679b9c 100644 --- a/src/main/java/cc/polyfrost/oneconfig/config/gson/NonProfileSpecificExclusionStrategy.java +++ b/src/main/java/cc/polyfrost/oneconfig/config/gson/NonProfileSpecificExclusionStrategy.java @@ -1,18 +1,22 @@ package cc.polyfrost.oneconfig.config.gson; +import cc.polyfrost.oneconfig.config.Config; import cc.polyfrost.oneconfig.config.annotations.Exclude; import cc.polyfrost.oneconfig.config.annotations.NonProfileSpecific; import com.google.gson.ExclusionStrategy; import com.google.gson.FieldAttributes; -public class NonProfileSpecificExclusionStrategy implements ExclusionStrategy { +public class NonProfileSpecificExclusionStrategy extends ExclusionUtils implements ExclusionStrategy { /** * @param f the field object that is under test * @return true if the field should be ignored; otherwise false */ @Override public boolean shouldSkipField(FieldAttributes f) { - return f.getAnnotation(NonProfileSpecific.class) == null || f.getAnnotation(Exclude.class) != null; + if (isSuperClassOf(f.getDeclaredClass(), Config.class)) return true; + if (f.getAnnotation(NonProfileSpecific.class) == null) return true; + Exclude exclude = f.getAnnotation(Exclude.class); + return exclude != null && exclude.type() != Exclude.ExcludeType.HUD; } /** @@ -21,6 +25,7 @@ public class NonProfileSpecificExclusionStrategy implements ExclusionStrategy { */ @Override public boolean shouldSkipClass(Class clazz) { - return clazz.getAnnotation(Exclude.class) != null; + Exclude exclude = clazz.getAnnotation(Exclude.class); + return exclude != null && exclude.type() != Exclude.ExcludeType.HUD; } } diff --git a/src/main/java/cc/polyfrost/oneconfig/config/gson/ProfileExclusionStrategy.java b/src/main/java/cc/polyfrost/oneconfig/config/gson/ProfileExclusionStrategy.java index c94e8bd..45f3a04 100644 --- a/src/main/java/cc/polyfrost/oneconfig/config/gson/ProfileExclusionStrategy.java +++ b/src/main/java/cc/polyfrost/oneconfig/config/gson/ProfileExclusionStrategy.java @@ -1,18 +1,22 @@ package cc.polyfrost.oneconfig.config.gson; +import cc.polyfrost.oneconfig.config.Config; import cc.polyfrost.oneconfig.config.annotations.Exclude; import cc.polyfrost.oneconfig.config.annotations.NonProfileSpecific; import com.google.gson.ExclusionStrategy; import com.google.gson.FieldAttributes; -public class ProfileExclusionStrategy implements ExclusionStrategy { +public class ProfileExclusionStrategy extends ExclusionUtils implements ExclusionStrategy { /** * @param f the field object that is under test * @return true if the field should be ignored; otherwise false */ @Override public boolean shouldSkipField(FieldAttributes f) { - return f.getAnnotation(NonProfileSpecific.class) != null || f.getAnnotation(Exclude.class) != null; + if (isSuperClassOf(f.getDeclaredClass(), Config.class)) return true; + if (f.getAnnotation(NonProfileSpecific.class) != null) return true; + Exclude exclude = f.getAnnotation(Exclude.class); + return exclude != null && exclude.type() != Exclude.ExcludeType.HUD; } /** @@ -21,6 +25,7 @@ public class ProfileExclusionStrategy implements ExclusionStrategy { */ @Override public boolean shouldSkipClass(Class clazz) { - return clazz.getAnnotation(NonProfileSpecific.class) != null || clazz.getAnnotation(Exclude.class) != null; + Exclude exclude = clazz.getAnnotation(Exclude.class); + return exclude != null && exclude.type() != Exclude.ExcludeType.HUD; } } -- cgit