Перечислять все типы в сборке внутри макроса

Как получить все типы в сборке внутри макроса атрибута вида MacroTargets.Assembly в немерле?

2 ответа

В дополнение к ответу дона Реба...

Вы должны использовать метод Node.EnsureCached() для обеспечения кэширования метаданных.

Дерево имен содержит все типы. Вы можете пройти и отфильтровать его самостоятельно или вызвать его GetTypeBuilders метод.

[ Nemerle.MacroUsage
    ( Nemerle.MacroPhase.WithTypedMembers
    , Nemerle.MacroTargets.Assembly
    )
]
macro ListTypes()
{
    def PrintNameTree(node, depth)
    {
        repeat (depth)
            Write("    ");
        Write("|");
        WriteLine(node.PartName);
        unless (node.Children == null)
        {
            foreach (child in node.Children.Values)
                PrintNameTree(child, depth + 1);
        }
    }

    def env = ImplicitCTX().Env;
    def names = env.NameTree;
    PrintNameTree(names.NamespaceTree, 0);
}
Другие вопросы по тегам