* Remove isInSystemHeader() from DiagClient, move it to SourceManager
* Move FormatError() from TextDiagnostic up to DiagClient, remove now  
  empty class TextDiagnostic
* Make DiagClient optional for Diagnostic

This fixes the following problems:

* -html-diags (and probably others) does now output the same set of  
  warnings as console clang does
* nothing crashes if one forgets to call setHeaderSearch() on  
  TextDiagnostic
* some code duplication is removed




git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@54620 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Analysis/PathDiagnostic.cpp b/lib/Analysis/PathDiagnostic.cpp
index 28b76b3..4c34953 100644
--- a/lib/Analysis/PathDiagnostic.cpp
+++ b/lib/Analysis/PathDiagnostic.cpp
@@ -33,9 +33,6 @@
   
   PathDiagnostic* D = new PathDiagnostic();
   
-  // Ripped from TextDiagnostics::FormatDiagnostic.  Perhaps we should
-  // centralize it somewhere?
-  
   std::ostringstream os;
   
   switch (DiagLevel) {
@@ -46,17 +43,8 @@
     case Diagnostic::Fatal:   os << "fatal error: "; break;
       break;
   }
-  
-  std::string Msg = Diags.getDescription(ID);
 
-  for (unsigned i = 0; i < Msg.size() - 1; ++i) {
-    if (Msg[i] == '%' && isdigit(Msg[i + 1])) {
-      unsigned StrNo = Msg[i + 1] - '0';
-      Msg = std::string(Msg.begin(), Msg.begin() + i) +
-      (StrNo < NumStrs ? Strs[StrNo] : "<<<INTERNAL ERROR>>>") +
-      std::string(Msg.begin() + i + 2, Msg.end());
-    }
-  }
+  std::string Msg = FormatDiagnostic(Diags, DiagLevel, ID, Strs, NumStrs);
   
   os << Msg;