2013-11-06 2 views
0

Я получил ответ на свой вопрос о том, куда ушла моя аннотация (Where is my annotation?), и я перечитал его как 20 раз, но я все еще не понимаю, почему этот код не работает, почему я не могу получить аннотированное свойство, в чем проблема. Я встраиваемый код так, что легче читать ...Что происходит с аннотациями при создании нового узла?

SyntaxAnnotation propertyAnnotation = null; 
SyntaxAnnotation classAnnotation = null; 

//first annotate class 
classAnnotation = new SyntaxAnnotation(); 

var newRoot = document.GetSyntaxRoot() 
       .ReplaceNode(classDeclaration, classDeclaration.WithAdditionalAnnotations(classAnnotation)); 

document = document.UpdateSyntaxRoot(newRoot); 

//now annotate property 
//first look for classNode that was annotated in previous step 
var classNode = document.GetAnnotatedNode<ClassDeclarationSyntax>(classAnnotation); 

//now annotate property 
propertyAnnotation = new SyntaxAnnotation(); 
var newClassNode = classNode.ReplaceNode(propertyDeclaration, propertyDeclaration.WithAdditionalAnnotations(propertyAnnotation)); 

newRoot = document.GetSyntaxRoot() 
        .ReplaceNode(classNode, newClassNode); 

document = document.UpdateSyntaxRoot(newRoot); 

//Works 
newClassNode = document.GetAnnotatedNode<ClassDeclarationSyntax>(classAnnotation); 

//Fails here???? 
var newPropertyNode = document.GetAnnotatedNode<PropertyDeclarationSyntax>(propertyAnnotation); 

ответ

0

Проблема заключается в строке:

var newClassNode = classNode.ReplaceNode(propertyDeclaration, propertyDeclaration.WithAdditionalAnnotations(propertyAnnotation)); 

Поскольку вы аннотированное объявление класса, вы никогда не найдете в propertyDeclaration этот звонок. Он является частью дерева, имеющего оригинал classDeclaration, а не аннотированный. Вы должны снова найти propertyDeclaration после добавления аннотации к classDeclaration.