aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/cc/polyfrost/oneconfig/config/gson/exclusion
diff options
context:
space:
mode:
authorDeDiamondPro <67508414+DeDiamondPro@users.noreply.github.com>2022-08-24 20:19:24 +0200
committerGitHub <noreply@github.com>2022-08-24 20:19:24 +0200
commita76b49be6dbeb0be3f88870e33d3e10e0e7f8e1c (patch)
treed90eae9c622ba665da79caac9c628e408386ac2f /src/main/java/cc/polyfrost/oneconfig/config/gson/exclusion
parent87e7c92526ac894525079305932de80f20372679 (diff)
downloadOneConfig-a76b49be6dbeb0be3f88870e33d3e10e0e7f8e1c.tar.gz
OneConfig-a76b49be6dbeb0be3f88870e33d3e10e0e7f8e1c.tar.bz2
OneConfig-a76b49be6dbeb0be3f88870e33d3e10e0e7f8e1c.zip
Gson interface (#109)
* Add gson-interface * Add gson-interface * Update license things
Diffstat (limited to 'src/main/java/cc/polyfrost/oneconfig/config/gson/exclusion')
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/config/gson/exclusion/ExclusionUtils.java43
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/config/gson/exclusion/NonProfileSpecificExclusionStrategy.java60
-rw-r--r--src/main/java/cc/polyfrost/oneconfig/config/gson/exclusion/ProfileExclusionStrategy.java60
3 files changed, 163 insertions, 0 deletions
diff --git a/src/main/java/cc/polyfrost/oneconfig/config/gson/exclusion/ExclusionUtils.java b/src/main/java/cc/polyfrost/oneconfig/config/gson/exclusion/ExclusionUtils.java
new file mode 100644
index 0000000..efad110
--- /dev/null
+++ b/src/main/java/cc/polyfrost/oneconfig/config/gson/exclusion/ExclusionUtils.java
@@ -0,0 +1,43 @@
+/*
+ * This file is part of OneConfig.
+ * OneConfig - Next Generation Config Library for Minecraft: Java Edition
+ * Copyright (C) 2021, 2022 Polyfrost.
+ * <https://polyfrost.cc> <https://github.com/Polyfrost/>
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * OneConfig is licensed under the terms of version 3 of the GNU Lesser
+ * General Public License as published by the Free Software Foundation, AND
+ * under the Additional Terms Applicable to OneConfig, as published by Polyfrost,
+ * either version 1.0 of the Additional Terms, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License. If not, see <https://www.gnu.org/licenses/>. You should
+ * have also received a copy of the Additional Terms Applicable
+ * to OneConfig, as published by Polyfrost. If not, see
+ * <https://polyfrost.cc/legal/oneconfig/additional-terms>
+ */
+
+package cc.polyfrost.oneconfig.config.gson.exclusion;
+
+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;
+ if (tempClass == null) return false;
+ tempClass = tempClass.getSuperclass();
+ if (tempClass == null) return false;
+ if (tempClass == lastClass) return false;
+ if (tempClass == parentClass) return true;
+ }
+ }
+}
diff --git a/src/main/java/cc/polyfrost/oneconfig/config/gson/exclusion/NonProfileSpecificExclusionStrategy.java b/src/main/java/cc/polyfrost/oneconfig/config/gson/exclusion/NonProfileSpecificExclusionStrategy.java
new file mode 100644
index 0000000..ae4e7ac
--- /dev/null
+++ b/src/main/java/cc/polyfrost/oneconfig/config/gson/exclusion/NonProfileSpecificExclusionStrategy.java
@@ -0,0 +1,60 @@
+/*
+ * This file is part of OneConfig.
+ * OneConfig - Next Generation Config Library for Minecraft: Java Edition
+ * Copyright (C) 2021, 2022 Polyfrost.
+ * <https://polyfrost.cc> <https://github.com/Polyfrost/>
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * OneConfig is licensed under the terms of version 3 of the GNU Lesser
+ * General Public License as published by the Free Software Foundation, AND
+ * under the Additional Terms Applicable to OneConfig, as published by Polyfrost,
+ * either version 1.0 of the Additional Terms, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License. If not, see <https://www.gnu.org/licenses/>. You should
+ * have also received a copy of the Additional Terms Applicable
+ * to OneConfig, as published by Polyfrost. If not, see
+ * <https://polyfrost.cc/legal/oneconfig/additional-terms>
+ */
+
+package cc.polyfrost.oneconfig.config.gson.exclusion;
+
+import cc.polyfrost.oneconfig.config.Config;
+import cc.polyfrost.oneconfig.config.annotations.Exclude;
+import cc.polyfrost.oneconfig.config.annotations.NonProfileSpecific;
+import cc.polyfrost.oneconfig.gui.pages.Page;
+import com.google.gson.ExclusionStrategy;
+import com.google.gson.FieldAttributes;
+
+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) {
+ if (isSuperClassOf(f.getDeclaredClass(), Config.class)) return true;
+ if (isSuperClassOf(f.getDeclaredClass(), Page.class)) return true;
+ if (f.getDeclaredClass().isAssignableFrom(Runnable.class)) return true;
+ if (f.getAnnotation(NonProfileSpecific.class) == null) return true;
+ Exclude exclude = f.getAnnotation(Exclude.class);
+ return exclude != null;
+ }
+
+ /**
+ * @param clazz the class object that is under test
+ * @return true if the class should be ignored; otherwise false
+ */
+ @Override
+ public boolean shouldSkipClass(Class<?> clazz) {
+ Exclude exclude = clazz.getAnnotation(Exclude.class);
+ return exclude != null;
+ }
+}
diff --git a/src/main/java/cc/polyfrost/oneconfig/config/gson/exclusion/ProfileExclusionStrategy.java b/src/main/java/cc/polyfrost/oneconfig/config/gson/exclusion/ProfileExclusionStrategy.java
new file mode 100644
index 0000000..e15a6ec
--- /dev/null
+++ b/src/main/java/cc/polyfrost/oneconfig/config/gson/exclusion/ProfileExclusionStrategy.java
@@ -0,0 +1,60 @@
+/*
+ * This file is part of OneConfig.
+ * OneConfig - Next Generation Config Library for Minecraft: Java Edition
+ * Copyright (C) 2021, 2022 Polyfrost.
+ * <https://polyfrost.cc> <https://github.com/Polyfrost/>
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * OneConfig is licensed under the terms of version 3 of the GNU Lesser
+ * General Public License as published by the Free Software Foundation, AND
+ * under the Additional Terms Applicable to OneConfig, as published by Polyfrost,
+ * either version 1.0 of the Additional Terms, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License. If not, see <https://www.gnu.org/licenses/>. You should
+ * have also received a copy of the Additional Terms Applicable
+ * to OneConfig, as published by Polyfrost. If not, see
+ * <https://polyfrost.cc/legal/oneconfig/additional-terms>
+ */
+
+package cc.polyfrost.oneconfig.config.gson.exclusion;
+
+import cc.polyfrost.oneconfig.config.Config;
+import cc.polyfrost.oneconfig.config.annotations.Exclude;
+import cc.polyfrost.oneconfig.config.annotations.NonProfileSpecific;
+import cc.polyfrost.oneconfig.gui.pages.Page;
+import com.google.gson.ExclusionStrategy;
+import com.google.gson.FieldAttributes;
+
+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) {
+ if (isSuperClassOf(f.getDeclaredClass(), Config.class)) return true;
+ if (isSuperClassOf(f.getDeclaredClass(), Page.class)) return true;
+ if (f.getDeclaredClass().isAssignableFrom(Runnable.class)) return true;
+ if (f.getAnnotation(NonProfileSpecific.class) != null) return true;
+ Exclude exclude = f.getAnnotation(Exclude.class);
+ return exclude != null;
+ }
+
+ /**
+ * @param clazz the class object that is under test
+ * @return true if the class should be ignored; otherwise false
+ */
+ @Override
+ public boolean shouldSkipClass(Class<?> clazz) {
+ Exclude exclude = clazz.getAnnotation(Exclude.class);
+ return exclude != null;
+ }
+}