[clang-tools-extra] r268019 - [find-all-symbols] Save absolute file path instead of relative file path in SymbolInfo.

Haojian Wu via cfe-commits cfe-commits at lists.llvm.org
Fri Apr 29 02:45:10 PDT 2016


Author: hokein
Date: Fri Apr 29 04:45:09 2016
New Revision: 268019

URL: http://llvm.org/viewvc/llvm-project?rev=268019&view=rev
Log:
[find-all-symbols] Save absolute file path instead of relative file path in SymbolInfo.

Reviewers: bkramer

Subscribers: cfe-commits

Differential Revision: http://reviews.llvm.org/D19647

Modified:
    clang-tools-extra/trunk/include-fixer/find-all-symbols/FindAllSymbols.cpp

Modified: clang-tools-extra/trunk/include-fixer/find-all-symbols/FindAllSymbols.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/include-fixer/find-all-symbols/FindAllSymbols.cpp?rev=268019&r1=268018&r2=268019&view=diff
==============================================================================
--- clang-tools-extra/trunk/include-fixer/find-all-symbols/FindAllSymbols.cpp (original)
+++ clang-tools-extra/trunk/include-fixer/find-all-symbols/FindAllSymbols.cpp Fri Apr 29 04:45:09 2016
@@ -16,6 +16,7 @@
 #include "clang/ASTMatchers/ASTMatchers.h"
 #include "clang/Tooling/Tooling.h"
 #include "llvm/Support/FileSystem.h"
+#include "llvm/Support/Path.h"
 
 using namespace clang::ast_matchers;
 
@@ -47,19 +48,37 @@ bool SetCommonInfo(const MatchFinder::Ma
   SetContext(ND, Symbol);
 
   Symbol->Name = ND->getNameAsString();
-  SourceLocation Loc = Result.SourceManager->getExpansionLoc(ND->getLocation());
+
+  const SourceManager *SM = Result.SourceManager;
+  SourceLocation Loc = SM->getExpansionLoc(ND->getLocation());
   if (!Loc.isValid()) {
     llvm::errs() << "Declaration " << ND->getNameAsString() << "("
                  << ND->getDeclKindName()
                  << ") has invalid declaration location.";
     return false;
   }
-  std::string FilePath = Result.SourceManager->getFilename(Loc).str();
+
+  Symbol->LineNumber = SM->getExpansionLineNumber(Loc);
+
+  llvm::StringRef FilePath = SM->getFilename(Loc);
   if (FilePath.empty())
     return false;
 
-  Symbol->FilePath = FilePath;
-  Symbol->LineNumber = Result.SourceManager->getExpansionLineNumber(Loc);
+  llvm::SmallString<128> AbsolutePath;
+  if (llvm::sys::path::is_absolute(FilePath)) {
+    AbsolutePath = FilePath;
+  } else {
+    auto WorkingDir = SM->getFileManager()
+                          .getVirtualFileSystem()
+                          ->getCurrentWorkingDirectory();
+    if (!WorkingDir)
+      return false;
+    AbsolutePath = *WorkingDir;
+    llvm::sys::path::append(AbsolutePath, FilePath);
+  }
+
+  llvm::sys::path::remove_dots(AbsolutePath, true);
+  Symbol->FilePath = AbsolutePath.str();
   return true;
 }
 } // namespace




More information about the cfe-commits mailing list