cmDependsJavaParserHelper.h 2.9 KB

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