| /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying | |
| file Copyright.txt or https://cmake.org/licensing for details. */ | |
| #pragma once | |
| #include "cmConfigure.h" // IWYU pragma: keep | |
| #include <memory> | |
| #include <string> | |
| #include <vector> | |
| /** \class cmDependsJavaParserHelper | |
| * \brief Helper class for parsing java source files | |
| * | |
| * Finds dependencies for java file and list of outputs | |
| */ | |
| class cmDependsJavaParserHelper | |
| { | |
| public: | |
| struct ParserType | |
| { | |
| char* str; | |
| }; | |
| cmDependsJavaParserHelper(); | |
| ~cmDependsJavaParserHelper(); | |
| cmDependsJavaParserHelper(const cmDependsJavaParserHelper&) = delete; | |
| cmDependsJavaParserHelper& operator=(const cmDependsJavaParserHelper&) = | |
| delete; | |
| int ParseString(const char* str, int verb); | |
| int ParseFile(const char* file); | |
| // For the lexer: | |
| void AllocateParserType(cmDependsJavaParserHelper::ParserType* pt, | |
| const char* str, int len = 0); | |
| int LexInput(char* buf, int maxlen); | |
| void Error(const char* str); | |
| // For yacc | |
| void AddClassFound(const char* sclass); | |
| void PrepareElement(ParserType* me); | |
| void DeallocateParserType(char** pt); | |
| void CheckEmpty(int line, int cnt, ParserType* pt); | |
| void StartClass(const char* cls); | |
| void EndClass(); | |
| void AddPackagesImport(const char* sclass); | |
| void SetCurrentPackage(const char* pkg) { this->CurrentPackage = pkg; } | |
| const char* GetCurrentPackage() { return this->CurrentPackage.c_str(); } | |
| void SetCurrentCombine(const char* cmb) { this->CurrentCombine = cmb; } | |
| const char* GetCurrentCombine() { return this->CurrentCombine.c_str(); } | |
| void UpdateCombine(const char* str1, const char* str2); | |
| std::vector<std::string>& GetClassesFound() { return this->ClassesFound; } | |
| std::vector<std::string> GetFilesProduced(); | |
| private: | |
| class CurrentClass | |
| { | |
| public: | |
| std::string Name; | |
| std::vector<CurrentClass> NestedClasses; | |
| void AddFileNamesForPrinting(std::vector<std::string>* files, | |
| const char* prefix, const char* sep) const; | |
| }; | |
| std::string CurrentPackage; | |
| std::string::size_type InputBufferPos; | |
| std::string InputBuffer; | |
| std::vector<char> OutputBuffer; | |
| std::vector<std::string> ClassesFound; | |
| std::vector<std::string> PackagesImport; | |
| std::string CurrentCombine; | |
| std::vector<CurrentClass> ClassStack; | |
| int CurrentLine; | |
| int UnionsAvailable; | |
| int LastClassId; | |
| int CurrentDepth; | |
| int Verbose; | |
| std::vector<std::unique_ptr<char[]>> Allocates; | |
| void PrintClasses(); | |
| void Print(const char* place, const char* str) const; | |
| void CombineUnions(char** out, const char* in1, char** in2, const char* sep); | |
| void SafePrintMissing(const char* str, int line, int cnt); | |
| void CleanupParser(); | |
| }; | |
| #define YYSTYPE cmDependsJavaParserHelper::ParserType | |
| #define YYSTYPE_IS_DECLARED | |
| #define YY_EXTRA_TYPE cmDependsJavaParserHelper* | |
| #define YY_DECL int cmDependsJava_yylex(YYSTYPE* yylvalp, yyscan_t yyscanner) |