// Path: lib-core/src/main/java/xdroid/core/Global.java
// public static Context getContext() {
//     if (sContext == null) {
//         sContext = CurrentApplicationHolder.INSTANCE;
//     }
// 
//     return notNull(sContext);
// }
// 
// Path: lib-core/src/main/java/xdroid/core/ObjectUtils.java
// @SuppressWarnings("unchecked")
// public static <T> T cast(Object object) {
//     return (T) object;
// }
// 
// Path: lib-core/src/main/java/xdroid/core/ObjectUtils.java
// public static <T> T notNull(T object) {
//     if (object == null) {
//         throw new NullPointerException();
//     }
// 
//     return object;
// }
// 
// Path: lib-core/src/main/java/xdroid/core/SharedPreferencesUtils.java
// public static boolean getBoolean(SharedPreferences prefs, String key, boolean defaultValue) {
//     try {
//         return prefs.getBoolean(key, defaultValue);
//     } catch (Throwable ex) {
//         return defaultValue;
//     }
// }
// 
// Path: lib-core/src/main/java/xdroid/core/SharedPreferencesUtils.java
// public static float getFloat(SharedPreferences prefs, String key, float defaultValue) {
//     try {
//         return prefs.getFloat(key, defaultValue);
//     } catch (Throwable ex) {
//         return defaultValue;
//     }
// }
// 
// Path: lib-core/src/main/java/xdroid/core/SharedPreferencesUtils.java
// public static int getInt(SharedPreferences prefs, String key, int defaultValue) {
//     try {
//         return prefs.getInt(key, defaultValue);
//     } catch (Throwable ex) {
//         return defaultValue;
//     }
// }
// 
// Path: lib-core/src/main/java/xdroid/core/SharedPreferencesUtils.java
// public static long getLong(SharedPreferences prefs, String key, long defaultValue) {
//     try {
//         return prefs.getLong(key, defaultValue);
//     } catch (Throwable ex) {
//         return defaultValue;
//     }
// }
// 
// Path: lib-core/src/main/java/xdroid/core/SharedPreferencesUtils.java
// public static String getString(SharedPreferences prefs, String key, String defaultValue) {
//     try {
//         return prefs.getString(key, defaultValue);
//     } catch (Throwable ex) {
//         return defaultValue;
//     }
// }
// 
// Path: lib-core/src/main/java/xdroid/core/SharedPreferencesUtils.java
// public static Set<String> getStringSet(SharedPreferences prefs, String key, Set<String> defaultValue) {
//     try {
//         return prefs.getStringSet(key, defaultValue);
//     } catch (Throwable ex) {
//         return defaultValue;
//     }
// }


import android.content.Context;
import android.content.SharedPreferences;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import static xdroid.core.Global.getContext;
import static xdroid.core.ObjectUtils.cast;
import static xdroid.core.ObjectUtils.notNull;
import static xdroid.core.SharedPreferencesUtils.getBoolean;
import static xdroid.core.SharedPreferencesUtils.getFloat;
import static xdroid.core.SharedPreferencesUtils.getInt;
import static xdroid.core.SharedPreferencesUtils.getLong;
import static xdroid.core.SharedPreferencesUtils.getString;
import static xdroid.core.SharedPreferencesUtils.getStringSet;
            return changed;
        }
    }

    protected class StringGetter extends Getter {
        public String asString() {
            if (mValue == null) {
                mValue = getString(getPrefs(), mOption.getName(), (String) mDefaultValue);
            }

            return (String) mValue;
        }
    }

    protected class StringSetter extends Setter {
        public boolean asString(String value) {
            boolean changed = isChanged(mValue, value);
            mValue = value;
            getPrefs().edit().putString(mOption.getName(), value).apply();
            return changed;
        }
    }

    protected class StringSetGetter extends Getter {
        public Set<String> asStringSet() {
            if (mValue == null) {
                Set<String> defaultValue = cast(mDefaultValue);
                mValue = getStringSet(getPrefs(), mOption.getName(), defaultValue);
            }

// Path: lib-core/src/main/java/xdroid/core/Global.java
// public static Context getContext() {
//     if (sContext == null) {
//         sContext = CurrentApplicationHolder.INSTANCE;
//     }
// 
//     return notNull(sContext);
// }
// 
// Path: lib-core/src/main/java/xdroid/core/ObjectUtils.java
// @SuppressWarnings("unchecked")
// public static <T> T cast(Object object) {
//     return (T) object;
// }
// 
// Path: lib-core/src/main/java/xdroid/core/ObjectUtils.java
// public static <T> T notNull(T object) {
//     if (object == null) {
//         throw new NullPointerException();
//     }
// 
//     return object;
// }
// 
// Path: lib-core/src/main/java/xdroid/core/SharedPreferencesUtils.java
// public static boolean getBoolean(SharedPreferences prefs, String key, boolean defaultValue) {
//     try {
//         return prefs.getBoolean(key, defaultValue);
//     } catch (Throwable ex) {
//         return defaultValue;
//     }
// }
// 
// Path: lib-core/src/main/java/xdroid/core/SharedPreferencesUtils.java
// public static float getFloat(SharedPreferences prefs, String key, float defaultValue) {
//     try {
//         return prefs.getFloat(key, defaultValue);
//     } catch (Throwable ex) {
//         return defaultValue;
//     }
// }
// 
// Path: lib-core/src/main/java/xdroid/core/SharedPreferencesUtils.java
// public static int getInt(SharedPreferences prefs, String key, int defaultValue) {
//     try {
//         return prefs.getInt(key, defaultValue);
//     } catch (Throwable ex) {
//         return defaultValue;
//     }
// }
// 
// Path: lib-core/src/main/java/xdroid/core/SharedPreferencesUtils.java
// public static long getLong(SharedPreferences prefs, String key, long defaultValue) {
//     try {
//         return prefs.getLong(key, defaultValue);
//     } catch (Throwable ex) {
//         return defaultValue;
//     }
// }
// 
// Path: lib-core/src/main/java/xdroid/core/SharedPreferencesUtils.java
// public static String getString(SharedPreferences prefs, String key, String defaultValue) {
//     try {
//         return prefs.getString(key, defaultValue);
//     } catch (Throwable ex) {
//         return defaultValue;
//     }
// }
// 
// Path: lib-core/src/main/java/xdroid/core/SharedPreferencesUtils.java
// public static Set<String> getStringSet(SharedPreferences prefs, String key, Set<String> defaultValue) {
//     try {
//         return prefs.getStringSet(key, defaultValue);
//     } catch (Throwable ex) {
//         return defaultValue;
//     }
// }


// Path: lib-options/src/main/java/xdroid/options/OptionAccessor.java
import android.content.Context;
import android.content.SharedPreferences;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import static xdroid.core.Global.getContext;
import static xdroid.core.ObjectUtils.cast;
import static xdroid.core.ObjectUtils.notNull;
import static xdroid.core.SharedPreferencesUtils.getBoolean;
import static xdroid.core.SharedPreferencesUtils.getFloat;
import static xdroid.core.SharedPreferencesUtils.getInt;
import static xdroid.core.SharedPreferencesUtils.getLong;
import static xdroid.core.SharedPreferencesUtils.getString;
import static xdroid.core.SharedPreferencesUtils.getStringSet;

            return changed;
        }
    }

    protected class StringGetter extends Getter {
        public String asString() {
            if (mValue == null) {
                mValue = getString(getPrefs(), mOption.getName(), (String) mDefaultValue);
            }

            return (String) mValue;
        }
    }

    protected class StringSetter extends Setter {
        public boolean asString(String value) {
            boolean changed = isChanged(mValue, value);
            mValue = value;
            getPrefs().edit().putString(mOption.getName(), value).apply();
            return changed;
        }
    }

    protected class StringSetGetter extends Getter {
        public Set<String> asStringSet() {
            if (mValue == null) {
                Set<String> defaultValue = cast(mDefaultValue);
                mValue = getStringSet(getPrefs(), mOption.getName(), defaultValue);
            }

            return cast(mValue);