2016-05-03 5 views
0

Ich bin ein SyntaxTreeAnalysisContext context gegeben, aber was ich brauche, ist ein SyntaxNodeAnalysisContext mit seiner SemanticModel Eigenschaft, um dann auf den übergeordneten Knoten aufsteigen, die eine Klassendeklaration ist und dann überprüfen, was von der Art platziert wurden Attribute.Get Semantic Modell auf SyntaxTreeAnalysisContext

SyntaxTreeAnalysisContext givenTreeContext 
/// how to get to: 
SyntaxNodeAnalysisContext context; 

var n = context.Node; 
ISymbol symbol = null; 
bool hasAttributes = false; 

while (n != null) 
{ 
    if (n.IsKind(SyntaxKind.ClassDeclaration)) 
    { 
    symbol = context.SemanticModel.GetDeclaredSymbol(n);   
    hasAttributes = symbol.GetAttributes().Any(); 
    break; 
    } 
    else 
    { 
    n = n.Parent; 
    } 
} 

Gibt es eine Möglichkeit SyntaxTreeAnalysisContext-SyntaxNodeAnalysisContext zu bekommen?

(Edit) Sie ein Beispiel geben: Ich habe einige Regeln verbessern wollen (die alle ReportDiagnostics Methode von SyntaxTreeAnalysisContext verwenden; wie SA1027 Use tabs correctly von StyleCop Analysatoren) in einer Weise, dass ich ein Attribut an der einschließenden Typ platzieren und erfassen seine Präsenz und läßt dann den Hinweis auf die Diagnose wie

if (!hasAttributes) // simplified 
{ 
    context.ReportDiagnostic(...); 
} 
+2

Es klingt, als würden Sie die falsche Art von Aktion registrieren. – SLaks

+0

Ich verstehe nicht, was Sie eigentlich machen und warum 'SyntaxTreeAnalysisContext' das einzige ist, was Sie haben. Könntest du das weiter erläutern? – svick

+0

@svick: Siehe meine Bearbeitung. – David

Antwort

0

ein SemanticModelAnalysis statt in Ihrer Initialize Methode registrieren. Syntax-Einsen sind nur für Syntax, ohne semantische Auswirkungen zu haben.