Skip to content

Commit

Permalink
[include-fixer] Correct an incorrecst judgement about prefix scoped q…
Browse files Browse the repository at this point in the history
…ualifiers.

Summary:
The judgement that checks whether the fully-qualified name has scoped qualifiers
prefix is incorrect. Should always check whether the first matched postion is the
beginning position.

Reviewers: bkramer

Subscribers: cfe-commits

Differential Revision: http://reviews.llvm.org/D22343

llvm-svn: 275386
  • Loading branch information
hokein committed Jul 14, 2016
1 parent b030411 commit 0c05e2e
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 5 deletions.
9 changes: 6 additions & 3 deletions clang-tools-extra/include-fixer/IncludeFixerContext.cpp
Expand Up @@ -42,9 +42,12 @@ std::string createQualifiedNameForReplacement(
}
// Append the missing stripped qualifiers.
std::string FullyQualifiedName = QualifiedName + StrippedQualifiers;
auto pos = FullyQualifiedName.find(SymbolScopedQualifiers);
return FullyQualifiedName.substr(
pos == std::string::npos ? 0 : SymbolScopedQualifiers.size());

// Skips symbol scoped qualifiers prefix.
if (llvm::StringRef(FullyQualifiedName).startswith(SymbolScopedQualifiers))
return FullyQualifiedName.substr(SymbolScopedQualifiers.size());

return FullyQualifiedName;
}

} // anonymous namespace
Expand Down
11 changes: 9 additions & 2 deletions clang-tools-extra/unittests/include-fixer/IncludeFixerTest.cpp
Expand Up @@ -63,6 +63,9 @@ static std::string runIncludeFixer(
SymbolInfo("bar", SymbolInfo::SymbolKind::Class, "\"bar.h\"", 1,
{{SymbolInfo::ContextType::Namespace, "b"},
{SymbolInfo::ContextType::Namespace, "a"}}),
SymbolInfo("bar", SymbolInfo::SymbolKind::Class, "\"bar2.h\"", 1,
{{SymbolInfo::ContextType::Namespace, "c"},
{SymbolInfo::ContextType::Namespace, "a"}}),
SymbolInfo("Green", SymbolInfo::SymbolKind::Class, "\"color.h\"", 1,
{{SymbolInfo::ContextType::EnumDecl, "Color"},
{SymbolInfo::ContextType::Namespace, "b"},
Expand Down Expand Up @@ -237,11 +240,15 @@ TEST(IncludeFixer, FixNamespaceQualifiers) {
runIncludeFixer("namespace a {\nnamespace b{\nbar b;\n}\n}\n"));
EXPECT_EQ("c::b::bar b;\n",
runIncludeFixer("c::b::bar b;\n"));
EXPECT_EQ("#include \"bar.h\"\nnamespace c {\na::b::bar b;\n}\n",
EXPECT_EQ("#include \"bar.h\"\nnamespace d {\na::b::bar b;\n}\n",
runIncludeFixer("namespace d {\nbar b;\n}\n"));
EXPECT_EQ("#include \"bar2.h\"\nnamespace c {\na::c::bar b;\n}\n",
runIncludeFixer("namespace c {\nbar b;\n}\n"));

// Test nested classes.
EXPECT_EQ("#include \"bar.h\"\nnamespace c {\na::b::bar::t b;\n}\n",
EXPECT_EQ("#include \"bar.h\"\nnamespace d {\na::b::bar::t b;\n}\n",
runIncludeFixer("namespace d {\nbar::t b;\n}\n"));
EXPECT_EQ("#include \"bar2.h\"\nnamespace c {\na::c::bar::t b;\n}\n",
runIncludeFixer("namespace c {\nbar::t b;\n}\n"));
EXPECT_EQ("#include \"bar.h\"\nnamespace a {\nb::bar::t b;\n}\n",
runIncludeFixer("namespace a {\nbar::t b;\n}\n"));
Expand Down

0 comments on commit 0c05e2e

Please sign in to comment.