resolve cyclic dependency with zstd
[platform/upstream/cmake.git] / Source / cmDependsJavaParserHelper.h
1 /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
2    file Copyright.txt or https://cmake.org/licensing for details.  */
3 #pragma once
4
5 #include "cmConfigure.h" // IWYU pragma: keep
6
7 #include <memory>
8 #include <string>
9 #include <vector>
10
11 /** \class cmDependsJavaParserHelper
12  * \brief Helper class for parsing java source files
13  *
14  * Finds dependencies for java file and list of outputs
15  */
16 class cmDependsJavaParserHelper
17 {
18 public:
19   struct ParserType
20   {
21     char* str;
22   };
23
24   cmDependsJavaParserHelper();
25   ~cmDependsJavaParserHelper();
26
27   cmDependsJavaParserHelper(const cmDependsJavaParserHelper&) = delete;
28   cmDependsJavaParserHelper& operator=(const cmDependsJavaParserHelper&) =
29     delete;
30
31   int ParseString(const char* str, int verb);
32   int ParseFile(const char* file);
33
34   // For the lexer:
35   void AllocateParserType(cmDependsJavaParserHelper::ParserType* pt,
36                           const char* str, int len = 0);
37
38   int LexInput(char* buf, int maxlen);
39   void Error(const char* str);
40
41   // For yacc
42   void AddClassFound(const char* sclass);
43   void PrepareElement(ParserType* me);
44   void DeallocateParserType(char** pt);
45   void CheckEmpty(int line, int cnt, ParserType* pt);
46   void StartClass(const char* cls);
47   void EndClass();
48   void AddPackagesImport(const char* sclass);
49   void SetCurrentPackage(const char* pkg) { this->CurrentPackage = pkg; }
50   const char* GetCurrentPackage() { return this->CurrentPackage.c_str(); }
51   void SetCurrentCombine(const char* cmb) { this->CurrentCombine = cmb; }
52   const char* GetCurrentCombine() { return this->CurrentCombine.c_str(); }
53   void UpdateCombine(const char* str1, const char* str2);
54
55   std::vector<std::string>& GetClassesFound() { return this->ClassesFound; }
56
57   std::vector<std::string> GetFilesProduced();
58
59 private:
60   class CurrentClass
61   {
62   public:
63     std::string Name;
64     std::vector<CurrentClass> NestedClasses;
65     void AddFileNamesForPrinting(std::vector<std::string>* files,
66                                  const char* prefix, const char* sep) const;
67   };
68   std::string CurrentPackage;
69   std::string::size_type InputBufferPos;
70   std::string InputBuffer;
71   std::vector<char> OutputBuffer;
72   std::vector<std::string> ClassesFound;
73   std::vector<std::string> PackagesImport;
74   std::string CurrentCombine;
75
76   std::vector<CurrentClass> ClassStack;
77
78   int CurrentLine;
79   int UnionsAvailable;
80   int LastClassId;
81   int CurrentDepth;
82   int Verbose;
83
84   std::vector<std::unique_ptr<char[]>> Allocates;
85
86   void PrintClasses();
87
88   void Print(const char* place, const char* str) const;
89   void CombineUnions(char** out, const char* in1, char** in2, const char* sep);
90   void SafePrintMissing(const char* str, int line, int cnt);
91
92   void CleanupParser();
93 };
94
95 #define YYSTYPE cmDependsJavaParserHelper::ParserType
96 #define YYSTYPE_IS_DECLARED
97 #define YY_EXTRA_TYPE cmDependsJavaParserHelper*
98 #define YY_DECL int cmDependsJava_yylex(YYSTYPE* yylvalp, yyscan_t yyscanner)