Как добавить пользовательскую синтаксическую аннотацию в SyntaxNode?

В предыдущей версии Roslyn я мог добавлять пользовательские данные в SyntaxNode с помощью класса, производного от SyntaxAnnotation. Но теперь SyntaxAnnotation запечатан, и я могу использовать SyntaxAnnotation только со строками: вид и данные. Мне этого недостаточно. Я хочу создать собственный CFG из AST и установить двунаправленные связи между узлами CFG и AST.

Как я могу это сделать?


person Alex Sedow    schedule 02.12.2014    source источник


Ответы (1)


SyntaxAnnotation запечатан, потому что ваше дерево может быть сериализовано, а нам нужно иметь возможность сериализовать и десериализовать аннотации. Если вы хотите сохранить больше информации, сохраните строки, которые вы используете для аннотаций, в качестве ключа к словарю, содержащему состояние.

person Kevin Pilch    schedule 03.12.2014
comment
Спасибо, Кевин. Я тоже думаю о словаре. Но это решение кажется не таким быстрым и требует использования некоторого объекта контекста (для хранения словаря). - person Alex Sedow; 03.12.2014
comment
Вам бы понадобился тот же объект контекста для хранения аннотаций, не так ли? - person Kevin Pilch; 04.12.2014
comment
На данный момент не могу сказать. Потому что, если я добавлю аннотацию к каждому словарю SyntaxNode, он будет очень большим. - person Alex Sedow; 04.12.2014
comment
Конечно, но ConditionalWeakTable аннотаций, которые мы создадим, будет такой же большой. - person Kevin Pilch; 04.12.2014