diff options
author | DeDiamondPro <67508414+DeDiamondPro@users.noreply.github.com> | 2022-08-24 20:19:24 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-24 20:19:24 +0200 |
commit | a76b49be6dbeb0be3f88870e33d3e10e0e7f8e1c (patch) | |
tree | d90eae9c622ba665da79caac9c628e408386ac2f /src/main/java/cc/polyfrost/oneconfig/config/gson/exclusion | |
parent | 87e7c92526ac894525079305932de80f20372679 (diff) | |
download | OneConfig-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')
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; + } +} |