tôi có thể có được một danh sách từ các giải pháp của tất cả các cuộc gọi đến một phương pháp particuliar sử dụng đoạn mã sau:Bắt đối số phương pháp với Roslyn
var createCommandList = new List<MethodSymbol>();
INamedTypeSymbol interfaceSymbol =
(from p
in solution.Projects
select p.GetCompilation().GetTypeByMetadataName(
"BuySeasons.BsiServices.DataResource.IBsiDataConnection")
).FirstOrDefault();
foreach (ISymbol symbol in interfaceSymbol.GetMembers("CreateCommand"))
{
if (symbol.Kind == CommonSymbolKind.Method
&& symbol is MethodSymbol)
{
createCommandList.Add(symbol as MethodSymbol);
}
}
foreach (MethodSymbol methodSymbol in createCommandList)
{
foreach (ReferencedSymbol referenceSymbol
in methodSymbol.FindReferences(solution))
{
foreach (ReferenceLocation referenceLocation
in from l
in referenceSymbol.Locations
orderby l.Document.FilePath
select l)
{
if (referenceLocation.Location.GetLineSpan(false)
.StartLinePosition.Line ==
referenceLocation.Location.GetLineSpan(false)
.EndLinePosition.Line)
{
Debug.WriteLine("{0} {1} at {2} {3}/{4} - {5}",
methodSymbol.Name,
"(" + String.Join(",",
(from p
in methodSymbol.Parameters
select p.Type.Name + " " + p.Name).ToArray()
) + ")",
Path.GetFileName(referenceLocation.Location.GetLineSpan(false)
.Path),
referenceLocation.Location.GetLineSpan(false)
.StartLinePosition.Line,
referenceLocation.Location.GetLineSpan(false)
.StartLinePosition.Character,
referenceLocation.Location.GetLineSpan(false)
.EndLinePosition.Character));
}
else
{
throw new ApplicationException("Call spans multiple lines");
}
}
}
}
Nhưng điều này mang lại cho tôi một danh sách các ReferencedSymbol
. Mặc dù điều này mang lại cho tôi các tập tin và số dòng mà phương pháp được gọi là từ tôi cũng muốn nhận được các đối số cụ thể mà phương pháp được gọi là với. Làm thế nào tôi có thể chuyển đổi những gì tôi có hoặc có được thông tin tương tự với Roslyn? (thông báo trước tiên tôi nạp giải pháp với phương thức Solution.Load
và sau đó lặp lại để tìm ra phương thức được xác định/khai báo ở đâu (createCommandList
)).