本文整理汇总了C#中Microsoft.CodeAnalysis.CSharp.Extensions.ContextQuery.CSharpSyntaxContext.GetOuterTypes方法的典型用法代码示例。如果您正苦于以下问题:C# CSharpSyntaxContext.GetOuterTypes方法的具体用法?C# CSharpSyntaxContext.GetOuterTypes怎么用?C# CSharpSyntaxContext.GetOuterTypes使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Microsoft.CodeAnalysis.CSharp.Extensions.ContextQuery.CSharpSyntaxContext
的用法示例。
在下文中一共展示了CSharpSyntaxContext.GetOuterTypes方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetSymbolsForExpressionOrStatementContext
private static ImmutableArray<ISymbol> GetSymbolsForExpressionOrStatementContext(
CSharpSyntaxContext context,
bool filterOutOfScopeLocals,
CancellationToken cancellationToken)
{
// Check if we're in an interesting situation like this:
//
// i // <-- here
// I = 0;
// The problem is that "i I = 0" causes a local to be in scope called "I". So, later when
// we look up symbols, it masks any other 'I's in scope (i.e. if there's a field with that
// name). If this is the case, we do not want to filter out inaccessible locals.
if (filterOutOfScopeLocals)
{
if (context.LeftToken.Parent.IsFoundUnder<LocalDeclarationStatementSyntax>(d => d.Declaration.Type))
{
filterOutOfScopeLocals = false;
}
}
var symbols = !context.IsNameOfContext && context.LeftToken.Parent.IsInStaticContext()
? context.SemanticModel.LookupStaticMembers(context.LeftToken.SpanStart)
: context.SemanticModel.LookupSymbols(context.LeftToken.SpanStart);
// Filter out any extension methods that might be imported by a using static directive.
// But include extension methods declared in the context's type or it's parents
var contextEnclosingNamedType = context.SemanticModel.GetEnclosingNamedType(context.Position, cancellationToken);
var contextOuterTypes = context.GetOuterTypes(cancellationToken);
symbols = symbols.WhereAsArray(symbol =>
!symbol.IsExtensionMethod() ||
contextEnclosingNamedType.Equals(symbol.ContainingType) ||
contextOuterTypes.Any(outerType => outerType.Equals(symbol.ContainingType)));
// The symbols may include local variables that are declared later in the method and
// should not be included in the completion list, so remove those. Filter them away,
// unless we're in the debugger, where we show all locals in scope.
if (filterOutOfScopeLocals)
{
symbols = symbols.WhereAsArray(symbol => !symbol.IsInaccessibleLocal(context.Position));
}
return symbols;
}