JSBModule.h 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #pragma once
  2. #include <Atomic/Core/Object.h>
  3. using namespace Atomic;
  4. namespace Atomic
  5. {
  6. class JSONFile;
  7. }
  8. namespace ToolCore
  9. {
  10. class JSBPackage;
  11. class JSBHeader;
  12. class JSBClass;
  13. class JSBEnum;
  14. class JSBModule : public Object
  15. {
  16. friend class JSBModuleWriter;
  17. OBJECT(JSBModule)
  18. public:
  19. JSBModule(Context* context, JSBPackage* package);
  20. virtual ~JSBModule();
  21. const String& GetName() { return name_; }
  22. JSBPackage* GetPackage() { return package_; }
  23. JSBClass* GetClass(const String& name);
  24. Vector<SharedPtr<JSBClass>> GetClasses();
  25. Vector<SharedPtr<JSBEnum>> GetEnums();
  26. Vector<String>& GetConstants() { return constants_; }
  27. void RegisterClass(String name);
  28. JSBEnum* GetEnum(const String& name);
  29. void RegisterEnum(JSBEnum* jenum);
  30. bool ContainsConstant(const String& constantName);
  31. void RegisterConstant(const String& constantName);
  32. bool Requires(const String& requirement) { return requirements_.Contains(requirement); }
  33. bool Load(const String& jsonFilename);
  34. void PreprocessHeaders();
  35. void VisitHeaders();
  36. void PreprocessClasses();
  37. void ProcessClasses();
  38. void PostProcessClasses();
  39. void GenerateSource(const String& outPath);
  40. const String& GetSource();
  41. private:
  42. void ProcessOverloads();
  43. void ScanHeaders();
  44. String name_;
  45. SharedPtr<JSBPackage> package_;
  46. Vector<SharedPtr<JSBHeader>> headers_;
  47. Vector<String> includes_;
  48. Vector<String> sourceDirs_;
  49. Vector<String> classnames_;
  50. HashMap<String, String> classRenames_;
  51. // native name -> JSBClass
  52. HashMap<StringHash, SharedPtr<JSBClass> > classes_;
  53. HashMap<StringHash, SharedPtr<JSBEnum> > enums_;
  54. Vector<String> constants_;
  55. Vector<String> requirements_;
  56. SharedPtr<JSONFile> moduleJSON_;
  57. String source_;
  58. };
  59. }