本文整理汇总了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>();
}
示例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;
}