clang
8.0.0
|
Implements support for file system lookup, file system caching, and directory search management. More...
#include "clang/Basic/FileManager.h"
Public Member Functions | |
FileManager (const FileSystemOptions &FileSystemOpts, IntrusiveRefCntPtr< llvm::vfs::FileSystem > FS=nullptr) | |
~FileManager () | |
void | setStatCache (std::unique_ptr< FileSystemStatCache > statCache) |
Installs the provided FileSystemStatCache object within the FileManager. More... | |
void | clearStatCache () |
Removes the FileSystemStatCache object from the manager. More... | |
const DirectoryEntry * | getDirectory (StringRef DirName, bool CacheFailure=true) |
Lookup, cache, and verify the specified directory (real or virtual). More... | |
const FileEntry * | getFile (StringRef Filename, bool OpenFile=false, bool CacheFailure=true) |
Lookup, cache, and verify the specified file (real or virtual). More... | |
FileSystemOptions & | getFileSystemOpts () |
Returns the current file system options. More... | |
const FileSystemOptions & | getFileSystemOpts () const |
IntrusiveRefCntPtr< llvm::vfs::FileSystem > | getVirtualFileSystem () const |
const FileEntry * | getVirtualFile (StringRef Filename, off_t Size, time_t ModificationTime) |
Retrieve a file entry for a "virtual" file that acts as if there were a file with the given name on disk. More... | |
llvm::ErrorOr< std::unique_ptr< llvm::MemoryBuffer > > | getBufferForFile (const FileEntry *Entry, bool isVolatile=false, bool ShouldCloseOpenFile=true) |
Open the specified file as a MemoryBuffer, returning a new MemoryBuffer if successful, otherwise returning null. More... | |
llvm::ErrorOr< std::unique_ptr< llvm::MemoryBuffer > > | getBufferForFile (StringRef Filename, bool isVolatile=false) |
bool | getNoncachedStatValue (StringRef Path, llvm::vfs::Status &Result) |
Get the 'stat' information for the given Path . More... | |
void | invalidateCache (const FileEntry *Entry) |
Remove the real file Entry from the cache. More... | |
bool | FixupRelativePath (SmallVectorImpl< char > &path) const |
If path is not absolute and FileSystemOptions set the working directory, the path is modified to be relative to the given working directory. More... | |
bool | makeAbsolutePath (SmallVectorImpl< char > &Path) const |
Makes Path absolute taking into account FileSystemOptions and the working directory option. More... | |
void | GetUniqueIDMapping (SmallVectorImpl< const FileEntry *> &UIDToFiles) const |
Produce an array mapping from the unique IDs assigned to each file to the corresponding FileEntry pointer. More... | |
StringRef | getCanonicalName (const DirectoryEntry *Dir) |
Retrieve the canonical name for a given directory. More... | |
void | PrintStats () const |
Static Public Member Functions | |
static void | modifyFileEntry (FileEntry *File, off_t Size, time_t ModificationTime) |
Modifies the size and modification time of a previously created FileEntry. More... | |
Implements support for file system lookup, file system caching, and directory search management.
This also handles more advanced properties, such as uniquing files based on "inode", so that a file with two names (e.g. symlinked) will be treated as a single file.
Definition at line 122 of file FileManager.h.
FileManager::FileManager | ( | const FileSystemOptions & | FileSystemOpts, |
IntrusiveRefCntPtr< llvm::vfs::FileSystem > | FS = nullptr |
||
) |
Definition at line 51 of file FileManager.cpp.
References ~FileManager().
|
default |
Referenced by FileManager().
void FileManager::clearStatCache | ( | ) |
Removes the FileSystemStatCache object from the manager.
Definition at line 71 of file FileManager.cpp.
Referenced by clang::tooling::FrontendActionFactory::runInvocation().
bool FileManager::FixupRelativePath | ( | SmallVectorImpl< char > & | path | ) | const |
If path is not absolute and FileSystemOptions set the working directory, the path is modified to be relative to the given working directory.
path
changed. Definition at line 378 of file FileManager.cpp.
References clang::FileSystemOptions::WorkingDir.
Referenced by getBufferForFile(), hasSuperInitCall(), and makeAbsolutePath().
llvm::ErrorOr< std::unique_ptr< llvm::MemoryBuffer > > FileManager::getBufferForFile | ( | const FileEntry * | Entry, |
bool | isVolatile = false , |
||
bool | ShouldCloseOpenFile = true |
||
) |
Open the specified file as a MemoryBuffer, returning a new MemoryBuffer if successful, otherwise returning null.
Definition at line 414 of file FileManager.cpp.
References clang::FileEntry::closeFile(), Filename, FixupRelativePath(), clang::FileEntry::getName(), clang::FileEntry::getSize(), clang::Result, and clang::FileSystemOptions::WorkingDir.
Referenced by clang::HeaderMap::Create(), clang::CodeGenAction::CreateASTConsumer(), clang::DumpModuleInfoAction::ExecuteAction(), clang::PrintPreambleAction::ExecuteAction(), clang::SrcMgr::ContentCache::getBuffer(), clang::ASTReader::getOriginalSourceFile(), clang::CompilerInstance::InitializeSourceManager(), clang::ASTReader::readASTFileControlBlock(), and clang::serialized_diags::SerializedDiagnosticReader::readDiagnostics().
llvm::ErrorOr< std::unique_ptr< llvm::MemoryBuffer > > FileManager::getBufferForFile | ( | StringRef | Filename, |
bool | isVolatile = false |
||
) |
Definition at line 448 of file FileManager.cpp.
References FixupRelativePath(), clang::FileSystemStatCache::get(), and clang::FileSystemOptions::WorkingDir.
StringRef FileManager::getCanonicalName | ( | const DirectoryEntry * | Dir | ) |
Retrieve the canonical name for a given directory.
This is a very expensive operation, despite its results being cached, and should only be used when the physical layout of the file system is required, which is (almost) never.
Definition at line 523 of file FileManager.cpp.
References clang::DirectoryEntry::getName().
Referenced by clang::HeaderSearch::getCachedModuleFileName(), getTopFrameworkDir(), clang::ModuleMap::inferFrameworkModule(), clang::ModuleMap::isBuiltinHeader(), and clang::TextDiagnostic::printDiagnosticMessage().
const DirectoryEntry * FileManager::getDirectory | ( | StringRef | DirName, |
bool | CacheFailure = true |
||
) |
Lookup, cache, and verify the specified directory (real or virtual).
This returns NULL if the directory doesn't exist.
CacheFailure | If true and the file does not exist, we'll cache the failure to find this file. |
Definition at line 119 of file FileManager.cpp.
References clang::DirectoryEntry::getName(), NON_EXISTENT_DIR, and clang::FileData::UniqueID.
Referenced by clang::ApplyHeaderSearchOptions(), clang::FrontendAction::BeginSourceFile(), collectIncludePCH(), computeRelativePath(), clang::HeaderSearch::getCachedModuleFileName(), getDirectoryFromFile(), getTopFrameworkDir(), clang::ModuleMap::inferFrameworkModule(), clang::ModuleMap::isBuiltinHeader(), clang::Preprocessor::LookupFile(), clang::HeaderSearch::lookupModule(), needModuleLookup(), and clang::TextDiagnostic::printDiagnosticMessage().
const FileEntry * FileManager::getFile | ( | StringRef | Filename, |
bool | OpenFile = false , |
||
bool | CacheFailure = true |
||
) |
Lookup, cache, and verify the specified file (real or virtual).
This returns NULL if the file doesn't exist.
OpenFile | if true and the file exists, it will be opened. |
CacheFailure | If true and the file does not exist, we'll cache the failure to find this file. |
Definition at line 183 of file FileManager.cpp.
References getDirectoryFromFile(), clang::FileData::InPCH, clang::FileData::IsNamedPipe, clang::FileEntry::isValid(), clang::FileData::IsVFSMapped, clang::FileData::ModTime, clang::FileData::Name, NON_EXISTENT_FILE, clang::FileData::Size, and clang::FileData::UniqueID.
Referenced by clang::tooling::Replacement::apply(), clang::tooling::applyAllReplacements(), clang::FrontendAction::BeginSourceFile(), collectModuleHeaderIncludes(), EnableCodeCompletion(), clang::serialization::reader::HeaderFileInfoTrait::EqualKey(), clang::tooling::formatAndApplyAllReplacements(), clang::DirectoryLookup::getName(), getPrivateModuleMap(), getPublicModuleMap(), clang::Module::getTopHeaders(), clang::tooling::groupReplacementsByFile(), clang::ASTImporter::Import(), inferFrameworkLink(), InitializeFileRemapping(), clang::CompilerInstance::InitializeSourceManager(), llvm::DenseMapInfo< EditEntry >::isEqual(), clang::HeaderMap::LookupFile(), clang::DirectoryLookup::LookupFile(), clang::serialization::ModuleManager::lookupModuleFile(), needModuleLookup(), prepareToBuildModule(), clang::serialization::reader::HeaderFileInfoTrait::ReadData(), clang::SourceManagerForFile::SourceManagerForFile(), and clang::RewriteIncludesAction::RewriteImportsListener::visitModuleFile().
|
inline |
Returns the current file system options.
Definition at line 223 of file FileManager.h.
Referenced by clang::ASTUnit::LoadFromCompilerInvocation(), and clang::tooling::ToolInvocation::run().
|
inline |
Definition at line 224 of file FileManager.h.
bool FileManager::getNoncachedStatValue | ( | StringRef | Path, |
llvm::vfs::Status & | Result | ||
) |
Get the 'stat' information for the given Path
.
If the path is relative, it will be resolved against the WorkingDir of the FileManager's FileSystemOptions.
Definition at line 476 of file FileManager.cpp.
void FileManager::GetUniqueIDMapping | ( | SmallVectorImpl< const FileEntry *> & | UIDToFiles | ) | const |
Produce an array mapping from the unique IDs assigned to each file to the corresponding FileEntry pointer.
Definition at line 499 of file FileManager.cpp.
References NON_EXISTENT_FILE.
Referenced by CreateSLocExpansionAbbrev().
const FileEntry * FileManager::getVirtualFile | ( | StringRef | Filename, |
off_t | Size, | ||
time_t | ModificationTime | ||
) |
Retrieve a file entry for a "virtual" file that acts as if there were a file with the given name on disk.
The file itself is not accessed.
Definition at line 307 of file FileManager.cpp.
References clang::FileEntry::closeFile(), getDirectoryFromFile(), clang::FileData::InPCH, clang::FileData::IsNamedPipe, clang::FileEntry::isValid(), clang::FileData::ModTime, clang::FileData::Name, NON_EXISTENT_FILE, clang::FileData::Size, and clang::FileData::UniqueID.
Referenced by clang::serialization::ModuleManager::addInMemoryBuffer(), InitializeFileRemapping(), and clang::CompilerInstance::InitializeSourceManager().
|
inline |
Definition at line 226 of file FileManager.h.
Referenced by clang::FrontendAction::BeginSourceFile(), clang::ASTUnit::CodeComplete(), collectIncludePCH(), collectModuleHeaderIncludes(), clang::tooling::ToolInvocation::run(), and clang::CompilerInstance::setFileManager().
void FileManager::invalidateCache | ( | const FileEntry * | Entry | ) |
Remove the real file Entry
from the cache.
Definition at line 488 of file FileManager.cpp.
References clang::FileEntry::getName(), and clang::FileEntry::getUniqueID().
Referenced by clang::serialization::ModuleManager::removeModules().
bool FileManager::makeAbsolutePath | ( | SmallVectorImpl< char > & | Path | ) | const |
Makes Path
absolute taking into account FileSystemOptions and the working directory option.
Path
changed to absolute. Definition at line 391 of file FileManager.cpp.
References FixupRelativePath().
Referenced by cleanPathForOutput().
|
static |
Modifies the size and modification time of a previously created FileEntry.
Use with caution.
Definition at line 517 of file FileManager.cpp.
void FileManager::PrintStats | ( | ) | const |
Definition at line 540 of file FileManager.cpp.
void FileManager::setStatCache | ( | std::unique_ptr< FileSystemStatCache > | statCache | ) |
Installs the provided FileSystemStatCache object within the FileManager.
Ownership of this object is transferred to the FileManager.
statCache | the new stat cache to install. Ownership of this object is transferred to the FileManager. |
Definition at line 66 of file FileManager.cpp.