JSBModule.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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 JSBPrimitiveType;
  15. class JSBModule : public Object
  16. {
  17. friend class JSBModuleWriter;
  18. OBJECT(JSBModule)
  19. public:
  20. JSBModule(Context* context, JSBPackage* package);
  21. virtual ~JSBModule();
  22. const String& GetName() { return name_; }
  23. JSBPackage* GetPackage() { return package_; }
  24. JSBClass* GetClass(const String& name);
  25. Vector<SharedPtr<JSBClass>> GetClasses();
  26. Vector<SharedPtr<JSBEnum>> GetEnums();
  27. HashMap<String, JSBPrimitiveType*>& GetConstants() { return constants_; }
  28. void RegisterClass(String name);
  29. JSBEnum* GetEnum(const String& name);
  30. void RegisterEnum(JSBEnum* jenum);
  31. bool ContainsConstant(const String& constantName);
  32. void RegisterConstant(const String& constantName, unsigned type);
  33. bool Requires(const String& requirement) { return requirements_.Contains(requirement); }
  34. bool Load(const String& jsonFilename);
  35. void PreprocessHeaders();
  36. void VisitHeaders();
  37. void PreprocessClasses();
  38. void ProcessClasses();
  39. void PostProcessClasses();
  40. void GenerateSource(const String& outPath);
  41. const String& GetSource();
  42. private:
  43. void ProcessOverloads();
  44. void ProcessExcludes();
  45. void ProcessTypeScriptDecl();
  46. void ProcessHaxeDecl();
  47. void ScanHeaders();
  48. String name_;
  49. SharedPtr<JSBPackage> package_;
  50. Vector<SharedPtr<JSBHeader>> headers_;
  51. Vector<String> includes_;
  52. Vector<String> sourceDirs_;
  53. Vector<String> classnames_;
  54. HashMap<String, String> classRenames_;
  55. // native name -> JSBClass
  56. HashMap<StringHash, SharedPtr<JSBClass> > classes_;
  57. HashMap<StringHash, SharedPtr<JSBEnum> > enums_;
  58. HashMap<String, JSBPrimitiveType*> constants_;
  59. Vector<String> requirements_;
  60. SharedPtr<JSONFile> moduleJSON_;
  61. String source_;
  62. };
  63. }