2016-07-10 11 views
1

Ich arbeite an dem Code Fix-Provider für .Net.Wie erhalten Sie Anweisungen für IMethodSymbol?

Ich möchte Methoden Internals, z. Methodenanweisungen von IMethodSymbol.

Als Beispiel habe ich bei der Eingabe folgenden Code:

public void DoSomething(string input) 
{ 
    if(input == null) 
     throw new InvalidOperationException("!!!!"); 
} 

Auf der Code-fix Seite I IMethodSymbol Schnittstelle haben, und es gibt keine Möglichkeit, Verfahren Aussagen zu bekommen, interne Knoten usw. (I würde gerne "wenn" sehen, Bedingung in das "wenn", Ausnahmeerhöhung, usw.).

Wie kann ich es bekommen?

+0

Wenn Sie das erwähnen "Auf der Code-Fix-Seite habe ich IMethodSymbol-Schnittstelle", wie haben Sie dieses Methodensymbol? Sie haben keine zugrunde liegenden Syntaxknoten (z. B. eine [MethodDeclarationSyntax] (http://source.roslyn.io/#Microsoft.CodeAnalysis.CSharp/Syntax/MethodDeclarationSyntax.cs), von der Sie die Knoten der Methodenanweisungen abrufen können ? –

+0

@PhilGref In meinem Fall muss ich mich für den semantischen Knoten registrieren, damit ich feststellen kann, ob die Methode letztendlich eine bestimmte Methode eines bestimmten Typs außer Kraft setzt, und wenn das der Fall ist, muss ich die Syntax des Körpers analysieren Sehen Sie, wie einer der Parameter behandelt wird. – jnm2

Antwort

6

Verwenden Sie die DeclaringSyntaxReferences-Eigenschaft, um den Syntaxbaum zu erhalten, der die Methode definiert.

Partielle Methoden haben zwei Knoten.

In Metadaten definierte Methoden (referenzierte Assemblys) haben keine.