IEnumerable <IMemberDef> CalculateDefsToRemove()
        {
            var defaultProp = FindDefaultProperty();

            if (defaultProp != null)
            {
                foreach (var d in DotNetUtils.GetMethodsAndSelf(defaultProp))
                {
                    yield return(d);
                }
                foreach (var d in DotNetUtils.GetDefs(defaultProp))
                {
                    yield return(d);
                }
            }
            foreach (var p in type.Properties)
            {
                if (p.CustomAttributes.IsDefined("System.Configuration.DefaultSettingValueAttribute"))
                {
                    foreach (var d in DotNetUtils.GetMethodsAndSelf(p))
                    {
                        yield return(d);
                    }
                }
            }
        }
        void InitializeIsEmpty()
        {
            var allDefs = new HashSet <object>();

            foreach (var m in type.Methods)
            {
                allDefs.Add(m);
            }
            foreach (var f in type.Fields)
            {
                allDefs.Add(f);
            }
            foreach (var p in type.Properties)
            {
                allDefs.Add(p);
            }
            foreach (var e in type.Events)
            {
                allDefs.Add(e);
            }
            foreach (var t in type.NestedTypes)
            {
                allDefs.Add(t);
            }
            foreach (var d in GetDefsToRemove())
            {
                allDefs.Remove(d);
                if (d is PropertyDef)
                {
                    foreach (var def in DotNetUtils.GetMethodsAndSelf((PropertyDef)d))
                    {
                        allDefs.Remove(def);
                    }
                }
            }
            allDefs.Remove(type.FindStaticConstructor());
            allDefs.Remove(type.FindDefaultConstructor());
            isEmpty = allDefs.Count == 0;
        }