From 0cbf1ad1bb461e416382403ddc0328602ccbe9c0 Mon Sep 17 00:00:00 2001 From: Andreas Stallinger Date: Tue, 23 Feb 2016 10:38:34 +0100 Subject: [PATCH] logic: getframeworkpaths to compilationdatabase * getframeworkpaths added * typename for iterator in cache added(fix) --- src/app/main.cpp | 11 ++++++ src/lib/utility/Cache.h | 2 +- .../SolutionParserCompilationDatabase.cpp | 39 ++++++++++++++++--- .../SolutionParserCompilationDatabase.h | 5 +++ 4 files changed, 50 insertions(+), 7 deletions(-) diff --git a/src/app/main.cpp b/src/app/main.cpp index 4490edd7..ad0fe268 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -18,6 +18,7 @@ #include "version.h" #include "settings/ProjectSettings.h" +#include "utility/solution/SolutionParserCompilationDatabase.h" void init() { @@ -32,6 +33,7 @@ void init() utility::loadFontsFromDirectory(ResourcePaths::getFontsPath(), ".otf"); } +#include int main(int argc, char *argv[]) { @@ -54,6 +56,15 @@ int main(int argc, char *argv[]) commandLineParser.setup(); commandLineParser.process(qtApp); + + SolutionParserCompilationDatabase sp; + sp.openSolutionFile("/home/st4ll1/dev/coati/build/Release/compile_commands.json"); + std::vector v = sp.getIncludePaths(); + for(std::string s : v) + { + std::cout << s << std::endl; + } + QtViewFactory viewFactory; QtNetworkFactory networkFactory; diff --git a/src/lib/utility/Cache.h b/src/lib/utility/Cache.h index aa6121ce..6a93407e 100644 --- a/src/lib/utility/Cache.h +++ b/src/lib/utility/Cache.h @@ -25,7 +25,7 @@ Cache::Cache(std::function calculator) template ValType Cache::getValue(KeyType key) { - std::map::const_iterator it = m_map.find(key); + typename std::map::const_iterator it = m_map.find(key); if (it != m_map.end()) { return it->second; diff --git a/src/lib/utility/solution/SolutionParserCompilationDatabase.cpp b/src/lib/utility/solution/SolutionParserCompilationDatabase.cpp index d307c617..63080b63 100644 --- a/src/lib/utility/solution/SolutionParserCompilationDatabase.cpp +++ b/src/lib/utility/solution/SolutionParserCompilationDatabase.cpp @@ -31,10 +31,30 @@ std::vector SolutionParserCompilationDatabase::getProjectItems() std::vector SolutionParserCompilationDatabase::getIncludePaths() { - std::vector commands = getDatabase()->getAllCompileCommands(); + if(m_searchPaths.empty()) + { + parseDatabase(); + } + return m_searchPaths; +} + +std::vector SolutionParserCompilationDatabase::getFrameworkPaths() +{ + if(m_searchPaths.empty()) + { + parseDatabase(); + } + return m_frameworkPaths; +} + +void SolutionParserCompilationDatabase::parseDatabase() +{ + std::vector commands = getDatabase()->getAllCompileCommands(); std::set searchPaths; + std::set frameworkPaths; bool insertNext = false; + bool insertFramework = false; for(clang::tooling::CompileCommand command : commands) { std::string dir = command.Directory; @@ -45,26 +65,33 @@ std::vector SolutionParserCompilationDatabase::getIncludePaths() searchPaths.insert(getIncludePath(argument, command.Directory)); insertNext = false; } + if(insertFramework) + { + frameworkPaths.insert(getIncludePath(argument,command.Directory)); + insertFramework = false; + } if(argument.substr(0,2) == "-I") { searchPaths.insert(getIncludePath(argument.substr(2), command.Directory)); } - if(argument == "-isystem" || argument == "-iframework") + if(argument == "-isystem") { insertNext = true; } + if (argument == "-iframework") + { + insertFramework = true; + } } } - std::vector paths; for(std::string p : searchPaths) { - paths.push_back(p); + m_searchPaths.push_back(p); } - - return paths; } + std::vector SolutionParserCompilationDatabase::getProjectFiles() { return std::vector(); diff --git a/src/lib/utility/solution/SolutionParserCompilationDatabase.h b/src/lib/utility/solution/SolutionParserCompilationDatabase.h index 30a79d82..9acb16b9 100644 --- a/src/lib/utility/solution/SolutionParserCompilationDatabase.h +++ b/src/lib/utility/solution/SolutionParserCompilationDatabase.h @@ -26,10 +26,15 @@ public: virtual std::vector getProjectFiles(); virtual std::vector getProjectItems(); virtual std::vector getIncludePaths(); + std::vector getFrameworkPaths(); private: std::shared_ptr m_database; + void parseDatabase(); + bool m_parsed; clang::tooling::JSONCompilationDatabase* getDatabase(); + std::vector m_searchPaths; + std::vector m_frameworkPaths; std::string getIncludePath(const std::string& argument, const std::string& dir); };