//Internal for unit tests
        internal static bool ApplyFilter(SettingsGroupFilter filter, Type type)
        {
            if (filter == 0)
            {
                return(true);
            }

            var providerClass = SettingsClassMetaDataReader.GetSettingsProvider(type);

            if ((filter & SettingsGroupFilter.SupportEnterpriseStorage) == SettingsGroupFilter.SupportEnterpriseStorage &&
                providerClass == typeof(StandardSettingsProvider))
            {
                return(true);
            }

            if ((filter & SettingsGroupFilter.LocalStorage) == SettingsGroupFilter.LocalStorage &&
                ApplicationSettingsHelper.IsLocallyStored(type))
            {
                return(true);
            }

            if ((filter & SettingsGroupFilter.SupportsEditingOfSharedProfile) == SettingsGroupFilter.SupportsEditingOfSharedProfile &&
                typeof(ISharedApplicationSettingsProvider).IsAssignableFrom(providerClass))
            {
                return(true);
            }

            return(false);
        }
 /// <summary>
 /// Returns a list of <see cref="SettingsGroupDescriptor"/> objects describing each settings class
 /// that exists in the installed plugin base, applying the specified filter.
 /// </summary>
 /// <remarks>
 /// This method is thread-safe.
 /// </remarks>
 public static List <SettingsGroupDescriptor> ListInstalledSettingsGroups(SettingsGroupFilter filter)
 {
     return(ListInstalledSettingsGroups(type => ApplyFilter(filter, type)));
 }