当前位置: 首页>>代码示例>>C#>>正文


C# ISymbol.IsImplementable方法代码示例

本文整理汇总了C#中ISymbol.IsImplementable方法的典型用法代码示例。如果您正苦于以下问题:C# ISymbol.IsImplementable方法的具体用法?C# ISymbol.IsImplementable怎么用?C# ISymbol.IsImplementable使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在ISymbol的用法示例。


在下文中一共展示了ISymbol.IsImplementable方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: FindImplementationsAsync

        /// <summary>
        /// Finds the symbols that implement an interface or interface member.
        /// </summary>
        public static async Task<IEnumerable<ISymbol>> FindImplementationsAsync(
            ISymbol symbol, Solution solution, IImmutableSet<Project> projects = null, CancellationToken cancellationToken = default(CancellationToken))
        {
            // A symbol can only have implementations if it's an interface or a
            // method/property/event from an interface.  TODO(cyrusn): Handle events once they're
            // exposed in the compiler layer.
            if (symbol is INamedTypeSymbol)
            {
                var namedTypeSymbol = (INamedTypeSymbol)symbol;
                var implementingTypes = await namedTypeSymbol.FindImplementingTypesAsync(solution, projects, cancellationToken).ConfigureAwait(false);
                return implementingTypes.Where(IsAccessible);
            }
            else if (symbol.IsImplementable())
            {
                var containingType = symbol.ContainingType.OriginalDefinition;
                var allTypes = await containingType.FindImplementingTypesAsync(solution, projects, cancellationToken).ConfigureAwait(false);
                var languageServicesFactory = WorkspaceService.GetService<ILanguageServiceProviderFactory>(solution.Workspace);

                List<ISymbol> results = null;
                foreach (var t in allTypes)
                {
                    foreach (var m in t.FindImplementationsForInterfaceMember(symbol, languageServicesFactory, cancellationToken))
                    {
                        var s = await FindSourceDefinitionAsync(m, solution, cancellationToken).ConfigureAwait(false) ?? m;
                        if (IsAccessible(s))
                        {
                            results = results ?? new List<ISymbol>();
                            results.Add(s.OriginalDefinition);
                        }
                    }
                }

                if (results != null)
                {
                    return results.Distinct(SymbolEquivalenceComparer.Instance);
                }
            }

            return SpecializedCollections.EmptyEnumerable<ISymbol>();
        }
开发者ID:riversky,项目名称:roslyn,代码行数:43,代码来源:SymbolFinder_Hierarchy.cs

示例2: CreateFinders

        public async Task<IEnumerable<AbstractCallFinder>> CreateFinders(ISymbol symbol, Project project, CancellationToken cancellationToken)
        {
            if (symbol.Kind == SymbolKind.Property ||
                    symbol.Kind == SymbolKind.Event ||
                    symbol.Kind == SymbolKind.Method)
            {
                var finders = new List<AbstractCallFinder>();

                finders.Add(new MethodCallFinder(symbol, project, _asyncListener, this));

                if (symbol.IsVirtual || symbol.IsAbstract)
                {
                    finders.Add(new OverridingMemberFinder(symbol, project, _asyncListener, this));
                }

                var @overrides = await SymbolFinder.FindOverridesAsync(symbol, project.Solution, cancellationToken: cancellationToken).ConfigureAwait(false);
                if (overrides.Any())
                {
                    finders.Add(new CallToOverrideFinder(symbol, project, _asyncListener, this));
                }

                if (symbol.OverriddenMember() != null)
                {
                    finders.Add(new BaseMemberFinder(symbol.OverriddenMember(), project, _asyncListener, this));
                }

                var implementedInterfaceMembers = await SymbolFinder.FindImplementedInterfaceMembersAsync(symbol, project.Solution, cancellationToken: cancellationToken).ConfigureAwait(false);
                foreach (var implementedInterfaceMember in implementedInterfaceMembers)
                {
                    finders.Add(new InterfaceImplementationCallFinder(implementedInterfaceMember, project, _asyncListener, this));
                }

                if (symbol.IsImplementable())
                {
                    finders.Add(new ImplementerFinder(symbol, project, _asyncListener, this));
                }

                return finders;
            }

            if (symbol.Kind == SymbolKind.Field)
            {
                return SpecializedCollections.SingletonEnumerable(new FieldReferenceFinder(symbol, project, _asyncListener, this));
            }

            return null;
        }
开发者ID:nemec,项目名称:roslyn,代码行数:47,代码来源:CallHierarchyProvider.cs


注:本文中的ISymbol.IsImplementable方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。