Roslyn меняет ссылки на узлы

Поскольку узлы неизменяемы, и каждый раз, когда создаются новые экземпляры, мои ссылки устаревают. Каков наилучший подход к этому? Я занимаюсь рефакторингом, чтобы переместить определение класса на один уровень выше. Сначала я добавляю его к прародительскому узлу, но тогда моя ссылка на узел определения класса устарела, и я не могу ее использовать.

var nodeExpression
var nodeMethod
var nodeClassDef

Когда я изменяю nodeExpression, создается совершенно новый мир; как я могу быстро получить соответствующие узлы в этом новом мире для nodeMethod и nodeClassDef?


person tsadigov    schedule 21.01.2015    source источник
comment
@eric-lippert, может быть, вы можете дать несколько советов по этому поводу   -  person tsadigov    schedule 21.01.2015


Ответы (1)


Взгляните на создание SyntaxAnnotation на узлах, которые вы хотите найти после изменений. Удобный способ сделать это — использовать метод расширения TrackNodes() для SyntaxNode.

Вы можете предоставить список узлов, а затем найти их после перезаписи с помощью GetCurrentNodes().

person Kevin Pilch    schedule 23.01.2015
comment
Большое спасибо за ответ. Это было очень полезно. Как я понял, отслеживание узлов реализовано аннотациями. - person tsadigov; 27.01.2015