summaryrefslogtreecommitdiffstats
path: root/clang/unittests/Tooling/ASTSelectionTest.cpp
diff options
context:
space:
mode:
authorAlex Lorenz <arphaman@gmail.com>2017-11-14 22:06:55 +0000
committerAlex Lorenz <arphaman@gmail.com>2017-11-14 22:06:55 +0000
commitf64d0a4d00fba615f452940ac82654bf9b3efc02 (patch)
tree5839638cc3c8fa4cecb4b1e688846e4850360a1d /clang/unittests/Tooling/ASTSelectionTest.cpp
parent383fbd050cff65bd7568f5b94a18ee2c86273600 (diff)
downloadbcm5719-llvm-f64d0a4d00fba615f452940ac82654bf9b3efc02.tar.gz
bcm5719-llvm-f64d0a4d00fba615f452940ac82654bf9b3efc02.zip
[refactor][selection] canonicalize member expr callee to the full
member call expression We would like to extract the full call when just the callee is selected. llvm-svn: 318205
Diffstat (limited to 'clang/unittests/Tooling/ASTSelectionTest.cpp')
-rw-r--r--clang/unittests/Tooling/ASTSelectionTest.cpp52
1 files changed, 52 insertions, 0 deletions
diff --git a/clang/unittests/Tooling/ASTSelectionTest.cpp b/clang/unittests/Tooling/ASTSelectionTest.cpp
index f10d899a0a7..fc5186ea208 100644
--- a/clang/unittests/Tooling/ASTSelectionTest.cpp
+++ b/clang/unittests/Tooling/ASTSelectionTest.cpp
@@ -1004,4 +1004,56 @@ void foo() {
SelectionFinderVisitor::Lang_OBJC);
}
+TEST(ASTSelectionFinder, CanonicalizeMemberCalleeToCall) {
+ StringRef Source = R"(
+class AClass { public:
+ void method();
+ int afield;
+ void selectWholeCallWhenJustMethodSelected(int &i) {
+ method();
+ }
+};
+void selectWholeCallWhenJustMethodSelected() {
+ AClass a;
+ a.method();
+}
+void dontSelectArgument(AClass &a) {
+ a.selectWholeCallWhenJustMethodSelected(a.afield);
+}
+ )";
+ // Just 'method' with implicit 'this':
+ findSelectedASTNodesWithRange(
+ Source, {6, 5}, FileRange{{6, 5}, {6, 11}},
+ [](SourceRange SelectionRange, Optional<SelectedASTNode> Node) {
+ EXPECT_TRUE(Node);
+ Optional<CodeRangeASTSelection> SelectedCode =
+ CodeRangeASTSelection::create(SelectionRange, std::move(*Node));
+ EXPECT_TRUE(SelectedCode);
+ EXPECT_EQ(SelectedCode->size(), 1u);
+ EXPECT_TRUE(isa<CXXMemberCallExpr>((*SelectedCode)[0]));
+ });
+ // Just 'method':
+ findSelectedASTNodesWithRange(
+ Source, {11, 5}, FileRange{{11, 5}, {11, 11}},
+ [](SourceRange SelectionRange, Optional<SelectedASTNode> Node) {
+ EXPECT_TRUE(Node);
+ Optional<CodeRangeASTSelection> SelectedCode =
+ CodeRangeASTSelection::create(SelectionRange, std::move(*Node));
+ EXPECT_TRUE(SelectedCode);
+ EXPECT_EQ(SelectedCode->size(), 1u);
+ EXPECT_TRUE(isa<CXXMemberCallExpr>((*SelectedCode)[0]));
+ });
+ // Just 'afield', which should not select the call.
+ findSelectedASTNodesWithRange(
+ Source, {14, 5}, FileRange{{14, 45}, {14, 51}},
+ [](SourceRange SelectionRange, Optional<SelectedASTNode> Node) {
+ EXPECT_TRUE(Node);
+ Optional<CodeRangeASTSelection> SelectedCode =
+ CodeRangeASTSelection::create(SelectionRange, std::move(*Node));
+ EXPECT_TRUE(SelectedCode);
+ EXPECT_EQ(SelectedCode->size(), 1u);
+ EXPECT_FALSE(isa<CXXMemberCallExpr>((*SelectedCode)[0]));
+ });
+}
+
} // end anonymous namespace
OpenPOWER on IntegriCloud