public void OnBeginAnalysis(AssemblyDefinition assemblyDefinition)
        {
            this.assembly = assemblyDefinition.FullName;
            if (cache == null)
            {
                cache = ProjectUtility.GetProjectAsset <SerializableMemberCache>();
            }

            if (cache != null)
            {
                filterData = cache.typeFields.Select(field => (field: field.IsCreated ? field.Value : null, filter: new TypeFilter(field.Value?.GetCustomAttributes <TypeFilterAttribute>()?.ToArray())))
                             .Where(obj => obj.field != null && obj.field.GetCustomAttribute <HideInInspector>() == null && obj.filter.filterAttributes.Length > 0)
                             .Select(obj => new TypeAnalysisData(obj.field, obj.filter)).ToList();
            }
            updateCacheForAssembly = false;
        }
        public void OnEndAnalysis(AssemblyDefinition assemblyDefinition)
        {
            if (cache == null)
            {
                cache = ProjectUtility.GetProjectAsset <SerializableMemberCache>();
            }
            if (cache != null)
            {
                if (updateCacheForAssembly)
                {
                    cache.assemblyData[assembly] = new SerializableMemberCache.AssemblyData {
                        types = filterData.Where(fd => !fd.filteredTypes.IsEmpty()).ToDictionary(d => d.FullName, d => d.filteredTypes)
                    };
                }
                else
                {
                    cache.assemblyData.Remove(assembly);
                }

                ProjectUtility.UpdateProjectAsset(cache);
            }
        }