File: Filters\DocIdIncludeListFilter.cs
Web Access
Project: src\src\Microsoft.Cci.Extensions\Microsoft.Cci.Extensions.csproj (Microsoft.Cci.Extensions)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Cci.Extensions;
using System.IO;
 
namespace Microsoft.Cci.Filters
{
    public class DocIdIncludeListFilter : ICciFilter
    {
        private readonly HashSet<string> _docIds;
 
        public DocIdIncludeListFilter(IEnumerable<string> docIds)
        {
            _docIds = new HashSet<string>(docIds);
        }
 
        public DocIdIncludeListFilter(string includeListFilePath)
        {
            _docIds = new HashSet<string>(DocIdExtensions.ReadDocIds(includeListFilePath));
        }
 
        public bool AlwaysIncludeNonEmptyTypes { get; set; }
 
        public bool IncludeForwardedTypes { get; set; }
 
        public bool Include(INamespaceDefinition ns)
        {
            // Only include non-empty namespaces
            if (!ns.GetTypes(IncludeForwardedTypes).Any(Include))
                return false;
 
            string namespaceId = ns.DocId();
            return _docIds.Contains(namespaceId);
        }
 
        public bool Include(ITypeDefinition type)
        {
            if (AlwaysIncludeNonEmptyTypes && type.Members.Any(Include))
                return true;
 
            string typeId = type.DocId();
            return _docIds.Contains(typeId);
        }
 
        public bool Include(ITypeDefinitionMember member)
        {
            string memberId = member.DocId();
            return _docIds.Contains(memberId);
        }
 
        public bool Include(ICustomAttribute attribute)
        {
            string typeId = attribute.DocId();
            string removeUsages = "RemoveUsages:" + typeId;
 
            if (_docIds.Contains(removeUsages))
                return false;
 
            return _docIds.Contains(typeId);
        }
    }
}