2017-10-13 94 views
0

我一直在使用Tool.run(ToolAction)运行一个铛工具。如果我想在同一个输入源上运行多个工具,是否只需创建不同的ToolAction,并且一个接一个地调用Tool.run?或者我以某种方式将ASTFrontendAction连在一起?运行多个铛通行证

回答

0

这取决于你想达到什么。

如果你想解析一次,然后用AST做多件事情,你应该更好地实现多个ASTConsumers。

然后你就可以创建聚合ASTConsumer:

class AggregateASTConsumer : public clang::ASTConsumer { 

public: 
    void HandleTranslationUnit(clang::ASTContext& Ctx) override { 
     for (auto consumer: consumers) 
       consumer.HandleTranslationUnit(Ctx); 

    } 
    std::vector<ASTConsumer*> consumers; 
} 

但随着一些不同的选项,那么你应该运行工具多次,如果你想重新解析输入源代码。