From 2308d70895cc463ab5ce601f8d46af942efb8604 Mon Sep 17 00:00:00 2001 From: Sam McCall Date: Thu, 12 Jul 2018 14:49:52 +0000 Subject: [clangd] Extract FileSystemProvider into a separate header. NFC Reviewers: sammccall Reviewed By: sammccall Subscribers: mgorny, ioeric, MaskRay, jkorous, cfe-commits Differential Revision: https://reviews.llvm.org/D49142 git-svn-id: https://llvm.org/svn/llvm-project/clang-tools-extra/trunk@336909 91177308-0d34-0410-b5e6-96231b3b80d8 --- clangd/ClangdServer.cpp | 4 ---- clangd/ClangdServer.h | 17 +---------------- clangd/FSProvider.h | 42 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 20 deletions(-) create mode 100644 clangd/FSProvider.h diff --git a/clangd/ClangdServer.cpp b/clangd/ClangdServer.cpp index ed8cba5f..01cc8239 100644 --- a/clangd/ClangdServer.cpp +++ b/clangd/ClangdServer.cpp @@ -68,10 +68,6 @@ public: } // namespace -IntrusiveRefCntPtr RealFileSystemProvider::getFileSystem() { - return vfs::getRealFileSystem(); -} - ClangdServer::Options ClangdServer::optsForTest() { ClangdServer::Options Opts; Opts.UpdateDebounce = std::chrono::steady_clock::duration::zero(); // Faster! diff --git a/clangd/ClangdServer.h b/clangd/ClangdServer.h index 36dcd1cc..d5351924 100644 --- a/clangd/ClangdServer.h +++ b/clangd/ClangdServer.h @@ -12,6 +12,7 @@ #include "ClangdUnit.h" #include "CodeComplete.h" +#include "FSProvider.h" #include "Function.h" #include "GlobalCompilationDatabase.h" #include "Protocol.h" @@ -42,22 +43,6 @@ public: std::vector Diagnostics) = 0; }; -class FileSystemProvider { -public: - virtual ~FileSystemProvider() = default; - /// Called by ClangdServer to obtain a vfs::FileSystem to be used for parsing. - /// Context::current() will be the context passed to the clang entrypoint, - /// such as addDocument(), and will also be propagated to result callbacks. - /// Embedders may use this to isolate filesystem accesses. - virtual IntrusiveRefCntPtr getFileSystem() = 0; -}; - -class RealFileSystemProvider : public FileSystemProvider { -public: - /// Returns getRealFileSystem(). - IntrusiveRefCntPtr getFileSystem() override; -}; - /// Provides API to manage ASTs for a collection of C++ files and request /// various language features. /// Currently supports async diagnostics, code completion, formatting and goto diff --git a/clangd/FSProvider.h b/clangd/FSProvider.h new file mode 100644 index 00000000..70dfb441 --- /dev/null +++ b/clangd/FSProvider.h @@ -0,0 +1,42 @@ +//===--- FSProvider.h - VFS provider for ClangdServer ------------*- C++-*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANGD_FSPROVIDER_H +#define LLVM_CLANG_TOOLS_EXTRA_CLANGD_FSPROVIDER_H + +#include "clang/Basic/VirtualFileSystem.h" +#include "llvm/ADT/IntrusiveRefCntPtr.h" + +namespace clang { +namespace clangd { + +// Wrapper for vfs::FileSystem for use in multithreaded programs like clangd. +// As FileSystem is not threadsafe, concurrent threads must each obtain one. +class FileSystemProvider { +public: + virtual ~FileSystemProvider() = default; + /// Called by ClangdServer to obtain a vfs::FileSystem to be used for parsing. + /// Context::current() will be the context passed to the clang entrypoint, + /// such as addDocument(), and will also be propagated to result callbacks. + /// Embedders may use this to isolate filesystem accesses. + virtual IntrusiveRefCntPtr getFileSystem() = 0; +}; + +class RealFileSystemProvider : public FileSystemProvider { +public: + // FIXME: returns the single real FS instance, which is not threadsafe. + IntrusiveRefCntPtr getFileSystem() override { + return vfs::getRealFileSystem(); + } +}; + +} // namespace clangd +} // namespace clang + +#endif -- cgit v1.2.3