Author: sammccall Date: Fri Dec 22 01:47:34 2017 New Revision: 321350 URL: http://llvm.org/viewvc/llvm-project?rev=321350&view=rev Log: [clangd] Simplify GlobalCompilationDatabase, cache missing GCDs
Modified: clang-tools-extra/trunk/clangd/GlobalCompilationDatabase.cpp clang-tools-extra/trunk/clangd/GlobalCompilationDatabase.h Modified: clang-tools-extra/trunk/clangd/GlobalCompilationDatabase.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/GlobalCompilationDatabase.cpp?rev=321350&r1=321349&r2=321350&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/GlobalCompilationDatabase.cpp (original) +++ clang-tools-extra/trunk/clangd/GlobalCompilationDatabase.cpp Fri Dec 22 01:47:34 2017 @@ -31,12 +31,15 @@ DirectoryBasedGlobalCompilationDatabase: llvm::Optional<tooling::CompileCommand> DirectoryBasedGlobalCompilationDatabase::getCompileCommand(PathRef File) const { - if (auto CDB = getCompilationDatabase(File)) { + if (auto CDB = getCDBForFile(File)) { auto Candidates = CDB->getCompileCommands(File); if (!Candidates.empty()) { addExtraFlags(File, Candidates.front()); return std::move(Candidates.front()); } + } else { + log(Context::empty(), // FIXME(ibiryukov): pass a proper Context here. + "Failed to find compilation database for " + Twine(File)); } return llvm::None; } @@ -71,59 +74,32 @@ void DirectoryBasedGlobalCompilationData } tooling::CompilationDatabase * -DirectoryBasedGlobalCompilationDatabase::tryLoadDatabaseFromPath( - PathRef File) const { - - namespace path = llvm::sys::path; - auto CachedIt = CompilationDatabases.find(File); - - assert((path::is_absolute(File, path::Style::posix) || - path::is_absolute(File, path::Style::windows)) && - "path must be absolute"); - +DirectoryBasedGlobalCompilationDatabase::getCDBInDirLocked(PathRef Dir) const { + // FIXME(ibiryukov): Invalidate cached compilation databases on changes + auto CachedIt = CompilationDatabases.find(Dir); if (CachedIt != CompilationDatabases.end()) return CachedIt->second.get(); std::string Error = ""; - auto CDB = tooling::CompilationDatabase::loadFromDirectory(File, Error); - if (CDB) { - auto Result = CDB.get(); - CompilationDatabases.insert(std::make_pair(File, std::move(CDB))); - return Result; - } - - return nullptr; + auto CDB = tooling::CompilationDatabase::loadFromDirectory(Dir, Error); + auto Result = CDB.get(); + CompilationDatabases.insert(std::make_pair(Dir, std::move(CDB))); + return Result; } tooling::CompilationDatabase * -DirectoryBasedGlobalCompilationDatabase::getCompilationDatabase( - PathRef File) const { - std::lock_guard<std::mutex> Lock(Mutex); - +DirectoryBasedGlobalCompilationDatabase::getCDBForFile(PathRef File) const { namespace path = llvm::sys::path; - if (CompileCommandsDir.hasValue()) { - tooling::CompilationDatabase *ReturnValue = - tryLoadDatabaseFromPath(CompileCommandsDir.getValue()); - if (ReturnValue == nullptr) { - // FIXME(ibiryukov): pass a proper Context here. - log(Context::empty(), "Failed to find compilation database for " + - Twine(File) + "in overriden directory " + - CompileCommandsDir.getValue()); - } - return ReturnValue; - } + assert((path::is_absolute(File, path::Style::posix) || + path::is_absolute(File, path::Style::windows)) && + "path must be absolute"); + std::lock_guard<std::mutex> Lock(Mutex); + if (CompileCommandsDir) + return getCDBInDirLocked(*CompileCommandsDir); for (auto Path = path::parent_path(File); !Path.empty(); - Path = path::parent_path(Path)) { - auto CDB = tryLoadDatabaseFromPath(Path); - if (!CDB) - continue; - // FIXME(ibiryukov): Invalidate cached compilation databases on changes - return CDB; - } - - // FIXME(ibiryukov): pass a proper Context here. - log(Context::empty(), - "Failed to find compilation database for " + Twine(File)); + Path = path::parent_path(Path)) + if (auto CDB = getCDBInDirLocked(Path)) + return CDB; return nullptr; } Modified: clang-tools-extra/trunk/clangd/GlobalCompilationDatabase.h URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/GlobalCompilationDatabase.h?rev=321350&r1=321349&r2=321350&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/GlobalCompilationDatabase.h (original) +++ clang-tools-extra/trunk/clangd/GlobalCompilationDatabase.h Fri Dec 22 01:47:34 2017 @@ -65,8 +65,8 @@ public: void setExtraFlagsForFile(PathRef File, std::vector<std::string> ExtraFlags); private: - tooling::CompilationDatabase *getCompilationDatabase(PathRef File) const; - tooling::CompilationDatabase *tryLoadDatabaseFromPath(PathRef File) const; + tooling::CompilationDatabase *getCDBForFile(PathRef File) const; + tooling::CompilationDatabase *getCDBInDirLocked(PathRef File) const; void addExtraFlags(PathRef File, tooling::CompileCommand &C) const; mutable std::mutex Mutex; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits