diff options
author | Ted Kremenek <kremenek@apple.com> | 2009-11-05 02:09:23 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2009-11-05 02:09:23 +0000 |
commit | b697a4e4118d2d59dc0f38463c8417ddaf58a11f (patch) | |
tree | 044c835f75e57e5598686ef476154b8cd1f0a975 /lib/Frontend/PlistDiagnostics.cpp | |
parent | ff6912b5a9d5073221956fe4d6367b14f3f4b68f (diff) |
Acting on Daniel's nagging, remove PathDiagnosticClientFactory() and
migrate work in the destructors of PathDiagnosticClients from their
destructors to FlushReports(). The destructors now currently call
FlushReports(); this will be fixed in a subsequent patch.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@86108 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Frontend/PlistDiagnostics.cpp')
-rw-r--r-- | lib/Frontend/PlistDiagnostics.cpp | 55 |
1 files changed, 29 insertions, 26 deletions
diff --git a/lib/Frontend/PlistDiagnostics.cpp b/lib/Frontend/PlistDiagnostics.cpp index a10ecd4a20..1579badc72 100644 --- a/lib/Frontend/PlistDiagnostics.cpp +++ b/lib/Frontend/PlistDiagnostics.cpp @@ -36,14 +36,20 @@ namespace { std::vector<const PathDiagnostic*> BatchedDiags; const std::string OutputFile; const LangOptions &LangOpts; - llvm::OwningPtr<PathDiagnosticClientFactory> PF; - llvm::OwningPtr<PathDiagnosticClient> SubPDC; - llvm::SmallVector<std::string, 1> FilesMade; + llvm::OwningPtr<PathDiagnosticClient> SubPD; public: PlistDiagnostics(const std::string& prefix, const LangOptions &LangOpts, - PathDiagnosticClientFactory *pf); - ~PlistDiagnostics(); + PathDiagnosticClient *subPD); + + ~PlistDiagnostics() { FlushDiagnostics(NULL); } + + void FlushDiagnostics(llvm::SmallVectorImpl<std::string> *FilesMade); + void HandlePathDiagnostic(const PathDiagnostic* D); + + virtual llvm::StringRef getName() const { + return "PlistDiagnostics"; + } PathGenerationScheme getGenerationScheme() const; bool supportsLogicalOpControlFlow() const { return true; } @@ -54,22 +60,18 @@ namespace { PlistDiagnostics::PlistDiagnostics(const std::string& output, const LangOptions &LO, - PathDiagnosticClientFactory *pf) - : OutputFile(output), LangOpts(LO), PF(pf) { - - if (PF) - SubPDC.reset(PF->createPathDiagnosticClient(&FilesMade)); -} + PathDiagnosticClient *subPD) + : OutputFile(output), LangOpts(LO), SubPD(subPD) {} PathDiagnosticClient* clang::CreatePlistDiagnosticClient(const std::string& s, Preprocessor *PP, - PathDiagnosticClientFactory *PF) { - return new PlistDiagnostics(s, PP->getLangOptions(), PF); + PathDiagnosticClient *subPD) { + return new PlistDiagnostics(s, PP->getLangOptions(), subPD); } PathDiagnosticClient::PathGenerationScheme PlistDiagnostics::getGenerationScheme() const { - if (const PathDiagnosticClient *PD = SubPDC.get()) + if (const PathDiagnosticClient *PD = SubPD.get()) return PD->getGenerationScheme(); return Extensive; @@ -306,7 +308,8 @@ void PlistDiagnostics::HandlePathDiagnostic(const PathDiagnostic* D) { BatchedDiags.push_back(D); } -PlistDiagnostics::~PlistDiagnostics() { +void PlistDiagnostics::FlushDiagnostics(llvm::SmallVectorImpl<std::string> + *FilesMade) { // Build up a set of FIDs that we use by scanning the locations and // ranges of the diagnostics. @@ -395,19 +398,16 @@ PlistDiagnostics::~PlistDiagnostics() { EmitLocation(o, *SM, LangOpts, D->getLocation(), FM, 2); // Output the diagnostic to the sub-diagnostic client, if any. - if (PF) { - if (!SubPDC.get()) - SubPDC.reset(PF->createPathDiagnosticClient(&FilesMade)); - - FilesMade.clear(); - SubPDC->HandlePathDiagnostic(OwnedD.take()); - SubPDC.reset(0); + if (SubPD) { + SubPD->HandlePathDiagnostic(OwnedD.take()); + llvm::SmallVector<std::string, 1> SubFilesMade; + SubPD->FlushDiagnostics(SubFilesMade); - if (!FilesMade.empty()) { - o << " <key>" << PF->getName() << "_files</key>\n"; + if (!SubFilesMade.empty()) { + o << " <key>" << SubPD->getName() << "_files</key>\n"; o << " <array>\n"; - for (size_t i = 0, n = FilesMade.size(); i < n ; ++i) - o << " <string>" << FilesMade[i] << "</string>\n"; + for (size_t i = 0, n = SubFilesMade.size(); i < n ; ++i) + o << " <string>" << SubFilesMade[i] << "</string>\n"; o << " </array>\n"; } } @@ -420,4 +420,7 @@ PlistDiagnostics::~PlistDiagnostics() { // Finish. o << "</dict>\n</plist>"; + + if (FilesMade) + FilesMade->push_back(OutputFile); } |