2017-06-11 35 views
2

我有以下代碼:如何找到一個MethodDeclarationSyntax的所有使用與溶液中的羅斯林

 var ws = new AdhocWorkspace(); 
     var project = ws.AddProject("Sample", "C#"); 
     ws.TryApplyChanges(project.Solution); 
     string text = @" 
        class C 
         { 
          private int counter = 0; 

          public void main() 
          { 
           Do(); 
          } 
          public void Do() 
          { 
           counter++; 
          } 
         } 
         class D 
         { 
          private int counter = 0; 

          public void Foo() 
          { 
           var c = new C(); 
           c.Do(); 
          } 
         }"; 
     var sourceText = SourceText.From(text); 
     var doc = ws.AddDocument(project.Id, "NewDoc", sourceText); 
     var model = doc.GetSemanticModelAsync().Result; 
     var methodDeclaration = doc.GetSyntaxRootAsync().Result.DescendantNodes().OfType<MethodDeclarationSyntax>().ToList()[1]; 
     var invocationExpression = doc.GetSyntaxRootAsync().Result.DescendantNodes().OfType<InvocationExpressionSyntax>().ToList()[0]; 
     //TODO: If I replace invocationExpression with methodDeclaration IT DOES NOT WORK 
     var methodSymbol = model.GetSymbolInfo(invocationExpression).Symbol; 
     //Finds all references to M() 
     var referencesToM = SymbolFinder.FindReferencesAsync(methodSymbol, doc.Project.Solution).Result; 

我怎樣才能找到一個給定一個MethodDeclarationSyntax解決方案中所有的用法? (對於InvocationExpressionSyntax工程確定)

+1

什麼** model.GetDeclaredSymbol(methodDeclaration)**?它是否會返回符號? –

+0

是工程。您可以將其作爲答案發布。 –

回答

1

使用GetDeclaredSymbol節點聲明。

// node is methodDeclaration or invocationExpression 
var methodSymbol = model.GetSymbolInfo(node).Symbol ?? model.GetDeclaredSymbol(node);