コード例 #1
0
        private List <INode> GetMatchingClassesAndEnums(ReferenceType referenceType)
        {
            var names     = referenceType.Identifiers.Select(x => x.Text).ToList();
            var ancestors = referenceType.AllAncestorOfType <AbstractTopLevelNode>();

            foreach (var ancestor in ancestors)
            {
                var nodes = new List <AbstractTopLevelNode> {
                    ancestor
                };
                for (int i = 0; i < referenceType.Identifiers.Count(); i++)
                {
                    if (i < referenceType.Identifiers.Count() - 1)
                    {
                        nodes = nodes
                                .SelectMany(GetDeclarations)
                                .OfType <ModuleDeclaration>()
                                .Where(x => x.Name == referenceType.Identifiers.AtIndex(i).Text)
                                .Cast <AbstractTopLevelNode>()
                                .ToList();
                    }
                    else
                    {
                        var declarations    = nodes.SelectMany(GetDeclarations).ToList();
                        var matchingClasses = declarations.OfType <ClassDeclaration>().Where(x => x.Name == names[i]).DistinctBy(x => x.Name).ToList();
                        var matchingEnums   = declarations.OfType <EnumDeclaration>().Where(y => y.Name == names[i]).ToList();

                        if (matchingClasses.Count + matchingEnums.Count > 0)
                        {
                            return(matchingClasses.Concat <INode>(matchingEnums).ToList());
                        }
                    }
                }
            }
            return(new List <INode>());
        }