cmDependsJavaParserHelper.h 3.2 KB

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