Перечислять все типы в сборке внутри макроса - PullRequest
2 голосов
/ 25 августа 2011

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

Ответы [ 2 ]

1 голос
/ 25 августа 2011

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

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

1 голос
/ 25 августа 2011

Дерево имен содержит все типы.Вы можете пройти и отфильтровать его самостоятельно или вызвать метод 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);
}
...