src: add IndexerCommandType that will be used instead of string

This commit is contained in:
malte_langkabel
2017-05-16 15:29:46 +02:00
parent 80016596df
commit 4d140e396a
15 changed files with 78 additions and 41 deletions
+2
View File
@@ -162,6 +162,8 @@ add_files(
data/indexer/IndexerCommand.h
data/indexer/IndexerCommandList.cpp
data/indexer/IndexerCommandList.h
data/indexer/IndexerCommandType.cpp
data/indexer/IndexerCommandType.h
data/indexer/IndexerComposite.cpp
data/indexer/IndexerComposite.h
data/indexer/IndexerFactory.cpp
+13 -13
View File
@@ -7,44 +7,44 @@
#include "data/indexer/IndexerCommand.h"
#include "utility/logging/logging.h"
template <typename IndexerCommandType>
template <typename T>
class Indexer
: public IndexerBase
{
public:
virtual ~Indexer();
virtual std::string getKindString() const;
virtual IndexerCommandType getSupportedIndexerCommandType() const;
virtual std::shared_ptr<IntermediateStorage> index(
std::shared_ptr<IndexerCommand> indexerCommand,
std::shared_ptr<FileRegister> fileRegister);
virtual std::shared_ptr<IntermediateStorage> doIndex(
std::shared_ptr<IndexerCommandType> indexerCommand,
std::shared_ptr<T> indexerCommand,
std::shared_ptr<FileRegister> fileRegister) = 0;
};
template <typename IndexerCommandType>
Indexer<IndexerCommandType>::~Indexer()
template <typename T>
Indexer<T>::~Indexer()
{
}
template <typename IndexerCommandType>
std::string Indexer<IndexerCommandType>::getKindString() const
template <typename T>
IndexerCommandType Indexer<T>::getSupportedIndexerCommandType() const
{
return IndexerCommandType::getIndexerKindString();
return T::getStaticIndexerCommandType();
}
template <typename IndexerCommandType>
std::shared_ptr<IntermediateStorage> Indexer<IndexerCommandType>::index(
template <typename T>
std::shared_ptr<IntermediateStorage> Indexer<T>::index(
std::shared_ptr<IndexerCommand> indexerCommand, std::shared_ptr<FileRegister> fileRegister)
{
std::shared_ptr<IndexerCommandType> castedCommand = std::dynamic_pointer_cast<IndexerCommandType>(indexerCommand);
std::shared_ptr<T> castedCommand = std::dynamic_pointer_cast<T>(indexerCommand);
if (!castedCommand)
{
LOG_ERROR("Trying to process " + indexerCommand->getKindString() +
" indexer command with " + getKindString() + " indexer.");
LOG_ERROR("Trying to process " + indexerCommandTypeToString(indexerCommand->getIndexerCommandType()) +
" indexer command with indexer that supports \"" + indexerCommandTypeToString(getSupportedIndexerCommandType()) + "\".");
return std::shared_ptr<IntermediateStorage>();
}
+3 -1
View File
@@ -4,6 +4,8 @@
#include <memory>
#include <string>
#include "data/indexer/IndexerCommandType.h"
class FileRegister;
class IndexerCommand;
class IntermediateStorage;
@@ -14,7 +16,7 @@ public:
IndexerBase();
virtual ~IndexerBase();
virtual std::string getKindString() const = 0;
virtual IndexerCommandType getSupportedIndexerCommandType() const = 0;
virtual std::shared_ptr<IntermediateStorage> index(
std::shared_ptr<IndexerCommand> indexerCommand,
+3 -1
View File
@@ -4,6 +4,7 @@
#include <set>
#include <string>
#include "data/indexer/IndexerCommandType.h"
#include "utility/file/FilePath.h"
class IndexerCommand
@@ -12,7 +13,8 @@ public:
IndexerCommand(const FilePath& sourceFilePath, const std::set<FilePath>& indexedPaths, const std::set<FilePath>& excludedPaths);
virtual ~IndexerCommand();
virtual std::string getKindString() const = 0;
virtual IndexerCommandType getIndexerCommandType() const = 0;
virtual size_t getByteSize() const;
FilePath getSourceFilePath() const;
@@ -0,0 +1,15 @@
#include "data/indexer/IndexerCommandType.h"
std::string indexerCommandTypeToString(IndexerCommandType type)
{
switch(type)
{
case INDEXER_COMMAND_CXX_MANUAL:
return "indexer command cxx manual";
case INDEXER_COMMAND_CXX_CDB:
return "indexer command cxx cdb";
case INDEXER_COMMAND_JAVA:
return "indexer command java";
}
return "indexer command unknown";
}
+16
View File
@@ -0,0 +1,16 @@
#ifndef INDEXER_COMMAND_TYPE_H
#define INDEXER_COMMAND_TYPE_H
#include <string>
enum IndexerCommandType
{
INDEXER_COMMAND_UNKNOWN,
INDEXER_COMMAND_CXX_MANUAL,
INDEXER_COMMAND_CXX_CDB,
INDEXER_COMMAND_JAVA,
};
std::string indexerCommandTypeToString(IndexerCommandType type);
#endif // INDEXER_COMMAND_TYPE_H
+5 -5
View File
@@ -8,26 +8,26 @@ IndexerComposite::~IndexerComposite()
{
}
std::string IndexerComposite::getKindString() const
IndexerCommandType IndexerComposite::getSupportedIndexerCommandType() const
{
return "composite";
return INDEXER_COMMAND_UNKNOWN;
}
void IndexerComposite::addIndexer(std::shared_ptr<IndexerBase> indexer)
{
m_indexers.emplace(indexer->getKindString(), indexer);
m_indexers.emplace(indexer->getSupportedIndexerCommandType(), indexer);
}
std::shared_ptr<IntermediateStorage> IndexerComposite::index(
std::shared_ptr<IndexerCommand> indexerCommand, std::shared_ptr<FileRegister> fileRegister)
{
auto it = m_indexers.find(indexerCommand->getKindString());
auto it = m_indexers.find(indexerCommand->getIndexerCommandType());
if (it != m_indexers.end())
{
return it->second->index(indexerCommand, fileRegister);
}
LOG_ERROR("No indexer found to handle " + indexerCommand->getKindString() + " indexer command.");
LOG_ERROR("No indexer found that supports \"" + indexerCommandTypeToString(indexerCommand->getIndexerCommandType()) + "\".");
return std::shared_ptr<IntermediateStorage>();
}
+2 -2
View File
@@ -11,7 +11,7 @@ class IndexerComposite: public IndexerBase
public:
virtual ~IndexerComposite();
virtual std::string getKindString() const;
virtual IndexerCommandType getSupportedIndexerCommandType() const;
void addIndexer(std::shared_ptr<IndexerBase> indexer);
@@ -23,7 +23,7 @@ public:
virtual void interrupt();
private:
std::unordered_map<std::string, std::shared_ptr<IndexerBase>> m_indexers;
std::unordered_map<IndexerCommandType, std::shared_ptr<IndexerBase>> m_indexers;
};
#endif // INDEXER_COMPOSITE_H
@@ -44,7 +44,7 @@ void SharedIndexerCommand::fromLocal(IndexerCommand* indexerCommand)
else
{
LOG_ERROR_STREAM(<< "Trying to push unhandled type of IndexerCommand for file: "
<< indexerCommand->getSourceFilePath().str() << ". Type string is: " << indexerCommand->getKindString()
<< indexerCommand->getSourceFilePath().str() << ". Type string is: " << indexerCommandTypeToString(indexerCommand->getIndexerCommandType())
<< ". It will be ignored.");
}
}
@@ -21,9 +21,9 @@ std::vector<FilePath> IndexerCommandCxxCdb::getSourceFilesFromCDB(const FilePath
return filePaths;
}
std::string IndexerCommandCxxCdb::getIndexerKindString()
IndexerCommandType IndexerCommandCxxCdb::getStaticIndexerCommandType()
{
return "CxxCdb";
return INDEXER_COMMAND_CXX_CDB;
}
IndexerCommandCxxCdb::IndexerCommandCxxCdb(
@@ -44,9 +44,9 @@ IndexerCommandCxxCdb::~IndexerCommandCxxCdb()
{
}
std::string IndexerCommandCxxCdb::getKindString() const
IndexerCommandType IndexerCommandCxxCdb::getIndexerCommandType() const
{
return getIndexerKindString();
return getStaticIndexerCommandType();
}
size_t IndexerCommandCxxCdb::getByteSize() const
@@ -18,7 +18,7 @@ class IndexerCommandCxxCdb
public:
static std::vector<FilePath> getSourceFilesFromCDB(const FilePath& compilationDatabasePath);
static std::string getIndexerKindString();
static IndexerCommandType getStaticIndexerCommandType();
IndexerCommandCxxCdb(
const FilePath& sourceFilePath,
@@ -30,7 +30,7 @@ public:
const std::vector<FilePath>& frameworkSearchPaths);
virtual ~IndexerCommandCxxCdb();
virtual std::string getKindString() const;
virtual IndexerCommandType getIndexerCommandType() const override;
virtual size_t getByteSize() const;
FilePath getWorkingDirectory() const;
@@ -1,8 +1,8 @@
#include "data/indexer/IndexerCommandCxxManual.h"
std::string IndexerCommandCxxManual::getIndexerKindString()
IndexerCommandType IndexerCommandCxxManual::getStaticIndexerCommandType()
{
return "CxxManual";
return INDEXER_COMMAND_CXX_MANUAL;
}
IndexerCommandCxxManual::IndexerCommandCxxManual(
@@ -23,9 +23,9 @@ IndexerCommandCxxManual::~IndexerCommandCxxManual()
{
}
std::string IndexerCommandCxxManual::getKindString() const
IndexerCommandType IndexerCommandCxxManual::getIndexerCommandType() const
{
return getIndexerKindString();
return getStaticIndexerCommandType();
}
size_t IndexerCommandCxxManual::getByteSize() const
@@ -9,7 +9,7 @@ class IndexerCommandCxxManual
: public IndexerCommandCxx
{
public:
static std::string getIndexerKindString();
static IndexerCommandType getStaticIndexerCommandType();
IndexerCommandCxxManual(
const FilePath& sourceFilePath,
@@ -22,7 +22,7 @@ public:
virtual ~IndexerCommandCxxManual();
virtual std::string getKindString() const;
virtual IndexerCommandType getIndexerCommandType() const override;
virtual size_t getByteSize() const;
std::string getLanguageStandard() const;
@@ -1,8 +1,8 @@
#include "data/indexer/IndexerCommandJava.h"
std::string IndexerCommandJava::getIndexerKindString()
IndexerCommandType IndexerCommandJava::getStaticIndexerCommandType()
{
return "Java";
return INDEXER_COMMAND_JAVA;
}
IndexerCommandJava::IndexerCommandJava(
@@ -20,9 +20,9 @@ IndexerCommandJava::~IndexerCommandJava()
{
}
std::string IndexerCommandJava::getKindString() const
IndexerCommandType IndexerCommandJava::getIndexerCommandType() const
{
return getIndexerKindString();
return getStaticIndexerCommandType();
}
size_t IndexerCommandJava::getByteSize() const
@@ -11,7 +11,7 @@ class IndexerCommandJava
: public IndexerCommand
{
public:
static std::string getIndexerKindString();
static IndexerCommandType getStaticIndexerCommandType();
IndexerCommandJava(
const FilePath& sourceFilePath,
@@ -20,7 +20,7 @@ public:
const std::vector<FilePath>& classPath);
virtual ~IndexerCommandJava();
virtual std::string getKindString() const override;
virtual IndexerCommandType getIndexerCommandType() const override;
virtual size_t getByteSize() const override;
std::vector<FilePath> getClassPath() const;