JSBModule.h 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. void RegisterClass(String name);
  25. JSBEnum* GetEnum(const String& name);
  26. void RegisterEnum(JSBEnum* jenum);
  27. bool ContainsConstant(const String& constantName);
  28. void RegisterConstant(const String& constantName);
  29. bool Requires(const String& requirement) { return requirements_.Contains(requirement); }
  30. bool Load(const String& jsonFilename);
  31. void PreprocessHeaders();
  32. void VisitHeaders();
  33. void PreprocessClasses();
  34. void ProcessClasses();
  35. void PostProcessClasses();
  36. void GenerateSource(const String& outPath);
  37. const String& GetSource();
  38. private:
  39. void ProcessOverloads();
  40. void ScanHeaders();
  41. String name_;
  42. SharedPtr<JSBPackage> package_;
  43. Vector<SharedPtr<JSBHeader>> headers_;
  44. Vector<String> includes_;
  45. Vector<String> sourceDirs_;
  46. Vector<String> classnames_;
  47. HashMap<String, String> classRenames_;
  48. // native name -> JSBClass
  49. HashMap<StringHash, SharedPtr<JSBClass> > classes_;
  50. HashMap<StringHash, SharedPtr<JSBEnum> > enums_;
  51. Vector<String> constants_;
  52. Vector<String> requirements_;
  53. SharedPtr<JSONFile> moduleJSON_;
  54. String source_;
  55. };
  56. }