2014-12-16 4 views
1

Roslyn을 사용하여 소스 파일에서 다양한 메소드 호출 정보를 추출하려고합니다. 정교하게 - 입력 파일 내에서 발생하는 모든 메서드 호출을 찾고 싶습니다.Roslyn의 확장 메소드 정보

내가 부딪히는 한 가지 문제는 확장 방법과 관련이 있습니다. Aggregate, Sum 등의 Linq 메서드를 고려하십시오. InvocationExpressionSyntax에서 호출되는 메서드가 클래스의 단순 멤버 메서드가 아닌 확장 메서드 인 것을 어떻게 알 수 있습니까?

내가 입력 한 소스 파일은 컴파일 될 것으로 예상 될 수 있습니다. 즉, GetDiagnostics()은 오류가 발생하지 않습니다.

---- 당신은 확장 메서드의 인스턴스 호출에 대한 실제 정적 확장 방법을 찾을 수 있습니다

var methodInfo = model.GetSymbolInfo(invocation); 
if (methodInfo.Symbol != null) 
{ 
    var mSymbol = (IMethodSymbol)methodInfo.Symbol; 
    if (mSymbol.ReducedFrom != null) 
    { 
     // this is an extension method ! 
    } 
} 

답변

3

그의 대답에 @Kevin에 의해 언급 된 재산에 도착하는 일부 코드는 ---- 사용 IMethodSymbol.ReducedFrom 속성