From: Stephen Kelly Date: Wed, 17 Mar 2021 23:22:31 +0000 (+0000) Subject: [AST] Ensure that an empty json file is generated if compile errors X-Git-Tag: llvmorg-14-init~11802 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=188405bc192df54fbf048ddd3da071c9fff4d0d1;p=platform%2Fupstream%2Fllvm.git [AST] Ensure that an empty json file is generated if compile errors Differential Revision: https://reviews.llvm.org/D98827 --- diff --git a/clang/lib/Tooling/DumpTool/ASTSrcLocProcessor.cpp b/clang/lib/Tooling/DumpTool/ASTSrcLocProcessor.cpp index ff279d9..e7400e9 100644 --- a/clang/lib/Tooling/DumpTool/ASTSrcLocProcessor.cpp +++ b/clang/lib/Tooling/DumpTool/ASTSrcLocProcessor.cpp @@ -79,17 +79,16 @@ llvm::json::Object toJSON(llvm::StringMap const &Obj) { return JsonObj; } -void WriteJSON(std::string JsonPath, - llvm::StringMap const &ClassInheritance, - llvm::StringMap> const &ClassesInClade, - llvm::StringMap const &ClassEntries) { +void WriteJSON(std::string JsonPath, llvm::json::Object &&ClassInheritance, + llvm::json::Object &&ClassesInClade, + llvm::json::Object &&ClassEntries) { llvm::json::Object JsonObj; using llvm::json::toJSON; - JsonObj["classInheritance"] = ::toJSON(ClassInheritance); - JsonObj["classesInClade"] = ::toJSON(ClassesInClade); - JsonObj["classEntries"] = ::toJSON(ClassEntries); + JsonObj["classInheritance"] = std::move(ClassInheritance); + JsonObj["classesInClade"] = std::move(ClassesInClade); + JsonObj["classEntries"] = std::move(ClassEntries); std::error_code EC; llvm::raw_fd_ostream JsonOut(JsonPath, EC, llvm::sys::fs::F_Text); @@ -101,9 +100,12 @@ void WriteJSON(std::string JsonPath, } void ASTSrcLocProcessor::generate() { - WriteJSON(JsonPath, ClassInheritance, ClassesInClade, ClassEntries); + WriteJSON(JsonPath, ::toJSON(ClassInheritance), ::toJSON(ClassesInClade), + ::toJSON(ClassEntries)); } +void ASTSrcLocProcessor::generateEmpty() { WriteJSON(JsonPath, {}, {}, {}); } + std::vector CaptureMethods(std::string TypeString, const clang::CXXRecordDecl *ASTClass, const MatchFinder::MatchResult &Result) { diff --git a/clang/lib/Tooling/DumpTool/ASTSrcLocProcessor.h b/clang/lib/Tooling/DumpTool/ASTSrcLocProcessor.h index 0099475..5d848f4 100644 --- a/clang/lib/Tooling/DumpTool/ASTSrcLocProcessor.h +++ b/clang/lib/Tooling/DumpTool/ASTSrcLocProcessor.h @@ -30,6 +30,7 @@ public: StringRef File); void generate(); + void generateEmpty(); private: void run(const ast_matchers::MatchFinder::MatchResult &Result) override; diff --git a/clang/lib/Tooling/DumpTool/ClangSrcLocDump.cpp b/clang/lib/Tooling/DumpTool/ClangSrcLocDump.cpp index 06b58c6..8328977 100644 --- a/clang/lib/Tooling/DumpTool/ClangSrcLocDump.cpp +++ b/clang/lib/Tooling/DumpTool/ClangSrcLocDump.cpp @@ -48,7 +48,13 @@ class ASTSrcLocGenerationAction : public clang::ASTFrontendAction { public: ASTSrcLocGenerationAction() : Processor(JsonOutputPath) {} - ~ASTSrcLocGenerationAction() { Processor.generate(); } + void ExecuteAction() override { + clang::ASTFrontendAction::ExecuteAction(); + if (getCompilerInstance().getDiagnostics().getNumErrors() > 0) + Processor.generateEmpty(); + else + Processor.generate(); + } std::unique_ptr CreateASTConsumer(clang::CompilerInstance &Compiler,