summaryrefslogtreecommitdiff
path: root/src/tools/clangrefactoringbackend/source
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/clangrefactoringbackend/source')
-rw-r--r--src/tools/clangrefactoringbackend/source/clangrefactoringbackend-source.pri16
-rw-r--r--src/tools/clangrefactoringbackend/source/clangtool.cpp18
-rw-r--r--src/tools/clangrefactoringbackend/source/clangtool.h8
-rw-r--r--src/tools/clangrefactoringbackend/source/collectmacrossourcefilecallbacks.cpp35
-rw-r--r--src/tools/clangrefactoringbackend/source/collectmacrossourcefilecallbacks.h38
-rw-r--r--src/tools/clangrefactoringbackend/source/collectsymbolsaction.cpp39
-rw-r--r--src/tools/clangrefactoringbackend/source/collectsymbolsaction.h71
-rw-r--r--src/tools/clangrefactoringbackend/source/collectsymbolsastvisitor.h126
-rw-r--r--src/tools/clangrefactoringbackend/source/collectsymbolsconsumer.h62
-rw-r--r--src/tools/clangrefactoringbackend/source/findcursorusr.h38
-rw-r--r--src/tools/clangrefactoringbackend/source/findusrforcursoraction.cpp63
-rw-r--r--src/tools/clangrefactoringbackend/source/findusrforcursoraction.h32
-rw-r--r--src/tools/clangrefactoringbackend/source/locationsourcefilecallbacks.h14
-rw-r--r--src/tools/clangrefactoringbackend/source/sourcelocationentry.cpp42
-rw-r--r--src/tools/clangrefactoringbackend/source/sourcelocationentry.h79
-rw-r--r--src/tools/clangrefactoringbackend/source/symbolentry.cpp41
-rw-r--r--src/tools/clangrefactoringbackend/source/symbolentry.h56
-rw-r--r--src/tools/clangrefactoringbackend/source/symbolfinder.h16
-rw-r--r--src/tools/clangrefactoringbackend/source/symbollocationfinderaction.cpp16
-rw-r--r--src/tools/clangrefactoringbackend/source/symbollocationfinderaction.h24
-rw-r--r--src/tools/clangrefactoringbackend/source/symbolscollector.cpp53
-rw-r--r--src/tools/clangrefactoringbackend/source/symbolscollector.h51
22 files changed, 777 insertions, 161 deletions
diff --git a/src/tools/clangrefactoringbackend/source/clangrefactoringbackend-source.pri b/src/tools/clangrefactoringbackend/source/clangrefactoringbackend-source.pri
index 8af6b89974..8a33f63ed2 100644
--- a/src/tools/clangrefactoringbackend/source/clangrefactoringbackend-source.pri
+++ b/src/tools/clangrefactoringbackend/source/clangrefactoringbackend-source.pri
@@ -2,7 +2,14 @@ INCLUDEPATH += $$PWD
HEADERS += \
$$PWD/clangrefactoringbackend_global.h \
- $$PWD/sourcerangefilter.h
+ $$PWD/sourcerangefilter.h \
+ $$PWD/symbolscollector.h \
+ $$PWD/symbolentry.h \
+ $$PWD/collectsymbolsconsumer.h \
+ $$PWD/collectsymbolsaction.h \
+ $$PWD/collectmacrossourcefilecallbacks.h \
+ $$PWD/collectsymbolsastvisitor.h \
+ $$PWD/sourcelocationentry.h
!isEmpty(LIBTOOLING_LIBS) {
SOURCES += \
@@ -36,4 +43,9 @@ HEADERS += \
}
SOURCES += \
- $$PWD/sourcerangefilter.cpp
+ $$PWD/sourcerangefilter.cpp \
+ $$PWD/symbolscollector.cpp \
+ $$PWD/collectsymbolsaction.cpp \
+ $$PWD/collectmacrossourcefilecallbacks.cpp \
+ $$PWD/symbolentry.cpp \
+ $$PWD/sourcelocationentry.cpp
diff --git a/src/tools/clangrefactoringbackend/source/clangtool.cpp b/src/tools/clangrefactoringbackend/source/clangtool.cpp
index a5ea8838fc..f52106f394 100644
--- a/src/tools/clangrefactoringbackend/source/clangtool.cpp
+++ b/src/tools/clangrefactoringbackend/source/clangtool.cpp
@@ -47,15 +47,15 @@ void ClangTool::addFile(std::string &&directory,
std::string &&content,
std::vector<std::string> &&commandLine)
{
- fileContents.emplace_back(toNativePath(std::move(directory)),
+ m_fileContents.emplace_back(toNativePath(std::move(directory)),
std::move(fileName),
std::move(content),
std::move(commandLine));
- const auto &fileContent = fileContents.back();
+ const auto &fileContent = m_fileContents.back();
- compilationDatabase.addFile(fileContent.directory, fileContent.fileName, fileContent.commandLine);
- sourceFilePaths.push_back(fileContent.filePath);
+ m_compilationDatabase.addFile(fileContent.directory, fileContent.fileName, fileContent.commandLine);
+ m_sourceFilePaths.push_back(fileContent.filePath);
}
template <typename Container>
@@ -86,7 +86,7 @@ void ClangTool::addFiles<Utils::PathStringVector>(const Utils::PathStringVector
void ClangTool::addUnsavedFiles(const V2::FileContainers &unsavedFiles)
{
- unsavedFileContents.reserve(unsavedFileContents.size() + unsavedFiles.size());
+ m_unsavedFileContents.reserve(m_unsavedFileContents.size() + unsavedFiles.size());
auto convertToUnsavedFileContent = [] (const V2::FileContainer &unsavedFile) {
return UnsavedFileContent{toNativePath(unsavedFile.filePath().path().clone()),
@@ -95,7 +95,7 @@ void ClangTool::addUnsavedFiles(const V2::FileContainers &unsavedFiles)
std::transform(unsavedFiles.begin(),
unsavedFiles.end(),
- std::back_inserter(unsavedFileContents),
+ std::back_inserter(m_unsavedFileContents),
convertToUnsavedFileContent);
}
@@ -109,14 +109,14 @@ llvm::StringRef toStringRef(const String &string)
clang::tooling::ClangTool ClangTool::createTool() const
{
- clang::tooling::ClangTool tool(compilationDatabase, sourceFilePaths);
+ clang::tooling::ClangTool tool(m_compilationDatabase, m_sourceFilePaths);
- for (const auto &fileContent : fileContents) {
+ for (const auto &fileContent : m_fileContents) {
if (!fileContent.content.empty())
tool.mapVirtualFile(fileContent.filePath, fileContent.content);
}
- for (const auto &unsavedFileContent : unsavedFileContents)
+ for (const auto &unsavedFileContent : m_unsavedFileContents)
tool.mapVirtualFile(toStringRef(unsavedFileContent.filePath),
toStringRef(unsavedFileContent.content));
diff --git a/src/tools/clangrefactoringbackend/source/clangtool.h b/src/tools/clangrefactoringbackend/source/clangtool.h
index c643920914..7957bb7044 100644
--- a/src/tools/clangrefactoringbackend/source/clangtool.h
+++ b/src/tools/clangrefactoringbackend/source/clangtool.h
@@ -104,10 +104,10 @@ public:
clang::tooling::ClangTool createTool() const;
private:
- RefactoringCompilationDatabase compilationDatabase;
- std::vector<FileContent> fileContents;
- std::vector<std::string> sourceFilePaths;
- std::vector<UnsavedFileContent> unsavedFileContents;
+ RefactoringCompilationDatabase m_compilationDatabase;
+ std::vector<FileContent> m_fileContents;
+ std::vector<std::string> m_sourceFilePaths;
+ std::vector<UnsavedFileContent> m_unsavedFileContents;
};
} // namespace ClangBackEnd
diff --git a/src/tools/clangrefactoringbackend/source/collectmacrossourcefilecallbacks.cpp b/src/tools/clangrefactoringbackend/source/collectmacrossourcefilecallbacks.cpp
new file mode 100644
index 0000000000..ade4904e46
--- /dev/null
+++ b/src/tools/clangrefactoringbackend/source/collectmacrossourcefilecallbacks.cpp
@@ -0,0 +1,35 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#include "collectmacrossourcefilecallbacks.h"
+
+namespace ClangBackEnd {
+
+CollectMacrosSourceFileCallbacks::CollectMacrosSourceFileCallbacks()
+{
+
+}
+
+} // namespace ClangBackEnd
diff --git a/src/tools/clangrefactoringbackend/source/collectmacrossourcefilecallbacks.h b/src/tools/clangrefactoringbackend/source/collectmacrossourcefilecallbacks.h
new file mode 100644
index 0000000000..2c28f19f7b
--- /dev/null
+++ b/src/tools/clangrefactoringbackend/source/collectmacrossourcefilecallbacks.h
@@ -0,0 +1,38 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#pragma once
+
+#include <clang/Tooling/Tooling.h>
+
+namespace ClangBackEnd {
+
+class CollectMacrosSourceFileCallbacks : public clang::tooling::SourceFileCallbacks
+{
+public:
+ CollectMacrosSourceFileCallbacks();
+};
+
+} // namespace ClangBackEnd
diff --git a/src/tools/clangrefactoringbackend/source/collectsymbolsaction.cpp b/src/tools/clangrefactoringbackend/source/collectsymbolsaction.cpp
new file mode 100644
index 0000000000..011477e4ba
--- /dev/null
+++ b/src/tools/clangrefactoringbackend/source/collectsymbolsaction.cpp
@@ -0,0 +1,39 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#include "collectsymbolsaction.h"
+
+#include "collectsymbolsconsumer.h"
+
+namespace ClangBackEnd {
+
+std::unique_ptr<clang::ASTConsumer> CollectSymbolsAction::newASTConsumer()
+{
+ return std::make_unique<CollectSymbolsConsumer>(m_symbolEntries,
+ m_sourceLocationEntries,
+ m_filePathCache);
+}
+
+} // namespace ClangBackEnd
diff --git a/src/tools/clangrefactoringbackend/source/collectsymbolsaction.h b/src/tools/clangrefactoringbackend/source/collectsymbolsaction.h
new file mode 100644
index 0000000000..ceaf0ee85b
--- /dev/null
+++ b/src/tools/clangrefactoringbackend/source/collectsymbolsaction.h
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#pragma once
+
+#include "clangrefactoringbackend_global.h"
+#include "sourcelocationentry.h"
+#include "symbolentry.h"
+
+#include <utils/smallstring.h>
+
+#include <stringcachefwd.h>
+
+#include <clang/Frontend/FrontendAction.h>
+
+namespace ClangBackEnd {
+
+class CollectSymbolsAction
+{
+public:
+ CollectSymbolsAction(FilePathCache<> &filePathCache)
+ : m_filePathCache(filePathCache)
+ {}
+
+ std::unique_ptr<clang::ASTConsumer> newASTConsumer();
+
+ SymbolEntries takeSymbols()
+ {
+ return std::move(m_symbolEntries);
+ }
+
+ const SymbolEntries &symbols() const
+ {
+ return m_symbolEntries;
+ }
+
+ const SourceLocationEntries &sourceLocations() const
+ {
+ return m_sourceLocationEntries;
+ }
+
+private:
+ SymbolEntries m_symbolEntries;
+ SourceLocationEntries m_sourceLocationEntries;
+ FilePathCache<> &m_filePathCache;
+
+};
+
+} // namespace ClangBackEnd
diff --git a/src/tools/clangrefactoringbackend/source/collectsymbolsastvisitor.h b/src/tools/clangrefactoringbackend/source/collectsymbolsastvisitor.h
new file mode 100644
index 0000000000..11fd41900f
--- /dev/null
+++ b/src/tools/clangrefactoringbackend/source/collectsymbolsastvisitor.h
@@ -0,0 +1,126 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#pragma once
+
+#include "symbolentry.h"
+#include "sourcelocationentry.h"
+
+#include <stringcache.h>
+
+#include <clang/AST/AST.h>
+#include <clang/AST/ASTContext.h>
+#include <clang/AST/RecursiveASTVisitor.h>
+#include <clang/Index/USRGeneration.h>
+#include <llvm/ADT/SmallVector.h>
+
+#include <vector>
+
+namespace ClangBackEnd {
+
+Utils::SmallStringView toStringView(clang::StringRef stringReference)
+{
+ return Utils::SmallStringView(stringReference.data(), stringReference.size());
+}
+
+class CollectSymbolsASTVisitor : public clang::RecursiveASTVisitor<CollectSymbolsASTVisitor>
+{
+public:
+ CollectSymbolsASTVisitor(SymbolEntries &symbolEntries,
+ SourceLocationEntries &sourceLocationEntries,
+ FilePathCache<> &filePathCache,
+ const clang::SourceManager &sourceManager)
+ : m_symbolEntries(symbolEntries),
+ m_sourceLocationEntries(sourceLocationEntries),
+ m_filePathCache(filePathCache),
+ m_sourceManager(sourceManager)
+ {}
+
+ bool VisitNamedDecl(const clang::NamedDecl *declaration)
+ {
+ auto globalId = declaration->getCanonicalDecl()->getLocation().getRawEncoding();
+ auto sourceLocation = declaration->getLocation();
+
+ auto found = m_symbolEntries.find(globalId);
+ if (found == m_symbolEntries.end()) {
+ m_symbolEntries.emplace(std::piecewise_construct,
+ std::forward_as_tuple(globalId),
+ std::forward_as_tuple(generateUSR(declaration), declaration->getName()));
+ }
+
+ m_sourceLocationEntries.emplace_back(globalId,
+ filePathId(sourceLocation),
+ lineColum(sourceLocation),
+ SymbolType::Declaration);
+
+ return true;
+ }
+
+ bool VisitDeclRefExpr(const clang::DeclRefExpr *expression)
+ {
+ auto declaration = expression->getFoundDecl();
+ auto globalId = declaration->getCanonicalDecl()->getLocation().getRawEncoding();
+ auto sourceLocation = expression->getLocation();
+
+ m_sourceLocationEntries.emplace_back(globalId,
+ filePathId(sourceLocation),
+ lineColum(sourceLocation),
+ SymbolType::DeclarationReference);
+
+ return true;
+ }
+
+ uint filePathId(clang::SourceLocation sourceLocation)
+ {
+ auto filePath = m_sourceManager.getFilename(sourceLocation);
+
+ return m_filePathCache.stringId(toStringView(filePath));
+ }
+
+ LineColumn lineColum(clang::SourceLocation sourceLocation)
+ {
+ return {m_sourceManager.getSpellingLineNumber(sourceLocation),
+ m_sourceManager.getSpellingColumnNumber(sourceLocation)};
+ }
+
+ llvm::SmallVector<char, 128> generateUSR(const clang::Decl *declaration)
+ {
+ llvm::SmallVector<char, 128> usr;
+
+ clang::index::generateUSRForDecl(declaration, usr);
+
+ return usr;
+ }
+
+private:
+ SymbolEntries &m_symbolEntries;
+ SourceLocationEntries &m_sourceLocationEntries;
+ FilePathCache<> &m_filePathCache;
+ const clang::SourceManager &m_sourceManager;
+};
+
+
+} // namespace ClangBackend
+
diff --git a/src/tools/clangrefactoringbackend/source/collectsymbolsconsumer.h b/src/tools/clangrefactoringbackend/source/collectsymbolsconsumer.h
new file mode 100644
index 0000000000..035db37ebc
--- /dev/null
+++ b/src/tools/clangrefactoringbackend/source/collectsymbolsconsumer.h
@@ -0,0 +1,62 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#pragma once
+
+#include "collectsymbolsastvisitor.h"
+
+#include <clang/AST/AST.h>
+#include <clang/AST/ASTConsumer.h>
+#include <clang/AST/ASTContext.h>
+
+#include <stringcachefwd.h>
+
+namespace ClangBackEnd {
+
+class CollectSymbolsConsumer : public clang::ASTConsumer
+{
+public:
+ CollectSymbolsConsumer(SymbolEntries &symbolEntries,
+ SourceLocationEntries &sourceLocationEntries,
+ FilePathCache<> &filePathCache)
+ : m_symbolEntries(symbolEntries),
+ m_sourceLocationEntries(sourceLocationEntries),
+ m_filePathCache(filePathCache)
+ {}
+
+ void HandleTranslationUnit(clang::ASTContext &astContext) override {
+ CollectSymbolsASTVisitor visitor{m_symbolEntries,
+ m_sourceLocationEntries,
+ m_filePathCache,
+ astContext.getSourceManager()};
+ visitor.TraverseDecl(astContext.getTranslationUnitDecl());
+ }
+
+private:
+ SymbolEntries &m_symbolEntries;
+ SourceLocationEntries &m_sourceLocationEntries;
+ FilePathCache<> &m_filePathCache;
+};
+}
diff --git a/src/tools/clangrefactoringbackend/source/findcursorusr.h b/src/tools/clangrefactoringbackend/source/findcursorusr.h
index 0c228c67e8..549086cd3a 100644
--- a/src/tools/clangrefactoringbackend/source/findcursorusr.h
+++ b/src/tools/clangrefactoringbackend/source/findcursorusr.h
@@ -25,26 +25,12 @@
#pragma once
-#if defined(__GNUC__)
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wunused-parameter"
-#elif defined(_MSC_VER)
-# pragma warning(push)
-# pragma warning( disable : 4100 )
-#endif
-
#include <clang/AST/AST.h>
#include <clang/AST/ASTContext.h>
#include <clang/AST/RecursiveASTVisitor.h>
#include <clang/Index/USRGeneration.h>
#include <llvm/ADT/SmallVector.h>
-#if defined(__GNUC__)
-# pragma GCC diagnostic pop
-#elif defined(_MSC_VER)
-# pragma warning(pop)
-#endif
-
#include <vector>
namespace ClangBackEnd {
@@ -54,8 +40,8 @@ class FindNamedDeclarationASTVisitor : public clang::RecursiveASTVisitor<FindNam
public:
explicit FindNamedDeclarationASTVisitor(const clang::SourceManager &sourceManager,
const clang::SourceLocation cursorSourceLocation)
- : sourceManager(sourceManager),
- cursorSourceLocation(cursorSourceLocation)
+ : m_sourceManager(sourceManager),
+ m_cursorSourceLocation(cursorSourceLocation)
{
}
@@ -96,7 +82,7 @@ public:
std::vector<const clang::NamedDecl*> takeNamedDecl()
{
- return std::move(namedDeclarations);
+ return std::move(m_namedDeclarations);
}
private:
@@ -138,7 +124,7 @@ private:
bool isValid = isValidLocationWithCursorInside(startLocation, endLocation);
if (isValid)
- namedDeclarations.push_back(declaration);
+ m_namedDeclarations.push_back(declaration);
return !isValid;
}
@@ -153,20 +139,20 @@ private:
bool isCursorLocationBetween(const clang::SourceLocation startLocation,
const clang::SourceLocation endLocation)
{
- return cursorSourceLocation == startLocation
- || cursorSourceLocation == endLocation
- || (sourceManager.isBeforeInTranslationUnit(startLocation, cursorSourceLocation)
- && sourceManager.isBeforeInTranslationUnit(cursorSourceLocation, endLocation));
+ return m_cursorSourceLocation == startLocation
+ || m_cursorSourceLocation == endLocation
+ || (m_sourceManager.isBeforeInTranslationUnit(startLocation, m_cursorSourceLocation)
+ && m_sourceManager.isBeforeInTranslationUnit(m_cursorSourceLocation, endLocation));
}
- std::vector<const clang::NamedDecl*> namedDeclarations;
- const clang::SourceManager &sourceManager;
- const clang::SourceLocation cursorSourceLocation;
+ std::vector<const clang::NamedDecl*> m_namedDeclarations;
+ const clang::SourceManager &m_sourceManager;
+ const clang::SourceLocation m_cursorSourceLocation;
};
inline
std::vector<const clang::NamedDecl *> namedDeclarationsAt(const clang::ASTContext &Context,
- const clang::SourceLocation cursorSourceLocation)
+ const clang::SourceLocation cursorSourceLocation)
{
const auto &sourceManager = Context.getSourceManager();
const auto currentFile = sourceManager.getFilename(cursorSourceLocation);
diff --git a/src/tools/clangrefactoringbackend/source/findusrforcursoraction.cpp b/src/tools/clangrefactoringbackend/source/findusrforcursoraction.cpp
index 50f7230586..6fa964f531 100644
--- a/src/tools/clangrefactoringbackend/source/findusrforcursoraction.cpp
+++ b/src/tools/clangrefactoringbackend/source/findusrforcursoraction.cpp
@@ -27,24 +27,10 @@
#include "findcursorusr.h"
-#if defined(__GNUC__)
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wunused-parameter"
-#elif defined(_MSC_VER)
-# pragma warning(push)
-# pragma warning( disable : 4100 )
-#endif
-
#include <clang/AST/AST.h>
#include <clang/AST/ASTConsumer.h>
#include <clang/AST/ASTContext.h>
-#if defined(__GNUC__)
-# pragma GCC diagnostic pop
-#elif defined(_MSC_VER)
-# pragma warning(pop)
-#endif
-
#include <algorithm>
#include <vector>
@@ -54,16 +40,16 @@ namespace {
std::vector<USRName> collectConstructorUnifiedSymbolResolutions(const clang::CXXRecordDecl *declarations)
{
- std::vector<USRName> unifiedSymbolResolutions;
+ std::vector<USRName> unifiedSymbolResolutions;
- const auto constructorDeclarations = declarations->getDefinition()->ctors();
+ const auto constructorDeclarations = declarations->getDefinition()->ctors();
- std::transform(constructorDeclarations.begin(),
- constructorDeclarations.end(),
- std::back_inserter(unifiedSymbolResolutions),
- USROfDeclaration);
+ std::transform(constructorDeclarations.begin(),
+ constructorDeclarations.end(),
+ std::back_inserter(unifiedSymbolResolutions),
+ USROfDeclaration);
- return unifiedSymbolResolutions;
+ return unifiedSymbolResolutions;
}
void addUnifiedSymbolResolutionsForDeclaration(const std::vector<const clang::NamedDecl *> &declarations,
@@ -87,18 +73,18 @@ public:
std::vector<USRName> &unifiedSymbolResolutions,
uint line,
uint column)
- : symbolName(symbolName),
- unifiedSymbolResolutions(unifiedSymbolResolutions),
- line(line),
- column(column)
+ : m_symbolName(symbolName),
+ m_unifiedSymbolResolutions(unifiedSymbolResolutions),
+ m_line(line),
+ m_column(column)
{
}
void HandleTranslationUnit(clang::ASTContext &astContext) override {
const auto &sourceManager = astContext.getSourceManager();
const auto cursorSourceLocation = sourceManager.translateLineCol(sourceManager.getMainFileID(),
- line,
- column);
+ m_line,
+ m_column);
if (cursorSourceLocation.isValid())
collectUnifiedSymbolResoltions(astContext, cursorSourceLocation);
@@ -114,32 +100,29 @@ public:
if (const auto *constructorDecl = clang::dyn_cast<clang::CXXConstructorDecl>(firstFoundDeclaration)) {
const clang::CXXRecordDecl *foundDeclarationParent = constructorDecl->getParent();
- unifiedSymbolResolutions = collectConstructorUnifiedSymbolResolutions(foundDeclarationParent);
+ m_unifiedSymbolResolutions = collectConstructorUnifiedSymbolResolutions(foundDeclarationParent);
} else if (const auto *destructorDecl = clang::dyn_cast<clang::CXXDestructorDecl>(firstFoundDeclaration)) {
const clang::CXXRecordDecl *foundDeclarationParent = destructorDecl->getParent();
- unifiedSymbolResolutions = collectConstructorUnifiedSymbolResolutions(foundDeclarationParent);
+ m_unifiedSymbolResolutions = collectConstructorUnifiedSymbolResolutions(foundDeclarationParent);
} else if (const auto *recordDeclaration = clang::dyn_cast<clang::CXXRecordDecl>(firstFoundDeclaration)) {
- unifiedSymbolResolutions = collectConstructorUnifiedSymbolResolutions(recordDeclaration);
+ m_unifiedSymbolResolutions = collectConstructorUnifiedSymbolResolutions(recordDeclaration);
}
- addUnifiedSymbolResolutionsForDeclaration(foundDeclarations, unifiedSymbolResolutions);
- symbolName = firstFoundDeclaration->getNameAsString();
+ addUnifiedSymbolResolutionsForDeclaration(foundDeclarations, m_unifiedSymbolResolutions);
+ m_symbolName = firstFoundDeclaration->getNameAsString();
}
}
private:
- Utils::SmallString &symbolName;
- std::vector<USRName> &unifiedSymbolResolutions;
- uint line;
- uint column;
+ Utils::SmallString &m_symbolName;
+ std::vector<USRName> &m_unifiedSymbolResolutions;
+ uint m_line;
+ uint m_column;
};
std::unique_ptr<clang::ASTConsumer>
USRFindingAction::newASTConsumer() {
- std::unique_ptr<FindDeclarationsConsumer> Consumer(
- new FindDeclarationsConsumer(symbolName, unifiedSymbolResolutions_, line, column));
-
- return std::move(Consumer);
+ return std::make_unique<FindDeclarationsConsumer>(m_symbolName, m_unifiedSymbolResolutions, m_line, m_column);
}
} // namespace ClangBackEnd
diff --git a/src/tools/clangrefactoringbackend/source/findusrforcursoraction.h b/src/tools/clangrefactoringbackend/source/findusrforcursoraction.h
index 6109db187e..bfa4a373a4 100644
--- a/src/tools/clangrefactoringbackend/source/findusrforcursoraction.h
+++ b/src/tools/clangrefactoringbackend/source/findusrforcursoraction.h
@@ -29,21 +29,7 @@
#include <utils/smallstring.h>
-#if defined(__GNUC__)
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wunused-parameter"
-#elif defined(_MSC_VER)
-# pragma warning(push)
-# pragma warning( disable : 4100 )
-#endif
-
-#include "clang/Frontend/FrontendAction.h"
-
-#if defined(__GNUC__)
-# pragma GCC diagnostic pop
-#elif defined(_MSC_VER)
-# pragma warning(pop)
-#endif
+#include <clang/Frontend/FrontendAction.h>
namespace clang {
class ASTConsumer;
@@ -57,8 +43,8 @@ class USRFindingAction
{
public:
USRFindingAction(uint line, uint column)
- : line(line),
- column(column)
+ : m_line(line),
+ m_column(column)
{
}
@@ -66,19 +52,19 @@ public:
std::string takeSymbolName()
{
- return std::string(symbolName);
+ return std::string(m_symbolName);
}
std::vector<USRName> takeUnifiedSymbolResolutions()
{
- return std::move(unifiedSymbolResolutions_);
+ return std::move(m_unifiedSymbolResolutions);
}
private:
- Utils::SmallString symbolName;
- std::vector<USRName> unifiedSymbolResolutions_;
- uint line;
- uint column;
+ Utils::SmallString m_symbolName;
+ std::vector<USRName> m_unifiedSymbolResolutions;
+ uint m_line;
+ uint m_column;
};
} // namespace ClangBackEnd
diff --git a/src/tools/clangrefactoringbackend/source/locationsourcefilecallbacks.h b/src/tools/clangrefactoringbackend/source/locationsourcefilecallbacks.h
index fe23e3e5a5..cb9560ae7d 100644
--- a/src/tools/clangrefactoringbackend/source/locationsourcefilecallbacks.h
+++ b/src/tools/clangrefactoringbackend/source/locationsourcefilecallbacks.h
@@ -27,22 +27,8 @@
#include <sourcelocationscontainer.h>
-#if defined(__GNUC__)
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wunused-parameter"
-#elif defined(_MSC_VER)
-# pragma warning(push)
-# pragma warning( disable : 4100 )
-#endif
-
#include <clang/Tooling/Tooling.h>
-#if defined(__GNUC__)
-# pragma GCC diagnostic pop
-#elif defined(_MSC_VER)
-# pragma warning(pop)
-#endif
-
namespace llvm {
class StringRef;
}
diff --git a/src/tools/clangrefactoringbackend/source/sourcelocationentry.cpp b/src/tools/clangrefactoringbackend/source/sourcelocationentry.cpp
new file mode 100644
index 0000000000..9cea242fa8
--- /dev/null
+++ b/src/tools/clangrefactoringbackend/source/sourcelocationentry.cpp
@@ -0,0 +1,42 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#include "sourcelocationentry.h"
+
+#include <utils/smallstringio.h>
+
+namespace ClangBackEnd {
+
+std::ostream &operator<<(std::ostream &out, const SourceLocationEntry &entry)
+{
+ out << "("
+ << entry.fileId << ", "
+ << entry.line << ", "
+ << entry.column << ")";
+
+ return out;
+}
+
+} // namespace ClangBackEnd
diff --git a/src/tools/clangrefactoringbackend/source/sourcelocationentry.h b/src/tools/clangrefactoringbackend/source/sourcelocationentry.h
new file mode 100644
index 0000000000..b4a6330636
--- /dev/null
+++ b/src/tools/clangrefactoringbackend/source/sourcelocationentry.h
@@ -0,0 +1,79 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#pragma once
+
+#include <limits>
+#include <vector>
+#include <iosfwd>
+
+using uint = unsigned int;
+
+namespace ClangBackEnd {
+
+enum class SymbolType
+{
+ Declaration,
+ DeclarationReference
+};
+
+class LineColumn
+{
+public:
+ LineColumn(uint line, uint column)
+ : line(line),
+ column(column)
+ {}
+
+ uint line = 0;
+ uint column = 0;
+};
+
+class SourceLocationEntry
+{
+public:
+ SourceLocationEntry(uint symbolId,
+ uint fileId,
+ LineColumn lineColumn,
+ SymbolType symbolType)
+ : symbolId(symbolId),
+ fileId(fileId),
+ line(lineColumn.line),
+ column(lineColumn.column),
+ symbolType(symbolType)
+ {}
+
+ uint symbolId = 0;
+ uint fileId = std::numeric_limits<uint>::max();
+ uint line = 0;
+ uint column = 0;
+ SymbolType symbolType;
+};
+
+using SourceLocationEntries = std::vector<SourceLocationEntry>;
+
+std::ostream &operator<<(std::ostream &out, const SourceLocationEntry &entry);
+
+} // namespace ClangBackEnd
diff --git a/src/tools/clangrefactoringbackend/source/symbolentry.cpp b/src/tools/clangrefactoringbackend/source/symbolentry.cpp
new file mode 100644
index 0000000000..ee606cf9ab
--- /dev/null
+++ b/src/tools/clangrefactoringbackend/source/symbolentry.cpp
@@ -0,0 +1,41 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#include "symbolentry.h"
+
+#include <utils/smallstringio.h>
+
+namespace ClangBackEnd {
+
+std::ostream &operator<<(std::ostream &out, const SymbolEntry &entry)
+{
+ out << "("
+ << entry.symbolName << ", "
+ << entry.usr <<")";
+
+ return out;
+}
+
+} // namespace ClangBackEnd
diff --git a/src/tools/clangrefactoringbackend/source/symbolentry.h b/src/tools/clangrefactoringbackend/source/symbolentry.h
new file mode 100644
index 0000000000..cf74418282
--- /dev/null
+++ b/src/tools/clangrefactoringbackend/source/symbolentry.h
@@ -0,0 +1,56 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#pragma once
+
+#include <utils/smallstring.h>
+
+#include <llvm/ADT/SmallVector.h>
+#include <llvm/ADT/StringRef.h>
+
+#include <limits>
+#include <unordered_map>
+#include <iosfwd>
+
+namespace ClangBackEnd {
+
+class SymbolEntry
+{
+public:
+ SymbolEntry(const llvm::SmallVector<char, 128> &usr,
+ llvm::StringRef name)
+ : usr(usr.data(), usr.size()),
+ symbolName(name.data(), name.size())
+ {}
+
+ Utils::PathString usr;
+ Utils::SmallString symbolName;
+};
+
+using SymbolEntries = std::unordered_map<uint, SymbolEntry>;
+
+std::ostream &operator<<(std::ostream &out, const SymbolEntry &entry);
+
+} // namespace ClangBackEnd
diff --git a/src/tools/clangrefactoringbackend/source/symbolfinder.h b/src/tools/clangrefactoringbackend/source/symbolfinder.h
index 42c7098f1e..a76639aa26 100644
--- a/src/tools/clangrefactoringbackend/source/symbolfinder.h
+++ b/src/tools/clangrefactoringbackend/source/symbolfinder.h
@@ -32,22 +32,6 @@
#include <sourcelocationscontainer.h>
-#if defined(__GNUC__)
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wunused-parameter"
-#elif defined(_MSC_VER)
-# pragma warning(push)
-# pragma warning( disable : 4100 )
-#endif
-
-#include "clang/Tooling/Refactoring.h"
-
-#if defined(__GNUC__)
-# pragma GCC diagnostic pop
-#elif defined(_MSC_VER)
-# pragma warning(pop)
-#endif
-
namespace ClangBackEnd {
class SymbolFinder : public ClangTool
diff --git a/src/tools/clangrefactoringbackend/source/symbollocationfinderaction.cpp b/src/tools/clangrefactoringbackend/source/symbollocationfinderaction.cpp
index c5aba6ca90..2b07e893f5 100644
--- a/src/tools/clangrefactoringbackend/source/symbollocationfinderaction.cpp
+++ b/src/tools/clangrefactoringbackend/source/symbollocationfinderaction.cpp
@@ -39,7 +39,7 @@ class FindingSymbolsASTConsumer : public clang::ASTConsumer
{
public:
FindingSymbolsASTConsumer(std::vector<USRName> &unifiedSymbolResolutions)
- : unifiedSymbolResolutions(unifiedSymbolResolutions)
+ : m_unifiedSymbolResolutions(unifiedSymbolResolutions)
{
}
@@ -48,7 +48,7 @@ public:
std::vector<clang::SourceLocation> sourceLocations;
- auto &&sourceLocationsOfUsr = takeLocationsOfUSRs(unifiedSymbolResolutions, context.getTranslationUnitDecl());
+ auto &&sourceLocationsOfUsr = takeLocationsOfUSRs(m_unifiedSymbolResolutions, context.getTranslationUnitDecl());
sourceLocations.insert(sourceLocations.end(),
sourceLocationsOfUsr.begin(),
sourceLocationsOfUsr.end());
@@ -65,24 +65,24 @@ public:
void updateSourceLocations(const std::vector<clang::SourceLocation> &sourceLocations,
const clang::SourceManager &sourceManager)
{
- appendSourceLocationsToSourceLocationsContainer(*sourceLocationsContainer, sourceLocations, sourceManager);
+ appendSourceLocationsToSourceLocationsContainer(*m_sourceLocationsContainer, sourceLocations, sourceManager);
}
void setSourceLocations(ClangBackEnd::SourceLocationsContainer *sourceLocations)
{
- sourceLocationsContainer = sourceLocations;
+ m_sourceLocationsContainer = sourceLocations;
}
private:
- ClangBackEnd::SourceLocationsContainer *sourceLocationsContainer = nullptr;
- std::vector<USRName> &unifiedSymbolResolutions;
+ ClangBackEnd::SourceLocationsContainer *m_sourceLocationsContainer = nullptr;
+ std::vector<USRName> &m_unifiedSymbolResolutions;
};
std::unique_ptr<clang::ASTConsumer> SymbolLocationFinderAction::newASTConsumer()
{
- auto consumer = std::unique_ptr<FindingSymbolsASTConsumer>(new FindingSymbolsASTConsumer(unifiedSymbolResolutions_));
+ auto consumer = std::unique_ptr<FindingSymbolsASTConsumer>(new FindingSymbolsASTConsumer(m_unifiedSymbolResolutions_));
- consumer->setSourceLocations(&sourceLocations);
+ consumer->setSourceLocations(&m_sourceLocations);
return std::move(consumer);
}
diff --git a/src/tools/clangrefactoringbackend/source/symbollocationfinderaction.h b/src/tools/clangrefactoringbackend/source/symbollocationfinderaction.h
index 7bee18f94b..ae601d8219 100644
--- a/src/tools/clangrefactoringbackend/source/symbollocationfinderaction.h
+++ b/src/tools/clangrefactoringbackend/source/symbollocationfinderaction.h
@@ -29,22 +29,8 @@
#include <sourcelocationscontainer.h>
-#if defined(__GNUC__)
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wunused-parameter"
-#elif defined(_MSC_VER)
-# pragma warning(push)
-# pragma warning( disable : 4100 )
-#endif
-
#include <clang/Tooling/Refactoring.h>
-#if defined(__GNUC__)
-# pragma GCC diagnostic pop
-#elif defined(_MSC_VER)
-# pragma warning(pop)
-#endif
-
namespace clang {
class ASTConsumer;
}
@@ -59,22 +45,22 @@ public:
SourceLocationsContainer takeSourceLocations()
{
- return std::move(sourceLocations);
+ return std::move(m_sourceLocations);
}
void setUnifiedSymbolResolutions(std::vector<USRName> &&unifiedSymbolResolutions)
{
- unifiedSymbolResolutions_ = std::move(unifiedSymbolResolutions);
+ m_unifiedSymbolResolutions_ = std::move(unifiedSymbolResolutions);
}
const std::vector<USRName> &unifiedSymbolResolutions() const
{
- return unifiedSymbolResolutions_;
+ return m_unifiedSymbolResolutions_;
}
private:
- ClangBackEnd::SourceLocationsContainer sourceLocations;
- std::vector<USRName> unifiedSymbolResolutions_;
+ ClangBackEnd::SourceLocationsContainer m_sourceLocations;
+ std::vector<USRName> m_unifiedSymbolResolutions_;
};
} // namespace ClangBackEnd
diff --git a/src/tools/clangrefactoringbackend/source/symbolscollector.cpp b/src/tools/clangrefactoringbackend/source/symbolscollector.cpp
new file mode 100644
index 0000000000..c07a01f3ff
--- /dev/null
+++ b/src/tools/clangrefactoringbackend/source/symbolscollector.cpp
@@ -0,0 +1,53 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#include "symbolscollector.h"
+
+namespace ClangBackEnd {
+
+SymbolsCollector::SymbolsCollector(FilePathCache<> &filePathCache)
+ : m_collectSymbolsAction(filePathCache)
+{
+}
+
+void SymbolsCollector::collectSymbols()
+{
+ auto tool = createTool();
+
+ tool.run(clang::tooling::newFrontendActionFactory(&m_collectSymbolsAction,
+ &m_collectMacrosSourceFileCallbacks).get());
+}
+
+const SymbolEntries &SymbolsCollector::symbols() const
+{
+ return m_collectSymbolsAction.symbols();
+}
+
+const SourceLocationEntries &SymbolsCollector::sourceLocations() const
+{
+ return m_collectSymbolsAction.sourceLocations();
+}
+
+} // namespace ClangBackEnd
diff --git a/src/tools/clangrefactoringbackend/source/symbolscollector.h b/src/tools/clangrefactoringbackend/source/symbolscollector.h
new file mode 100644
index 0000000000..f047131d55
--- /dev/null
+++ b/src/tools/clangrefactoringbackend/source/symbolscollector.h
@@ -0,0 +1,51 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#pragma once
+
+#include "clangtool.h"
+#include "collectmacrossourcefilecallbacks.h"
+#include "collectsymbolsaction.h"
+#include "symbolentry.h"
+#include "stringcache.h"
+
+namespace ClangBackEnd {
+
+class SymbolsCollector: public ClangTool
+{
+public:
+ SymbolsCollector(FilePathCache<> &filePathCache);
+
+ void collectSymbols();
+
+ const SymbolEntries &symbols() const;
+ const SourceLocationEntries &sourceLocations() const;
+
+private:
+ CollectSymbolsAction m_collectSymbolsAction;
+ CollectMacrosSourceFileCallbacks m_collectMacrosSourceFileCallbacks;
+};
+
+} // namespace ClangBackEnd