logic: add name delimiter to NameHierarchy

* NameHierarchy now looks like this: <delimiter>\tm<all the rest>
* made new baseclasses for SettingsMigration and SettingsMigrator
* Use the migration system for SqliteBookmarkStorage as well
This commit is contained in:
malte_langkabel
2017-05-16 13:08:12 +02:00
parent 6d0f633d24
commit c551c9a1dd
71 changed files with 692 additions and 523 deletions
@@ -40,7 +40,7 @@ CxxAstVisitor::CxxAstVisitor(
return declName->toNameHierarchy();
}
}
return NameHierarchy("global");
return NameHierarchy("global", NAME_DELIMITER_UNKNOWN);
}
);
m_typeNameCache = std::make_shared<TypeNameCache>([](const clang::Type* type) -> NameHierarchy
@@ -53,7 +53,7 @@ CxxAstVisitor::CxxAstVisitor(
return typeName->toNameHierarchy();
}
}
return NameHierarchy("global");
return NameHierarchy("global", NAME_DELIMITER_UNKNOWN);
}
);
@@ -383,7 +383,7 @@ void CxxAstVisitorComponentIndexer::visitUsingDirectiveDecl(clang::UsingDirectiv
m_client->recordReference(
REFERENCE_USAGE,
nameHierarchy,
getAstVisitor()->getComponent<CxxAstVisitorComponentContext>()->getContextName(NameHierarchy(loc.filePath.str())),
getAstVisitor()->getComponent<CxxAstVisitorComponentContext>()->getContextName(NameHierarchy(loc.filePath.str(), NAME_DELIMITER_FILE)),
loc
);
}
@@ -397,7 +397,7 @@ void CxxAstVisitorComponentIndexer::visitUsingDecl(clang::UsingDecl* d)
m_client->recordReference(
REFERENCE_USAGE,
getAstVisitor()->getDeclNameCache()->getValue(d),
getAstVisitor()->getComponent<CxxAstVisitorComponentContext>()->getContextName(NameHierarchy(loc.filePath.str())),
getAstVisitor()->getComponent<CxxAstVisitorComponentContext>()->getContextName(NameHierarchy(loc.filePath.str(), NAME_DELIMITER_FILE)),
loc
);
}
@@ -10,7 +10,6 @@
#include "data/indexer/IndexerCommandCxxCdb.h"
#include "data/indexer/IndexerCommandCxxManual.h"
#include "data/name/NameHierarchy.h"
#include "data/parser/cxx/ASTActionFactory.h"
#include "data/parser/cxx/CxxCompilationDatabaseSingle.h"
#include "data/parser/cxx/CxxDiagnosticConsumer.h"
@@ -69,8 +68,6 @@ CxxParser::~CxxParser()
void CxxParser::buildIndex(std::shared_ptr<IndexerCommandCxxCdb> indexerCommand)
{
NameHierarchy::setDelimiter(getSymbolNameDelimiterForLanguage(LANGUAGE_CPP));
clang::tooling::CompileCommand compileCommand;
compileCommand.Filename = indexerCommand->getSourceFilePath().str();
compileCommand.Directory = indexerCommand->getWorkingDirectory().str();
@@ -101,8 +98,6 @@ void CxxParser::buildIndex(std::shared_ptr<IndexerCommandCxxCdb> indexerCommand)
void CxxParser::buildIndex(std::shared_ptr<IndexerCommandCxxManual> indexerCommand)
{
NameHierarchy::setDelimiter(getSymbolNameDelimiterForLanguage(LANGUAGE_CPP));
std::shared_ptr<clang::tooling::CompilationDatabase> compilationDatabase = getCompilationDatabase(indexerCommand);
clang::tooling::ClangTool tool(*compilationDatabase, std::vector<std::string>(1, indexerCommand->getSourceFilePath().str()));
@@ -122,8 +117,6 @@ void CxxParser::buildIndex(std::shared_ptr<IndexerCommandCxxManual> indexerComma
void CxxParser::buildIndex(const std::string& fileName, std::shared_ptr<TextAccess> fileContent)
{
NameHierarchy::setDelimiter(getSymbolNameDelimiterForLanguage(LANGUAGE_CPP));
std::shared_ptr<FilePathCache> canonicalFilePathCache = std::make_shared<FilePathCache>([](std::string fileName) -> FilePath
{
return FilePath(fileName).canonical();
@@ -62,8 +62,8 @@ void PreprocessorCallbacks::InclusionDirective(
FilePath includedFilePath = m_canonicalFilePathCache->getValue(fileEntry->getName());
if (m_fileRegister->hasFilePath(includedFilePath))
{
const NameHierarchy referencedNameHierarchy(includedFilePath.str());
const NameHierarchy contextNameHierarchy(m_currentPath.str());
const NameHierarchy referencedNameHierarchy(includedFilePath.str(), NAME_DELIMITER_FILE);
const NameHierarchy contextNameHierarchy(m_currentPath.str(), NAME_DELIMITER_FILE);
m_client->recordReference(
REFERENCE_INCLUDE,
@@ -85,7 +85,7 @@ void PreprocessorCallbacks::MacroDefined(const clang::Token& macroNameToken, con
return;
}
const NameHierarchy nameHierarchy(macroNameToken.getIdentifierInfo()->getName().str());
const NameHierarchy nameHierarchy(macroNameToken.getIdentifierInfo()->getName().str(), NAME_DELIMITER_CXX);
m_client->recordSymbol(
nameHierarchy,
@@ -134,8 +134,8 @@ void PreprocessorCallbacks::onMacroUsage(const clang::Token& macroNameToken)
{
const ParseLocation loc = getParseLocation(macroNameToken);
const NameHierarchy referencedNameHierarchy(macroNameToken.getIdentifierInfo()->getName().str());
const NameHierarchy contextNameHierarchy(loc.filePath.str());
const NameHierarchy referencedNameHierarchy(macroNameToken.getIdentifierInfo()->getName().str(), NAME_DELIMITER_CXX);
const NameHierarchy contextNameHierarchy(loc.filePath.str(), NAME_DELIMITER_FILE);
m_client->recordReference(
REFERENCE_MACRO_USAGE,
@@ -38,7 +38,7 @@ NameHierarchy CxxDeclName::toNameHierarchy() const
nameString += ">";
}
NameHierarchy ret = getParent() ? getParent()->toNameHierarchy(): NameHierarchy();
NameHierarchy ret = getParent() ? getParent()->toNameHierarchy(): NameHierarchy(NAME_DELIMITER_CXX);
ret.push(std::make_shared<NameElement>(nameString));
return ret;
@@ -39,7 +39,7 @@ CxxTypeName::~CxxTypeName()
NameHierarchy CxxTypeName::toNameHierarchy() const
{
NameHierarchy ret = getParent() ? getParent()->toNameHierarchy(): NameHierarchy();
NameHierarchy ret = getParent() ? getParent()->toNameHierarchy(): NameHierarchy(NAME_DELIMITER_CXX);
ret.push(std::make_shared<NameElement>(getTypeNameString()));
return ret;
}