From c0b8954ecba500e3d9609152295b74ccd7d89d62 Mon Sep 17 00:00:00 2001 From: Yitzhak Mandelbaum Date: Mon, 20 Jul 2020 21:16:39 +0000 Subject: [libTooling] In Clang Transformer, change `Metadata` field to deferred evalutaion `Metadata` is being changed from an `llvm::Any` to a `MatchConsumer`, so that it's evaluation can be be dependent on `MatchResult`s passed in. Reviewed By: ymandel, gribozavr2 Differential Revision: https://reviews.llvm.org/D83820 --- clang/unittests/Tooling/TransformerTest.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'clang/unittests/Tooling/TransformerTest.cpp') diff --git a/clang/unittests/Tooling/TransformerTest.cpp b/clang/unittests/Tooling/TransformerTest.cpp index 7d6b632..59b334b 100644 --- a/clang/unittests/Tooling/TransformerTest.cpp +++ b/clang/unittests/Tooling/TransformerTest.cpp @@ -440,6 +440,12 @@ TEST_F(TransformerTest, RemoveEdit) { } TEST_F(TransformerTest, WithMetadata) { + auto makeMetadata = [](const MatchFinder::MatchResult &R) -> llvm::Any { + int N = + R.Nodes.getNodeAs("int")->getValue().getLimitedValue(); + return N; + }; + std::string Input = R"cc( int f() { int x = 5; @@ -448,8 +454,11 @@ TEST_F(TransformerTest, WithMetadata) { )cc"; Transformer T( - makeRule(declStmt().bind("decl"), - withMetadata(remove(statement(std::string("decl"))), 17)), + makeRule( + declStmt(containsDeclaration(0, varDecl(hasInitializer( + integerLiteral().bind("int"))))) + .bind("decl"), + withMetadata(remove(statement(std::string("decl"))), makeMetadata)), consumer()); T.registerMatchers(&MatchFinder); auto Factory = newFrontendActionFactory(&MatchFinder); @@ -459,7 +468,7 @@ TEST_F(TransformerTest, WithMetadata) { ASSERT_EQ(Changes.size(), 1u); const llvm::Any &Metadata = Changes[0].getMetadata(); ASSERT_TRUE(llvm::any_isa(Metadata)); - EXPECT_THAT(llvm::any_cast(Metadata), 17); + EXPECT_THAT(llvm::any_cast(Metadata), 5); } TEST_F(TransformerTest, MultiChange) { -- cgit v1.1