Author: ioeric Date: Thu Jan 26 10:31:32 2017 New Revision: 293187 URL: http://llvm.org/viewvc/llvm-project?rev=293187&view=rev Log: [change-namespace] correctly shorten namespace when references have leading '::'
Reviewers: bkramer Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D29182 Modified: clang-tools-extra/trunk/change-namespace/ChangeNamespace.cpp clang-tools-extra/trunk/unittests/change-namespace/ChangeNamespaceTests.cpp Modified: clang-tools-extra/trunk/change-namespace/ChangeNamespace.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/change-namespace/ChangeNamespace.cpp?rev=293187&r1=293186&r2=293187&view=diff ============================================================================== --- clang-tools-extra/trunk/change-namespace/ChangeNamespace.cpp (original) +++ clang-tools-extra/trunk/change-namespace/ChangeNamespace.cpp Thu Jan 26 10:31:32 2017 @@ -703,9 +703,6 @@ void ChangeNamespaceTool::replaceQualifi Result.SourceManager->getSpellingLoc(Start), Result.SourceManager->getSpellingLoc(End)), *Result.SourceManager, Result.Context->getLangOpts()); - // If the symbol is already fully qualified, no change needs to be make. - if (NestedName.startswith("::")) - return; std::string FromDeclName = FromDecl->getQualifiedNameAsString(); std::string ReplaceName = getShortestQualifiedNameInNamespace(FromDeclName, NewNs); @@ -774,7 +771,8 @@ void ChangeNamespaceTool::replaceQualifi } // If the new nested name in the new namespace is the same as it was in the // old namespace, we don't create replacement. - if (NestedName == ReplaceName) + if (NestedName == ReplaceName || + (NestedName.startswith("::") && NestedName.drop_front(2) == ReplaceName)) return; // If the reference need to be fully-qualified, add a leading "::" unless // NewNamespace is the global namespace. Modified: clang-tools-extra/trunk/unittests/change-namespace/ChangeNamespaceTests.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/change-namespace/ChangeNamespaceTests.cpp?rev=293187&r1=293186&r2=293187&view=diff ============================================================================== --- clang-tools-extra/trunk/unittests/change-namespace/ChangeNamespaceTests.cpp (original) +++ clang-tools-extra/trunk/unittests/change-namespace/ChangeNamespaceTests.cpp Thu Jan 26 10:31:32 2017 @@ -1667,6 +1667,45 @@ TEST_F(ChangeNamespaceTest, ShortenNames EXPECT_EQ(format(Expected), runChangeNamespaceOnCode(Code)); } +TEST_F(ChangeNamespaceTest, ShortenNamespaceSpecifierInAnonymousNamespace) { + OldNamespace = "nx"; + NewNamespace = "ny::na"; + std::string Code = "class G {};\n" + "namespace ny {\n" + "class Y {};\n" + "namespace na {\n" + "class A {};\n" + "namespace nc { class C {}; } // namespace nc\n" + "}\n // namespace na\n" + "}\n // namespace ny\n" + "namespace nx {\n" + "namespace {\n" + "class X {\n" + " G g; ::ny::Y y; ::ny::na::A a; ::ny::na::nc::C c;\n" + "};\n" + "} // namespace\n" + "} // namespace nx\n"; + std::string Expected = "class G {};\n" + "namespace ny {\n" + "class Y {};\n" + "namespace na {\n" + "class A {};\n" + "namespace nc { class C {}; } // namespace nc\n" + "}\n // namespace na\n" + "}\n // namespace ny\n" + "\n" + "namespace ny {\n" + "namespace na {\n" + "namespace {\n" + "class X {\n" + " G g; Y y; A a; nc::C c;\n" + "};\n" + "} // namespace\n" + "} // namespace na\n" + "} // namespace ny\n"; + EXPECT_EQ(format(Expected), runChangeNamespaceOnCode(Code)); +} + } // anonymous namespace } // namespace change_namespace } // namespace clang _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits