本文整理汇总了C#中Microsoft.CodeAnalysis.SemanticModel.GetEnclosingNamespace方法的典型用法代码示例。如果您正苦于以下问题:C# SemanticModel.GetEnclosingNamespace方法的具体用法?C# SemanticModel.GetEnclosingNamespace怎么用?C# SemanticModel.GetEnclosingNamespace使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Microsoft.CodeAnalysis.SemanticModel
的用法示例。
在下文中一共展示了SemanticModel.GetEnclosingNamespace方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetExtensionMethods
IEnumerable<IMethodSymbol> GetExtensionMethods (SemanticModel semanticModel, ITypeSymbol typeToExtend, InvocationExpressionSyntax node, CancellationToken cancellationToken)
{
var usedNamespaces = new HashSet<string> ();
foreach (var un in semanticModel.GetUsingNamespacesInScope (node)) {
usedNamespaces.Add (un.GetFullName ());
}
var enclosingNamespaceName = semanticModel.GetEnclosingNamespace (node.SpanStart, cancellationToken).GetFullName ();
var stack = new Stack<INamespaceOrTypeSymbol> ();
stack.Push (semanticModel.Compilation.GlobalNamespace);
while (stack.Count > 0) {
if (cancellationToken.IsCancellationRequested)
break;
var current = stack.Pop ();
var currentNs = current as INamespaceSymbol;
if (currentNs != null) {
foreach (var member in currentNs.GetNamespaceMembers ()) {
var currentNsName = member.GetFullName ();
if (usedNamespaces.Contains (currentNsName) ||
enclosingNamespaceName == currentNsName ||
(enclosingNamespaceName.StartsWith (currentNsName, StringComparison.Ordinal) &&
enclosingNamespaceName [currentNsName.Length] == '.')) {
stack.Push (member);
}
}
foreach (var member in currentNs.GetTypeMembers ())
stack.Push (member);
} else {
var type = (INamedTypeSymbol)current;
if (type.IsImplicitClass || type.IsScriptClass)
continue;
if (type.DeclaredAccessibility != Accessibility.Public) {
if (type.DeclaredAccessibility != Accessibility.Internal)
continue;
if (!type.IsAccessibleWithin (semanticModel.Compilation.Assembly))
continue;
}
if (!type.MightContainExtensionMethods)
continue;
foreach (var extMethod in type.GetMembers ().OfType<IMethodSymbol> ().Where (method => method.IsExtensionMethod)) {
var reducedMethod = extMethod.ReduceExtensionMethod (typeToExtend);
if (reducedMethod != null) {
yield return reducedMethod;
}
}
}
}
}