From 31920972eb3457dd10afeb05bddf2e13d773aa00 Mon Sep 17 00:00:00 2001 From: mlangkabel Date: Tue, 5 Jun 2018 11:45:03 +0200 Subject: [PATCH] logic: added "serialize" method for indexer commands --- src/lib/data/indexer/IndexerCommand.cpp | 23 +++++++ src/lib/data/indexer/IndexerCommand.h | 7 +++ src/lib/data/indexer/IndexerCommandType.cpp | 17 +++-- src/lib/data/indexer/IndexerCommandType.h | 1 + .../interprocess/InterprocessIndexer.cpp | 4 -- .../interprocess/InterprocessIndexer.h | 1 - .../data/indexer/IndexerCommandCxx.cpp | 62 +++++++++++++++++++ src/lib_cxx/data/indexer/IndexerCommandCxx.h | 3 + .../data/indexer/IndexerCommandCxxEmpty.cpp | 13 ++++ .../data/indexer/IndexerCommandCxxEmpty.h | 3 + .../data/indexer/IndexerCommandJava.cpp | 22 +++++++ .../data/indexer/IndexerCommandJava.h | 3 + 12 files changed, 150 insertions(+), 9 deletions(-) diff --git a/src/lib/data/indexer/IndexerCommand.cpp b/src/lib/data/indexer/IndexerCommand.cpp index 16b1bf58..1b0f754d 100644 --- a/src/lib/data/indexer/IndexerCommand.cpp +++ b/src/lib/data/indexer/IndexerCommand.cpp @@ -1,7 +1,16 @@ #include "data/indexer/IndexerCommand.h" +#include +#include + #include "utility/utilityString.h" +std::wstring IndexerCommand::serialize(std::shared_ptr indexerCommand, bool compact) +{ + QJsonDocument jsonDocument(indexerCommand->doSerialize()); + return QString::fromUtf8(jsonDocument.toJson(compact ? QJsonDocument::Compact : QJsonDocument::Indented)).toStdWString(); +} + IndexerCommand::IndexerCommand( const FilePath& sourceFilePath ) @@ -18,3 +27,17 @@ const FilePath& IndexerCommand::getSourceFilePath() const { return m_sourceFilePath; } + +QJsonObject IndexerCommand::doSerialize() const +{ + QJsonObject jsonObject; + + { + jsonObject["type"] = QString::fromStdString(indexerCommandTypeToString(getIndexerCommandType())); + } + { + jsonObject["source_file_path"] = QString::fromStdWString(m_sourceFilePath.wstr()); + } + + return jsonObject; +} diff --git a/src/lib/data/indexer/IndexerCommand.h b/src/lib/data/indexer/IndexerCommand.h index 9bed7558..b12f957f 100644 --- a/src/lib/data/indexer/IndexerCommand.h +++ b/src/lib/data/indexer/IndexerCommand.h @@ -8,9 +8,13 @@ #include "utility/file/FilePath.h" #include "utility/file/FilePathFilter.h" +class QJsonObject; + class IndexerCommand { public: + static std::wstring serialize(std::shared_ptr indexerCommand, bool compact = true); + IndexerCommand(const FilePath& sourceFilePath); virtual ~IndexerCommand() = default; @@ -20,6 +24,9 @@ public: const FilePath& getSourceFilePath() const; +protected: + virtual QJsonObject doSerialize() const; + private: FilePath m_sourceFilePath; }; diff --git a/src/lib/data/indexer/IndexerCommandType.cpp b/src/lib/data/indexer/IndexerCommandType.cpp index 4c6f9cfc..8e480ddd 100644 --- a/src/lib/data/indexer/IndexerCommandType.cpp +++ b/src/lib/data/indexer/IndexerCommandType.cpp @@ -5,13 +5,22 @@ std::string indexerCommandTypeToString(IndexerCommandType type) switch(type) { case INDEXER_COMMAND_CXX_EMPTY: - return "indexer command cxx empty"; + return "indexer_command_cxx_empty"; case INDEXER_COMMAND_CXX_CDB: - return "indexer command cxx cdb"; + return "indexer_command_cxx_cdb"; case INDEXER_COMMAND_JAVA: - return "indexer command java"; + return "indexer_command_java"; default: break; } - return "indexer command unknown"; + return "indexer_command_unknown"; } + +IndexerCommandType stringToIndexerCommandType(const std::string& s) +{ + if (s == indexerCommandTypeToString(INDEXER_COMMAND_CXX_EMPTY)) return INDEXER_COMMAND_CXX_EMPTY; + if (s == indexerCommandTypeToString(INDEXER_COMMAND_CXX_CDB)) return INDEXER_COMMAND_CXX_CDB; + if (s == indexerCommandTypeToString(INDEXER_COMMAND_JAVA)) return INDEXER_COMMAND_JAVA; + return INDEXER_COMMAND_UNKNOWN; +} + diff --git a/src/lib/data/indexer/IndexerCommandType.h b/src/lib/data/indexer/IndexerCommandType.h index 16a38fa8..7409ed46 100644 --- a/src/lib/data/indexer/IndexerCommandType.h +++ b/src/lib/data/indexer/IndexerCommandType.h @@ -12,5 +12,6 @@ enum IndexerCommandType }; std::string indexerCommandTypeToString(IndexerCommandType type); +IndexerCommandType stringToIndexerCommandType(const std::string& s); #endif // INDEXER_COMMAND_TYPE_H diff --git a/src/lib/data/indexer/interprocess/InterprocessIndexer.cpp b/src/lib/data/indexer/interprocess/InterprocessIndexer.cpp index f05cd2b3..3fcf46e5 100644 --- a/src/lib/data/indexer/interprocess/InterprocessIndexer.cpp +++ b/src/lib/data/indexer/interprocess/InterprocessIndexer.cpp @@ -15,10 +15,6 @@ InterprocessIndexer::InterprocessIndexer(const std::string& uuid, Id processId) { } -InterprocessIndexer::~InterprocessIndexer() -{ -} - void InterprocessIndexer::work() { try diff --git a/src/lib/data/indexer/interprocess/InterprocessIndexer.h b/src/lib/data/indexer/interprocess/InterprocessIndexer.h index d4e04fb6..b2daeae6 100644 --- a/src/lib/data/indexer/interprocess/InterprocessIndexer.h +++ b/src/lib/data/indexer/interprocess/InterprocessIndexer.h @@ -9,7 +9,6 @@ class InterprocessIndexer { public: InterprocessIndexer(const std::string& uuid, Id processId); - ~InterprocessIndexer(); void work(); diff --git a/src/lib_cxx/data/indexer/IndexerCommandCxx.cpp b/src/lib_cxx/data/indexer/IndexerCommandCxx.cpp index ff2ce99e..78920143 100644 --- a/src/lib_cxx/data/indexer/IndexerCommandCxx.cpp +++ b/src/lib_cxx/data/indexer/IndexerCommandCxx.cpp @@ -1,5 +1,8 @@ #include "data/indexer/IndexerCommandCxx.h" +#include +#include + #include "utility/utilityString.h" IndexerCommandCxx::IndexerCommandCxx( @@ -94,3 +97,62 @@ const FilePath& IndexerCommandCxx::getWorkingDirectory() const { return m_workingDirectory; } + +QJsonObject IndexerCommandCxx::doSerialize() const +{ + QJsonObject jsonObject = IndexerCommand::doSerialize(); + + { + QJsonArray indexedPathsArray; + for (const FilePath& indexedPath : m_indexedPaths) + { + indexedPathsArray.append(QString::fromStdWString(indexedPath.wstr())); + } + jsonObject["indexed_paths"] = indexedPathsArray; + } + { + QJsonArray excludeFiltersArray; + for (const FilePathFilter& excludeFilter : m_excludeFilters) + { + excludeFiltersArray.append(QString::fromStdWString(excludeFilter.wstr())); + } + jsonObject["exclude_filters"] = excludeFiltersArray; + } + { + QJsonArray includeFiltersArray; + for (const FilePathFilter& includeFilter : m_includeFilters) + { + includeFiltersArray.append(QString::fromStdWString(includeFilter.wstr())); + } + jsonObject["include_filters"] = includeFiltersArray; + } + { + jsonObject["working_directory"] = QString::fromStdWString(getWorkingDirectory().wstr()); + } + { + QJsonArray systemHeaderSearchPathsArray; + for (const FilePath& systemHeaderSearchPath : m_systemHeaderSearchPaths) + { + systemHeaderSearchPathsArray.append(QString::fromStdWString(systemHeaderSearchPath.wstr())); + } + jsonObject["system_header_search_paths"] = systemHeaderSearchPathsArray; + } + { + QJsonArray frameworkSearchPathsArray; + for (const FilePath& frameworkSearchPath : m_frameworkSearchPaths) + { + frameworkSearchPathsArray.append(QString::fromStdWString(frameworkSearchPath.wstr())); + } + jsonObject["framework_search_paths"] = frameworkSearchPathsArray; + } + { + QJsonArray compilerFlagsArray; + for (const std::wstring& compilerFlag : m_compilerFlags) + { + compilerFlagsArray.append(QString::fromStdWString(compilerFlag)); + } + jsonObject["compiler_flags"] = compilerFlagsArray; + } + + return jsonObject; +} diff --git a/src/lib_cxx/data/indexer/IndexerCommandCxx.h b/src/lib_cxx/data/indexer/IndexerCommandCxx.h index 13ff5e54..0aa3d3d3 100644 --- a/src/lib_cxx/data/indexer/IndexerCommandCxx.h +++ b/src/lib_cxx/data/indexer/IndexerCommandCxx.h @@ -32,6 +32,9 @@ public: const std::vector& getCompilerFlags() const; const FilePath& getWorkingDirectory() const; +protected: + QJsonObject doSerialize() const override; + private: std::set m_indexedPaths; std::set m_excludeFilters; diff --git a/src/lib_cxx/data/indexer/IndexerCommandCxxEmpty.cpp b/src/lib_cxx/data/indexer/IndexerCommandCxxEmpty.cpp index b3837ac1..6bf623b2 100644 --- a/src/lib_cxx/data/indexer/IndexerCommandCxxEmpty.cpp +++ b/src/lib_cxx/data/indexer/IndexerCommandCxxEmpty.cpp @@ -1,5 +1,7 @@ #include "data/indexer/IndexerCommandCxxEmpty.h" +#include + IndexerCommandType IndexerCommandCxxEmpty::getStaticIndexerCommandType() { return INDEXER_COMMAND_CXX_EMPTY; @@ -35,3 +37,14 @@ std::string IndexerCommandCxxEmpty::getLanguageStandard() const { return m_languageStandard; } + +QJsonObject IndexerCommandCxxEmpty::doSerialize() const +{ + QJsonObject jsonObject = IndexerCommandCxx::doSerialize(); + + { + jsonObject["language_standard"] = QString::fromStdString(m_languageStandard); + } + + return jsonObject; +} diff --git a/src/lib_cxx/data/indexer/IndexerCommandCxxEmpty.h b/src/lib_cxx/data/indexer/IndexerCommandCxxEmpty.h index ef10b789..2ee63579 100644 --- a/src/lib_cxx/data/indexer/IndexerCommandCxxEmpty.h +++ b/src/lib_cxx/data/indexer/IndexerCommandCxxEmpty.h @@ -27,6 +27,9 @@ public: std::string getLanguageStandard() const; +protected: + QJsonObject doSerialize() const override; + private: std::string m_languageStandard; }; diff --git a/src/lib_java/data/indexer/IndexerCommandJava.cpp b/src/lib_java/data/indexer/IndexerCommandJava.cpp index f75f00c4..0877aa14 100644 --- a/src/lib_java/data/indexer/IndexerCommandJava.cpp +++ b/src/lib_java/data/indexer/IndexerCommandJava.cpp @@ -1,5 +1,8 @@ #include "data/indexer/IndexerCommandJava.h" +#include +#include + #include "utility/utilityString.h" IndexerCommandType IndexerCommandJava::getStaticIndexerCommandType() @@ -49,3 +52,22 @@ std::vector IndexerCommandJava::getClassPath() const { return m_classPath; } + +QJsonObject IndexerCommandJava::doSerialize() const +{ + QJsonObject jsonObject = IndexerCommand::doSerialize(); + + { + QJsonArray classPathArray; + for (const FilePath& classPath : m_classPath) + { + classPathArray.append(QString::fromStdWString(classPath.wstr())); + } + jsonObject["class_path"] = classPathArray; + } + { + jsonObject["language_standard"] = QString::fromStdString(m_languageStandard); + } + + return jsonObject; +} diff --git a/src/lib_java/data/indexer/IndexerCommandJava.h b/src/lib_java/data/indexer/IndexerCommandJava.h index 4316d7d5..aad8f5fe 100644 --- a/src/lib_java/data/indexer/IndexerCommandJava.h +++ b/src/lib_java/data/indexer/IndexerCommandJava.h @@ -27,6 +27,9 @@ public: void setClassPath(std::vector classPath); std::vector getClassPath() const; +protected: + QJsonObject doSerialize() const override; + private: const std::string m_languageStandard; std::vector m_classPath;