summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang-tools-extra/clangd/ClangdLSPServer.cpp15
-rw-r--r--clang-tools-extra/clangd/ClangdLSPServer.h8
-rw-r--r--clang-tools-extra/clangd/GlobalCompilationDatabase.cpp32
-rw-r--r--clang-tools-extra/clangd/GlobalCompilationDatabase.h27
4 files changed, 4 insertions, 78 deletions
diff --git a/clang-tools-extra/clangd/ClangdLSPServer.cpp b/clang-tools-extra/clangd/ClangdLSPServer.cpp
index 2a2cd529b0d..91d35537c90 100644
--- a/clang-tools-extra/clangd/ClangdLSPServer.cpp
+++ b/clang-tools-extra/clangd/ClangdLSPServer.cpp
@@ -783,7 +783,7 @@ void ClangdLSPServer::reparseOpenedFiles() {
}
ClangdLSPServer::CompilationDB ClangdLSPServer::CompilationDB::makeInMemory() {
- return CompilationDB(llvm::make_unique<InMemoryCompilationDb>(), nullptr,
+ return CompilationDB(llvm::make_unique<InMemoryCompilationDb>(),
/*IsDirectoryBased=*/false);
}
@@ -792,16 +792,13 @@ ClangdLSPServer::CompilationDB::makeDirectoryBased(
Optional<Path> CompileCommandsDir) {
auto CDB = llvm::make_unique<DirectoryBasedGlobalCompilationDatabase>(
std::move(CompileCommandsDir));
- auto CachingCDB = llvm::make_unique<CachingCompilationDb>(*CDB);
- return CompilationDB(std::move(CDB), std::move(CachingCDB),
+ return CompilationDB(std::move(CDB),
/*IsDirectoryBased=*/true);
}
void ClangdLSPServer::CompilationDB::invalidate(PathRef File) {
if (!IsDirectoryBased)
static_cast<InMemoryCompilationDb *>(CDB.get())->invalidate(File);
- else
- CachingCDB->invalidate(File);
}
bool ClangdLSPServer::CompilationDB::setCompilationCommandForFile(
@@ -826,7 +823,6 @@ void ClangdLSPServer::CompilationDB::setExtraFlagsForFile(
}
static_cast<DirectoryBasedGlobalCompilationDatabase *>(CDB.get())
->setExtraFlagsForFile(File, std::move(ExtraFlags));
- CachingCDB->invalidate(File);
}
void ClangdLSPServer::CompilationDB::setCompileCommandsDir(Path P) {
@@ -837,13 +833,6 @@ void ClangdLSPServer::CompilationDB::setCompileCommandsDir(Path P) {
}
static_cast<DirectoryBasedGlobalCompilationDatabase *>(CDB.get())
->setCompileCommandsDir(P);
- CachingCDB->clear();
-}
-
-GlobalCompilationDatabase &ClangdLSPServer::CompilationDB::getCDB() {
- if (CachingCDB)
- return *CachingCDB;
- return *CDB;
}
} // namespace clangd
diff --git a/clang-tools-extra/clangd/ClangdLSPServer.h b/clang-tools-extra/clangd/ClangdLSPServer.h
index c24c770ec8d..19bdcb611b2 100644
--- a/clang-tools-extra/clangd/ClangdLSPServer.h
+++ b/clang-tools-extra/clangd/ClangdLSPServer.h
@@ -135,21 +135,17 @@ private:
/// Returns a CDB that should be used to get compile commands for the
/// current instance of ClangdLSPServer.
- GlobalCompilationDatabase &getCDB();
+ GlobalCompilationDatabase &getCDB() { return *CDB; }
private:
CompilationDB(std::unique_ptr<GlobalCompilationDatabase> CDB,
- std::unique_ptr<CachingCompilationDb> CachingCDB,
bool IsDirectoryBased)
- : CDB(std::move(CDB)), CachingCDB(std::move(CachingCDB)),
- IsDirectoryBased(IsDirectoryBased) {}
+ : CDB(std::move(CDB)), IsDirectoryBased(IsDirectoryBased) {}
// if IsDirectoryBased is true, an instance of InMemoryCDB.
// If IsDirectoryBased is false, an instance of DirectoryBasedCDB.
// unique_ptr<GlobalCompilationDatabase> CDB;
std::unique_ptr<GlobalCompilationDatabase> CDB;
- // Non-null only for directory-based CDB
- std::unique_ptr<CachingCompilationDb> CachingCDB;
bool IsDirectoryBased;
};
diff --git a/clang-tools-extra/clangd/GlobalCompilationDatabase.cpp b/clang-tools-extra/clangd/GlobalCompilationDatabase.cpp
index 6670606a5e0..57fac1cd0fe 100644
--- a/clang-tools-extra/clangd/GlobalCompilationDatabase.cpp
+++ b/clang-tools-extra/clangd/GlobalCompilationDatabase.cpp
@@ -116,38 +116,6 @@ DirectoryBasedGlobalCompilationDatabase::getCDBForFile(PathRef File) const {
return nullptr;
}
-CachingCompilationDb::CachingCompilationDb(
- const GlobalCompilationDatabase &InnerCDB)
- : InnerCDB(InnerCDB) {}
-
-Optional<tooling::CompileCommand>
-CachingCompilationDb::getCompileCommand(PathRef File) const {
- std::unique_lock<std::mutex> Lock(Mut);
- auto It = Cached.find(File);
- if (It != Cached.end())
- return It->second;
-
- Lock.unlock();
- Optional<tooling::CompileCommand> Command = InnerCDB.getCompileCommand(File);
- Lock.lock();
- return Cached.try_emplace(File, std::move(Command)).first->getValue();
-}
-
-tooling::CompileCommand
-CachingCompilationDb::getFallbackCommand(PathRef File) const {
- return InnerCDB.getFallbackCommand(File);
-}
-
-void CachingCompilationDb::invalidate(PathRef File) {
- std::unique_lock<std::mutex> Lock(Mut);
- Cached.erase(File);
-}
-
-void CachingCompilationDb::clear() {
- std::unique_lock<std::mutex> Lock(Mut);
- Cached.clear();
-}
-
Optional<tooling::CompileCommand>
InMemoryCompilationDb::getCompileCommand(PathRef File) const {
std::lock_guard<std::mutex> Lock(Mutex);
diff --git a/clang-tools-extra/clangd/GlobalCompilationDatabase.h b/clang-tools-extra/clangd/GlobalCompilationDatabase.h
index 70e79041655..5633607fb85 100644
--- a/clang-tools-extra/clangd/GlobalCompilationDatabase.h
+++ b/clang-tools-extra/clangd/GlobalCompilationDatabase.h
@@ -86,33 +86,6 @@ private:
llvm::Optional<Path> CompileCommandsDir;
};
-/// A wrapper around GlobalCompilationDatabase that caches the compile commands.
-/// Note that only results of getCompileCommand are cached.
-class CachingCompilationDb : public GlobalCompilationDatabase {
-public:
- explicit CachingCompilationDb(const GlobalCompilationDatabase &InnerCDB);
-
- /// Gets compile command for \p File from cache or CDB if it's not in the
- /// cache.
- llvm::Optional<tooling::CompileCommand>
- getCompileCommand(PathRef File) const override;
-
- /// Forwards to the inner CDB. Results of this function are not cached.
- tooling::CompileCommand getFallbackCommand(PathRef File) const override;
-
- /// Removes an entry for \p File if it's present in the cache.
- void invalidate(PathRef File);
-
- /// Removes all cached compile commands.
- void clear();
-
-private:
- const GlobalCompilationDatabase &InnerCDB;
- mutable std::mutex Mut;
- mutable llvm::StringMap<llvm::Optional<tooling::CompileCommand>>
- Cached; /* GUARDED_BY(Mut) */
-};
-
/// Gets compile args from an in-memory mapping based on a filepath. Typically
/// used by clients who provide the compile commands themselves.
class InMemoryCompilationDb : public GlobalCompilationDatabase {
OpenPOWER on IntegriCloud