From 7805d8d48637dde7f0d094ad09e0e83c9022ab7d Mon Sep 17 00:00:00 2001 From: asofold Date: Mon, 10 Jun 2013 19:08:57 +0200 Subject: [PATCH] Add ability to warn for use of deprecated paths. --- .../nocheatplus/config/ConfPaths.java | 1 + .../nocheatplus/config/ConfigManager.java | 3 +- .../nocheatplus/config/PathUtils.java | 63 ++++++++++++++++++- 3 files changed, 65 insertions(+), 2 deletions(-) diff --git a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/config/ConfPaths.java b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/config/ConfPaths.java index 80f15831..a792054f 100644 --- a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/config/ConfPaths.java +++ b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/config/ConfPaths.java @@ -15,6 +15,7 @@ package fr.neatmonster.nocheatplus.config; public abstract class ConfPaths { // Sub-paths that are used with different path prefixes potentially. + // TODO: These might better be in another class. public static final String SUB_DEBUG = "debug"; public static final String SUB_IGNOREPASSABLE = "ignorepassable"; public static final String SUB_ALLOWINSTANTBREAK = "allowinstantbreak"; diff --git a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/config/ConfigManager.java b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/config/ConfigManager.java index d269e69f..2e22655f 100644 --- a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/config/ConfigManager.java +++ b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/config/ConfigManager.java @@ -164,6 +164,7 @@ public class ConfigManager { worldsMap.clear(); // Try to obtain and parse the global configuration file. final File globalFile = new File(plugin.getDataFolder(), "config.yml"); + PathUtils.warnPaths(globalFile, "global config", false); final ConfigFile globalConfig = new ConfigFile(); globalConfig.setDefaults(new DefaultConfig()); globalConfig.options().copyDefaults(true); @@ -210,7 +211,7 @@ public class ConfigManager { } for (final Entry worldEntry : worldFiles.entrySet()) { final File worldFile = worldEntry.getValue(); - PathUtils.warnGlobalOnlyPaths(worldFile, worldEntry.getKey()); + PathUtils.warnPaths(worldFile, worldEntry.getKey(), true); final ConfigFile worldConfig = new ConfigFile(); worldConfig.setDefaults(worldDefaults); worldConfig.options().copyDefaults(true); diff --git a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/config/PathUtils.java b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/config/PathUtils.java index 40f66811..c9a34daf 100644 --- a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/config/PathUtils.java +++ b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/config/PathUtils.java @@ -21,6 +21,9 @@ import fr.neatmonster.nocheatplus.utilities.ds.prefixtree.SimpleCharPrefixTree; public class PathUtils { + private static final Set deprecatedFields = new LinkedHashSet(); + private static final SimpleCharPrefixTree deprecatedPrefixes = new SimpleCharPrefixTree(); + /** Field names of ConfPaths. */ private static final Set globalOnlyFields = new HashSet(); @@ -54,10 +57,23 @@ public class PathUtils { } } } + if (field.isAnnotationPresent(Deprecated.class)){ + deprecatedFields.add(name); + addDeprecated(field); + } } } - private static void addGlobalOnlyPath(final Field field) { + private static void addDeprecated(final Field field) { + try { + final String path = field.get(null).toString(); + deprecatedPrefixes.feed(path); + } catch (IllegalArgumentException e) { + } catch (IllegalAccessException e) { + } + } + + private static void addGlobalOnlyPath(final Field field) { try { final String path = field.get(null).toString(); globalOnlyPaths.add(path); @@ -81,6 +97,51 @@ public class PathUtils { } } + /** + * Run all warning checks (GlobalConfig, deprecated, ...). + * @param file + * @param configName + */ + public static void warnPaths(File file, String configName, boolean isWorldConfig){ + final ConfigFile config = new ConfigFile(); + try { + config.load(file); + if (isWorldConfig){ + warnGlobalOnlyPaths(config, configName); + } + warnDeprecatedPaths(config, configName); + } catch (FileNotFoundException e) { + } catch (IOException e) { + } catch (InvalidConfigurationException e) { + } + } + + /** + * Warn about paths that are deprecated (not in use). + * @param config + * @param paths + * @param configName + */ + public static void warnDeprecatedPaths(ConfigFile config, String configName){ + warnPaths(config, deprecatedPrefixes, " (" + configName + ") is not in use anymore."); + } + + /** + * Warn about paths that are deprecated (not in use). + * @param file + * @param configName + */ + public static void warnDeprecatedPaths(File file, String configName){ + final ConfigFile config = new ConfigFile(); + try { + config.load(file); + warnDeprecatedPaths(config, configName); + } catch (FileNotFoundException e) { + } catch (IOException e) { + } catch (InvalidConfigurationException e) { + } + } + /** * Warn about paths that are only to be set in the global config. * @param config