本文整理汇总了C#中Compilation.GetMemberFromMemberDeclaration方法的典型用法代码示例。如果您正苦于以下问题:C# Compilation.GetMemberFromMemberDeclaration方法的具体用法?C# Compilation.GetMemberFromMemberDeclaration怎么用?C# Compilation.GetMemberFromMemberDeclaration使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Compilation
的用法示例。
在下文中一共展示了Compilation.GetMemberFromMemberDeclaration方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetSemanticMember
public static CSharpMember GetSemanticMember(this ParseTreeNode parseTreeNode, Compilation comp, SourceFile sourceFile) {
Contract.Requires(parseTreeNode != null);
Contract.Requires(comp != null);
Contract.Requires(sourceFile != null);
Contract.Ensures(Contract.Result<CSharpMember>() == null ||
Contract.Result<CSharpMember>().IsMethod ||
Contract.Result<CSharpMember>().IsConstructor ||
Contract.Result<CSharpMember>().IsProperty ||
Contract.Result<CSharpMember>().IsIndexer);
// The CSharp model can throw internal exceptions at unexpected moments, so we filter them here:
try
{
CSharpMember semanticMember;
if (parseTreeNode.IsAnyMember())
{
semanticMember = comp.GetMemberFromMemberDeclaration(parseTreeNode);
if (semanticMember == null) return null;
goto Success;
}
//Can we get our expression tree?
var expressionTree = comp.FindExpressionTree(sourceFile, parseTreeNode);
if (expressionTree == null)
return null;
//Can we get our expression?
var expression = expressionTree.FindLeafExpression(parseTreeNode);
if (expression == null)
return null;
//Can we get our semanticMember?
semanticMember = expression.FindExpressionExplicitMember();
if (semanticMember == null)
{
MEMGRPExpression memgrpExpr = expression as MEMGRPExpression;
if (memgrpExpr != null)
{
var foo = memgrpExpr.OwningCall;
if (foo != null)
{
semanticMember = foo.mwi;
}
if (semanticMember == null && memgrpExpr.mps != null && memgrpExpr.mps.Text == "$Item$")
{
if (memgrpExpr.Object != null && memgrpExpr.Object.Type != null)
{
var type = memgrpExpr.Object.Type;
if (type.Members == null) goto TryNext;
// find indexer member
for (int i = 0; i < type.Members.Count; i++)
{
var mem = type.Members[i];
if (mem == null) continue;
if (mem.IsIndexer)
{
semanticMember = mem;
break;
}
}
}
}
}
}
TryNext: ;
Success:
//Is our semanticMember a method?
if (semanticMember == null || !(semanticMember.IsMethod || semanticMember.IsConstructor || semanticMember.IsProperty || semanticMember.IsIndexer))
return null;
//Unistantiate
semanticMember = semanticMember.Uninstantiate();
return semanticMember;
}
catch (ArgumentException)
{
return null;
}
}