[clang-tools-extra] r343982 - [clang-move] Dump whether a declaration is templated.
Eric Liu via cfe-commits
cfe-commits at lists.llvm.org
Mon Oct 8 10:22:50 PDT 2018
Author: ioeric
Date: Mon Oct 8 10:22:50 2018
New Revision: 343982
URL: http://llvm.org/viewvc/llvm-project?rev=343982&view=rev
Log:
[clang-move] Dump whether a declaration is templated.
Modified:
clang-tools-extra/trunk/clang-move/ClangMove.cpp
clang-tools-extra/trunk/clang-move/ClangMove.h
clang-tools-extra/trunk/clang-move/tool/ClangMoveMain.cpp
clang-tools-extra/trunk/unittests/clang-move/ClangMoveTests.cpp
Modified: clang-tools-extra/trunk/clang-move/ClangMove.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-move/ClangMove.cpp?rev=343982&r1=343981&r2=343982&view=diff
==============================================================================
--- clang-tools-extra/trunk/clang-move/ClangMove.cpp (original)
+++ clang-tools-extra/trunk/clang-move/ClangMove.cpp Mon Oct 8 10:22:50 2018
@@ -899,21 +899,21 @@ void ClangMoveTool::onEndOfTranslationUn
assert(Reporter);
for (const auto *Decl : UnremovedDeclsInOldHeader) {
auto Kind = Decl->getKind();
+ bool Templated = Decl->isTemplated();
const std::string QualifiedName = Decl->getQualifiedNameAsString();
if (Kind == Decl::Kind::Var)
- Reporter->reportDeclaration(QualifiedName, "Variable");
+ Reporter->reportDeclaration(QualifiedName, "Variable", Templated);
else if (Kind == Decl::Kind::Function ||
Kind == Decl::Kind::FunctionTemplate)
- Reporter->reportDeclaration(QualifiedName, "Function");
+ Reporter->reportDeclaration(QualifiedName, "Function", Templated);
else if (Kind == Decl::Kind::ClassTemplate ||
Kind == Decl::Kind::CXXRecord)
- Reporter->reportDeclaration(QualifiedName, "Class");
+ Reporter->reportDeclaration(QualifiedName, "Class", Templated);
else if (Kind == Decl::Kind::Enum)
- Reporter->reportDeclaration(QualifiedName, "Enum");
- else if (Kind == Decl::Kind::Typedef ||
- Kind == Decl::Kind::TypeAlias ||
+ Reporter->reportDeclaration(QualifiedName, "Enum", Templated);
+ else if (Kind == Decl::Kind::Typedef || Kind == Decl::Kind::TypeAlias ||
Kind == Decl::Kind::TypeAliasTemplate)
- Reporter->reportDeclaration(QualifiedName, "TypeAlias");
+ Reporter->reportDeclaration(QualifiedName, "TypeAlias", Templated);
}
return;
}
Modified: clang-tools-extra/trunk/clang-move/ClangMove.h
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-move/ClangMove.h?rev=343982&r1=343981&r2=343982&view=diff
==============================================================================
--- clang-tools-extra/trunk/clang-move/ClangMove.h (original)
+++ clang-tools-extra/trunk/clang-move/ClangMove.h Mon Oct 8 10:22:50 2018
@@ -17,6 +17,7 @@
#include "clang/Tooling/Tooling.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/StringMap.h"
+#include "llvm/ADT/StringRef.h"
#include <map>
#include <memory>
#include <string>
@@ -31,23 +32,30 @@ public:
DeclarationReporter() = default;
~DeclarationReporter() = default;
- void reportDeclaration(llvm::StringRef DeclarationName,
- llvm::StringRef Type) {
- DeclarationList.emplace_back(DeclarationName, Type);
+ void reportDeclaration(llvm::StringRef DeclarationName, llvm::StringRef Type,
+ bool Templated) {
+ DeclarationList.emplace_back(DeclarationName, Type, Templated);
};
- // A <DeclarationName, DeclarationKind> pair.
- // The DeclarationName is a fully qualified name for the declaration, like
- // A::B::Foo. The DeclarationKind is a string represents the kind of the
- // declaration, currently only "Function" and "Class" are supported.
- typedef std::pair<std::string, std::string> DeclarationPair;
+ struct Declaration {
+ Declaration(llvm::StringRef QName, llvm::StringRef Kind, bool Templated)
+ : QualifiedName(QName), Kind(Kind), Templated(Templated) {}
+
+ friend bool operator==(const Declaration &LHS, const Declaration &RHS) {
+ return std::tie(LHS.QualifiedName, LHS.Kind, LHS.Templated) ==
+ std::tie(RHS.QualifiedName, RHS.Kind, RHS.Templated);
+ }
+ std::string QualifiedName; // E.g. A::B::Foo.
+ std::string Kind; // E.g. Function, Class
+ bool Templated = false; // Whether the declaration is templated.
+ };
- const std::vector<DeclarationPair> getDeclarationList() const {
+ const std::vector<Declaration> getDeclarationList() const {
return DeclarationList;
}
private:
- std::vector<DeclarationPair> DeclarationList;
+ std::vector<Declaration> DeclarationList;
};
// Specify declarations being moved. It contains all information of the moved
Modified: clang-tools-extra/trunk/clang-move/tool/ClangMoveMain.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-move/tool/ClangMoveMain.cpp?rev=343982&r1=343981&r2=343982&view=diff
==============================================================================
--- clang-tools-extra/trunk/clang-move/tool/ClangMoveMain.cpp (original)
+++ clang-tools-extra/trunk/clang-move/tool/ClangMoveMain.cpp Mon Oct 8 10:22:50 2018
@@ -138,8 +138,10 @@ int main(int argc, const char **argv) {
const auto &Declarations = Reporter.getDeclarationList();
for (auto I = Declarations.begin(), E = Declarations.end(); I != E; ++I) {
llvm::outs() << " {\n";
- llvm::outs() << " \"DeclarationName\": \"" << I->first << "\",\n";
- llvm::outs() << " \"DeclarationType\": \"" << I->second << "\"\n";
+ llvm::outs() << " \"DeclarationName\": \"" << I->QualifiedName << "\",\n";
+ llvm::outs() << " \"DeclarationType\": \"" << I->Kind << "\"\n";
+ llvm::outs() << " \"Templated\": " << (I->Templated ? "true" : "false")
+ << "\n";
llvm::outs() << " }";
// Don't print trailing "," at the end of last element.
if (I != std::prev(E))
Modified: clang-tools-extra/trunk/unittests/clang-move/ClangMoveTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clang-move/ClangMoveTests.cpp?rev=343982&r1=343981&r2=343982&view=diff
==============================================================================
--- clang-tools-extra/trunk/unittests/clang-move/ClangMoveTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clang-move/ClangMoveTests.cpp Mon Oct 8 10:22:50 2018
@@ -16,6 +16,7 @@
#include "clang/Tooling/Refactoring.h"
#include "clang/Tooling/Tooling.h"
#include "llvm/ADT/StringRef.h"
+#include "gmock/gmock-matchers.h"
#include "gtest/gtest.h"
#include <string>
#include <vector>
@@ -581,7 +582,8 @@ TEST(ClangMove, DumpDecls) {
"namespace a {\n"
"class Move1 {};\n"
"void f1() {}\n"
- "void f2();\n"
+ "template <typename T>"
+ "void f2(T t);\n"
"} // namespace a\n"
"\n"
"class ForwardClass;\n"
@@ -594,6 +596,8 @@ TEST(ClangMove, DumpDecls) {
"typedef int Int2;\n"
"typedef A<double> A_d;"
"using Int = int;\n"
+ "template <typename T>\n"
+ "using AA = A<T>;\n"
"extern int kGlobalInt;\n"
"extern const char* const kGlobalStr;\n"
"} // namespace b\n"
@@ -608,26 +612,28 @@ TEST(ClangMove, DumpDecls) {
Spec.NewHeader = "new_foo.h";
Spec.NewCC = "new_foo.cc";
DeclarationReporter Reporter;
- std::set<DeclarationReporter::DeclarationPair> ExpectedDeclarations = {
- {"A", "Class"},
- {"B", "Class"},
- {"a::Move1", "Class"},
- {"a::f1", "Function"},
- {"a::f2", "Function"},
- {"a::b::Move1", "Class"},
- {"a::b::f", "Function"},
- {"a::b::E1", "Enum"},
- {"a::b::E2", "Enum"},
- {"a::b::Int2", "TypeAlias"},
- {"a::b::A_d", "TypeAlias"},
- {"a::b::Int", "TypeAlias"},
- {"a::b::kGlobalInt", "Variable"},
- {"a::b::kGlobalStr", "Variable"}};
+ std::vector<DeclarationReporter::Declaration> ExpectedDeclarations = {
+ {"A", "Class", true},
+ {"B", "Class", false},
+ {"a::Move1", "Class", false},
+ {"a::f1", "Function", false},
+ {"a::f2", "Function", true},
+ {"a::b::Move1", "Class", false},
+ {"a::b::f", "Function", false},
+ {"a::b::E1", "Enum", false},
+ {"a::b::E2", "Enum", false},
+ {"a::b::Int2", "TypeAlias", false},
+ {"a::b::A_d", "TypeAlias", false},
+ {"a::b::Int", "TypeAlias", false},
+ {"a::b::AA", "TypeAlias", true},
+ {"a::b::kGlobalInt", "Variable", false},
+ {"a::b::kGlobalStr", "Variable", false}};
runClangMoveOnCode(Spec, TestHeader, TestCode, &Reporter);
- std::set<DeclarationReporter::DeclarationPair> Results;
- for (const auto& DelPair : Reporter.getDeclarationList())
- Results.insert(DelPair);
- EXPECT_EQ(ExpectedDeclarations, Results);
+ std::vector<DeclarationReporter::Declaration> Results;
+ for (const auto &DelPair : Reporter.getDeclarationList())
+ Results.push_back(DelPair);
+ EXPECT_THAT(ExpectedDeclarations,
+ testing::UnorderedElementsAreArray(Results));
}
} // namespace
More information about the cfe-commits
mailing list