#pragma once #include using namespace Atomic; namespace Atomic { class JSONFile; } namespace ToolCore { class JSBPackage; class JSBHeader; class JSBClass; class JSBEnum; class JSBModule : public Object { friend class JSBModuleWriter; OBJECT(JSBModule) public: JSBModule(Context* context, JSBPackage* package); virtual ~JSBModule(); const String& GetName() { return name_; } JSBPackage* GetPackage() { return package_; } JSBClass* GetClass(const String& name); void RegisterClass(String name); JSBEnum* GetEnum(const String& name); void RegisterEnum(JSBEnum* jenum); bool ContainsConstant(const String& constantName); void RegisterConstant(const String& constantName); bool Requires(const String& requirement) { return requirements_.Contains(requirement); } bool Load(const String& jsonFilename); void PreprocessHeaders(); void VisitHeaders(); void PreprocessClasses(); void ProcessClasses(); void PostProcessClasses(); void GenerateSource(const String& outPath); const String& GetSource(); private: void ProcessOverloads(); void ScanHeaders(); String name_; SharedPtr package_; Vector> headers_; Vector includes_; Vector sourceDirs_; Vector classnames_; HashMap classRenames_; // native name -> JSBClass HashMap > classes_; HashMap > enums_; Vector constants_; Vector requirements_; SharedPtr moduleJSON_; String source_; }; }