From 2b557652cf48dcde9b0832c24ee6f6ac07e0fc72 Mon Sep 17 00:00:00 2001 From: hamdij0maa Date: Thu, 5 Mar 2026 07:32:13 +0100 Subject: [PATCH] fix(android): update nitrogen-generated code to CxxPart/JavaPart pattern Update the nitrogen-generated Android code to use the newer Nitro Modules API with CxxPart/JavaPart inner classes instead of the legacy HybridClass pattern. This fixes compatibility with recent versions of react-native-nitro-modules (0.22+). Changes across 68 files: - All HybridSpec.kt files: Replace manual HybridData/initHybrid with CxxPart inner class - All JHybridSpec.hpp files: Migrate from HybridClass to JavaPart/CxxPart structs - All JHybridSpec.cpp files: Update JNI implementations, replace javaClassStatic() calls - JVariant/JResolvedReferencedAsset: Update javaobject refs to JavaPart - JHybridRiveViewStateUpdater: Update view references for new pattern - riveOnLoad: Add registerAllNatives(), deprecate initialize(), add Impl factories - cpp-adapter.cpp: Use facebook::jni::initialize with registerAllNatives --- android/src/main/cpp/cpp-adapter.cpp | 5 +- .../c++/JHybridBindableArtboardSpec.cpp | 44 ++-- .../c++/JHybridBindableArtboardSpec.hpp | 41 ++-- .../c++/JHybridRiveFileFactorySpec.cpp | 68 +++--- .../c++/JHybridRiveFileFactorySpec.hpp | 43 ++-- .../android/c++/JHybridRiveFileSpec.cpp | 66 +++--- .../android/c++/JHybridRiveFileSpec.hpp | 41 ++-- .../c++/JHybridRiveImageFactorySpec.cpp | 62 +++--- .../c++/JHybridRiveImageFactorySpec.hpp | 43 ++-- .../android/c++/JHybridRiveImageSpec.cpp | 44 ++-- .../android/c++/JHybridRiveImageSpec.hpp | 41 ++-- .../android/c++/JHybridRiveRuntimeSpec.cpp | 48 ++-- .../android/c++/JHybridRiveRuntimeSpec.hpp | 41 ++-- .../generated/android/c++/JHybridRiveSpec.cpp | 46 ++-- .../generated/android/c++/JHybridRiveSpec.hpp | 43 ++-- .../android/c++/JHybridRiveViewSpec.cpp | 114 +++++----- .../android/c++/JHybridRiveViewSpec.hpp | 41 ++-- .../JHybridViewModelArtboardPropertySpec.cpp | 46 ++-- .../JHybridViewModelArtboardPropertySpec.hpp | 12 +- .../JHybridViewModelBooleanPropertySpec.cpp | 50 ++--- .../JHybridViewModelBooleanPropertySpec.hpp | 10 +- .../c++/JHybridViewModelColorPropertySpec.cpp | 50 ++--- .../c++/JHybridViewModelColorPropertySpec.hpp | 10 +- .../c++/JHybridViewModelEnumPropertySpec.cpp | 50 ++--- .../c++/JHybridViewModelEnumPropertySpec.hpp | 10 +- .../c++/JHybridViewModelImagePropertySpec.cpp | 50 ++--- .../c++/JHybridViewModelImagePropertySpec.hpp | 12 +- .../c++/JHybridViewModelInstanceSpec.cpp | 86 ++++---- .../c++/JHybridViewModelInstanceSpec.hpp | 41 ++-- .../c++/JHybridViewModelListPropertySpec.cpp | 62 +++--- .../c++/JHybridViewModelListPropertySpec.hpp | 10 +- .../JHybridViewModelNumberPropertySpec.cpp | 50 ++--- .../JHybridViewModelNumberPropertySpec.hpp | 10 +- .../c++/JHybridViewModelPropertySpec.cpp | 44 ++-- .../c++/JHybridViewModelPropertySpec.hpp | 43 ++-- .../android/c++/JHybridViewModelSpec.cpp | 64 +++--- .../android/c++/JHybridViewModelSpec.hpp | 41 ++-- .../JHybridViewModelStringPropertySpec.cpp | 50 ++--- .../JHybridViewModelStringPropertySpec.hpp | 10 +- .../JHybridViewModelTriggerPropertySpec.cpp | 50 ++--- .../JHybridViewModelTriggerPropertySpec.hpp | 12 +- .../android/c++/JResolvedReferencedAsset.hpp | 8 +- ...stanceSpec_DataBindMode_DataBindByName.cpp | 2 +- ...stanceSpec_DataBindMode_DataBindByName.hpp | 8 +- .../c++/views/JHybridRiveViewStateUpdater.cpp | 6 +- .../c++/views/JHybridRiveViewStateUpdater.hpp | 2 +- .../nitro/rive/HybridBindableArtboardSpec.kt | 33 ++- .../nitro/rive/HybridRiveFileFactorySpec.kt | 34 ++- .../margelo/nitro/rive/HybridRiveFileSpec.kt | 33 ++- .../nitro/rive/HybridRiveImageFactorySpec.kt | 34 ++- .../margelo/nitro/rive/HybridRiveImageSpec.kt | 33 ++- .../nitro/rive/HybridRiveRuntimeSpec.kt | 33 ++- .../com/margelo/nitro/rive/HybridRiveSpec.kt | 28 +-- .../margelo/nitro/rive/HybridRiveViewSpec.kt | 33 ++- .../HybridViewModelArtboardPropertySpec.kt | 28 +-- .../HybridViewModelBooleanPropertySpec.kt | 33 ++- .../rive/HybridViewModelColorPropertySpec.kt | 33 ++- .../rive/HybridViewModelEnumPropertySpec.kt | 33 ++- .../rive/HybridViewModelImagePropertySpec.kt | 34 ++- .../nitro/rive/HybridViewModelInstanceSpec.kt | 33 ++- .../rive/HybridViewModelListPropertySpec.kt | 33 ++- .../rive/HybridViewModelNumberPropertySpec.kt | 33 ++- .../nitro/rive/HybridViewModelPropertySpec.kt | 28 +-- .../margelo/nitro/rive/HybridViewModelSpec.kt | 33 ++- .../rive/HybridViewModelStringPropertySpec.kt | 33 ++- .../HybridViewModelTriggerPropertySpec.kt | 34 ++- nitrogen/generated/android/riveOnLoad.cpp | 208 +++++++++++------- nitrogen/generated/android/riveOnLoad.hpp | 17 +- 68 files changed, 1191 insertions(+), 1413 deletions(-) diff --git a/android/src/main/cpp/cpp-adapter.cpp b/android/src/main/cpp/cpp-adapter.cpp index 5116d53c..4a13528f 100644 --- a/android/src/main/cpp/cpp-adapter.cpp +++ b/android/src/main/cpp/cpp-adapter.cpp @@ -1,6 +1,7 @@ -#include #include "riveOnLoad.hpp" +#include +#include JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void*) { - return margelo::nitro::rive::initialize(vm); + return facebook::jni::initialize(vm, []() { margelo::nitro::rive::registerAllNatives(); }); } diff --git a/nitrogen/generated/android/c++/JHybridBindableArtboardSpec.cpp b/nitrogen/generated/android/c++/JHybridBindableArtboardSpec.cpp index e8ef34a6..a545d3ca 100644 --- a/nitrogen/generated/android/c++/JHybridBindableArtboardSpec.cpp +++ b/nitrogen/generated/android/c++/JHybridBindableArtboardSpec.cpp @@ -13,42 +13,36 @@ namespace margelo::nitro::rive { - jni::local_ref JHybridBindableArtboardSpec::initHybrid(jni::alias_ref jThis) { - return makeCxxInstance(jThis); - } - - void JHybridBindableArtboardSpec::registerNatives() { - registerHybrid({ - makeNativeMethod("initHybrid", JHybridBindableArtboardSpec::initHybrid), - }); + std::shared_ptr JHybridBindableArtboardSpec::JavaPart::getJHybridBindableArtboardSpec() { + auto hybridObject = JHybridObject::JavaPart::getJHybridObject(); + auto castHybridObject = std::dynamic_pointer_cast(hybridObject); + if (castHybridObject == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to downcast JHybridObject to JHybridBindableArtboardSpec!"); + } + return castHybridObject; } - size_t JHybridBindableArtboardSpec::getExternalMemorySize() noexcept { - static const auto method = javaClassStatic()->getMethod("getMemorySize"); - return method(_javaPart); + jni::local_ref JHybridBindableArtboardSpec::CxxPart::initHybrid(jni::alias_ref jThis) { + return makeCxxInstance(jThis); } - bool JHybridBindableArtboardSpec::equals(const std::shared_ptr& other) { - if (auto otherCast = std::dynamic_pointer_cast(other)) { - return _javaPart == otherCast->_javaPart; + std::shared_ptr JHybridBindableArtboardSpec::CxxPart::createHybridObject(const jni::local_ref& javaPart) { + auto castJavaPart = jni::dynamic_ref_cast(javaPart); + if (castJavaPart == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridBindableArtboardSpec::JavaPart!"); } - return false; - } - - void JHybridBindableArtboardSpec::dispose() noexcept { - static const auto method = javaClassStatic()->getMethod("dispose"); - method(_javaPart); + return std::make_shared(castJavaPart); } - std::string JHybridBindableArtboardSpec::toString() { - static const auto method = javaClassStatic()->getMethod("toString"); - auto javaString = method(_javaPart); - return javaString->toStdString(); + void JHybridBindableArtboardSpec::CxxPart::registerNatives() { + registerHybrid({ + makeNativeMethod("initHybrid", JHybridBindableArtboardSpec::CxxPart::initHybrid), + }); } // Properties std::string JHybridBindableArtboardSpec::getArtboardName() { - static const auto method = javaClassStatic()->getMethod()>("getArtboardName"); + static const auto method = _javaPart->javaClassStatic()->getMethod()>("getArtboardName"); auto __result = method(_javaPart); return __result->toStdString(); } diff --git a/nitrogen/generated/android/c++/JHybridBindableArtboardSpec.hpp b/nitrogen/generated/android/c++/JHybridBindableArtboardSpec.hpp index 1f8ee44d..4364ad82 100644 --- a/nitrogen/generated/android/c++/JHybridBindableArtboardSpec.hpp +++ b/nitrogen/generated/android/c++/JHybridBindableArtboardSpec.hpp @@ -18,34 +18,33 @@ namespace margelo::nitro::rive { using namespace facebook; - class JHybridBindableArtboardSpec: public jni::HybridClass, - public virtual HybridBindableArtboardSpec { + class JHybridBindableArtboardSpec: public virtual HybridBindableArtboardSpec, public virtual JHybridObject { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridBindableArtboardSpec;"; - static jni::local_ref initHybrid(jni::alias_ref jThis); - static void registerNatives(); - - protected: - // C++ constructor (called from Java via `initHybrid()`) - explicit JHybridBindableArtboardSpec(jni::alias_ref jThis) : - HybridObject(HybridBindableArtboardSpec::TAG), - HybridBase(jThis), - _javaPart(jni::make_global(jThis)) {} + struct JavaPart: public jni::JavaClass { + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridBindableArtboardSpec;"; + std::shared_ptr getJHybridBindableArtboardSpec(); + }; + struct CxxPart: public jni::HybridClass { + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridBindableArtboardSpec$CxxPart;"; + static jni::local_ref initHybrid(jni::alias_ref jThis); + static void registerNatives(); + using HybridBase::HybridBase; + protected: + std::shared_ptr createHybridObject(const jni::local_ref& javaPart) override; + }; public: + explicit JHybridBindableArtboardSpec(const jni::local_ref& javaPart): + HybridObject(HybridBindableArtboardSpec::TAG), + JHybridObject(javaPart), + _javaPart(jni::make_global(javaPart)) {} ~JHybridBindableArtboardSpec() override { // Hermes GC can destroy JS objects on a non-JNI Thread. jni::ThreadScope::WithClassLoader([&] { _javaPart.reset(); }); } public: - size_t getExternalMemorySize() noexcept override; - bool equals(const std::shared_ptr& other) override; - void dispose() noexcept override; - std::string toString() override; - - public: - inline const jni::global_ref& getJavaPart() const noexcept { + inline const jni::global_ref& getJavaPart() const noexcept { return _javaPart; } @@ -58,9 +57,7 @@ namespace margelo::nitro::rive { private: - friend HybridBase; - using HybridBase::HybridBase; - jni::global_ref _javaPart; + jni::global_ref _javaPart; }; } // namespace margelo::nitro::rive diff --git a/nitrogen/generated/android/c++/JHybridRiveFileFactorySpec.cpp b/nitrogen/generated/android/c++/JHybridRiveFileFactorySpec.cpp index b06f4fbf..70aaee9b 100644 --- a/nitrogen/generated/android/c++/JHybridRiveFileFactorySpec.cpp +++ b/nitrogen/generated/android/c++/JHybridRiveFileFactorySpec.cpp @@ -35,51 +35,45 @@ namespace margelo::nitro::rive { class HybridRiveImageSpec; } namespace margelo::nitro::rive { - jni::local_ref JHybridRiveFileFactorySpec::initHybrid(jni::alias_ref jThis) { - return makeCxxInstance(jThis); - } - - void JHybridRiveFileFactorySpec::registerNatives() { - registerHybrid({ - makeNativeMethod("initHybrid", JHybridRiveFileFactorySpec::initHybrid), - }); + std::shared_ptr JHybridRiveFileFactorySpec::JavaPart::getJHybridRiveFileFactorySpec() { + auto hybridObject = JHybridObject::JavaPart::getJHybridObject(); + auto castHybridObject = std::dynamic_pointer_cast(hybridObject); + if (castHybridObject == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to downcast JHybridObject to JHybridRiveFileFactorySpec!"); + } + return castHybridObject; } - size_t JHybridRiveFileFactorySpec::getExternalMemorySize() noexcept { - static const auto method = javaClassStatic()->getMethod("getMemorySize"); - return method(_javaPart); + jni::local_ref JHybridRiveFileFactorySpec::CxxPart::initHybrid(jni::alias_ref jThis) { + return makeCxxInstance(jThis); } - bool JHybridRiveFileFactorySpec::equals(const std::shared_ptr& other) { - if (auto otherCast = std::dynamic_pointer_cast(other)) { - return _javaPart == otherCast->_javaPart; + std::shared_ptr JHybridRiveFileFactorySpec::CxxPart::createHybridObject(const jni::local_ref& javaPart) { + auto castJavaPart = jni::dynamic_ref_cast(javaPart); + if (castJavaPart == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridRiveFileFactorySpec::JavaPart!"); } - return false; - } - - void JHybridRiveFileFactorySpec::dispose() noexcept { - static const auto method = javaClassStatic()->getMethod("dispose"); - method(_javaPart); + return std::make_shared(castJavaPart); } - std::string JHybridRiveFileFactorySpec::toString() { - static const auto method = javaClassStatic()->getMethod("toString"); - auto javaString = method(_javaPart); - return javaString->toStdString(); + void JHybridRiveFileFactorySpec::CxxPart::registerNatives() { + registerHybrid({ + makeNativeMethod("initHybrid", JHybridRiveFileFactorySpec::CxxPart::initHybrid), + }); } // Properties - + // Methods std::shared_ptr>> JHybridRiveFileFactorySpec::fromURL(const std::string& url, bool loadCdn, const std::optional& referencedAssets) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* url */, jboolean /* loadCdn */, jni::alias_ref /* referencedAssets */)>("fromURL"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* url */, jboolean /* loadCdn */, jni::alias_ref /* referencedAssets */)>("fromURL"); auto __result = method(_javaPart, jni::make_jstring(url), loadCdn, referencedAssets.has_value() ? JReferencedAssetsType::fromCpp(referencedAssets.value()) : nullptr); return [&]() { auto __promise = Promise>::create(); __result->cthis()->addOnResolvedListener([=](const jni::alias_ref& __boxedResult) { - auto __result = jni::static_ref_cast(__boxedResult); - __promise->resolve(__result->cthis()->shared_cast()); + auto __result = jni::static_ref_cast(__boxedResult); + __promise->resolve(__result->getJHybridRiveFileSpec()); }); __result->cthis()->addOnRejectedListener([=](const jni::alias_ref& __throwable) { jni::JniException __jniError(__throwable); @@ -89,13 +83,13 @@ namespace margelo::nitro::rive { }(); } std::shared_ptr>> JHybridRiveFileFactorySpec::fromFileURL(const std::string& fileURL, bool loadCdn, const std::optional& referencedAssets) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* fileURL */, jboolean /* loadCdn */, jni::alias_ref /* referencedAssets */)>("fromFileURL"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* fileURL */, jboolean /* loadCdn */, jni::alias_ref /* referencedAssets */)>("fromFileURL"); auto __result = method(_javaPart, jni::make_jstring(fileURL), loadCdn, referencedAssets.has_value() ? JReferencedAssetsType::fromCpp(referencedAssets.value()) : nullptr); return [&]() { auto __promise = Promise>::create(); __result->cthis()->addOnResolvedListener([=](const jni::alias_ref& __boxedResult) { - auto __result = jni::static_ref_cast(__boxedResult); - __promise->resolve(__result->cthis()->shared_cast()); + auto __result = jni::static_ref_cast(__boxedResult); + __promise->resolve(__result->getJHybridRiveFileSpec()); }); __result->cthis()->addOnRejectedListener([=](const jni::alias_ref& __throwable) { jni::JniException __jniError(__throwable); @@ -105,13 +99,13 @@ namespace margelo::nitro::rive { }(); } std::shared_ptr>> JHybridRiveFileFactorySpec::fromResource(const std::string& resource, bool loadCdn, const std::optional& referencedAssets) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* resource */, jboolean /* loadCdn */, jni::alias_ref /* referencedAssets */)>("fromResource"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* resource */, jboolean /* loadCdn */, jni::alias_ref /* referencedAssets */)>("fromResource"); auto __result = method(_javaPart, jni::make_jstring(resource), loadCdn, referencedAssets.has_value() ? JReferencedAssetsType::fromCpp(referencedAssets.value()) : nullptr); return [&]() { auto __promise = Promise>::create(); __result->cthis()->addOnResolvedListener([=](const jni::alias_ref& __boxedResult) { - auto __result = jni::static_ref_cast(__boxedResult); - __promise->resolve(__result->cthis()->shared_cast()); + auto __result = jni::static_ref_cast(__boxedResult); + __promise->resolve(__result->getJHybridRiveFileSpec()); }); __result->cthis()->addOnRejectedListener([=](const jni::alias_ref& __throwable) { jni::JniException __jniError(__throwable); @@ -121,13 +115,13 @@ namespace margelo::nitro::rive { }(); } std::shared_ptr>> JHybridRiveFileFactorySpec::fromBytes(const std::shared_ptr& bytes, bool loadCdn, const std::optional& referencedAssets) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* bytes */, jboolean /* loadCdn */, jni::alias_ref /* referencedAssets */)>("fromBytes"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* bytes */, jboolean /* loadCdn */, jni::alias_ref /* referencedAssets */)>("fromBytes"); auto __result = method(_javaPart, JArrayBuffer::wrap(bytes), loadCdn, referencedAssets.has_value() ? JReferencedAssetsType::fromCpp(referencedAssets.value()) : nullptr); return [&]() { auto __promise = Promise>::create(); __result->cthis()->addOnResolvedListener([=](const jni::alias_ref& __boxedResult) { - auto __result = jni::static_ref_cast(__boxedResult); - __promise->resolve(__result->cthis()->shared_cast()); + auto __result = jni::static_ref_cast(__boxedResult); + __promise->resolve(__result->getJHybridRiveFileSpec()); }); __result->cthis()->addOnRejectedListener([=](const jni::alias_ref& __throwable) { jni::JniException __jniError(__throwable); diff --git a/nitrogen/generated/android/c++/JHybridRiveFileFactorySpec.hpp b/nitrogen/generated/android/c++/JHybridRiveFileFactorySpec.hpp index 2f9e446b..173dcadc 100644 --- a/nitrogen/generated/android/c++/JHybridRiveFileFactorySpec.hpp +++ b/nitrogen/generated/android/c++/JHybridRiveFileFactorySpec.hpp @@ -18,40 +18,39 @@ namespace margelo::nitro::rive { using namespace facebook; - class JHybridRiveFileFactorySpec: public jni::HybridClass, - public virtual HybridRiveFileFactorySpec { + class JHybridRiveFileFactorySpec: public virtual HybridRiveFileFactorySpec, public virtual JHybridObject { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveFileFactorySpec;"; - static jni::local_ref initHybrid(jni::alias_ref jThis); - static void registerNatives(); - - protected: - // C++ constructor (called from Java via `initHybrid()`) - explicit JHybridRiveFileFactorySpec(jni::alias_ref jThis) : - HybridObject(HybridRiveFileFactorySpec::TAG), - HybridBase(jThis), - _javaPart(jni::make_global(jThis)) {} + struct JavaPart: public jni::JavaClass { + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveFileFactorySpec;"; + std::shared_ptr getJHybridRiveFileFactorySpec(); + }; + struct CxxPart: public jni::HybridClass { + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveFileFactorySpec$CxxPart;"; + static jni::local_ref initHybrid(jni::alias_ref jThis); + static void registerNatives(); + using HybridBase::HybridBase; + protected: + std::shared_ptr createHybridObject(const jni::local_ref& javaPart) override; + }; public: + explicit JHybridRiveFileFactorySpec(const jni::local_ref& javaPart): + HybridObject(HybridRiveFileFactorySpec::TAG), + JHybridObject(javaPart), + _javaPart(jni::make_global(javaPart)) {} ~JHybridRiveFileFactorySpec() override { // Hermes GC can destroy JS objects on a non-JNI Thread. jni::ThreadScope::WithClassLoader([&] { _javaPart.reset(); }); } public: - size_t getExternalMemorySize() noexcept override; - bool equals(const std::shared_ptr& other) override; - void dispose() noexcept override; - std::string toString() override; - - public: - inline const jni::global_ref& getJavaPart() const noexcept { + inline const jni::global_ref& getJavaPart() const noexcept { return _javaPart; } public: // Properties - + public: // Methods @@ -61,9 +60,7 @@ namespace margelo::nitro::rive { std::shared_ptr>> fromBytes(const std::shared_ptr& bytes, bool loadCdn, const std::optional& referencedAssets) override; private: - friend HybridBase; - using HybridBase::HybridBase; - jni::global_ref _javaPart; + jni::global_ref _javaPart; }; } // namespace margelo::nitro::rive diff --git a/nitrogen/generated/android/c++/JHybridRiveFileSpec.cpp b/nitrogen/generated/android/c++/JHybridRiveFileSpec.cpp index 0c0b133b..8bbed4b7 100644 --- a/nitrogen/generated/android/c++/JHybridRiveFileSpec.cpp +++ b/nitrogen/generated/android/c++/JHybridRiveFileSpec.cpp @@ -44,52 +44,46 @@ namespace margelo::nitro::rive { class HybridRiveImageSpec; } namespace margelo::nitro::rive { - jni::local_ref JHybridRiveFileSpec::initHybrid(jni::alias_ref jThis) { - return makeCxxInstance(jThis); - } - - void JHybridRiveFileSpec::registerNatives() { - registerHybrid({ - makeNativeMethod("initHybrid", JHybridRiveFileSpec::initHybrid), - }); + std::shared_ptr JHybridRiveFileSpec::JavaPart::getJHybridRiveFileSpec() { + auto hybridObject = JHybridObject::JavaPart::getJHybridObject(); + auto castHybridObject = std::dynamic_pointer_cast(hybridObject); + if (castHybridObject == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to downcast JHybridObject to JHybridRiveFileSpec!"); + } + return castHybridObject; } - size_t JHybridRiveFileSpec::getExternalMemorySize() noexcept { - static const auto method = javaClassStatic()->getMethod("getMemorySize"); - return method(_javaPart); + jni::local_ref JHybridRiveFileSpec::CxxPart::initHybrid(jni::alias_ref jThis) { + return makeCxxInstance(jThis); } - bool JHybridRiveFileSpec::equals(const std::shared_ptr& other) { - if (auto otherCast = std::dynamic_pointer_cast(other)) { - return _javaPart == otherCast->_javaPart; + std::shared_ptr JHybridRiveFileSpec::CxxPart::createHybridObject(const jni::local_ref& javaPart) { + auto castJavaPart = jni::dynamic_ref_cast(javaPart); + if (castJavaPart == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridRiveFileSpec::JavaPart!"); } - return false; - } - - void JHybridRiveFileSpec::dispose() noexcept { - static const auto method = javaClassStatic()->getMethod("dispose"); - method(_javaPart); + return std::make_shared(castJavaPart); } - std::string JHybridRiveFileSpec::toString() { - static const auto method = javaClassStatic()->getMethod("toString"); - auto javaString = method(_javaPart); - return javaString->toStdString(); + void JHybridRiveFileSpec::CxxPart::registerNatives() { + registerHybrid({ + makeNativeMethod("initHybrid", JHybridRiveFileSpec::CxxPart::initHybrid), + }); } // Properties std::optional JHybridRiveFileSpec::getViewModelCount() { - static const auto method = javaClassStatic()->getMethod()>("getViewModelCount"); + static const auto method = _javaPart->javaClassStatic()->getMethod()>("getViewModelCount"); auto __result = method(_javaPart); return __result != nullptr ? std::make_optional(__result->value()) : std::nullopt; } double JHybridRiveFileSpec::getArtboardCount() { - static const auto method = javaClassStatic()->getMethod("getArtboardCount"); + static const auto method = _javaPart->javaClassStatic()->getMethod("getArtboardCount"); auto __result = method(_javaPart); return __result; } std::vector JHybridRiveFileSpec::getArtboardNames() { - static const auto method = javaClassStatic()->getMethod>()>("getArtboardNames"); + static const auto method = _javaPart->javaClassStatic()->getMethod>()>("getArtboardNames"); auto __result = method(_javaPart); return [&]() { size_t __size = __result->size(); @@ -105,28 +99,28 @@ namespace margelo::nitro::rive { // Methods std::optional> JHybridRiveFileSpec::viewModelByIndex(double index) { - static const auto method = javaClassStatic()->getMethod(double /* index */)>("viewModelByIndex"); + static const auto method = _javaPart->javaClassStatic()->getMethod(double /* index */)>("viewModelByIndex"); auto __result = method(_javaPart, index); - return __result != nullptr ? std::make_optional(__result->cthis()->shared_cast()) : std::nullopt; + return __result != nullptr ? std::make_optional(__result->getJHybridViewModelSpec()) : std::nullopt; } std::optional> JHybridRiveFileSpec::viewModelByName(const std::string& name) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* name */)>("viewModelByName"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* name */)>("viewModelByName"); auto __result = method(_javaPart, jni::make_jstring(name)); - return __result != nullptr ? std::make_optional(__result->cthis()->shared_cast()) : std::nullopt; + return __result != nullptr ? std::make_optional(__result->getJHybridViewModelSpec()) : std::nullopt; } std::optional> JHybridRiveFileSpec::defaultArtboardViewModel(const std::optional& artboardBy) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* artboardBy */)>("defaultArtboardViewModel"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* artboardBy */)>("defaultArtboardViewModel"); auto __result = method(_javaPart, artboardBy.has_value() ? JArtboardBy::fromCpp(artboardBy.value()) : nullptr); - return __result != nullptr ? std::make_optional(__result->cthis()->shared_cast()) : std::nullopt; + return __result != nullptr ? std::make_optional(__result->getJHybridViewModelSpec()) : std::nullopt; } void JHybridRiveFileSpec::updateReferencedAssets(const ReferencedAssetsType& referencedAssets) { - static const auto method = javaClassStatic()->getMethod /* referencedAssets */)>("updateReferencedAssets"); + static const auto method = _javaPart->javaClassStatic()->getMethod /* referencedAssets */)>("updateReferencedAssets"); method(_javaPart, JReferencedAssetsType::fromCpp(referencedAssets)); } std::shared_ptr JHybridRiveFileSpec::getBindableArtboard(const std::string& name) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* name */)>("getBindableArtboard"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* name */)>("getBindableArtboard"); auto __result = method(_javaPart, jni::make_jstring(name)); - return __result->cthis()->shared_cast(); + return __result->getJHybridBindableArtboardSpec(); } } // namespace margelo::nitro::rive diff --git a/nitrogen/generated/android/c++/JHybridRiveFileSpec.hpp b/nitrogen/generated/android/c++/JHybridRiveFileSpec.hpp index bcd57e0a..fa3e0dd1 100644 --- a/nitrogen/generated/android/c++/JHybridRiveFileSpec.hpp +++ b/nitrogen/generated/android/c++/JHybridRiveFileSpec.hpp @@ -18,34 +18,33 @@ namespace margelo::nitro::rive { using namespace facebook; - class JHybridRiveFileSpec: public jni::HybridClass, - public virtual HybridRiveFileSpec { + class JHybridRiveFileSpec: public virtual HybridRiveFileSpec, public virtual JHybridObject { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveFileSpec;"; - static jni::local_ref initHybrid(jni::alias_ref jThis); - static void registerNatives(); - - protected: - // C++ constructor (called from Java via `initHybrid()`) - explicit JHybridRiveFileSpec(jni::alias_ref jThis) : - HybridObject(HybridRiveFileSpec::TAG), - HybridBase(jThis), - _javaPart(jni::make_global(jThis)) {} + struct JavaPart: public jni::JavaClass { + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveFileSpec;"; + std::shared_ptr getJHybridRiveFileSpec(); + }; + struct CxxPart: public jni::HybridClass { + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveFileSpec$CxxPart;"; + static jni::local_ref initHybrid(jni::alias_ref jThis); + static void registerNatives(); + using HybridBase::HybridBase; + protected: + std::shared_ptr createHybridObject(const jni::local_ref& javaPart) override; + }; public: + explicit JHybridRiveFileSpec(const jni::local_ref& javaPart): + HybridObject(HybridRiveFileSpec::TAG), + JHybridObject(javaPart), + _javaPart(jni::make_global(javaPart)) {} ~JHybridRiveFileSpec() override { // Hermes GC can destroy JS objects on a non-JNI Thread. jni::ThreadScope::WithClassLoader([&] { _javaPart.reset(); }); } public: - size_t getExternalMemorySize() noexcept override; - bool equals(const std::shared_ptr& other) override; - void dispose() noexcept override; - std::string toString() override; - - public: - inline const jni::global_ref& getJavaPart() const noexcept { + inline const jni::global_ref& getJavaPart() const noexcept { return _javaPart; } @@ -64,9 +63,7 @@ namespace margelo::nitro::rive { std::shared_ptr getBindableArtboard(const std::string& name) override; private: - friend HybridBase; - using HybridBase::HybridBase; - jni::global_ref _javaPart; + jni::global_ref _javaPart; }; } // namespace margelo::nitro::rive diff --git a/nitrogen/generated/android/c++/JHybridRiveImageFactorySpec.cpp b/nitrogen/generated/android/c++/JHybridRiveImageFactorySpec.cpp index 7a24bb4b..9705b99a 100644 --- a/nitrogen/generated/android/c++/JHybridRiveImageFactorySpec.cpp +++ b/nitrogen/generated/android/c++/JHybridRiveImageFactorySpec.cpp @@ -21,51 +21,45 @@ namespace margelo::nitro::rive { class HybridRiveImageSpec; } namespace margelo::nitro::rive { - jni::local_ref JHybridRiveImageFactorySpec::initHybrid(jni::alias_ref jThis) { - return makeCxxInstance(jThis); - } - - void JHybridRiveImageFactorySpec::registerNatives() { - registerHybrid({ - makeNativeMethod("initHybrid", JHybridRiveImageFactorySpec::initHybrid), - }); + std::shared_ptr JHybridRiveImageFactorySpec::JavaPart::getJHybridRiveImageFactorySpec() { + auto hybridObject = JHybridObject::JavaPart::getJHybridObject(); + auto castHybridObject = std::dynamic_pointer_cast(hybridObject); + if (castHybridObject == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to downcast JHybridObject to JHybridRiveImageFactorySpec!"); + } + return castHybridObject; } - size_t JHybridRiveImageFactorySpec::getExternalMemorySize() noexcept { - static const auto method = javaClassStatic()->getMethod("getMemorySize"); - return method(_javaPart); + jni::local_ref JHybridRiveImageFactorySpec::CxxPart::initHybrid(jni::alias_ref jThis) { + return makeCxxInstance(jThis); } - bool JHybridRiveImageFactorySpec::equals(const std::shared_ptr& other) { - if (auto otherCast = std::dynamic_pointer_cast(other)) { - return _javaPart == otherCast->_javaPart; + std::shared_ptr JHybridRiveImageFactorySpec::CxxPart::createHybridObject(const jni::local_ref& javaPart) { + auto castJavaPart = jni::dynamic_ref_cast(javaPart); + if (castJavaPart == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridRiveImageFactorySpec::JavaPart!"); } - return false; - } - - void JHybridRiveImageFactorySpec::dispose() noexcept { - static const auto method = javaClassStatic()->getMethod("dispose"); - method(_javaPart); + return std::make_shared(castJavaPart); } - std::string JHybridRiveImageFactorySpec::toString() { - static const auto method = javaClassStatic()->getMethod("toString"); - auto javaString = method(_javaPart); - return javaString->toStdString(); + void JHybridRiveImageFactorySpec::CxxPart::registerNatives() { + registerHybrid({ + makeNativeMethod("initHybrid", JHybridRiveImageFactorySpec::CxxPart::initHybrid), + }); } // Properties - + // Methods std::shared_ptr>> JHybridRiveImageFactorySpec::loadFromURLAsync(const std::string& url) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* url */)>("loadFromURLAsync"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* url */)>("loadFromURLAsync"); auto __result = method(_javaPart, jni::make_jstring(url)); return [&]() { auto __promise = Promise>::create(); __result->cthis()->addOnResolvedListener([=](const jni::alias_ref& __boxedResult) { - auto __result = jni::static_ref_cast(__boxedResult); - __promise->resolve(__result->cthis()->shared_cast()); + auto __result = jni::static_ref_cast(__boxedResult); + __promise->resolve(__result->getJHybridRiveImageSpec()); }); __result->cthis()->addOnRejectedListener([=](const jni::alias_ref& __throwable) { jni::JniException __jniError(__throwable); @@ -75,13 +69,13 @@ namespace margelo::nitro::rive { }(); } std::shared_ptr>> JHybridRiveImageFactorySpec::loadFromResourceAsync(const std::string& resource) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* resource */)>("loadFromResourceAsync"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* resource */)>("loadFromResourceAsync"); auto __result = method(_javaPart, jni::make_jstring(resource)); return [&]() { auto __promise = Promise>::create(); __result->cthis()->addOnResolvedListener([=](const jni::alias_ref& __boxedResult) { - auto __result = jni::static_ref_cast(__boxedResult); - __promise->resolve(__result->cthis()->shared_cast()); + auto __result = jni::static_ref_cast(__boxedResult); + __promise->resolve(__result->getJHybridRiveImageSpec()); }); __result->cthis()->addOnRejectedListener([=](const jni::alias_ref& __throwable) { jni::JniException __jniError(__throwable); @@ -91,13 +85,13 @@ namespace margelo::nitro::rive { }(); } std::shared_ptr>> JHybridRiveImageFactorySpec::loadFromBytesAsync(const std::shared_ptr& bytes) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* bytes */)>("loadFromBytesAsync"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* bytes */)>("loadFromBytesAsync"); auto __result = method(_javaPart, JArrayBuffer::wrap(bytes)); return [&]() { auto __promise = Promise>::create(); __result->cthis()->addOnResolvedListener([=](const jni::alias_ref& __boxedResult) { - auto __result = jni::static_ref_cast(__boxedResult); - __promise->resolve(__result->cthis()->shared_cast()); + auto __result = jni::static_ref_cast(__boxedResult); + __promise->resolve(__result->getJHybridRiveImageSpec()); }); __result->cthis()->addOnRejectedListener([=](const jni::alias_ref& __throwable) { jni::JniException __jniError(__throwable); diff --git a/nitrogen/generated/android/c++/JHybridRiveImageFactorySpec.hpp b/nitrogen/generated/android/c++/JHybridRiveImageFactorySpec.hpp index a98f9981..4c863fac 100644 --- a/nitrogen/generated/android/c++/JHybridRiveImageFactorySpec.hpp +++ b/nitrogen/generated/android/c++/JHybridRiveImageFactorySpec.hpp @@ -18,40 +18,39 @@ namespace margelo::nitro::rive { using namespace facebook; - class JHybridRiveImageFactorySpec: public jni::HybridClass, - public virtual HybridRiveImageFactorySpec { + class JHybridRiveImageFactorySpec: public virtual HybridRiveImageFactorySpec, public virtual JHybridObject { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveImageFactorySpec;"; - static jni::local_ref initHybrid(jni::alias_ref jThis); - static void registerNatives(); - - protected: - // C++ constructor (called from Java via `initHybrid()`) - explicit JHybridRiveImageFactorySpec(jni::alias_ref jThis) : - HybridObject(HybridRiveImageFactorySpec::TAG), - HybridBase(jThis), - _javaPart(jni::make_global(jThis)) {} + struct JavaPart: public jni::JavaClass { + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveImageFactorySpec;"; + std::shared_ptr getJHybridRiveImageFactorySpec(); + }; + struct CxxPart: public jni::HybridClass { + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveImageFactorySpec$CxxPart;"; + static jni::local_ref initHybrid(jni::alias_ref jThis); + static void registerNatives(); + using HybridBase::HybridBase; + protected: + std::shared_ptr createHybridObject(const jni::local_ref& javaPart) override; + }; public: + explicit JHybridRiveImageFactorySpec(const jni::local_ref& javaPart): + HybridObject(HybridRiveImageFactorySpec::TAG), + JHybridObject(javaPart), + _javaPart(jni::make_global(javaPart)) {} ~JHybridRiveImageFactorySpec() override { // Hermes GC can destroy JS objects on a non-JNI Thread. jni::ThreadScope::WithClassLoader([&] { _javaPart.reset(); }); } public: - size_t getExternalMemorySize() noexcept override; - bool equals(const std::shared_ptr& other) override; - void dispose() noexcept override; - std::string toString() override; - - public: - inline const jni::global_ref& getJavaPart() const noexcept { + inline const jni::global_ref& getJavaPart() const noexcept { return _javaPart; } public: // Properties - + public: // Methods @@ -60,9 +59,7 @@ namespace margelo::nitro::rive { std::shared_ptr>> loadFromBytesAsync(const std::shared_ptr& bytes) override; private: - friend HybridBase; - using HybridBase::HybridBase; - jni::global_ref _javaPart; + jni::global_ref _javaPart; }; } // namespace margelo::nitro::rive diff --git a/nitrogen/generated/android/c++/JHybridRiveImageSpec.cpp b/nitrogen/generated/android/c++/JHybridRiveImageSpec.cpp index fdbe77ca..34870151 100644 --- a/nitrogen/generated/android/c++/JHybridRiveImageSpec.cpp +++ b/nitrogen/generated/android/c++/JHybridRiveImageSpec.cpp @@ -13,42 +13,36 @@ namespace margelo::nitro::rive { - jni::local_ref JHybridRiveImageSpec::initHybrid(jni::alias_ref jThis) { - return makeCxxInstance(jThis); - } - - void JHybridRiveImageSpec::registerNatives() { - registerHybrid({ - makeNativeMethod("initHybrid", JHybridRiveImageSpec::initHybrid), - }); + std::shared_ptr JHybridRiveImageSpec::JavaPart::getJHybridRiveImageSpec() { + auto hybridObject = JHybridObject::JavaPart::getJHybridObject(); + auto castHybridObject = std::dynamic_pointer_cast(hybridObject); + if (castHybridObject == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to downcast JHybridObject to JHybridRiveImageSpec!"); + } + return castHybridObject; } - size_t JHybridRiveImageSpec::getExternalMemorySize() noexcept { - static const auto method = javaClassStatic()->getMethod("getMemorySize"); - return method(_javaPart); + jni::local_ref JHybridRiveImageSpec::CxxPart::initHybrid(jni::alias_ref jThis) { + return makeCxxInstance(jThis); } - bool JHybridRiveImageSpec::equals(const std::shared_ptr& other) { - if (auto otherCast = std::dynamic_pointer_cast(other)) { - return _javaPart == otherCast->_javaPart; + std::shared_ptr JHybridRiveImageSpec::CxxPart::createHybridObject(const jni::local_ref& javaPart) { + auto castJavaPart = jni::dynamic_ref_cast(javaPart); + if (castJavaPart == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridRiveImageSpec::JavaPart!"); } - return false; - } - - void JHybridRiveImageSpec::dispose() noexcept { - static const auto method = javaClassStatic()->getMethod("dispose"); - method(_javaPart); + return std::make_shared(castJavaPart); } - std::string JHybridRiveImageSpec::toString() { - static const auto method = javaClassStatic()->getMethod("toString"); - auto javaString = method(_javaPart); - return javaString->toStdString(); + void JHybridRiveImageSpec::CxxPart::registerNatives() { + registerHybrid({ + makeNativeMethod("initHybrid", JHybridRiveImageSpec::CxxPart::initHybrid), + }); } // Properties double JHybridRiveImageSpec::getByteSize() { - static const auto method = javaClassStatic()->getMethod("getByteSize"); + static const auto method = _javaPart->javaClassStatic()->getMethod("getByteSize"); auto __result = method(_javaPart); return __result; } diff --git a/nitrogen/generated/android/c++/JHybridRiveImageSpec.hpp b/nitrogen/generated/android/c++/JHybridRiveImageSpec.hpp index 10e10845..4b544088 100644 --- a/nitrogen/generated/android/c++/JHybridRiveImageSpec.hpp +++ b/nitrogen/generated/android/c++/JHybridRiveImageSpec.hpp @@ -18,34 +18,33 @@ namespace margelo::nitro::rive { using namespace facebook; - class JHybridRiveImageSpec: public jni::HybridClass, - public virtual HybridRiveImageSpec { + class JHybridRiveImageSpec: public virtual HybridRiveImageSpec, public virtual JHybridObject { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveImageSpec;"; - static jni::local_ref initHybrid(jni::alias_ref jThis); - static void registerNatives(); - - protected: - // C++ constructor (called from Java via `initHybrid()`) - explicit JHybridRiveImageSpec(jni::alias_ref jThis) : - HybridObject(HybridRiveImageSpec::TAG), - HybridBase(jThis), - _javaPart(jni::make_global(jThis)) {} + struct JavaPart: public jni::JavaClass { + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveImageSpec;"; + std::shared_ptr getJHybridRiveImageSpec(); + }; + struct CxxPart: public jni::HybridClass { + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveImageSpec$CxxPart;"; + static jni::local_ref initHybrid(jni::alias_ref jThis); + static void registerNatives(); + using HybridBase::HybridBase; + protected: + std::shared_ptr createHybridObject(const jni::local_ref& javaPart) override; + }; public: + explicit JHybridRiveImageSpec(const jni::local_ref& javaPart): + HybridObject(HybridRiveImageSpec::TAG), + JHybridObject(javaPart), + _javaPart(jni::make_global(javaPart)) {} ~JHybridRiveImageSpec() override { // Hermes GC can destroy JS objects on a non-JNI Thread. jni::ThreadScope::WithClassLoader([&] { _javaPart.reset(); }); } public: - size_t getExternalMemorySize() noexcept override; - bool equals(const std::shared_ptr& other) override; - void dispose() noexcept override; - std::string toString() override; - - public: - inline const jni::global_ref& getJavaPart() const noexcept { + inline const jni::global_ref& getJavaPart() const noexcept { return _javaPart; } @@ -58,9 +57,7 @@ namespace margelo::nitro::rive { private: - friend HybridBase; - using HybridBase::HybridBase; - jni::global_ref _javaPart; + jni::global_ref _javaPart; }; } // namespace margelo::nitro::rive diff --git a/nitrogen/generated/android/c++/JHybridRiveRuntimeSpec.cpp b/nitrogen/generated/android/c++/JHybridRiveRuntimeSpec.cpp index bb7d4a84..fbad8dfa 100644 --- a/nitrogen/generated/android/c++/JHybridRiveRuntimeSpec.cpp +++ b/nitrogen/generated/android/c++/JHybridRiveRuntimeSpec.cpp @@ -17,54 +17,48 @@ namespace margelo::nitro::rive { - jni::local_ref JHybridRiveRuntimeSpec::initHybrid(jni::alias_ref jThis) { - return makeCxxInstance(jThis); - } - - void JHybridRiveRuntimeSpec::registerNatives() { - registerHybrid({ - makeNativeMethod("initHybrid", JHybridRiveRuntimeSpec::initHybrid), - }); + std::shared_ptr JHybridRiveRuntimeSpec::JavaPart::getJHybridRiveRuntimeSpec() { + auto hybridObject = JHybridObject::JavaPart::getJHybridObject(); + auto castHybridObject = std::dynamic_pointer_cast(hybridObject); + if (castHybridObject == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to downcast JHybridObject to JHybridRiveRuntimeSpec!"); + } + return castHybridObject; } - size_t JHybridRiveRuntimeSpec::getExternalMemorySize() noexcept { - static const auto method = javaClassStatic()->getMethod("getMemorySize"); - return method(_javaPart); + jni::local_ref JHybridRiveRuntimeSpec::CxxPart::initHybrid(jni::alias_ref jThis) { + return makeCxxInstance(jThis); } - bool JHybridRiveRuntimeSpec::equals(const std::shared_ptr& other) { - if (auto otherCast = std::dynamic_pointer_cast(other)) { - return _javaPart == otherCast->_javaPart; + std::shared_ptr JHybridRiveRuntimeSpec::CxxPart::createHybridObject(const jni::local_ref& javaPart) { + auto castJavaPart = jni::dynamic_ref_cast(javaPart); + if (castJavaPart == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridRiveRuntimeSpec::JavaPart!"); } - return false; - } - - void JHybridRiveRuntimeSpec::dispose() noexcept { - static const auto method = javaClassStatic()->getMethod("dispose"); - method(_javaPart); + return std::make_shared(castJavaPart); } - std::string JHybridRiveRuntimeSpec::toString() { - static const auto method = javaClassStatic()->getMethod("toString"); - auto javaString = method(_javaPart); - return javaString->toStdString(); + void JHybridRiveRuntimeSpec::CxxPart::registerNatives() { + registerHybrid({ + makeNativeMethod("initHybrid", JHybridRiveRuntimeSpec::CxxPart::initHybrid), + }); } // Properties bool JHybridRiveRuntimeSpec::getIsInitialized() { - static const auto method = javaClassStatic()->getMethod("isInitialized"); + static const auto method = _javaPart->javaClassStatic()->getMethod("isInitialized"); auto __result = method(_javaPart); return static_cast(__result); } std::optional JHybridRiveRuntimeSpec::getInitError() { - static const auto method = javaClassStatic()->getMethod()>("getInitError"); + static const auto method = _javaPart->javaClassStatic()->getMethod()>("getInitError"); auto __result = method(_javaPart); return __result != nullptr ? std::make_optional(__result->toStdString()) : std::nullopt; } // Methods std::shared_ptr> JHybridRiveRuntimeSpec::initialize() { - static const auto method = javaClassStatic()->getMethod()>("initialize"); + static const auto method = _javaPart->javaClassStatic()->getMethod()>("initialize"); auto __result = method(_javaPart); return [&]() { auto __promise = Promise::create(); diff --git a/nitrogen/generated/android/c++/JHybridRiveRuntimeSpec.hpp b/nitrogen/generated/android/c++/JHybridRiveRuntimeSpec.hpp index 752f5472..96cec687 100644 --- a/nitrogen/generated/android/c++/JHybridRiveRuntimeSpec.hpp +++ b/nitrogen/generated/android/c++/JHybridRiveRuntimeSpec.hpp @@ -18,34 +18,33 @@ namespace margelo::nitro::rive { using namespace facebook; - class JHybridRiveRuntimeSpec: public jni::HybridClass, - public virtual HybridRiveRuntimeSpec { + class JHybridRiveRuntimeSpec: public virtual HybridRiveRuntimeSpec, public virtual JHybridObject { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveRuntimeSpec;"; - static jni::local_ref initHybrid(jni::alias_ref jThis); - static void registerNatives(); - - protected: - // C++ constructor (called from Java via `initHybrid()`) - explicit JHybridRiveRuntimeSpec(jni::alias_ref jThis) : - HybridObject(HybridRiveRuntimeSpec::TAG), - HybridBase(jThis), - _javaPart(jni::make_global(jThis)) {} + struct JavaPart: public jni::JavaClass { + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveRuntimeSpec;"; + std::shared_ptr getJHybridRiveRuntimeSpec(); + }; + struct CxxPart: public jni::HybridClass { + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveRuntimeSpec$CxxPart;"; + static jni::local_ref initHybrid(jni::alias_ref jThis); + static void registerNatives(); + using HybridBase::HybridBase; + protected: + std::shared_ptr createHybridObject(const jni::local_ref& javaPart) override; + }; public: + explicit JHybridRiveRuntimeSpec(const jni::local_ref& javaPart): + HybridObject(HybridRiveRuntimeSpec::TAG), + JHybridObject(javaPart), + _javaPart(jni::make_global(javaPart)) {} ~JHybridRiveRuntimeSpec() override { // Hermes GC can destroy JS objects on a non-JNI Thread. jni::ThreadScope::WithClassLoader([&] { _javaPart.reset(); }); } public: - size_t getExternalMemorySize() noexcept override; - bool equals(const std::shared_ptr& other) override; - void dispose() noexcept override; - std::string toString() override; - - public: - inline const jni::global_ref& getJavaPart() const noexcept { + inline const jni::global_ref& getJavaPart() const noexcept { return _javaPart; } @@ -59,9 +58,7 @@ namespace margelo::nitro::rive { std::shared_ptr> initialize() override; private: - friend HybridBase; - using HybridBase::HybridBase; - jni::global_ref _javaPart; + jni::global_ref _javaPart; }; } // namespace margelo::nitro::rive diff --git a/nitrogen/generated/android/c++/JHybridRiveSpec.cpp b/nitrogen/generated/android/c++/JHybridRiveSpec.cpp index f1fcd7a4..b83802fa 100644 --- a/nitrogen/generated/android/c++/JHybridRiveSpec.cpp +++ b/nitrogen/generated/android/c++/JHybridRiveSpec.cpp @@ -13,45 +13,39 @@ namespace margelo::nitro::rive { - jni::local_ref JHybridRiveSpec::initHybrid(jni::alias_ref jThis) { - return makeCxxInstance(jThis); - } - - void JHybridRiveSpec::registerNatives() { - registerHybrid({ - makeNativeMethod("initHybrid", JHybridRiveSpec::initHybrid), - }); + std::shared_ptr JHybridRiveSpec::JavaPart::getJHybridRiveSpec() { + auto hybridObject = JHybridObject::JavaPart::getJHybridObject(); + auto castHybridObject = std::dynamic_pointer_cast(hybridObject); + if (castHybridObject == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to downcast JHybridObject to JHybridRiveSpec!"); + } + return castHybridObject; } - size_t JHybridRiveSpec::getExternalMemorySize() noexcept { - static const auto method = javaClassStatic()->getMethod("getMemorySize"); - return method(_javaPart); + jni::local_ref JHybridRiveSpec::CxxPart::initHybrid(jni::alias_ref jThis) { + return makeCxxInstance(jThis); } - bool JHybridRiveSpec::equals(const std::shared_ptr& other) { - if (auto otherCast = std::dynamic_pointer_cast(other)) { - return _javaPart == otherCast->_javaPart; + std::shared_ptr JHybridRiveSpec::CxxPart::createHybridObject(const jni::local_ref& javaPart) { + auto castJavaPart = jni::dynamic_ref_cast(javaPart); + if (castJavaPart == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridRiveSpec::JavaPart!"); } - return false; - } - - void JHybridRiveSpec::dispose() noexcept { - static const auto method = javaClassStatic()->getMethod("dispose"); - method(_javaPart); + return std::make_shared(castJavaPart); } - std::string JHybridRiveSpec::toString() { - static const auto method = javaClassStatic()->getMethod("toString"); - auto javaString = method(_javaPart); - return javaString->toStdString(); + void JHybridRiveSpec::CxxPart::registerNatives() { + registerHybrid({ + makeNativeMethod("initHybrid", JHybridRiveSpec::CxxPart::initHybrid), + }); } // Properties - + // Methods double JHybridRiveSpec::multiply(double a, double b) { - static const auto method = javaClassStatic()->getMethod("multiply"); + static const auto method = _javaPart->javaClassStatic()->getMethod("multiply"); auto __result = method(_javaPart, a, b); return __result; } diff --git a/nitrogen/generated/android/c++/JHybridRiveSpec.hpp b/nitrogen/generated/android/c++/JHybridRiveSpec.hpp index 633677a6..5e286e64 100644 --- a/nitrogen/generated/android/c++/JHybridRiveSpec.hpp +++ b/nitrogen/generated/android/c++/JHybridRiveSpec.hpp @@ -18,49 +18,46 @@ namespace margelo::nitro::rive { using namespace facebook; - class JHybridRiveSpec: public jni::HybridClass, - public virtual HybridRiveSpec { + class JHybridRiveSpec: public virtual HybridRiveSpec, public virtual JHybridObject { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveSpec;"; - static jni::local_ref initHybrid(jni::alias_ref jThis); - static void registerNatives(); - - protected: - // C++ constructor (called from Java via `initHybrid()`) - explicit JHybridRiveSpec(jni::alias_ref jThis) : - HybridObject(HybridRiveSpec::TAG), - HybridBase(jThis), - _javaPart(jni::make_global(jThis)) {} + struct JavaPart: public jni::JavaClass { + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveSpec;"; + std::shared_ptr getJHybridRiveSpec(); + }; + struct CxxPart: public jni::HybridClass { + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveSpec$CxxPart;"; + static jni::local_ref initHybrid(jni::alias_ref jThis); + static void registerNatives(); + using HybridBase::HybridBase; + protected: + std::shared_ptr createHybridObject(const jni::local_ref& javaPart) override; + }; public: + explicit JHybridRiveSpec(const jni::local_ref& javaPart): + HybridObject(HybridRiveSpec::TAG), + JHybridObject(javaPart), + _javaPart(jni::make_global(javaPart)) {} ~JHybridRiveSpec() override { // Hermes GC can destroy JS objects on a non-JNI Thread. jni::ThreadScope::WithClassLoader([&] { _javaPart.reset(); }); } public: - size_t getExternalMemorySize() noexcept override; - bool equals(const std::shared_ptr& other) override; - void dispose() noexcept override; - std::string toString() override; - - public: - inline const jni::global_ref& getJavaPart() const noexcept { + inline const jni::global_ref& getJavaPart() const noexcept { return _javaPart; } public: // Properties - + public: // Methods double multiply(double a, double b) override; private: - friend HybridBase; - using HybridBase::HybridBase; - jni::global_ref _javaPart; + jni::global_ref _javaPart; }; } // namespace margelo::nitro::rive diff --git a/nitrogen/generated/android/c++/JHybridRiveViewSpec.cpp b/nitrogen/generated/android/c++/JHybridRiveViewSpec.cpp index f9c78c5b..e19696a1 100644 --- a/nitrogen/generated/android/c++/JHybridRiveViewSpec.cpp +++ b/nitrogen/generated/android/c++/JHybridRiveViewSpec.cpp @@ -65,114 +65,108 @@ namespace margelo::nitro::rive { enum class RiveEventType; } namespace margelo::nitro::rive { - jni::local_ref JHybridRiveViewSpec::initHybrid(jni::alias_ref jThis) { - return makeCxxInstance(jThis); - } - - void JHybridRiveViewSpec::registerNatives() { - registerHybrid({ - makeNativeMethod("initHybrid", JHybridRiveViewSpec::initHybrid), - }); + std::shared_ptr JHybridRiveViewSpec::JavaPart::getJHybridRiveViewSpec() { + auto hybridObject = JHybridObject::JavaPart::getJHybridObject(); + auto castHybridObject = std::dynamic_pointer_cast(hybridObject); + if (castHybridObject == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to downcast JHybridObject to JHybridRiveViewSpec!"); + } + return castHybridObject; } - size_t JHybridRiveViewSpec::getExternalMemorySize() noexcept { - static const auto method = javaClassStatic()->getMethod("getMemorySize"); - return method(_javaPart); + jni::local_ref JHybridRiveViewSpec::CxxPart::initHybrid(jni::alias_ref jThis) { + return makeCxxInstance(jThis); } - bool JHybridRiveViewSpec::equals(const std::shared_ptr& other) { - if (auto otherCast = std::dynamic_pointer_cast(other)) { - return _javaPart == otherCast->_javaPart; + std::shared_ptr JHybridRiveViewSpec::CxxPart::createHybridObject(const jni::local_ref& javaPart) { + auto castJavaPart = jni::dynamic_ref_cast(javaPart); + if (castJavaPart == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridRiveViewSpec::JavaPart!"); } - return false; - } - - void JHybridRiveViewSpec::dispose() noexcept { - static const auto method = javaClassStatic()->getMethod("dispose"); - method(_javaPart); + return std::make_shared(castJavaPart); } - std::string JHybridRiveViewSpec::toString() { - static const auto method = javaClassStatic()->getMethod("toString"); - auto javaString = method(_javaPart); - return javaString->toStdString(); + void JHybridRiveViewSpec::CxxPart::registerNatives() { + registerHybrid({ + makeNativeMethod("initHybrid", JHybridRiveViewSpec::CxxPart::initHybrid), + }); } // Properties std::optional JHybridRiveViewSpec::getArtboardName() { - static const auto method = javaClassStatic()->getMethod()>("getArtboardName"); + static const auto method = _javaPart->javaClassStatic()->getMethod()>("getArtboardName"); auto __result = method(_javaPart); return __result != nullptr ? std::make_optional(__result->toStdString()) : std::nullopt; } void JHybridRiveViewSpec::setArtboardName(const std::optional& artboardName) { - static const auto method = javaClassStatic()->getMethod /* artboardName */)>("setArtboardName"); + static const auto method = _javaPart->javaClassStatic()->getMethod /* artboardName */)>("setArtboardName"); method(_javaPart, artboardName.has_value() ? jni::make_jstring(artboardName.value()) : nullptr); } std::optional JHybridRiveViewSpec::getStateMachineName() { - static const auto method = javaClassStatic()->getMethod()>("getStateMachineName"); + static const auto method = _javaPart->javaClassStatic()->getMethod()>("getStateMachineName"); auto __result = method(_javaPart); return __result != nullptr ? std::make_optional(__result->toStdString()) : std::nullopt; } void JHybridRiveViewSpec::setStateMachineName(const std::optional& stateMachineName) { - static const auto method = javaClassStatic()->getMethod /* stateMachineName */)>("setStateMachineName"); + static const auto method = _javaPart->javaClassStatic()->getMethod /* stateMachineName */)>("setStateMachineName"); method(_javaPart, stateMachineName.has_value() ? jni::make_jstring(stateMachineName.value()) : nullptr); } std::optional JHybridRiveViewSpec::getAutoPlay() { - static const auto method = javaClassStatic()->getMethod()>("getAutoPlay"); + static const auto method = _javaPart->javaClassStatic()->getMethod()>("getAutoPlay"); auto __result = method(_javaPart); return __result != nullptr ? std::make_optional(static_cast(__result->value())) : std::nullopt; } void JHybridRiveViewSpec::setAutoPlay(std::optional autoPlay) { - static const auto method = javaClassStatic()->getMethod /* autoPlay */)>("setAutoPlay"); + static const auto method = _javaPart->javaClassStatic()->getMethod /* autoPlay */)>("setAutoPlay"); method(_javaPart, autoPlay.has_value() ? jni::JBoolean::valueOf(autoPlay.value()) : nullptr); } std::shared_ptr JHybridRiveViewSpec::getFile() { - static const auto method = javaClassStatic()->getMethod()>("getFile"); + static const auto method = _javaPart->javaClassStatic()->getMethod()>("getFile"); auto __result = method(_javaPart); - return __result->cthis()->shared_cast(); + return __result->getJHybridRiveFileSpec(); } void JHybridRiveViewSpec::setFile(const std::shared_ptr& file) { - static const auto method = javaClassStatic()->getMethod /* file */)>("setFile"); + static const auto method = _javaPart->javaClassStatic()->getMethod /* file */)>("setFile"); method(_javaPart, std::dynamic_pointer_cast(file)->getJavaPart()); } std::optional JHybridRiveViewSpec::getAlignment() { - static const auto method = javaClassStatic()->getMethod()>("getAlignment"); + static const auto method = _javaPart->javaClassStatic()->getMethod()>("getAlignment"); auto __result = method(_javaPart); return __result != nullptr ? std::make_optional(__result->toCpp()) : std::nullopt; } void JHybridRiveViewSpec::setAlignment(std::optional alignment) { - static const auto method = javaClassStatic()->getMethod /* alignment */)>("setAlignment"); + static const auto method = _javaPart->javaClassStatic()->getMethod /* alignment */)>("setAlignment"); method(_javaPart, alignment.has_value() ? JAlignment::fromCpp(alignment.value()) : nullptr); } std::optional JHybridRiveViewSpec::getFit() { - static const auto method = javaClassStatic()->getMethod()>("getFit"); + static const auto method = _javaPart->javaClassStatic()->getMethod()>("getFit"); auto __result = method(_javaPart); return __result != nullptr ? std::make_optional(__result->toCpp()) : std::nullopt; } void JHybridRiveViewSpec::setFit(std::optional fit) { - static const auto method = javaClassStatic()->getMethod /* fit */)>("setFit"); + static const auto method = _javaPart->javaClassStatic()->getMethod /* fit */)>("setFit"); method(_javaPart, fit.has_value() ? JFit::fromCpp(fit.value()) : nullptr); } std::optional JHybridRiveViewSpec::getLayoutScaleFactor() { - static const auto method = javaClassStatic()->getMethod()>("getLayoutScaleFactor"); + static const auto method = _javaPart->javaClassStatic()->getMethod()>("getLayoutScaleFactor"); auto __result = method(_javaPart); return __result != nullptr ? std::make_optional(__result->value()) : std::nullopt; } void JHybridRiveViewSpec::setLayoutScaleFactor(std::optional layoutScaleFactor) { - static const auto method = javaClassStatic()->getMethod /* layoutScaleFactor */)>("setLayoutScaleFactor"); + static const auto method = _javaPart->javaClassStatic()->getMethod /* layoutScaleFactor */)>("setLayoutScaleFactor"); method(_javaPart, layoutScaleFactor.has_value() ? jni::JDouble::valueOf(layoutScaleFactor.value()) : nullptr); } std::optional, DataBindMode, DataBindByName>> JHybridRiveViewSpec::getDataBind() { - static const auto method = javaClassStatic()->getMethod()>("getDataBind"); + static const auto method = _javaPart->javaClassStatic()->getMethod()>("getDataBind"); auto __result = method(_javaPart); return __result != nullptr ? std::make_optional(__result->toCpp()) : std::nullopt; } void JHybridRiveViewSpec::setDataBind(const std::optional, DataBindMode, DataBindByName>>& dataBind) { - static const auto method = javaClassStatic()->getMethod /* dataBind */)>("setDataBind"); + static const auto method = _javaPart->javaClassStatic()->getMethod /* dataBind */)>("setDataBind"); method(_javaPart, dataBind.has_value() ? JVariant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName::fromCpp(dataBind.value()) : nullptr); } std::function JHybridRiveViewSpec::getOnError() { - static const auto method = javaClassStatic()->getMethod()>("getOnError_cxx"); + static const auto method = _javaPart->javaClassStatic()->getMethod()>("getOnError_cxx"); auto __result = method(_javaPart); return [&]() -> std::function { if (__result->isInstanceOf(JFunc_void_RiveError_cxx::javaClassStatic())) [[likely]] { @@ -185,13 +179,13 @@ namespace margelo::nitro::rive { }(); } void JHybridRiveViewSpec::setOnError(const std::function& onError) { - static const auto method = javaClassStatic()->getMethod /* onError */)>("setOnError_cxx"); + static const auto method = _javaPart->javaClassStatic()->getMethod /* onError */)>("setOnError_cxx"); method(_javaPart, JFunc_void_RiveError_cxx::fromCpp(onError)); } // Methods std::shared_ptr> JHybridRiveViewSpec::awaitViewReady() { - static const auto method = javaClassStatic()->getMethod()>("awaitViewReady"); + static const auto method = _javaPart->javaClassStatic()->getMethod()>("awaitViewReady"); auto __result = method(_javaPart); return [&]() { auto __promise = Promise::create(); @@ -207,16 +201,16 @@ namespace margelo::nitro::rive { }(); } void JHybridRiveViewSpec::bindViewModelInstance(const std::shared_ptr& viewModelInstance) { - static const auto method = javaClassStatic()->getMethod /* viewModelInstance */)>("bindViewModelInstance"); + static const auto method = _javaPart->javaClassStatic()->getMethod /* viewModelInstance */)>("bindViewModelInstance"); method(_javaPart, std::dynamic_pointer_cast(viewModelInstance)->getJavaPart()); } std::optional> JHybridRiveViewSpec::getViewModelInstance() { - static const auto method = javaClassStatic()->getMethod()>("getViewModelInstance"); + static const auto method = _javaPart->javaClassStatic()->getMethod()>("getViewModelInstance"); auto __result = method(_javaPart); - return __result != nullptr ? std::make_optional(__result->cthis()->shared_cast()) : std::nullopt; + return __result != nullptr ? std::make_optional(__result->getJHybridViewModelInstanceSpec()) : std::nullopt; } std::shared_ptr> JHybridRiveViewSpec::play() { - static const auto method = javaClassStatic()->getMethod()>("play"); + static const auto method = _javaPart->javaClassStatic()->getMethod()>("play"); auto __result = method(_javaPart); return [&]() { auto __promise = Promise::create(); @@ -231,7 +225,7 @@ namespace margelo::nitro::rive { }(); } std::shared_ptr> JHybridRiveViewSpec::pause() { - static const auto method = javaClassStatic()->getMethod()>("pause"); + static const auto method = _javaPart->javaClassStatic()->getMethod()>("pause"); auto __result = method(_javaPart); return [&]() { auto __promise = Promise::create(); @@ -246,7 +240,7 @@ namespace margelo::nitro::rive { }(); } std::shared_ptr> JHybridRiveViewSpec::reset() { - static const auto method = javaClassStatic()->getMethod()>("reset"); + static const auto method = _javaPart->javaClassStatic()->getMethod()>("reset"); auto __result = method(_javaPart); return [&]() { auto __promise = Promise::create(); @@ -261,45 +255,45 @@ namespace margelo::nitro::rive { }(); } void JHybridRiveViewSpec::playIfNeeded() { - static const auto method = javaClassStatic()->getMethod("playIfNeeded"); + static const auto method = _javaPart->javaClassStatic()->getMethod("playIfNeeded"); method(_javaPart); } void JHybridRiveViewSpec::onEventListener(const std::function& onEvent) { - static const auto method = javaClassStatic()->getMethod /* onEvent */)>("onEventListener_cxx"); + static const auto method = _javaPart->javaClassStatic()->getMethod /* onEvent */)>("onEventListener_cxx"); method(_javaPart, JFunc_void_UnifiedRiveEvent_cxx::fromCpp(onEvent)); } void JHybridRiveViewSpec::removeEventListeners() { - static const auto method = javaClassStatic()->getMethod("removeEventListeners"); + static const auto method = _javaPart->javaClassStatic()->getMethod("removeEventListeners"); method(_javaPart); } void JHybridRiveViewSpec::setNumberInputValue(const std::string& name, double value, const std::optional& path) { - static const auto method = javaClassStatic()->getMethod /* name */, double /* value */, jni::alias_ref /* path */)>("setNumberInputValue"); + static const auto method = _javaPart->javaClassStatic()->getMethod /* name */, double /* value */, jni::alias_ref /* path */)>("setNumberInputValue"); method(_javaPart, jni::make_jstring(name), value, path.has_value() ? jni::make_jstring(path.value()) : nullptr); } double JHybridRiveViewSpec::getNumberInputValue(const std::string& name, const std::optional& path) { - static const auto method = javaClassStatic()->getMethod /* name */, jni::alias_ref /* path */)>("getNumberInputValue"); + static const auto method = _javaPart->javaClassStatic()->getMethod /* name */, jni::alias_ref /* path */)>("getNumberInputValue"); auto __result = method(_javaPart, jni::make_jstring(name), path.has_value() ? jni::make_jstring(path.value()) : nullptr); return __result; } void JHybridRiveViewSpec::setBooleanInputValue(const std::string& name, bool value, const std::optional& path) { - static const auto method = javaClassStatic()->getMethod /* name */, jboolean /* value */, jni::alias_ref /* path */)>("setBooleanInputValue"); + static const auto method = _javaPart->javaClassStatic()->getMethod /* name */, jboolean /* value */, jni::alias_ref /* path */)>("setBooleanInputValue"); method(_javaPart, jni::make_jstring(name), value, path.has_value() ? jni::make_jstring(path.value()) : nullptr); } bool JHybridRiveViewSpec::getBooleanInputValue(const std::string& name, const std::optional& path) { - static const auto method = javaClassStatic()->getMethod /* name */, jni::alias_ref /* path */)>("getBooleanInputValue"); + static const auto method = _javaPart->javaClassStatic()->getMethod /* name */, jni::alias_ref /* path */)>("getBooleanInputValue"); auto __result = method(_javaPart, jni::make_jstring(name), path.has_value() ? jni::make_jstring(path.value()) : nullptr); return static_cast(__result); } void JHybridRiveViewSpec::triggerInput(const std::string& name, const std::optional& path) { - static const auto method = javaClassStatic()->getMethod /* name */, jni::alias_ref /* path */)>("triggerInput"); + static const auto method = _javaPart->javaClassStatic()->getMethod /* name */, jni::alias_ref /* path */)>("triggerInput"); method(_javaPart, jni::make_jstring(name), path.has_value() ? jni::make_jstring(path.value()) : nullptr); } void JHybridRiveViewSpec::setTextRunValue(const std::string& name, const std::string& value, const std::optional& path) { - static const auto method = javaClassStatic()->getMethod /* name */, jni::alias_ref /* value */, jni::alias_ref /* path */)>("setTextRunValue"); + static const auto method = _javaPart->javaClassStatic()->getMethod /* name */, jni::alias_ref /* value */, jni::alias_ref /* path */)>("setTextRunValue"); method(_javaPart, jni::make_jstring(name), jni::make_jstring(value), path.has_value() ? jni::make_jstring(path.value()) : nullptr); } std::string JHybridRiveViewSpec::getTextRunValue(const std::string& name, const std::optional& path) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* name */, jni::alias_ref /* path */)>("getTextRunValue"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* name */, jni::alias_ref /* path */)>("getTextRunValue"); auto __result = method(_javaPart, jni::make_jstring(name), path.has_value() ? jni::make_jstring(path.value()) : nullptr); return __result->toStdString(); } diff --git a/nitrogen/generated/android/c++/JHybridRiveViewSpec.hpp b/nitrogen/generated/android/c++/JHybridRiveViewSpec.hpp index 6f981c2b..817d66a8 100644 --- a/nitrogen/generated/android/c++/JHybridRiveViewSpec.hpp +++ b/nitrogen/generated/android/c++/JHybridRiveViewSpec.hpp @@ -18,34 +18,33 @@ namespace margelo::nitro::rive { using namespace facebook; - class JHybridRiveViewSpec: public jni::HybridClass, - public virtual HybridRiveViewSpec { + class JHybridRiveViewSpec: public virtual HybridRiveViewSpec, public virtual JHybridObject { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveViewSpec;"; - static jni::local_ref initHybrid(jni::alias_ref jThis); - static void registerNatives(); - - protected: - // C++ constructor (called from Java via `initHybrid()`) - explicit JHybridRiveViewSpec(jni::alias_ref jThis) : - HybridObject(HybridRiveViewSpec::TAG), - HybridBase(jThis), - _javaPart(jni::make_global(jThis)) {} + struct JavaPart: public jni::JavaClass { + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveViewSpec;"; + std::shared_ptr getJHybridRiveViewSpec(); + }; + struct CxxPart: public jni::HybridClass { + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveViewSpec$CxxPart;"; + static jni::local_ref initHybrid(jni::alias_ref jThis); + static void registerNatives(); + using HybridBase::HybridBase; + protected: + std::shared_ptr createHybridObject(const jni::local_ref& javaPart) override; + }; public: + explicit JHybridRiveViewSpec(const jni::local_ref& javaPart): + HybridObject(HybridRiveViewSpec::TAG), + JHybridObject(javaPart), + _javaPart(jni::make_global(javaPart)) {} ~JHybridRiveViewSpec() override { // Hermes GC can destroy JS objects on a non-JNI Thread. jni::ThreadScope::WithClassLoader([&] { _javaPart.reset(); }); } public: - size_t getExternalMemorySize() noexcept override; - bool equals(const std::shared_ptr& other) override; - void dispose() noexcept override; - std::string toString() override; - - public: - inline const jni::global_ref& getJavaPart() const noexcept { + inline const jni::global_ref& getJavaPart() const noexcept { return _javaPart; } @@ -90,9 +89,7 @@ namespace margelo::nitro::rive { std::string getTextRunValue(const std::string& name, const std::optional& path) override; private: - friend HybridBase; - using HybridBase::HybridBase; - jni::global_ref _javaPart; + jni::global_ref _javaPart; }; } // namespace margelo::nitro::rive diff --git a/nitrogen/generated/android/c++/JHybridViewModelArtboardPropertySpec.cpp b/nitrogen/generated/android/c++/JHybridViewModelArtboardPropertySpec.cpp index e6d4d6dc..e4ede968 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelArtboardPropertySpec.cpp +++ b/nitrogen/generated/android/c++/JHybridViewModelArtboardPropertySpec.cpp @@ -17,45 +17,39 @@ namespace margelo::nitro::rive { class HybridBindableArtboardSpec; } namespace margelo::nitro::rive { - jni::local_ref JHybridViewModelArtboardPropertySpec::initHybrid(jni::alias_ref jThis) { - return makeCxxInstance(jThis); - } - - void JHybridViewModelArtboardPropertySpec::registerNatives() { - registerHybrid({ - makeNativeMethod("initHybrid", JHybridViewModelArtboardPropertySpec::initHybrid), - }); + std::shared_ptr JHybridViewModelArtboardPropertySpec::JavaPart::getJHybridViewModelArtboardPropertySpec() { + auto hybridObject = JHybridObject::JavaPart::getJHybridObject(); + auto castHybridObject = std::dynamic_pointer_cast(hybridObject); + if (castHybridObject == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to downcast JHybridObject to JHybridViewModelArtboardPropertySpec!"); + } + return castHybridObject; } - size_t JHybridViewModelArtboardPropertySpec::getExternalMemorySize() noexcept { - static const auto method = javaClassStatic()->getMethod("getMemorySize"); - return method(_javaPart); + jni::local_ref JHybridViewModelArtboardPropertySpec::CxxPart::initHybrid(jni::alias_ref jThis) { + return makeCxxInstance(jThis); } - bool JHybridViewModelArtboardPropertySpec::equals(const std::shared_ptr& other) { - if (auto otherCast = std::dynamic_pointer_cast(other)) { - return _javaPart == otherCast->_javaPart; + std::shared_ptr JHybridViewModelArtboardPropertySpec::CxxPart::createHybridObject(const jni::local_ref& javaPart) { + auto castJavaPart = jni::dynamic_ref_cast(javaPart); + if (castJavaPart == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridViewModelArtboardPropertySpec::JavaPart!"); } - return false; - } - - void JHybridViewModelArtboardPropertySpec::dispose() noexcept { - static const auto method = javaClassStatic()->getMethod("dispose"); - method(_javaPart); + return std::make_shared(castJavaPart); } - std::string JHybridViewModelArtboardPropertySpec::toString() { - static const auto method = javaClassStatic()->getMethod("toString"); - auto javaString = method(_javaPart); - return javaString->toStdString(); + void JHybridViewModelArtboardPropertySpec::CxxPart::registerNatives() { + registerHybrid({ + makeNativeMethod("initHybrid", JHybridViewModelArtboardPropertySpec::CxxPart::initHybrid), + }); } // Properties - + // Methods void JHybridViewModelArtboardPropertySpec::set(const std::optional>& artboard) { - static const auto method = javaClassStatic()->getMethod /* artboard */)>("set"); + static const auto method = _javaPart->javaClassStatic()->getMethod /* artboard */)>("set"); method(_javaPart, artboard.has_value() ? std::dynamic_pointer_cast(artboard.value())->getJavaPart() : nullptr); } diff --git a/nitrogen/generated/android/c++/JHybridViewModelArtboardPropertySpec.hpp b/nitrogen/generated/android/c++/JHybridViewModelArtboardPropertySpec.hpp index 1cc26d41..0be3b2b3 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelArtboardPropertySpec.hpp +++ b/nitrogen/generated/android/c++/JHybridViewModelArtboardPropertySpec.hpp @@ -40,19 +40,13 @@ namespace margelo::nitro::rive { } public: - size_t getExternalMemorySize() noexcept override; - bool equals(const std::shared_ptr& other) override; - void dispose() noexcept override; - std::string toString() override; - - public: - inline const jni::global_ref& getJavaPart() const noexcept { + inline const jni::global_ref& getJavaPart() const noexcept { return _javaPart; } public: // Properties - + public: // Methods @@ -61,7 +55,7 @@ namespace margelo::nitro::rive { private: friend HybridBase; using HybridBase::HybridBase; - jni::global_ref _javaPart; + jni::global_ref _javaPart; }; } // namespace margelo::nitro::rive diff --git a/nitrogen/generated/android/c++/JHybridViewModelBooleanPropertySpec.cpp b/nitrogen/generated/android/c++/JHybridViewModelBooleanPropertySpec.cpp index d78723ee..83770717 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelBooleanPropertySpec.cpp +++ b/nitrogen/generated/android/c++/JHybridViewModelBooleanPropertySpec.cpp @@ -16,53 +16,47 @@ namespace margelo::nitro::rive { - jni::local_ref JHybridViewModelBooleanPropertySpec::initHybrid(jni::alias_ref jThis) { - return makeCxxInstance(jThis); - } - - void JHybridViewModelBooleanPropertySpec::registerNatives() { - registerHybrid({ - makeNativeMethod("initHybrid", JHybridViewModelBooleanPropertySpec::initHybrid), - }); + std::shared_ptr JHybridViewModelBooleanPropertySpec::JavaPart::getJHybridViewModelBooleanPropertySpec() { + auto hybridObject = JHybridObject::JavaPart::getJHybridObject(); + auto castHybridObject = std::dynamic_pointer_cast(hybridObject); + if (castHybridObject == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to downcast JHybridObject to JHybridViewModelBooleanPropertySpec!"); + } + return castHybridObject; } - size_t JHybridViewModelBooleanPropertySpec::getExternalMemorySize() noexcept { - static const auto method = javaClassStatic()->getMethod("getMemorySize"); - return method(_javaPart); + jni::local_ref JHybridViewModelBooleanPropertySpec::CxxPart::initHybrid(jni::alias_ref jThis) { + return makeCxxInstance(jThis); } - bool JHybridViewModelBooleanPropertySpec::equals(const std::shared_ptr& other) { - if (auto otherCast = std::dynamic_pointer_cast(other)) { - return _javaPart == otherCast->_javaPart; + std::shared_ptr JHybridViewModelBooleanPropertySpec::CxxPart::createHybridObject(const jni::local_ref& javaPart) { + auto castJavaPart = jni::dynamic_ref_cast(javaPart); + if (castJavaPart == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridViewModelBooleanPropertySpec::JavaPart!"); } - return false; - } - - void JHybridViewModelBooleanPropertySpec::dispose() noexcept { - static const auto method = javaClassStatic()->getMethod("dispose"); - method(_javaPart); + return std::make_shared(castJavaPart); } - std::string JHybridViewModelBooleanPropertySpec::toString() { - static const auto method = javaClassStatic()->getMethod("toString"); - auto javaString = method(_javaPart); - return javaString->toStdString(); + void JHybridViewModelBooleanPropertySpec::CxxPart::registerNatives() { + registerHybrid({ + makeNativeMethod("initHybrid", JHybridViewModelBooleanPropertySpec::CxxPart::initHybrid), + }); } // Properties bool JHybridViewModelBooleanPropertySpec::getValue() { - static const auto method = javaClassStatic()->getMethod("getValue"); + static const auto method = _javaPart->javaClassStatic()->getMethod("getValue"); auto __result = method(_javaPart); return static_cast(__result); } void JHybridViewModelBooleanPropertySpec::setValue(bool value) { - static const auto method = javaClassStatic()->getMethod("setValue"); + static const auto method = _javaPart->javaClassStatic()->getMethod("setValue"); method(_javaPart, value); } // Methods std::function JHybridViewModelBooleanPropertySpec::addListener(const std::function& onChanged) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* onChanged */)>("addListener_cxx"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* onChanged */)>("addListener_cxx"); auto __result = method(_javaPart, JFunc_void_bool_cxx::fromCpp(onChanged)); return [&]() -> std::function { if (__result->isInstanceOf(JFunc_void_cxx::javaClassStatic())) [[likely]] { @@ -75,7 +69,7 @@ namespace margelo::nitro::rive { }(); } void JHybridViewModelBooleanPropertySpec::removeListeners() { - static const auto method = javaClassStatic()->getMethod("removeListeners"); + static const auto method = _javaPart->javaClassStatic()->getMethod("removeListeners"); method(_javaPart); } diff --git a/nitrogen/generated/android/c++/JHybridViewModelBooleanPropertySpec.hpp b/nitrogen/generated/android/c++/JHybridViewModelBooleanPropertySpec.hpp index 9fc4cde1..59289aea 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelBooleanPropertySpec.hpp +++ b/nitrogen/generated/android/c++/JHybridViewModelBooleanPropertySpec.hpp @@ -40,13 +40,7 @@ namespace margelo::nitro::rive { } public: - size_t getExternalMemorySize() noexcept override; - bool equals(const std::shared_ptr& other) override; - void dispose() noexcept override; - std::string toString() override; - - public: - inline const jni::global_ref& getJavaPart() const noexcept { + inline const jni::global_ref& getJavaPart() const noexcept { return _javaPart; } @@ -63,7 +57,7 @@ namespace margelo::nitro::rive { private: friend HybridBase; using HybridBase::HybridBase; - jni::global_ref _javaPart; + jni::global_ref _javaPart; }; } // namespace margelo::nitro::rive diff --git a/nitrogen/generated/android/c++/JHybridViewModelColorPropertySpec.cpp b/nitrogen/generated/android/c++/JHybridViewModelColorPropertySpec.cpp index a4bdcc2e..36775209 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelColorPropertySpec.cpp +++ b/nitrogen/generated/android/c++/JHybridViewModelColorPropertySpec.cpp @@ -16,53 +16,47 @@ namespace margelo::nitro::rive { - jni::local_ref JHybridViewModelColorPropertySpec::initHybrid(jni::alias_ref jThis) { - return makeCxxInstance(jThis); - } - - void JHybridViewModelColorPropertySpec::registerNatives() { - registerHybrid({ - makeNativeMethod("initHybrid", JHybridViewModelColorPropertySpec::initHybrid), - }); + std::shared_ptr JHybridViewModelColorPropertySpec::JavaPart::getJHybridViewModelColorPropertySpec() { + auto hybridObject = JHybridObject::JavaPart::getJHybridObject(); + auto castHybridObject = std::dynamic_pointer_cast(hybridObject); + if (castHybridObject == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to downcast JHybridObject to JHybridViewModelColorPropertySpec!"); + } + return castHybridObject; } - size_t JHybridViewModelColorPropertySpec::getExternalMemorySize() noexcept { - static const auto method = javaClassStatic()->getMethod("getMemorySize"); - return method(_javaPart); + jni::local_ref JHybridViewModelColorPropertySpec::CxxPart::initHybrid(jni::alias_ref jThis) { + return makeCxxInstance(jThis); } - bool JHybridViewModelColorPropertySpec::equals(const std::shared_ptr& other) { - if (auto otherCast = std::dynamic_pointer_cast(other)) { - return _javaPart == otherCast->_javaPart; + std::shared_ptr JHybridViewModelColorPropertySpec::CxxPart::createHybridObject(const jni::local_ref& javaPart) { + auto castJavaPart = jni::dynamic_ref_cast(javaPart); + if (castJavaPart == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridViewModelColorPropertySpec::JavaPart!"); } - return false; - } - - void JHybridViewModelColorPropertySpec::dispose() noexcept { - static const auto method = javaClassStatic()->getMethod("dispose"); - method(_javaPart); + return std::make_shared(castJavaPart); } - std::string JHybridViewModelColorPropertySpec::toString() { - static const auto method = javaClassStatic()->getMethod("toString"); - auto javaString = method(_javaPart); - return javaString->toStdString(); + void JHybridViewModelColorPropertySpec::CxxPart::registerNatives() { + registerHybrid({ + makeNativeMethod("initHybrid", JHybridViewModelColorPropertySpec::CxxPart::initHybrid), + }); } // Properties double JHybridViewModelColorPropertySpec::getValue() { - static const auto method = javaClassStatic()->getMethod("getValue"); + static const auto method = _javaPart->javaClassStatic()->getMethod("getValue"); auto __result = method(_javaPart); return __result; } void JHybridViewModelColorPropertySpec::setValue(double value) { - static const auto method = javaClassStatic()->getMethod("setValue"); + static const auto method = _javaPart->javaClassStatic()->getMethod("setValue"); method(_javaPart, value); } // Methods std::function JHybridViewModelColorPropertySpec::addListener(const std::function& onChanged) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* onChanged */)>("addListener_cxx"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* onChanged */)>("addListener_cxx"); auto __result = method(_javaPart, JFunc_void_double_cxx::fromCpp(onChanged)); return [&]() -> std::function { if (__result->isInstanceOf(JFunc_void_cxx::javaClassStatic())) [[likely]] { @@ -75,7 +69,7 @@ namespace margelo::nitro::rive { }(); } void JHybridViewModelColorPropertySpec::removeListeners() { - static const auto method = javaClassStatic()->getMethod("removeListeners"); + static const auto method = _javaPart->javaClassStatic()->getMethod("removeListeners"); method(_javaPart); } diff --git a/nitrogen/generated/android/c++/JHybridViewModelColorPropertySpec.hpp b/nitrogen/generated/android/c++/JHybridViewModelColorPropertySpec.hpp index e9d5812f..2e7b56de 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelColorPropertySpec.hpp +++ b/nitrogen/generated/android/c++/JHybridViewModelColorPropertySpec.hpp @@ -40,13 +40,7 @@ namespace margelo::nitro::rive { } public: - size_t getExternalMemorySize() noexcept override; - bool equals(const std::shared_ptr& other) override; - void dispose() noexcept override; - std::string toString() override; - - public: - inline const jni::global_ref& getJavaPart() const noexcept { + inline const jni::global_ref& getJavaPart() const noexcept { return _javaPart; } @@ -63,7 +57,7 @@ namespace margelo::nitro::rive { private: friend HybridBase; using HybridBase::HybridBase; - jni::global_ref _javaPart; + jni::global_ref _javaPart; }; } // namespace margelo::nitro::rive diff --git a/nitrogen/generated/android/c++/JHybridViewModelEnumPropertySpec.cpp b/nitrogen/generated/android/c++/JHybridViewModelEnumPropertySpec.cpp index 9defc0c5..d5ba61df 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelEnumPropertySpec.cpp +++ b/nitrogen/generated/android/c++/JHybridViewModelEnumPropertySpec.cpp @@ -17,53 +17,47 @@ namespace margelo::nitro::rive { - jni::local_ref JHybridViewModelEnumPropertySpec::initHybrid(jni::alias_ref jThis) { - return makeCxxInstance(jThis); - } - - void JHybridViewModelEnumPropertySpec::registerNatives() { - registerHybrid({ - makeNativeMethod("initHybrid", JHybridViewModelEnumPropertySpec::initHybrid), - }); + std::shared_ptr JHybridViewModelEnumPropertySpec::JavaPart::getJHybridViewModelEnumPropertySpec() { + auto hybridObject = JHybridObject::JavaPart::getJHybridObject(); + auto castHybridObject = std::dynamic_pointer_cast(hybridObject); + if (castHybridObject == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to downcast JHybridObject to JHybridViewModelEnumPropertySpec!"); + } + return castHybridObject; } - size_t JHybridViewModelEnumPropertySpec::getExternalMemorySize() noexcept { - static const auto method = javaClassStatic()->getMethod("getMemorySize"); - return method(_javaPart); + jni::local_ref JHybridViewModelEnumPropertySpec::CxxPart::initHybrid(jni::alias_ref jThis) { + return makeCxxInstance(jThis); } - bool JHybridViewModelEnumPropertySpec::equals(const std::shared_ptr& other) { - if (auto otherCast = std::dynamic_pointer_cast(other)) { - return _javaPart == otherCast->_javaPart; + std::shared_ptr JHybridViewModelEnumPropertySpec::CxxPart::createHybridObject(const jni::local_ref& javaPart) { + auto castJavaPart = jni::dynamic_ref_cast(javaPart); + if (castJavaPart == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridViewModelEnumPropertySpec::JavaPart!"); } - return false; - } - - void JHybridViewModelEnumPropertySpec::dispose() noexcept { - static const auto method = javaClassStatic()->getMethod("dispose"); - method(_javaPart); + return std::make_shared(castJavaPart); } - std::string JHybridViewModelEnumPropertySpec::toString() { - static const auto method = javaClassStatic()->getMethod("toString"); - auto javaString = method(_javaPart); - return javaString->toStdString(); + void JHybridViewModelEnumPropertySpec::CxxPart::registerNatives() { + registerHybrid({ + makeNativeMethod("initHybrid", JHybridViewModelEnumPropertySpec::CxxPart::initHybrid), + }); } // Properties std::string JHybridViewModelEnumPropertySpec::getValue() { - static const auto method = javaClassStatic()->getMethod()>("getValue"); + static const auto method = _javaPart->javaClassStatic()->getMethod()>("getValue"); auto __result = method(_javaPart); return __result->toStdString(); } void JHybridViewModelEnumPropertySpec::setValue(const std::string& value) { - static const auto method = javaClassStatic()->getMethod /* value */)>("setValue"); + static const auto method = _javaPart->javaClassStatic()->getMethod /* value */)>("setValue"); method(_javaPart, jni::make_jstring(value)); } // Methods std::function JHybridViewModelEnumPropertySpec::addListener(const std::function& onChanged) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* onChanged */)>("addListener_cxx"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* onChanged */)>("addListener_cxx"); auto __result = method(_javaPart, JFunc_void_std__string_cxx::fromCpp(onChanged)); return [&]() -> std::function { if (__result->isInstanceOf(JFunc_void_cxx::javaClassStatic())) [[likely]] { @@ -76,7 +70,7 @@ namespace margelo::nitro::rive { }(); } void JHybridViewModelEnumPropertySpec::removeListeners() { - static const auto method = javaClassStatic()->getMethod("removeListeners"); + static const auto method = _javaPart->javaClassStatic()->getMethod("removeListeners"); method(_javaPart); } diff --git a/nitrogen/generated/android/c++/JHybridViewModelEnumPropertySpec.hpp b/nitrogen/generated/android/c++/JHybridViewModelEnumPropertySpec.hpp index 2264f3ce..d0cc9e56 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelEnumPropertySpec.hpp +++ b/nitrogen/generated/android/c++/JHybridViewModelEnumPropertySpec.hpp @@ -40,13 +40,7 @@ namespace margelo::nitro::rive { } public: - size_t getExternalMemorySize() noexcept override; - bool equals(const std::shared_ptr& other) override; - void dispose() noexcept override; - std::string toString() override; - - public: - inline const jni::global_ref& getJavaPart() const noexcept { + inline const jni::global_ref& getJavaPart() const noexcept { return _javaPart; } @@ -63,7 +57,7 @@ namespace margelo::nitro::rive { private: friend HybridBase; using HybridBase::HybridBase; - jni::global_ref _javaPart; + jni::global_ref _javaPart; }; } // namespace margelo::nitro::rive diff --git a/nitrogen/generated/android/c++/JHybridViewModelImagePropertySpec.cpp b/nitrogen/generated/android/c++/JHybridViewModelImagePropertySpec.cpp index d40ef5a6..1f7d6312 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelImagePropertySpec.cpp +++ b/nitrogen/generated/android/c++/JHybridViewModelImagePropertySpec.cpp @@ -20,49 +20,43 @@ namespace margelo::nitro::rive { class HybridRiveImageSpec; } namespace margelo::nitro::rive { - jni::local_ref JHybridViewModelImagePropertySpec::initHybrid(jni::alias_ref jThis) { - return makeCxxInstance(jThis); - } - - void JHybridViewModelImagePropertySpec::registerNatives() { - registerHybrid({ - makeNativeMethod("initHybrid", JHybridViewModelImagePropertySpec::initHybrid), - }); + std::shared_ptr JHybridViewModelImagePropertySpec::JavaPart::getJHybridViewModelImagePropertySpec() { + auto hybridObject = JHybridObject::JavaPart::getJHybridObject(); + auto castHybridObject = std::dynamic_pointer_cast(hybridObject); + if (castHybridObject == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to downcast JHybridObject to JHybridViewModelImagePropertySpec!"); + } + return castHybridObject; } - size_t JHybridViewModelImagePropertySpec::getExternalMemorySize() noexcept { - static const auto method = javaClassStatic()->getMethod("getMemorySize"); - return method(_javaPart); + jni::local_ref JHybridViewModelImagePropertySpec::CxxPart::initHybrid(jni::alias_ref jThis) { + return makeCxxInstance(jThis); } - bool JHybridViewModelImagePropertySpec::equals(const std::shared_ptr& other) { - if (auto otherCast = std::dynamic_pointer_cast(other)) { - return _javaPart == otherCast->_javaPart; + std::shared_ptr JHybridViewModelImagePropertySpec::CxxPart::createHybridObject(const jni::local_ref& javaPart) { + auto castJavaPart = jni::dynamic_ref_cast(javaPart); + if (castJavaPart == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridViewModelImagePropertySpec::JavaPart!"); } - return false; + return std::make_shared(castJavaPart); } - void JHybridViewModelImagePropertySpec::dispose() noexcept { - static const auto method = javaClassStatic()->getMethod("dispose"); - method(_javaPart); - } - - std::string JHybridViewModelImagePropertySpec::toString() { - static const auto method = javaClassStatic()->getMethod("toString"); - auto javaString = method(_javaPart); - return javaString->toStdString(); + void JHybridViewModelImagePropertySpec::CxxPart::registerNatives() { + registerHybrid({ + makeNativeMethod("initHybrid", JHybridViewModelImagePropertySpec::CxxPart::initHybrid), + }); } // Properties - + // Methods void JHybridViewModelImagePropertySpec::set(const std::optional>& image) { - static const auto method = javaClassStatic()->getMethod /* image */)>("set"); + static const auto method = _javaPart->javaClassStatic()->getMethod /* image */)>("set"); method(_javaPart, image.has_value() ? std::dynamic_pointer_cast(image.value())->getJavaPart() : nullptr); } std::function JHybridViewModelImagePropertySpec::addListener(const std::function& onChanged) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* onChanged */)>("addListener_cxx"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* onChanged */)>("addListener_cxx"); auto __result = method(_javaPart, JFunc_void_cxx::fromCpp(onChanged)); return [&]() -> std::function { if (__result->isInstanceOf(JFunc_void_cxx::javaClassStatic())) [[likely]] { @@ -75,7 +69,7 @@ namespace margelo::nitro::rive { }(); } void JHybridViewModelImagePropertySpec::removeListeners() { - static const auto method = javaClassStatic()->getMethod("removeListeners"); + static const auto method = _javaPart->javaClassStatic()->getMethod("removeListeners"); method(_javaPart); } diff --git a/nitrogen/generated/android/c++/JHybridViewModelImagePropertySpec.hpp b/nitrogen/generated/android/c++/JHybridViewModelImagePropertySpec.hpp index b6be7e04..a40f817c 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelImagePropertySpec.hpp +++ b/nitrogen/generated/android/c++/JHybridViewModelImagePropertySpec.hpp @@ -40,19 +40,13 @@ namespace margelo::nitro::rive { } public: - size_t getExternalMemorySize() noexcept override; - bool equals(const std::shared_ptr& other) override; - void dispose() noexcept override; - std::string toString() override; - - public: - inline const jni::global_ref& getJavaPart() const noexcept { + inline const jni::global_ref& getJavaPart() const noexcept { return _javaPart; } public: // Properties - + public: // Methods @@ -63,7 +57,7 @@ namespace margelo::nitro::rive { private: friend HybridBase; using HybridBase::HybridBase; - jni::global_ref _javaPart; + jni::global_ref _javaPart; }; } // namespace margelo::nitro::rive diff --git a/nitrogen/generated/android/c++/JHybridViewModelInstanceSpec.cpp b/nitrogen/generated/android/c++/JHybridViewModelInstanceSpec.cpp index f6abcdd9..ccb8618e 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelInstanceSpec.cpp +++ b/nitrogen/generated/android/c++/JHybridViewModelInstanceSpec.cpp @@ -54,99 +54,93 @@ namespace margelo::nitro::rive { class HybridViewModelInstanceSpec; } namespace margelo::nitro::rive { - jni::local_ref JHybridViewModelInstanceSpec::initHybrid(jni::alias_ref jThis) { - return makeCxxInstance(jThis); - } - - void JHybridViewModelInstanceSpec::registerNatives() { - registerHybrid({ - makeNativeMethod("initHybrid", JHybridViewModelInstanceSpec::initHybrid), - }); + std::shared_ptr JHybridViewModelInstanceSpec::JavaPart::getJHybridViewModelInstanceSpec() { + auto hybridObject = JHybridObject::JavaPart::getJHybridObject(); + auto castHybridObject = std::dynamic_pointer_cast(hybridObject); + if (castHybridObject == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to downcast JHybridObject to JHybridViewModelInstanceSpec!"); + } + return castHybridObject; } - size_t JHybridViewModelInstanceSpec::getExternalMemorySize() noexcept { - static const auto method = javaClassStatic()->getMethod("getMemorySize"); - return method(_javaPart); + jni::local_ref JHybridViewModelInstanceSpec::CxxPart::initHybrid(jni::alias_ref jThis) { + return makeCxxInstance(jThis); } - bool JHybridViewModelInstanceSpec::equals(const std::shared_ptr& other) { - if (auto otherCast = std::dynamic_pointer_cast(other)) { - return _javaPart == otherCast->_javaPart; + std::shared_ptr JHybridViewModelInstanceSpec::CxxPart::createHybridObject(const jni::local_ref& javaPart) { + auto castJavaPart = jni::dynamic_ref_cast(javaPart); + if (castJavaPart == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridViewModelInstanceSpec::JavaPart!"); } - return false; - } - - void JHybridViewModelInstanceSpec::dispose() noexcept { - static const auto method = javaClassStatic()->getMethod("dispose"); - method(_javaPart); + return std::make_shared(castJavaPart); } - std::string JHybridViewModelInstanceSpec::toString() { - static const auto method = javaClassStatic()->getMethod("toString"); - auto javaString = method(_javaPart); - return javaString->toStdString(); + void JHybridViewModelInstanceSpec::CxxPart::registerNatives() { + registerHybrid({ + makeNativeMethod("initHybrid", JHybridViewModelInstanceSpec::CxxPart::initHybrid), + }); } // Properties std::string JHybridViewModelInstanceSpec::getInstanceName() { - static const auto method = javaClassStatic()->getMethod()>("getInstanceName"); + static const auto method = _javaPart->javaClassStatic()->getMethod()>("getInstanceName"); auto __result = method(_javaPart); return __result->toStdString(); } // Methods std::optional> JHybridViewModelInstanceSpec::numberProperty(const std::string& path) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* path */)>("numberProperty"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* path */)>("numberProperty"); auto __result = method(_javaPart, jni::make_jstring(path)); - return __result != nullptr ? std::make_optional(__result->cthis()->shared_cast()) : std::nullopt; + return __result != nullptr ? std::make_optional(__result->getJHybridViewModelNumberPropertySpec()) : std::nullopt; } std::optional> JHybridViewModelInstanceSpec::stringProperty(const std::string& path) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* path */)>("stringProperty"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* path */)>("stringProperty"); auto __result = method(_javaPart, jni::make_jstring(path)); - return __result != nullptr ? std::make_optional(__result->cthis()->shared_cast()) : std::nullopt; + return __result != nullptr ? std::make_optional(__result->getJHybridViewModelStringPropertySpec()) : std::nullopt; } std::optional> JHybridViewModelInstanceSpec::booleanProperty(const std::string& path) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* path */)>("booleanProperty"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* path */)>("booleanProperty"); auto __result = method(_javaPart, jni::make_jstring(path)); - return __result != nullptr ? std::make_optional(__result->cthis()->shared_cast()) : std::nullopt; + return __result != nullptr ? std::make_optional(__result->getJHybridViewModelBooleanPropertySpec()) : std::nullopt; } std::optional> JHybridViewModelInstanceSpec::colorProperty(const std::string& path) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* path */)>("colorProperty"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* path */)>("colorProperty"); auto __result = method(_javaPart, jni::make_jstring(path)); - return __result != nullptr ? std::make_optional(__result->cthis()->shared_cast()) : std::nullopt; + return __result != nullptr ? std::make_optional(__result->getJHybridViewModelColorPropertySpec()) : std::nullopt; } std::optional> JHybridViewModelInstanceSpec::enumProperty(const std::string& path) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* path */)>("enumProperty"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* path */)>("enumProperty"); auto __result = method(_javaPart, jni::make_jstring(path)); - return __result != nullptr ? std::make_optional(__result->cthis()->shared_cast()) : std::nullopt; + return __result != nullptr ? std::make_optional(__result->getJHybridViewModelEnumPropertySpec()) : std::nullopt; } std::optional> JHybridViewModelInstanceSpec::triggerProperty(const std::string& path) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* path */)>("triggerProperty"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* path */)>("triggerProperty"); auto __result = method(_javaPart, jni::make_jstring(path)); - return __result != nullptr ? std::make_optional(__result->cthis()->shared_cast()) : std::nullopt; + return __result != nullptr ? std::make_optional(__result->getJHybridViewModelTriggerPropertySpec()) : std::nullopt; } std::optional> JHybridViewModelInstanceSpec::imageProperty(const std::string& path) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* path */)>("imageProperty"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* path */)>("imageProperty"); auto __result = method(_javaPart, jni::make_jstring(path)); - return __result != nullptr ? std::make_optional(__result->cthis()->shared_cast()) : std::nullopt; + return __result != nullptr ? std::make_optional(__result->getJHybridViewModelImagePropertySpec()) : std::nullopt; } std::optional> JHybridViewModelInstanceSpec::listProperty(const std::string& path) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* path */)>("listProperty"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* path */)>("listProperty"); auto __result = method(_javaPart, jni::make_jstring(path)); - return __result != nullptr ? std::make_optional(__result->cthis()->shared_cast()) : std::nullopt; + return __result != nullptr ? std::make_optional(__result->getJHybridViewModelListPropertySpec()) : std::nullopt; } std::optional> JHybridViewModelInstanceSpec::artboardProperty(const std::string& path) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* path */)>("artboardProperty"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* path */)>("artboardProperty"); auto __result = method(_javaPart, jni::make_jstring(path)); - return __result != nullptr ? std::make_optional(__result->cthis()->shared_cast()) : std::nullopt; + return __result != nullptr ? std::make_optional(__result->getJHybridViewModelArtboardPropertySpec()) : std::nullopt; } std::optional> JHybridViewModelInstanceSpec::viewModel(const std::string& path) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* path */)>("viewModel"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* path */)>("viewModel"); auto __result = method(_javaPart, jni::make_jstring(path)); - return __result != nullptr ? std::make_optional(__result->cthis()->shared_cast()) : std::nullopt; + return __result != nullptr ? std::make_optional(__result->getJHybridViewModelInstanceSpec()) : std::nullopt; } void JHybridViewModelInstanceSpec::replaceViewModel(const std::string& path, const std::shared_ptr& instance) { - static const auto method = javaClassStatic()->getMethod /* path */, jni::alias_ref /* instance */)>("replaceViewModel"); + static const auto method = _javaPart->javaClassStatic()->getMethod /* path */, jni::alias_ref /* instance */)>("replaceViewModel"); method(_javaPart, jni::make_jstring(path), std::dynamic_pointer_cast(instance)->getJavaPart()); } diff --git a/nitrogen/generated/android/c++/JHybridViewModelInstanceSpec.hpp b/nitrogen/generated/android/c++/JHybridViewModelInstanceSpec.hpp index b54b1d9e..8fe85dd6 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelInstanceSpec.hpp +++ b/nitrogen/generated/android/c++/JHybridViewModelInstanceSpec.hpp @@ -18,34 +18,33 @@ namespace margelo::nitro::rive { using namespace facebook; - class JHybridViewModelInstanceSpec: public jni::HybridClass, - public virtual HybridViewModelInstanceSpec { + class JHybridViewModelInstanceSpec: public virtual HybridViewModelInstanceSpec, public virtual JHybridObject { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelInstanceSpec;"; - static jni::local_ref initHybrid(jni::alias_ref jThis); - static void registerNatives(); - - protected: - // C++ constructor (called from Java via `initHybrid()`) - explicit JHybridViewModelInstanceSpec(jni::alias_ref jThis) : - HybridObject(HybridViewModelInstanceSpec::TAG), - HybridBase(jThis), - _javaPart(jni::make_global(jThis)) {} + struct JavaPart: public jni::JavaClass { + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelInstanceSpec;"; + std::shared_ptr getJHybridViewModelInstanceSpec(); + }; + struct CxxPart: public jni::HybridClass { + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelInstanceSpec$CxxPart;"; + static jni::local_ref initHybrid(jni::alias_ref jThis); + static void registerNatives(); + using HybridBase::HybridBase; + protected: + std::shared_ptr createHybridObject(const jni::local_ref& javaPart) override; + }; public: + explicit JHybridViewModelInstanceSpec(const jni::local_ref& javaPart): + HybridObject(HybridViewModelInstanceSpec::TAG), + JHybridObject(javaPart), + _javaPart(jni::make_global(javaPart)) {} ~JHybridViewModelInstanceSpec() override { // Hermes GC can destroy JS objects on a non-JNI Thread. jni::ThreadScope::WithClassLoader([&] { _javaPart.reset(); }); } public: - size_t getExternalMemorySize() noexcept override; - bool equals(const std::shared_ptr& other) override; - void dispose() noexcept override; - std::string toString() override; - - public: - inline const jni::global_ref& getJavaPart() const noexcept { + inline const jni::global_ref& getJavaPart() const noexcept { return _javaPart; } @@ -68,9 +67,7 @@ namespace margelo::nitro::rive { void replaceViewModel(const std::string& path, const std::shared_ptr& instance) override; private: - friend HybridBase; - using HybridBase::HybridBase; - jni::global_ref _javaPart; + jni::global_ref _javaPart; }; } // namespace margelo::nitro::rive diff --git a/nitrogen/generated/android/c++/JHybridViewModelListPropertySpec.cpp b/nitrogen/generated/android/c++/JHybridViewModelListPropertySpec.cpp index de3c1643..96dbe630 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelListPropertySpec.cpp +++ b/nitrogen/generated/android/c++/JHybridViewModelListPropertySpec.cpp @@ -20,76 +20,70 @@ namespace margelo::nitro::rive { class HybridViewModelInstanceSpec; } namespace margelo::nitro::rive { - jni::local_ref JHybridViewModelListPropertySpec::initHybrid(jni::alias_ref jThis) { - return makeCxxInstance(jThis); - } - - void JHybridViewModelListPropertySpec::registerNatives() { - registerHybrid({ - makeNativeMethod("initHybrid", JHybridViewModelListPropertySpec::initHybrid), - }); + std::shared_ptr JHybridViewModelListPropertySpec::JavaPart::getJHybridViewModelListPropertySpec() { + auto hybridObject = JHybridObject::JavaPart::getJHybridObject(); + auto castHybridObject = std::dynamic_pointer_cast(hybridObject); + if (castHybridObject == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to downcast JHybridObject to JHybridViewModelListPropertySpec!"); + } + return castHybridObject; } - size_t JHybridViewModelListPropertySpec::getExternalMemorySize() noexcept { - static const auto method = javaClassStatic()->getMethod("getMemorySize"); - return method(_javaPart); + jni::local_ref JHybridViewModelListPropertySpec::CxxPart::initHybrid(jni::alias_ref jThis) { + return makeCxxInstance(jThis); } - bool JHybridViewModelListPropertySpec::equals(const std::shared_ptr& other) { - if (auto otherCast = std::dynamic_pointer_cast(other)) { - return _javaPart == otherCast->_javaPart; + std::shared_ptr JHybridViewModelListPropertySpec::CxxPart::createHybridObject(const jni::local_ref& javaPart) { + auto castJavaPart = jni::dynamic_ref_cast(javaPart); + if (castJavaPart == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridViewModelListPropertySpec::JavaPart!"); } - return false; - } - - void JHybridViewModelListPropertySpec::dispose() noexcept { - static const auto method = javaClassStatic()->getMethod("dispose"); - method(_javaPart); + return std::make_shared(castJavaPart); } - std::string JHybridViewModelListPropertySpec::toString() { - static const auto method = javaClassStatic()->getMethod("toString"); - auto javaString = method(_javaPart); - return javaString->toStdString(); + void JHybridViewModelListPropertySpec::CxxPart::registerNatives() { + registerHybrid({ + makeNativeMethod("initHybrid", JHybridViewModelListPropertySpec::CxxPart::initHybrid), + }); } // Properties double JHybridViewModelListPropertySpec::getLength() { - static const auto method = javaClassStatic()->getMethod("getLength"); + static const auto method = _javaPart->javaClassStatic()->getMethod("getLength"); auto __result = method(_javaPart); return __result; } // Methods std::optional> JHybridViewModelListPropertySpec::getInstanceAt(double index) { - static const auto method = javaClassStatic()->getMethod(double /* index */)>("getInstanceAt"); + static const auto method = _javaPart->javaClassStatic()->getMethod(double /* index */)>("getInstanceAt"); auto __result = method(_javaPart, index); - return __result != nullptr ? std::make_optional(__result->cthis()->shared_cast()) : std::nullopt; + return __result != nullptr ? std::make_optional(__result->getJHybridViewModelInstanceSpec()) : std::nullopt; } void JHybridViewModelListPropertySpec::addInstance(const std::shared_ptr& instance) { - static const auto method = javaClassStatic()->getMethod /* instance */)>("addInstance"); + static const auto method = _javaPart->javaClassStatic()->getMethod /* instance */)>("addInstance"); method(_javaPart, std::dynamic_pointer_cast(instance)->getJavaPart()); } bool JHybridViewModelListPropertySpec::addInstanceAt(const std::shared_ptr& instance, double index) { - static const auto method = javaClassStatic()->getMethod /* instance */, double /* index */)>("addInstanceAt"); + static const auto method = _javaPart->javaClassStatic()->getMethod /* instance */, double /* index */)>("addInstanceAt"); auto __result = method(_javaPart, std::dynamic_pointer_cast(instance)->getJavaPart(), index); return static_cast(__result); } void JHybridViewModelListPropertySpec::removeInstance(const std::shared_ptr& instance) { - static const auto method = javaClassStatic()->getMethod /* instance */)>("removeInstance"); + static const auto method = _javaPart->javaClassStatic()->getMethod /* instance */)>("removeInstance"); method(_javaPart, std::dynamic_pointer_cast(instance)->getJavaPart()); } void JHybridViewModelListPropertySpec::removeInstanceAt(double index) { - static const auto method = javaClassStatic()->getMethod("removeInstanceAt"); + static const auto method = _javaPart->javaClassStatic()->getMethod("removeInstanceAt"); method(_javaPart, index); } bool JHybridViewModelListPropertySpec::swap(double index1, double index2) { - static const auto method = javaClassStatic()->getMethod("swap"); + static const auto method = _javaPart->javaClassStatic()->getMethod("swap"); auto __result = method(_javaPart, index1, index2); return static_cast(__result); } std::function JHybridViewModelListPropertySpec::addListener(const std::function& onChanged) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* onChanged */)>("addListener_cxx"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* onChanged */)>("addListener_cxx"); auto __result = method(_javaPart, JFunc_void_cxx::fromCpp(onChanged)); return [&]() -> std::function { if (__result->isInstanceOf(JFunc_void_cxx::javaClassStatic())) [[likely]] { @@ -102,7 +96,7 @@ namespace margelo::nitro::rive { }(); } void JHybridViewModelListPropertySpec::removeListeners() { - static const auto method = javaClassStatic()->getMethod("removeListeners"); + static const auto method = _javaPart->javaClassStatic()->getMethod("removeListeners"); method(_javaPart); } diff --git a/nitrogen/generated/android/c++/JHybridViewModelListPropertySpec.hpp b/nitrogen/generated/android/c++/JHybridViewModelListPropertySpec.hpp index 53c40f47..2884cb0c 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelListPropertySpec.hpp +++ b/nitrogen/generated/android/c++/JHybridViewModelListPropertySpec.hpp @@ -40,13 +40,7 @@ namespace margelo::nitro::rive { } public: - size_t getExternalMemorySize() noexcept override; - bool equals(const std::shared_ptr& other) override; - void dispose() noexcept override; - std::string toString() override; - - public: - inline const jni::global_ref& getJavaPart() const noexcept { + inline const jni::global_ref& getJavaPart() const noexcept { return _javaPart; } @@ -68,7 +62,7 @@ namespace margelo::nitro::rive { private: friend HybridBase; using HybridBase::HybridBase; - jni::global_ref _javaPart; + jni::global_ref _javaPart; }; } // namespace margelo::nitro::rive diff --git a/nitrogen/generated/android/c++/JHybridViewModelNumberPropertySpec.cpp b/nitrogen/generated/android/c++/JHybridViewModelNumberPropertySpec.cpp index ea71cc90..fa0b4672 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelNumberPropertySpec.cpp +++ b/nitrogen/generated/android/c++/JHybridViewModelNumberPropertySpec.cpp @@ -16,53 +16,47 @@ namespace margelo::nitro::rive { - jni::local_ref JHybridViewModelNumberPropertySpec::initHybrid(jni::alias_ref jThis) { - return makeCxxInstance(jThis); - } - - void JHybridViewModelNumberPropertySpec::registerNatives() { - registerHybrid({ - makeNativeMethod("initHybrid", JHybridViewModelNumberPropertySpec::initHybrid), - }); + std::shared_ptr JHybridViewModelNumberPropertySpec::JavaPart::getJHybridViewModelNumberPropertySpec() { + auto hybridObject = JHybridObject::JavaPart::getJHybridObject(); + auto castHybridObject = std::dynamic_pointer_cast(hybridObject); + if (castHybridObject == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to downcast JHybridObject to JHybridViewModelNumberPropertySpec!"); + } + return castHybridObject; } - size_t JHybridViewModelNumberPropertySpec::getExternalMemorySize() noexcept { - static const auto method = javaClassStatic()->getMethod("getMemorySize"); - return method(_javaPart); + jni::local_ref JHybridViewModelNumberPropertySpec::CxxPart::initHybrid(jni::alias_ref jThis) { + return makeCxxInstance(jThis); } - bool JHybridViewModelNumberPropertySpec::equals(const std::shared_ptr& other) { - if (auto otherCast = std::dynamic_pointer_cast(other)) { - return _javaPart == otherCast->_javaPart; + std::shared_ptr JHybridViewModelNumberPropertySpec::CxxPart::createHybridObject(const jni::local_ref& javaPart) { + auto castJavaPart = jni::dynamic_ref_cast(javaPart); + if (castJavaPart == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridViewModelNumberPropertySpec::JavaPart!"); } - return false; - } - - void JHybridViewModelNumberPropertySpec::dispose() noexcept { - static const auto method = javaClassStatic()->getMethod("dispose"); - method(_javaPart); + return std::make_shared(castJavaPart); } - std::string JHybridViewModelNumberPropertySpec::toString() { - static const auto method = javaClassStatic()->getMethod("toString"); - auto javaString = method(_javaPart); - return javaString->toStdString(); + void JHybridViewModelNumberPropertySpec::CxxPart::registerNatives() { + registerHybrid({ + makeNativeMethod("initHybrid", JHybridViewModelNumberPropertySpec::CxxPart::initHybrid), + }); } // Properties double JHybridViewModelNumberPropertySpec::getValue() { - static const auto method = javaClassStatic()->getMethod("getValue"); + static const auto method = _javaPart->javaClassStatic()->getMethod("getValue"); auto __result = method(_javaPart); return __result; } void JHybridViewModelNumberPropertySpec::setValue(double value) { - static const auto method = javaClassStatic()->getMethod("setValue"); + static const auto method = _javaPart->javaClassStatic()->getMethod("setValue"); method(_javaPart, value); } // Methods std::function JHybridViewModelNumberPropertySpec::addListener(const std::function& onChanged) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* onChanged */)>("addListener_cxx"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* onChanged */)>("addListener_cxx"); auto __result = method(_javaPart, JFunc_void_double_cxx::fromCpp(onChanged)); return [&]() -> std::function { if (__result->isInstanceOf(JFunc_void_cxx::javaClassStatic())) [[likely]] { @@ -75,7 +69,7 @@ namespace margelo::nitro::rive { }(); } void JHybridViewModelNumberPropertySpec::removeListeners() { - static const auto method = javaClassStatic()->getMethod("removeListeners"); + static const auto method = _javaPart->javaClassStatic()->getMethod("removeListeners"); method(_javaPart); } diff --git a/nitrogen/generated/android/c++/JHybridViewModelNumberPropertySpec.hpp b/nitrogen/generated/android/c++/JHybridViewModelNumberPropertySpec.hpp index 5dd702bd..0120e93c 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelNumberPropertySpec.hpp +++ b/nitrogen/generated/android/c++/JHybridViewModelNumberPropertySpec.hpp @@ -40,13 +40,7 @@ namespace margelo::nitro::rive { } public: - size_t getExternalMemorySize() noexcept override; - bool equals(const std::shared_ptr& other) override; - void dispose() noexcept override; - std::string toString() override; - - public: - inline const jni::global_ref& getJavaPart() const noexcept { + inline const jni::global_ref& getJavaPart() const noexcept { return _javaPart; } @@ -63,7 +57,7 @@ namespace margelo::nitro::rive { private: friend HybridBase; using HybridBase::HybridBase; - jni::global_ref _javaPart; + jni::global_ref _javaPart; }; } // namespace margelo::nitro::rive diff --git a/nitrogen/generated/android/c++/JHybridViewModelPropertySpec.cpp b/nitrogen/generated/android/c++/JHybridViewModelPropertySpec.cpp index 6990210c..947c5d50 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelPropertySpec.cpp +++ b/nitrogen/generated/android/c++/JHybridViewModelPropertySpec.cpp @@ -13,41 +13,35 @@ namespace margelo::nitro::rive { - jni::local_ref JHybridViewModelPropertySpec::initHybrid(jni::alias_ref jThis) { - return makeCxxInstance(jThis); - } - - void JHybridViewModelPropertySpec::registerNatives() { - registerHybrid({ - makeNativeMethod("initHybrid", JHybridViewModelPropertySpec::initHybrid), - }); + std::shared_ptr JHybridViewModelPropertySpec::JavaPart::getJHybridViewModelPropertySpec() { + auto hybridObject = JHybridObject::JavaPart::getJHybridObject(); + auto castHybridObject = std::dynamic_pointer_cast(hybridObject); + if (castHybridObject == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to downcast JHybridObject to JHybridViewModelPropertySpec!"); + } + return castHybridObject; } - size_t JHybridViewModelPropertySpec::getExternalMemorySize() noexcept { - static const auto method = javaClassStatic()->getMethod("getMemorySize"); - return method(_javaPart); + jni::local_ref JHybridViewModelPropertySpec::CxxPart::initHybrid(jni::alias_ref jThis) { + return makeCxxInstance(jThis); } - bool JHybridViewModelPropertySpec::equals(const std::shared_ptr& other) { - if (auto otherCast = std::dynamic_pointer_cast(other)) { - return _javaPart == otherCast->_javaPart; + std::shared_ptr JHybridViewModelPropertySpec::CxxPart::createHybridObject(const jni::local_ref& javaPart) { + auto castJavaPart = jni::dynamic_ref_cast(javaPart); + if (castJavaPart == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridViewModelPropertySpec::JavaPart!"); } - return false; + return std::make_shared(castJavaPart); } - void JHybridViewModelPropertySpec::dispose() noexcept { - static const auto method = javaClassStatic()->getMethod("dispose"); - method(_javaPart); - } - - std::string JHybridViewModelPropertySpec::toString() { - static const auto method = javaClassStatic()->getMethod("toString"); - auto javaString = method(_javaPart); - return javaString->toStdString(); + void JHybridViewModelPropertySpec::CxxPart::registerNatives() { + registerHybrid({ + makeNativeMethod("initHybrid", JHybridViewModelPropertySpec::CxxPart::initHybrid), + }); } // Properties - + // Methods diff --git a/nitrogen/generated/android/c++/JHybridViewModelPropertySpec.hpp b/nitrogen/generated/android/c++/JHybridViewModelPropertySpec.hpp index e57f7d4a..798cddb9 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelPropertySpec.hpp +++ b/nitrogen/generated/android/c++/JHybridViewModelPropertySpec.hpp @@ -18,49 +18,46 @@ namespace margelo::nitro::rive { using namespace facebook; - class JHybridViewModelPropertySpec: public jni::HybridClass, - public virtual HybridViewModelPropertySpec { + class JHybridViewModelPropertySpec: public virtual HybridViewModelPropertySpec, public virtual JHybridObject { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelPropertySpec;"; - static jni::local_ref initHybrid(jni::alias_ref jThis); - static void registerNatives(); - - protected: - // C++ constructor (called from Java via `initHybrid()`) - explicit JHybridViewModelPropertySpec(jni::alias_ref jThis) : - HybridObject(HybridViewModelPropertySpec::TAG), - HybridBase(jThis), - _javaPart(jni::make_global(jThis)) {} + struct JavaPart: public jni::JavaClass { + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelPropertySpec;"; + std::shared_ptr getJHybridViewModelPropertySpec(); + }; + struct CxxPart: public jni::HybridClass { + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelPropertySpec$CxxPart;"; + static jni::local_ref initHybrid(jni::alias_ref jThis); + static void registerNatives(); + using HybridBase::HybridBase; + protected: + std::shared_ptr createHybridObject(const jni::local_ref& javaPart) override; + }; public: + explicit JHybridViewModelPropertySpec(const jni::local_ref& javaPart): + HybridObject(HybridViewModelPropertySpec::TAG), + JHybridObject(javaPart), + _javaPart(jni::make_global(javaPart)) {} ~JHybridViewModelPropertySpec() override { // Hermes GC can destroy JS objects on a non-JNI Thread. jni::ThreadScope::WithClassLoader([&] { _javaPart.reset(); }); } public: - size_t getExternalMemorySize() noexcept override; - bool equals(const std::shared_ptr& other) override; - void dispose() noexcept override; - std::string toString() override; - - public: - inline const jni::global_ref& getJavaPart() const noexcept { + inline const jni::global_ref& getJavaPart() const noexcept { return _javaPart; } public: // Properties - + public: // Methods private: - friend HybridBase; - using HybridBase::HybridBase; - jni::global_ref _javaPart; + jni::global_ref _javaPart; }; } // namespace margelo::nitro::rive diff --git a/nitrogen/generated/android/c++/JHybridViewModelSpec.cpp b/nitrogen/generated/android/c++/JHybridViewModelSpec.cpp index 9799a925..f167ad35 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelSpec.cpp +++ b/nitrogen/generated/android/c++/JHybridViewModelSpec.cpp @@ -18,76 +18,70 @@ namespace margelo::nitro::rive { class HybridViewModelInstanceSpec; } namespace margelo::nitro::rive { - jni::local_ref JHybridViewModelSpec::initHybrid(jni::alias_ref jThis) { - return makeCxxInstance(jThis); - } - - void JHybridViewModelSpec::registerNatives() { - registerHybrid({ - makeNativeMethod("initHybrid", JHybridViewModelSpec::initHybrid), - }); + std::shared_ptr JHybridViewModelSpec::JavaPart::getJHybridViewModelSpec() { + auto hybridObject = JHybridObject::JavaPart::getJHybridObject(); + auto castHybridObject = std::dynamic_pointer_cast(hybridObject); + if (castHybridObject == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to downcast JHybridObject to JHybridViewModelSpec!"); + } + return castHybridObject; } - size_t JHybridViewModelSpec::getExternalMemorySize() noexcept { - static const auto method = javaClassStatic()->getMethod("getMemorySize"); - return method(_javaPart); + jni::local_ref JHybridViewModelSpec::CxxPart::initHybrid(jni::alias_ref jThis) { + return makeCxxInstance(jThis); } - bool JHybridViewModelSpec::equals(const std::shared_ptr& other) { - if (auto otherCast = std::dynamic_pointer_cast(other)) { - return _javaPart == otherCast->_javaPart; + std::shared_ptr JHybridViewModelSpec::CxxPart::createHybridObject(const jni::local_ref& javaPart) { + auto castJavaPart = jni::dynamic_ref_cast(javaPart); + if (castJavaPart == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridViewModelSpec::JavaPart!"); } - return false; - } - - void JHybridViewModelSpec::dispose() noexcept { - static const auto method = javaClassStatic()->getMethod("dispose"); - method(_javaPart); + return std::make_shared(castJavaPart); } - std::string JHybridViewModelSpec::toString() { - static const auto method = javaClassStatic()->getMethod("toString"); - auto javaString = method(_javaPart); - return javaString->toStdString(); + void JHybridViewModelSpec::CxxPart::registerNatives() { + registerHybrid({ + makeNativeMethod("initHybrid", JHybridViewModelSpec::CxxPart::initHybrid), + }); } // Properties double JHybridViewModelSpec::getPropertyCount() { - static const auto method = javaClassStatic()->getMethod("getPropertyCount"); + static const auto method = _javaPart->javaClassStatic()->getMethod("getPropertyCount"); auto __result = method(_javaPart); return __result; } double JHybridViewModelSpec::getInstanceCount() { - static const auto method = javaClassStatic()->getMethod("getInstanceCount"); + static const auto method = _javaPart->javaClassStatic()->getMethod("getInstanceCount"); auto __result = method(_javaPart); return __result; } std::string JHybridViewModelSpec::getModelName() { - static const auto method = javaClassStatic()->getMethod()>("getModelName"); + static const auto method = _javaPart->javaClassStatic()->getMethod()>("getModelName"); auto __result = method(_javaPart); return __result->toStdString(); } // Methods std::optional> JHybridViewModelSpec::createInstanceByIndex(double index) { - static const auto method = javaClassStatic()->getMethod(double /* index */)>("createInstanceByIndex"); + static const auto method = _javaPart->javaClassStatic()->getMethod(double /* index */)>("createInstanceByIndex"); auto __result = method(_javaPart, index); - return __result != nullptr ? std::make_optional(__result->cthis()->shared_cast()) : std::nullopt; + return __result != nullptr ? std::make_optional(__result->getJHybridViewModelInstanceSpec()) : std::nullopt; } std::optional> JHybridViewModelSpec::createInstanceByName(const std::string& name) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* name */)>("createInstanceByName"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* name */)>("createInstanceByName"); auto __result = method(_javaPart, jni::make_jstring(name)); - return __result != nullptr ? std::make_optional(__result->cthis()->shared_cast()) : std::nullopt; + return __result != nullptr ? std::make_optional(__result->getJHybridViewModelInstanceSpec()) : std::nullopt; } std::optional> JHybridViewModelSpec::createDefaultInstance() { - static const auto method = javaClassStatic()->getMethod()>("createDefaultInstance"); + static const auto method = _javaPart->javaClassStatic()->getMethod()>("createDefaultInstance"); auto __result = method(_javaPart); - return __result != nullptr ? std::make_optional(__result->cthis()->shared_cast()) : std::nullopt; + return __result != nullptr ? std::make_optional(__result->getJHybridViewModelInstanceSpec()) : std::nullopt; } std::optional> JHybridViewModelSpec::createInstance() { - static const auto method = javaClassStatic()->getMethod()>("createInstance"); + static const auto method = _javaPart->javaClassStatic()->getMethod()>("createInstance"); auto __result = method(_javaPart); - return __result != nullptr ? std::make_optional(__result->cthis()->shared_cast()) : std::nullopt; + return __result != nullptr ? std::make_optional(__result->getJHybridViewModelInstanceSpec()) : std::nullopt; } } // namespace margelo::nitro::rive diff --git a/nitrogen/generated/android/c++/JHybridViewModelSpec.hpp b/nitrogen/generated/android/c++/JHybridViewModelSpec.hpp index 3e6bc329..7b0a1d4d 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelSpec.hpp +++ b/nitrogen/generated/android/c++/JHybridViewModelSpec.hpp @@ -18,34 +18,33 @@ namespace margelo::nitro::rive { using namespace facebook; - class JHybridViewModelSpec: public jni::HybridClass, - public virtual HybridViewModelSpec { + class JHybridViewModelSpec: public virtual HybridViewModelSpec, public virtual JHybridObject { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelSpec;"; - static jni::local_ref initHybrid(jni::alias_ref jThis); - static void registerNatives(); - - protected: - // C++ constructor (called from Java via `initHybrid()`) - explicit JHybridViewModelSpec(jni::alias_ref jThis) : - HybridObject(HybridViewModelSpec::TAG), - HybridBase(jThis), - _javaPart(jni::make_global(jThis)) {} + struct JavaPart: public jni::JavaClass { + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelSpec;"; + std::shared_ptr getJHybridViewModelSpec(); + }; + struct CxxPart: public jni::HybridClass { + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridViewModelSpec$CxxPart;"; + static jni::local_ref initHybrid(jni::alias_ref jThis); + static void registerNatives(); + using HybridBase::HybridBase; + protected: + std::shared_ptr createHybridObject(const jni::local_ref& javaPart) override; + }; public: + explicit JHybridViewModelSpec(const jni::local_ref& javaPart): + HybridObject(HybridViewModelSpec::TAG), + JHybridObject(javaPart), + _javaPart(jni::make_global(javaPart)) {} ~JHybridViewModelSpec() override { // Hermes GC can destroy JS objects on a non-JNI Thread. jni::ThreadScope::WithClassLoader([&] { _javaPart.reset(); }); } public: - size_t getExternalMemorySize() noexcept override; - bool equals(const std::shared_ptr& other) override; - void dispose() noexcept override; - std::string toString() override; - - public: - inline const jni::global_ref& getJavaPart() const noexcept { + inline const jni::global_ref& getJavaPart() const noexcept { return _javaPart; } @@ -63,9 +62,7 @@ namespace margelo::nitro::rive { std::optional> createInstance() override; private: - friend HybridBase; - using HybridBase::HybridBase; - jni::global_ref _javaPart; + jni::global_ref _javaPart; }; } // namespace margelo::nitro::rive diff --git a/nitrogen/generated/android/c++/JHybridViewModelStringPropertySpec.cpp b/nitrogen/generated/android/c++/JHybridViewModelStringPropertySpec.cpp index f01cb8f8..0d87f455 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelStringPropertySpec.cpp +++ b/nitrogen/generated/android/c++/JHybridViewModelStringPropertySpec.cpp @@ -17,53 +17,47 @@ namespace margelo::nitro::rive { - jni::local_ref JHybridViewModelStringPropertySpec::initHybrid(jni::alias_ref jThis) { - return makeCxxInstance(jThis); - } - - void JHybridViewModelStringPropertySpec::registerNatives() { - registerHybrid({ - makeNativeMethod("initHybrid", JHybridViewModelStringPropertySpec::initHybrid), - }); + std::shared_ptr JHybridViewModelStringPropertySpec::JavaPart::getJHybridViewModelStringPropertySpec() { + auto hybridObject = JHybridObject::JavaPart::getJHybridObject(); + auto castHybridObject = std::dynamic_pointer_cast(hybridObject); + if (castHybridObject == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to downcast JHybridObject to JHybridViewModelStringPropertySpec!"); + } + return castHybridObject; } - size_t JHybridViewModelStringPropertySpec::getExternalMemorySize() noexcept { - static const auto method = javaClassStatic()->getMethod("getMemorySize"); - return method(_javaPart); + jni::local_ref JHybridViewModelStringPropertySpec::CxxPart::initHybrid(jni::alias_ref jThis) { + return makeCxxInstance(jThis); } - bool JHybridViewModelStringPropertySpec::equals(const std::shared_ptr& other) { - if (auto otherCast = std::dynamic_pointer_cast(other)) { - return _javaPart == otherCast->_javaPart; + std::shared_ptr JHybridViewModelStringPropertySpec::CxxPart::createHybridObject(const jni::local_ref& javaPart) { + auto castJavaPart = jni::dynamic_ref_cast(javaPart); + if (castJavaPart == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridViewModelStringPropertySpec::JavaPart!"); } - return false; - } - - void JHybridViewModelStringPropertySpec::dispose() noexcept { - static const auto method = javaClassStatic()->getMethod("dispose"); - method(_javaPart); + return std::make_shared(castJavaPart); } - std::string JHybridViewModelStringPropertySpec::toString() { - static const auto method = javaClassStatic()->getMethod("toString"); - auto javaString = method(_javaPart); - return javaString->toStdString(); + void JHybridViewModelStringPropertySpec::CxxPart::registerNatives() { + registerHybrid({ + makeNativeMethod("initHybrid", JHybridViewModelStringPropertySpec::CxxPart::initHybrid), + }); } // Properties std::string JHybridViewModelStringPropertySpec::getValue() { - static const auto method = javaClassStatic()->getMethod()>("getValue"); + static const auto method = _javaPart->javaClassStatic()->getMethod()>("getValue"); auto __result = method(_javaPart); return __result->toStdString(); } void JHybridViewModelStringPropertySpec::setValue(const std::string& value) { - static const auto method = javaClassStatic()->getMethod /* value */)>("setValue"); + static const auto method = _javaPart->javaClassStatic()->getMethod /* value */)>("setValue"); method(_javaPart, jni::make_jstring(value)); } // Methods std::function JHybridViewModelStringPropertySpec::addListener(const std::function& onChanged) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* onChanged */)>("addListener_cxx"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* onChanged */)>("addListener_cxx"); auto __result = method(_javaPart, JFunc_void_std__string_cxx::fromCpp(onChanged)); return [&]() -> std::function { if (__result->isInstanceOf(JFunc_void_cxx::javaClassStatic())) [[likely]] { @@ -76,7 +70,7 @@ namespace margelo::nitro::rive { }(); } void JHybridViewModelStringPropertySpec::removeListeners() { - static const auto method = javaClassStatic()->getMethod("removeListeners"); + static const auto method = _javaPart->javaClassStatic()->getMethod("removeListeners"); method(_javaPart); } diff --git a/nitrogen/generated/android/c++/JHybridViewModelStringPropertySpec.hpp b/nitrogen/generated/android/c++/JHybridViewModelStringPropertySpec.hpp index e24f5ee5..57e3a6b9 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelStringPropertySpec.hpp +++ b/nitrogen/generated/android/c++/JHybridViewModelStringPropertySpec.hpp @@ -40,13 +40,7 @@ namespace margelo::nitro::rive { } public: - size_t getExternalMemorySize() noexcept override; - bool equals(const std::shared_ptr& other) override; - void dispose() noexcept override; - std::string toString() override; - - public: - inline const jni::global_ref& getJavaPart() const noexcept { + inline const jni::global_ref& getJavaPart() const noexcept { return _javaPart; } @@ -63,7 +57,7 @@ namespace margelo::nitro::rive { private: friend HybridBase; using HybridBase::HybridBase; - jni::global_ref _javaPart; + jni::global_ref _javaPart; }; } // namespace margelo::nitro::rive diff --git a/nitrogen/generated/android/c++/JHybridViewModelTriggerPropertySpec.cpp b/nitrogen/generated/android/c++/JHybridViewModelTriggerPropertySpec.cpp index 5dae4ed9..873f982d 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelTriggerPropertySpec.cpp +++ b/nitrogen/generated/android/c++/JHybridViewModelTriggerPropertySpec.cpp @@ -15,45 +15,39 @@ namespace margelo::nitro::rive { - jni::local_ref JHybridViewModelTriggerPropertySpec::initHybrid(jni::alias_ref jThis) { - return makeCxxInstance(jThis); - } - - void JHybridViewModelTriggerPropertySpec::registerNatives() { - registerHybrid({ - makeNativeMethod("initHybrid", JHybridViewModelTriggerPropertySpec::initHybrid), - }); + std::shared_ptr JHybridViewModelTriggerPropertySpec::JavaPart::getJHybridViewModelTriggerPropertySpec() { + auto hybridObject = JHybridObject::JavaPart::getJHybridObject(); + auto castHybridObject = std::dynamic_pointer_cast(hybridObject); + if (castHybridObject == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to downcast JHybridObject to JHybridViewModelTriggerPropertySpec!"); + } + return castHybridObject; } - size_t JHybridViewModelTriggerPropertySpec::getExternalMemorySize() noexcept { - static const auto method = javaClassStatic()->getMethod("getMemorySize"); - return method(_javaPart); + jni::local_ref JHybridViewModelTriggerPropertySpec::CxxPart::initHybrid(jni::alias_ref jThis) { + return makeCxxInstance(jThis); } - bool JHybridViewModelTriggerPropertySpec::equals(const std::shared_ptr& other) { - if (auto otherCast = std::dynamic_pointer_cast(other)) { - return _javaPart == otherCast->_javaPart; + std::shared_ptr JHybridViewModelTriggerPropertySpec::CxxPart::createHybridObject(const jni::local_ref& javaPart) { + auto castJavaPart = jni::dynamic_ref_cast(javaPart); + if (castJavaPart == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridViewModelTriggerPropertySpec::JavaPart!"); } - return false; + return std::make_shared(castJavaPart); } - void JHybridViewModelTriggerPropertySpec::dispose() noexcept { - static const auto method = javaClassStatic()->getMethod("dispose"); - method(_javaPart); - } - - std::string JHybridViewModelTriggerPropertySpec::toString() { - static const auto method = javaClassStatic()->getMethod("toString"); - auto javaString = method(_javaPart); - return javaString->toStdString(); + void JHybridViewModelTriggerPropertySpec::CxxPart::registerNatives() { + registerHybrid({ + makeNativeMethod("initHybrid", JHybridViewModelTriggerPropertySpec::CxxPart::initHybrid), + }); } // Properties - + // Methods std::function JHybridViewModelTriggerPropertySpec::addListener(const std::function& onChanged) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* onChanged */)>("addListener_cxx"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* onChanged */)>("addListener_cxx"); auto __result = method(_javaPart, JFunc_void_cxx::fromCpp(onChanged)); return [&]() -> std::function { if (__result->isInstanceOf(JFunc_void_cxx::javaClassStatic())) [[likely]] { @@ -66,11 +60,11 @@ namespace margelo::nitro::rive { }(); } void JHybridViewModelTriggerPropertySpec::trigger() { - static const auto method = javaClassStatic()->getMethod("trigger"); + static const auto method = _javaPart->javaClassStatic()->getMethod("trigger"); method(_javaPart); } void JHybridViewModelTriggerPropertySpec::removeListeners() { - static const auto method = javaClassStatic()->getMethod("removeListeners"); + static const auto method = _javaPart->javaClassStatic()->getMethod("removeListeners"); method(_javaPart); } diff --git a/nitrogen/generated/android/c++/JHybridViewModelTriggerPropertySpec.hpp b/nitrogen/generated/android/c++/JHybridViewModelTriggerPropertySpec.hpp index 92643536..566c2229 100644 --- a/nitrogen/generated/android/c++/JHybridViewModelTriggerPropertySpec.hpp +++ b/nitrogen/generated/android/c++/JHybridViewModelTriggerPropertySpec.hpp @@ -40,19 +40,13 @@ namespace margelo::nitro::rive { } public: - size_t getExternalMemorySize() noexcept override; - bool equals(const std::shared_ptr& other) override; - void dispose() noexcept override; - std::string toString() override; - - public: - inline const jni::global_ref& getJavaPart() const noexcept { + inline const jni::global_ref& getJavaPart() const noexcept { return _javaPart; } public: // Properties - + public: // Methods @@ -63,7 +57,7 @@ namespace margelo::nitro::rive { private: friend HybridBase; using HybridBase::HybridBase; - jni::global_ref _javaPart; + jni::global_ref _javaPart; }; } // namespace margelo::nitro::rive diff --git a/nitrogen/generated/android/c++/JResolvedReferencedAsset.hpp b/nitrogen/generated/android/c++/JResolvedReferencedAsset.hpp index 3567a1c4..acf69cb8 100644 --- a/nitrogen/generated/android/c++/JResolvedReferencedAsset.hpp +++ b/nitrogen/generated/android/c++/JResolvedReferencedAsset.hpp @@ -43,14 +43,14 @@ namespace margelo::nitro::rive { jni::local_ref sourceAssetId = this->getFieldValue(fieldSourceAssetId); static const auto fieldPath = clazz->getField("path"); jni::local_ref path = this->getFieldValue(fieldPath); - static const auto fieldImage = clazz->getField("image"); - jni::local_ref image = this->getFieldValue(fieldImage); + static const auto fieldImage = clazz->getField("image"); + jni::local_ref image = this->getFieldValue(fieldImage); return ResolvedReferencedAsset( sourceUrl != nullptr ? std::make_optional(sourceUrl->toStdString()) : std::nullopt, sourceAsset != nullptr ? std::make_optional(sourceAsset->toStdString()) : std::nullopt, sourceAssetId != nullptr ? std::make_optional(sourceAssetId->toStdString()) : std::nullopt, path != nullptr ? std::make_optional(path->toStdString()) : std::nullopt, - image != nullptr ? std::make_optional(image->cthis()->shared_cast()) : std::nullopt + image != nullptr ? std::make_optional(image->getJHybridRiveImageSpec()) : std::nullopt ); } @@ -60,7 +60,7 @@ namespace margelo::nitro::rive { */ [[maybe_unused]] static jni::local_ref fromCpp(const ResolvedReferencedAsset& value) { - using JSignature = JResolvedReferencedAsset(jni::alias_ref, jni::alias_ref, jni::alias_ref, jni::alias_ref, jni::alias_ref); + using JSignature = JResolvedReferencedAsset(jni::alias_ref, jni::alias_ref, jni::alias_ref, jni::alias_ref, jni::alias_ref); static const auto clazz = javaClassStatic(); static const auto create = clazz->getStaticMethod("fromCpp"); return create( diff --git a/nitrogen/generated/android/c++/JVariant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName.cpp b/nitrogen/generated/android/c++/JVariant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName.cpp index 111b550a..fd7c2cc7 100644 --- a/nitrogen/generated/android/c++/JVariant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName.cpp +++ b/nitrogen/generated/android/c++/JVariant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName.cpp @@ -15,7 +15,7 @@ namespace margelo::nitro::rive { if (isInstanceOf(JVariant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName_impl::First::javaClassStatic())) { // It's a `std::shared_ptr` auto jniValue = static_cast(this)->getValue(); - return jniValue->cthis()->shared_cast(); + return jniValue->getJHybridViewModelInstanceSpec(); } else if (isInstanceOf(JVariant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName_impl::Second::javaClassStatic())) { // It's a `DataBindMode` auto jniValue = static_cast(this)->getValue(); diff --git a/nitrogen/generated/android/c++/JVariant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName.hpp b/nitrogen/generated/android/c++/JVariant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName.hpp index 1e7a6e67..d2370928 100644 --- a/nitrogen/generated/android/c++/JVariant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName.hpp +++ b/nitrogen/generated/android/c++/JVariant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName.hpp @@ -31,8 +31,8 @@ namespace margelo::nitro::rive { public: static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/Variant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName;"; - static jni::local_ref create_0(jni::alias_ref value) { - static const auto method = javaClassStatic()->getStaticMethod)>("create"); + static jni::local_ref create_0(jni::alias_ref value) { + static const auto method = javaClassStatic()->getStaticMethod)>("create"); return method(javaClassStatic(), value); } static jni::local_ref create_1(jni::alias_ref value) { @@ -61,8 +61,8 @@ namespace margelo::nitro::rive { public: static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/Variant_HybridViewModelInstanceSpec_DataBindMode_DataBindByName$First;"; - [[nodiscard]] jni::local_ref getValue() const { - static const auto field = javaClassStatic()->getField("value"); + [[nodiscard]] jni::local_ref getValue() const { + static const auto field = javaClassStatic()->getField("value"); return getFieldValue(field); } }; diff --git a/nitrogen/generated/android/c++/views/JHybridRiveViewStateUpdater.cpp b/nitrogen/generated/android/c++/views/JHybridRiveViewStateUpdater.cpp index 1ece44f4..ce99e3ee 100644 --- a/nitrogen/generated/android/c++/views/JHybridRiveViewStateUpdater.cpp +++ b/nitrogen/generated/android/c++/views/JHybridRiveViewStateUpdater.cpp @@ -15,9 +15,9 @@ using namespace facebook; using ConcreteStateData = react::ConcreteState; void JHybridRiveViewStateUpdater::updateViewProps(jni::alias_ref /* class */, - jni::alias_ref javaView, + jni::alias_ref javaView, jni::alias_ref stateWrapperInterface) { - JHybridRiveViewSpec* view = javaView->cthis(); + auto view = javaView->getJHybridRiveViewSpec(); // Get concrete StateWrapperImpl from passed StateWrapper interface object jobject rawStateWrapper = stateWrapperInterface.get(); @@ -78,7 +78,7 @@ void JHybridRiveViewStateUpdater::updateViewProps(jni::alias_ref /* // hybridRef changed - call it with new this const auto& maybeFunc = props.hybridRef.value; if (maybeFunc.has_value()) { - std::shared_ptr shared = javaView->cthis()->shared_cast(); + std::shared_ptr shared = javaView->getJHybridRiveViewSpec(); maybeFunc.value()(shared); } // TODO: Set isDirty = false diff --git a/nitrogen/generated/android/c++/views/JHybridRiveViewStateUpdater.hpp b/nitrogen/generated/android/c++/views/JHybridRiveViewStateUpdater.hpp index 6aabe816..16ac1530 100644 --- a/nitrogen/generated/android/c++/views/JHybridRiveViewStateUpdater.hpp +++ b/nitrogen/generated/android/c++/views/JHybridRiveViewStateUpdater.hpp @@ -30,7 +30,7 @@ class JHybridRiveViewStateUpdater: public jni::JavaClass /* class */, - jni::alias_ref view, + jni::alias_ref view, jni::alias_ref stateWrapperInterface); public: diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridBindableArtboardSpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridBindableArtboardSpec.kt index 187fc873..093d147c 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridBindableArtboardSpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridBindableArtboardSpec.kt @@ -24,23 +24,6 @@ import com.margelo.nitro.core.HybridObject "LocalVariableName", "PropertyName", "PrivatePropertyName", "FunctionName" ) abstract class HybridBindableArtboardSpec: HybridObject() { - @DoNotStrip - private var mHybridData: HybridData = initHybrid() - - init { - super.updateNative(mHybridData) - } - - override fun updateNative(hybridData: HybridData) { - mHybridData = hybridData - super.updateNative(hybridData) - } - - // Default implementation of `HybridObject.toString()` - override fun toString(): String { - return "[HybridObject BindableArtboard]" - } - // Properties @get:DoNotStrip @get:Keep @@ -49,7 +32,21 @@ abstract class HybridBindableArtboardSpec: HybridObject() { // Methods - private external fun initHybrid(): HybridData + + // Default implementation of `HybridObject.toString()` + override fun toString(): String { + return "[HybridObject BindableArtboard]" + } + + // C++ backing class + @DoNotStrip + @Keep + protected open class CxxPart(javaPart: HybridBindableArtboardSpec): HybridObject.CxxPart(javaPart) { + external override fun initHybrid(): HybridData + } + override fun createCxxPart(): CxxPart { + return CxxPart(this) + } companion object { protected const val TAG = "HybridBindableArtboardSpec" diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveFileFactorySpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveFileFactorySpec.kt index c72930a8..bf745fe3 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveFileFactorySpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveFileFactorySpec.kt @@ -26,25 +26,7 @@ import com.margelo.nitro.core.HybridObject "LocalVariableName", "PropertyName", "PrivatePropertyName", "FunctionName" ) abstract class HybridRiveFileFactorySpec: HybridObject() { - @DoNotStrip - private var mHybridData: HybridData = initHybrid() - - init { - super.updateNative(mHybridData) - } - - override fun updateNative(hybridData: HybridData) { - mHybridData = hybridData - super.updateNative(hybridData) - } - - // Default implementation of `HybridObject.toString()` - override fun toString(): String { - return "[HybridObject RiveFileFactory]" - } - // Properties - // Methods @DoNotStrip @@ -63,7 +45,21 @@ abstract class HybridRiveFileFactorySpec: HybridObject() { @Keep abstract fun fromBytes(bytes: ArrayBuffer, loadCdn: Boolean, referencedAssets: ReferencedAssetsType?): Promise - private external fun initHybrid(): HybridData + + // Default implementation of `HybridObject.toString()` + override fun toString(): String { + return "[HybridObject RiveFileFactory]" + } + + // C++ backing class + @DoNotStrip + @Keep + protected open class CxxPart(javaPart: HybridRiveFileFactorySpec): HybridObject.CxxPart(javaPart) { + external override fun initHybrid(): HybridData + } + override fun createCxxPart(): CxxPart { + return CxxPart(this) + } companion object { protected const val TAG = "HybridRiveFileFactorySpec" diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveFileSpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveFileSpec.kt index 0c5de270..c6c52bc5 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveFileSpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveFileSpec.kt @@ -24,23 +24,6 @@ import com.margelo.nitro.core.HybridObject "LocalVariableName", "PropertyName", "PrivatePropertyName", "FunctionName" ) abstract class HybridRiveFileSpec: HybridObject() { - @DoNotStrip - private var mHybridData: HybridData = initHybrid() - - init { - super.updateNative(mHybridData) - } - - override fun updateNative(hybridData: HybridData) { - mHybridData = hybridData - super.updateNative(hybridData) - } - - // Default implementation of `HybridObject.toString()` - override fun toString(): String { - return "[HybridObject RiveFile]" - } - // Properties @get:DoNotStrip @get:Keep @@ -75,7 +58,21 @@ abstract class HybridRiveFileSpec: HybridObject() { @Keep abstract fun getBindableArtboard(name: String): HybridBindableArtboardSpec - private external fun initHybrid(): HybridData + + // Default implementation of `HybridObject.toString()` + override fun toString(): String { + return "[HybridObject RiveFile]" + } + + // C++ backing class + @DoNotStrip + @Keep + protected open class CxxPart(javaPart: HybridRiveFileSpec): HybridObject.CxxPart(javaPart) { + external override fun initHybrid(): HybridData + } + override fun createCxxPart(): CxxPart { + return CxxPart(this) + } companion object { protected const val TAG = "HybridRiveFileSpec" diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveImageFactorySpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveImageFactorySpec.kt index d86418ca..d7d96b9c 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveImageFactorySpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveImageFactorySpec.kt @@ -26,25 +26,7 @@ import com.margelo.nitro.core.HybridObject "LocalVariableName", "PropertyName", "PrivatePropertyName", "FunctionName" ) abstract class HybridRiveImageFactorySpec: HybridObject() { - @DoNotStrip - private var mHybridData: HybridData = initHybrid() - - init { - super.updateNative(mHybridData) - } - - override fun updateNative(hybridData: HybridData) { - mHybridData = hybridData - super.updateNative(hybridData) - } - - // Default implementation of `HybridObject.toString()` - override fun toString(): String { - return "[HybridObject RiveImageFactory]" - } - // Properties - // Methods @DoNotStrip @@ -59,7 +41,21 @@ abstract class HybridRiveImageFactorySpec: HybridObject() { @Keep abstract fun loadFromBytesAsync(bytes: ArrayBuffer): Promise - private external fun initHybrid(): HybridData + + // Default implementation of `HybridObject.toString()` + override fun toString(): String { + return "[HybridObject RiveImageFactory]" + } + + // C++ backing class + @DoNotStrip + @Keep + protected open class CxxPart(javaPart: HybridRiveImageFactorySpec): HybridObject.CxxPart(javaPart) { + external override fun initHybrid(): HybridData + } + override fun createCxxPart(): CxxPart { + return CxxPart(this) + } companion object { protected const val TAG = "HybridRiveImageFactorySpec" diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveImageSpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveImageSpec.kt index 501fa546..2ffa3fd3 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveImageSpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveImageSpec.kt @@ -24,23 +24,6 @@ import com.margelo.nitro.core.HybridObject "LocalVariableName", "PropertyName", "PrivatePropertyName", "FunctionName" ) abstract class HybridRiveImageSpec: HybridObject() { - @DoNotStrip - private var mHybridData: HybridData = initHybrid() - - init { - super.updateNative(mHybridData) - } - - override fun updateNative(hybridData: HybridData) { - mHybridData = hybridData - super.updateNative(hybridData) - } - - // Default implementation of `HybridObject.toString()` - override fun toString(): String { - return "[HybridObject RiveImage]" - } - // Properties @get:DoNotStrip @get:Keep @@ -49,7 +32,21 @@ abstract class HybridRiveImageSpec: HybridObject() { // Methods - private external fun initHybrid(): HybridData + + // Default implementation of `HybridObject.toString()` + override fun toString(): String { + return "[HybridObject RiveImage]" + } + + // C++ backing class + @DoNotStrip + @Keep + protected open class CxxPart(javaPart: HybridRiveImageSpec): HybridObject.CxxPart(javaPart) { + external override fun initHybrid(): HybridData + } + override fun createCxxPart(): CxxPart { + return CxxPart(this) + } companion object { protected const val TAG = "HybridRiveImageSpec" diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveRuntimeSpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveRuntimeSpec.kt index de288e16..4da3bc3c 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveRuntimeSpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveRuntimeSpec.kt @@ -25,23 +25,6 @@ import com.margelo.nitro.core.HybridObject "LocalVariableName", "PropertyName", "PrivatePropertyName", "FunctionName" ) abstract class HybridRiveRuntimeSpec: HybridObject() { - @DoNotStrip - private var mHybridData: HybridData = initHybrid() - - init { - super.updateNative(mHybridData) - } - - override fun updateNative(hybridData: HybridData) { - mHybridData = hybridData - super.updateNative(hybridData) - } - - // Default implementation of `HybridObject.toString()` - override fun toString(): String { - return "[HybridObject RiveRuntime]" - } - // Properties @get:DoNotStrip @get:Keep @@ -56,7 +39,21 @@ abstract class HybridRiveRuntimeSpec: HybridObject() { @Keep abstract fun initialize(): Promise - private external fun initHybrid(): HybridData + + // Default implementation of `HybridObject.toString()` + override fun toString(): String { + return "[HybridObject RiveRuntime]" + } + + // C++ backing class + @DoNotStrip + @Keep + protected open class CxxPart(javaPart: HybridRiveRuntimeSpec): HybridObject.CxxPart(javaPart) { + external override fun initHybrid(): HybridData + } + override fun createCxxPart(): CxxPart { + return CxxPart(this) + } companion object { protected const val TAG = "HybridRiveRuntimeSpec" diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveSpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveSpec.kt index 826a3b32..17c0e012 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveSpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveSpec.kt @@ -24,32 +24,28 @@ import com.margelo.nitro.core.HybridObject "LocalVariableName", "PropertyName", "PrivatePropertyName", "FunctionName" ) abstract class HybridRiveSpec: HybridObject() { - @DoNotStrip - private var mHybridData: HybridData = initHybrid() + // Properties - init { - super.updateNative(mHybridData) - } + // Methods + @DoNotStrip + @Keep + abstract fun multiply(a: Double, b: Double): Double - override fun updateNative(hybridData: HybridData) { - mHybridData = hybridData - super.updateNative(hybridData) - } // Default implementation of `HybridObject.toString()` override fun toString(): String { return "[HybridObject Rive]" } - // Properties - - - // Methods + // C++ backing class @DoNotStrip @Keep - abstract fun multiply(a: Double, b: Double): Double - - private external fun initHybrid(): HybridData + protected open class CxxPart(javaPart: HybridRiveSpec): HybridObject.CxxPart(javaPart) { + external override fun initHybrid(): HybridData + } + override fun createCxxPart(): CxxPart { + return CxxPart(this) + } companion object { protected const val TAG = "HybridRiveSpec" diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveViewSpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveViewSpec.kt index 44479bf8..0c92432a 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveViewSpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridRiveViewSpec.kt @@ -25,23 +25,6 @@ import com.margelo.nitro.views.HybridView "LocalVariableName", "PropertyName", "PrivatePropertyName", "FunctionName" ) abstract class HybridRiveViewSpec: HybridView() { - @DoNotStrip - private var mHybridData: HybridData = initHybrid() - - init { - super.updateNative(mHybridData) - } - - override fun updateNative(hybridData: HybridData) { - mHybridData = hybridData - super.updateNative(hybridData) - } - - // Default implementation of `HybridObject.toString()` - override fun toString(): String { - return "[HybridObject RiveView]" - } - // Properties @get:DoNotStrip @get:Keep @@ -175,7 +158,21 @@ abstract class HybridRiveViewSpec: HybridView() { @Keep abstract fun getTextRunValue(name: String, path: String?): String - private external fun initHybrid(): HybridData + + // Default implementation of `HybridObject.toString()` + override fun toString(): String { + return "[HybridObject RiveView]" + } + + // C++ backing class + @DoNotStrip + @Keep + protected open class CxxPart(javaPart: HybridRiveViewSpec): HybridObject.CxxPart(javaPart) { + external override fun initHybrid(): HybridData + } + override fun createCxxPart(): CxxPart { + return CxxPart(this) + } companion object { protected const val TAG = "HybridRiveViewSpec" diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelArtboardPropertySpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelArtboardPropertySpec.kt index 36694357..cd7c6685 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelArtboardPropertySpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelArtboardPropertySpec.kt @@ -24,32 +24,28 @@ import com.margelo.nitro.core.HybridObject "LocalVariableName", "PropertyName", "PrivatePropertyName", "FunctionName" ) abstract class HybridViewModelArtboardPropertySpec: HybridViewModelPropertySpec() { - @DoNotStrip - private var mHybridData: HybridData = initHybrid() + // Properties - init { - super.updateNative(mHybridData) - } + // Methods + @DoNotStrip + @Keep + abstract fun set(artboard: HybridBindableArtboardSpec?): Unit - override fun updateNative(hybridData: HybridData) { - mHybridData = hybridData - super.updateNative(hybridData) - } // Default implementation of `HybridObject.toString()` override fun toString(): String { return "[HybridObject ViewModelArtboardProperty]" } - // Properties - - - // Methods + // C++ backing class @DoNotStrip @Keep - abstract fun set(artboard: HybridBindableArtboardSpec?): Unit - - private external fun initHybrid(): HybridData + protected open class CxxPart(javaPart: HybridViewModelArtboardPropertySpec): HybridObject.CxxPart(javaPart) { + external override fun initHybrid(): HybridData + } + override fun createCxxPart(): CxxPart { + return CxxPart(this) + } companion object { protected const val TAG = "HybridViewModelArtboardPropertySpec" diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelBooleanPropertySpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelBooleanPropertySpec.kt index 70e57ac6..036a8bb6 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelBooleanPropertySpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelBooleanPropertySpec.kt @@ -24,23 +24,6 @@ import com.margelo.nitro.core.HybridObject "LocalVariableName", "PropertyName", "PrivatePropertyName", "FunctionName" ) abstract class HybridViewModelBooleanPropertySpec: HybridViewModelPropertySpec() { - @DoNotStrip - private var mHybridData: HybridData = initHybrid() - - init { - super.updateNative(mHybridData) - } - - override fun updateNative(hybridData: HybridData) { - mHybridData = hybridData - super.updateNative(hybridData) - } - - // Default implementation of `HybridObject.toString()` - override fun toString(): String { - return "[HybridObject ViewModelBooleanProperty]" - } - // Properties @get:DoNotStrip @get:Keep @@ -62,7 +45,21 @@ abstract class HybridViewModelBooleanPropertySpec: HybridViewModelPropertySpec() @Keep abstract fun removeListeners(): Unit - private external fun initHybrid(): HybridData + + // Default implementation of `HybridObject.toString()` + override fun toString(): String { + return "[HybridObject ViewModelBooleanProperty]" + } + + // C++ backing class + @DoNotStrip + @Keep + protected open class CxxPart(javaPart: HybridViewModelBooleanPropertySpec): HybridObject.CxxPart(javaPart) { + external override fun initHybrid(): HybridData + } + override fun createCxxPart(): CxxPart { + return CxxPart(this) + } companion object { protected const val TAG = "HybridViewModelBooleanPropertySpec" diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelColorPropertySpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelColorPropertySpec.kt index edf4b37b..13b18118 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelColorPropertySpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelColorPropertySpec.kt @@ -24,23 +24,6 @@ import com.margelo.nitro.core.HybridObject "LocalVariableName", "PropertyName", "PrivatePropertyName", "FunctionName" ) abstract class HybridViewModelColorPropertySpec: HybridViewModelPropertySpec() { - @DoNotStrip - private var mHybridData: HybridData = initHybrid() - - init { - super.updateNative(mHybridData) - } - - override fun updateNative(hybridData: HybridData) { - mHybridData = hybridData - super.updateNative(hybridData) - } - - // Default implementation of `HybridObject.toString()` - override fun toString(): String { - return "[HybridObject ViewModelColorProperty]" - } - // Properties @get:DoNotStrip @get:Keep @@ -62,7 +45,21 @@ abstract class HybridViewModelColorPropertySpec: HybridViewModelPropertySpec() { @Keep abstract fun removeListeners(): Unit - private external fun initHybrid(): HybridData + + // Default implementation of `HybridObject.toString()` + override fun toString(): String { + return "[HybridObject ViewModelColorProperty]" + } + + // C++ backing class + @DoNotStrip + @Keep + protected open class CxxPart(javaPart: HybridViewModelColorPropertySpec): HybridObject.CxxPart(javaPart) { + external override fun initHybrid(): HybridData + } + override fun createCxxPart(): CxxPart { + return CxxPart(this) + } companion object { protected const val TAG = "HybridViewModelColorPropertySpec" diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelEnumPropertySpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelEnumPropertySpec.kt index b3ff4624..ad01ff9c 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelEnumPropertySpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelEnumPropertySpec.kt @@ -24,23 +24,6 @@ import com.margelo.nitro.core.HybridObject "LocalVariableName", "PropertyName", "PrivatePropertyName", "FunctionName" ) abstract class HybridViewModelEnumPropertySpec: HybridViewModelPropertySpec() { - @DoNotStrip - private var mHybridData: HybridData = initHybrid() - - init { - super.updateNative(mHybridData) - } - - override fun updateNative(hybridData: HybridData) { - mHybridData = hybridData - super.updateNative(hybridData) - } - - // Default implementation of `HybridObject.toString()` - override fun toString(): String { - return "[HybridObject ViewModelEnumProperty]" - } - // Properties @get:DoNotStrip @get:Keep @@ -62,7 +45,21 @@ abstract class HybridViewModelEnumPropertySpec: HybridViewModelPropertySpec() { @Keep abstract fun removeListeners(): Unit - private external fun initHybrid(): HybridData + + // Default implementation of `HybridObject.toString()` + override fun toString(): String { + return "[HybridObject ViewModelEnumProperty]" + } + + // C++ backing class + @DoNotStrip + @Keep + protected open class CxxPart(javaPart: HybridViewModelEnumPropertySpec): HybridObject.CxxPart(javaPart) { + external override fun initHybrid(): HybridData + } + override fun createCxxPart(): CxxPart { + return CxxPart(this) + } companion object { protected const val TAG = "HybridViewModelEnumPropertySpec" diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelImagePropertySpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelImagePropertySpec.kt index 77f08942..c14a2c30 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelImagePropertySpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelImagePropertySpec.kt @@ -24,25 +24,7 @@ import com.margelo.nitro.core.HybridObject "LocalVariableName", "PropertyName", "PrivatePropertyName", "FunctionName" ) abstract class HybridViewModelImagePropertySpec: HybridViewModelPropertySpec() { - @DoNotStrip - private var mHybridData: HybridData = initHybrid() - - init { - super.updateNative(mHybridData) - } - - override fun updateNative(hybridData: HybridData) { - mHybridData = hybridData - super.updateNative(hybridData) - } - - // Default implementation of `HybridObject.toString()` - override fun toString(): String { - return "[HybridObject ViewModelImageProperty]" - } - // Properties - // Methods @DoNotStrip @@ -62,7 +44,21 @@ abstract class HybridViewModelImagePropertySpec: HybridViewModelPropertySpec() { @Keep abstract fun removeListeners(): Unit - private external fun initHybrid(): HybridData + + // Default implementation of `HybridObject.toString()` + override fun toString(): String { + return "[HybridObject ViewModelImageProperty]" + } + + // C++ backing class + @DoNotStrip + @Keep + protected open class CxxPart(javaPart: HybridViewModelImagePropertySpec): HybridObject.CxxPart(javaPart) { + external override fun initHybrid(): HybridData + } + override fun createCxxPart(): CxxPart { + return CxxPart(this) + } companion object { protected const val TAG = "HybridViewModelImagePropertySpec" diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelInstanceSpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelInstanceSpec.kt index 13e1f5c6..1a32cb8e 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelInstanceSpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelInstanceSpec.kt @@ -24,23 +24,6 @@ import com.margelo.nitro.core.HybridObject "LocalVariableName", "PropertyName", "PrivatePropertyName", "FunctionName" ) abstract class HybridViewModelInstanceSpec: HybridObject() { - @DoNotStrip - private var mHybridData: HybridData = initHybrid() - - init { - super.updateNative(mHybridData) - } - - override fun updateNative(hybridData: HybridData) { - mHybridData = hybridData - super.updateNative(hybridData) - } - - // Default implementation of `HybridObject.toString()` - override fun toString(): String { - return "[HybridObject ViewModelInstance]" - } - // Properties @get:DoNotStrip @get:Keep @@ -91,7 +74,21 @@ abstract class HybridViewModelInstanceSpec: HybridObject() { @Keep abstract fun replaceViewModel(path: String, instance: HybridViewModelInstanceSpec): Unit - private external fun initHybrid(): HybridData + + // Default implementation of `HybridObject.toString()` + override fun toString(): String { + return "[HybridObject ViewModelInstance]" + } + + // C++ backing class + @DoNotStrip + @Keep + protected open class CxxPart(javaPart: HybridViewModelInstanceSpec): HybridObject.CxxPart(javaPart) { + external override fun initHybrid(): HybridData + } + override fun createCxxPart(): CxxPart { + return CxxPart(this) + } companion object { protected const val TAG = "HybridViewModelInstanceSpec" diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelListPropertySpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelListPropertySpec.kt index 7c4943a8..5f106c07 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelListPropertySpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelListPropertySpec.kt @@ -24,23 +24,6 @@ import com.margelo.nitro.core.HybridObject "LocalVariableName", "PropertyName", "PrivatePropertyName", "FunctionName" ) abstract class HybridViewModelListPropertySpec: HybridViewModelPropertySpec() { - @DoNotStrip - private var mHybridData: HybridData = initHybrid() - - init { - super.updateNative(mHybridData) - } - - override fun updateNative(hybridData: HybridData) { - mHybridData = hybridData - super.updateNative(hybridData) - } - - // Default implementation of `HybridObject.toString()` - override fun toString(): String { - return "[HybridObject ViewModelListProperty]" - } - // Properties @get:DoNotStrip @get:Keep @@ -84,7 +67,21 @@ abstract class HybridViewModelListPropertySpec: HybridViewModelPropertySpec() { @Keep abstract fun removeListeners(): Unit - private external fun initHybrid(): HybridData + + // Default implementation of `HybridObject.toString()` + override fun toString(): String { + return "[HybridObject ViewModelListProperty]" + } + + // C++ backing class + @DoNotStrip + @Keep + protected open class CxxPart(javaPart: HybridViewModelListPropertySpec): HybridObject.CxxPart(javaPart) { + external override fun initHybrid(): HybridData + } + override fun createCxxPart(): CxxPart { + return CxxPart(this) + } companion object { protected const val TAG = "HybridViewModelListPropertySpec" diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelNumberPropertySpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelNumberPropertySpec.kt index 8fd751c6..6e02cb38 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelNumberPropertySpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelNumberPropertySpec.kt @@ -24,23 +24,6 @@ import com.margelo.nitro.core.HybridObject "LocalVariableName", "PropertyName", "PrivatePropertyName", "FunctionName" ) abstract class HybridViewModelNumberPropertySpec: HybridViewModelPropertySpec() { - @DoNotStrip - private var mHybridData: HybridData = initHybrid() - - init { - super.updateNative(mHybridData) - } - - override fun updateNative(hybridData: HybridData) { - mHybridData = hybridData - super.updateNative(hybridData) - } - - // Default implementation of `HybridObject.toString()` - override fun toString(): String { - return "[HybridObject ViewModelNumberProperty]" - } - // Properties @get:DoNotStrip @get:Keep @@ -62,7 +45,21 @@ abstract class HybridViewModelNumberPropertySpec: HybridViewModelPropertySpec() @Keep abstract fun removeListeners(): Unit - private external fun initHybrid(): HybridData + + // Default implementation of `HybridObject.toString()` + override fun toString(): String { + return "[HybridObject ViewModelNumberProperty]" + } + + // C++ backing class + @DoNotStrip + @Keep + protected open class CxxPart(javaPart: HybridViewModelNumberPropertySpec): HybridObject.CxxPart(javaPart) { + external override fun initHybrid(): HybridData + } + override fun createCxxPart(): CxxPart { + return CxxPart(this) + } companion object { protected const val TAG = "HybridViewModelNumberPropertySpec" diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelPropertySpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelPropertySpec.kt index 76ec7d1d..e4d2f88a 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelPropertySpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelPropertySpec.kt @@ -24,30 +24,26 @@ import com.margelo.nitro.core.HybridObject "LocalVariableName", "PropertyName", "PrivatePropertyName", "FunctionName" ) abstract class HybridViewModelPropertySpec: HybridObject() { - @DoNotStrip - private var mHybridData: HybridData = initHybrid() + // Properties - init { - super.updateNative(mHybridData) - } + // Methods + - override fun updateNative(hybridData: HybridData) { - mHybridData = hybridData - super.updateNative(hybridData) - } // Default implementation of `HybridObject.toString()` override fun toString(): String { return "[HybridObject ViewModelProperty]" } - // Properties - - - // Methods - - - private external fun initHybrid(): HybridData + // C++ backing class + @DoNotStrip + @Keep + protected open class CxxPart(javaPart: HybridViewModelPropertySpec): HybridObject.CxxPart(javaPart) { + external override fun initHybrid(): HybridData + } + override fun createCxxPart(): CxxPart { + return CxxPart(this) + } companion object { protected const val TAG = "HybridViewModelPropertySpec" diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelSpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelSpec.kt index d75482ae..2410b8e3 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelSpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelSpec.kt @@ -24,23 +24,6 @@ import com.margelo.nitro.core.HybridObject "LocalVariableName", "PropertyName", "PrivatePropertyName", "FunctionName" ) abstract class HybridViewModelSpec: HybridObject() { - @DoNotStrip - private var mHybridData: HybridData = initHybrid() - - init { - super.updateNative(mHybridData) - } - - override fun updateNative(hybridData: HybridData) { - mHybridData = hybridData - super.updateNative(hybridData) - } - - // Default implementation of `HybridObject.toString()` - override fun toString(): String { - return "[HybridObject ViewModel]" - } - // Properties @get:DoNotStrip @get:Keep @@ -71,7 +54,21 @@ abstract class HybridViewModelSpec: HybridObject() { @Keep abstract fun createInstance(): HybridViewModelInstanceSpec? - private external fun initHybrid(): HybridData + + // Default implementation of `HybridObject.toString()` + override fun toString(): String { + return "[HybridObject ViewModel]" + } + + // C++ backing class + @DoNotStrip + @Keep + protected open class CxxPart(javaPart: HybridViewModelSpec): HybridObject.CxxPart(javaPart) { + external override fun initHybrid(): HybridData + } + override fun createCxxPart(): CxxPart { + return CxxPart(this) + } companion object { protected const val TAG = "HybridViewModelSpec" diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelStringPropertySpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelStringPropertySpec.kt index 7cef1eef..039792cb 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelStringPropertySpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelStringPropertySpec.kt @@ -24,23 +24,6 @@ import com.margelo.nitro.core.HybridObject "LocalVariableName", "PropertyName", "PrivatePropertyName", "FunctionName" ) abstract class HybridViewModelStringPropertySpec: HybridViewModelPropertySpec() { - @DoNotStrip - private var mHybridData: HybridData = initHybrid() - - init { - super.updateNative(mHybridData) - } - - override fun updateNative(hybridData: HybridData) { - mHybridData = hybridData - super.updateNative(hybridData) - } - - // Default implementation of `HybridObject.toString()` - override fun toString(): String { - return "[HybridObject ViewModelStringProperty]" - } - // Properties @get:DoNotStrip @get:Keep @@ -62,7 +45,21 @@ abstract class HybridViewModelStringPropertySpec: HybridViewModelPropertySpec() @Keep abstract fun removeListeners(): Unit - private external fun initHybrid(): HybridData + + // Default implementation of `HybridObject.toString()` + override fun toString(): String { + return "[HybridObject ViewModelStringProperty]" + } + + // C++ backing class + @DoNotStrip + @Keep + protected open class CxxPart(javaPart: HybridViewModelStringPropertySpec): HybridObject.CxxPart(javaPart) { + external override fun initHybrid(): HybridData + } + override fun createCxxPart(): CxxPart { + return CxxPart(this) + } companion object { protected const val TAG = "HybridViewModelStringPropertySpec" diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelTriggerPropertySpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelTriggerPropertySpec.kt index 60bcdb7b..fde38d8c 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelTriggerPropertySpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/rive/HybridViewModelTriggerPropertySpec.kt @@ -24,25 +24,7 @@ import com.margelo.nitro.core.HybridObject "LocalVariableName", "PropertyName", "PrivatePropertyName", "FunctionName" ) abstract class HybridViewModelTriggerPropertySpec: HybridViewModelPropertySpec() { - @DoNotStrip - private var mHybridData: HybridData = initHybrid() - - init { - super.updateNative(mHybridData) - } - - override fun updateNative(hybridData: HybridData) { - mHybridData = hybridData - super.updateNative(hybridData) - } - - // Default implementation of `HybridObject.toString()` - override fun toString(): String { - return "[HybridObject ViewModelTriggerProperty]" - } - // Properties - // Methods abstract fun addListener(onChanged: () -> Unit): () -> Unit @@ -62,7 +44,21 @@ abstract class HybridViewModelTriggerPropertySpec: HybridViewModelPropertySpec() @Keep abstract fun removeListeners(): Unit - private external fun initHybrid(): HybridData + + // Default implementation of `HybridObject.toString()` + override fun toString(): String { + return "[HybridObject ViewModelTriggerProperty]" + } + + // C++ backing class + @DoNotStrip + @Keep + protected open class CxxPart(javaPart: HybridViewModelTriggerPropertySpec): HybridObject.CxxPart(javaPart) { + external override fun initHybrid(): HybridData + } + override fun createCxxPart(): CxxPart { + return CxxPart(this) + } companion object { protected const val TAG = "HybridViewModelTriggerPropertySpec" diff --git a/nitrogen/generated/android/riveOnLoad.cpp b/nitrogen/generated/android/riveOnLoad.cpp index 25e1473d..35da3248 100644 --- a/nitrogen/generated/android/riveOnLoad.cpp +++ b/nitrogen/generated/android/riveOnLoad.cpp @@ -10,11 +10,9 @@ #endif #include "riveOnLoad.hpp" - #include #include #include - #include "JHybridBindableArtboardSpec.hpp" #include "JHybridRiveSpec.hpp" #include "JHybridRiveFileSpec.hpp" @@ -42,95 +40,139 @@ #include "JHybridViewModelImagePropertySpec.hpp" #include "JHybridViewModelListPropertySpec.hpp" #include "JHybridViewModelArtboardPropertySpec.hpp" -#include namespace margelo::nitro::rive { int initialize(JavaVM* vm) { + return facebook::jni::initialize(vm, []() { + ::margelo::nitro::rive::registerAllNatives(); + }); +} + +struct JHybridRiveSpecImpl: public facebook::jni::JavaClass { + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/Rive;"; + static std::shared_ptr create() { + static auto constructorFn = javaClassStatic()->getConstructor(); + facebook::jni::local_ref javaPart = javaClassStatic()->newObject(constructorFn); + return javaPart->getJHybridRiveSpec(); + } +}; + +struct JHybridRiveFileFactorySpecImpl: public facebook::jni::JavaClass { + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveFileFactory;"; + static std::shared_ptr create() { + static auto constructorFn = javaClassStatic()->getConstructor(); + facebook::jni::local_ref javaPart = javaClassStatic()->newObject(constructorFn); + return javaPart->getJHybridRiveFileFactorySpec(); + } +}; + +struct JHybridRiveFileSpecImpl: public facebook::jni::JavaClass { + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveFile;"; + static std::shared_ptr create() { + static auto constructorFn = javaClassStatic()->getConstructor(); + facebook::jni::local_ref javaPart = javaClassStatic()->newObject(constructorFn); + return javaPart->getJHybridRiveFileSpec(); + } +}; + +struct JHybridRiveViewSpecImpl: public facebook::jni::JavaClass { + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveView;"; + static std::shared_ptr create() { + static auto constructorFn = javaClassStatic()->getConstructor(); + facebook::jni::local_ref javaPart = javaClassStatic()->newObject(constructorFn); + return javaPart->getJHybridRiveViewSpec(); + } +}; + +struct JHybridRiveImageFactorySpecImpl: public facebook::jni::JavaClass { + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveImageFactory;"; + static std::shared_ptr create() { + static auto constructorFn = javaClassStatic()->getConstructor(); + facebook::jni::local_ref javaPart = javaClassStatic()->newObject(constructorFn); + return javaPart->getJHybridRiveImageFactorySpec(); + } +}; + +struct JHybridRiveRuntimeSpecImpl: public facebook::jni::JavaClass { + static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/rive/HybridRiveRuntime;"; + static std::shared_ptr create() { + static auto constructorFn = javaClassStatic()->getConstructor(); + facebook::jni::local_ref javaPart = javaClassStatic()->newObject(constructorFn); + return javaPart->getJHybridRiveRuntimeSpec(); + } +}; + +void registerAllNatives() { using namespace margelo::nitro; using namespace margelo::nitro::rive; - using namespace facebook; - return facebook::jni::initialize(vm, [] { - // Register native JNI methods - margelo::nitro::rive::JHybridBindableArtboardSpec::registerNatives(); - margelo::nitro::rive::JHybridRiveSpec::registerNatives(); - margelo::nitro::rive::JHybridRiveFileSpec::registerNatives(); - margelo::nitro::rive::JHybridRiveFileFactorySpec::registerNatives(); - margelo::nitro::rive::JHybridRiveImageSpec::registerNatives(); - margelo::nitro::rive::JHybridRiveImageFactorySpec::registerNatives(); - margelo::nitro::rive::JHybridRiveRuntimeSpec::registerNatives(); - margelo::nitro::rive::JHybridRiveViewSpec::registerNatives(); - margelo::nitro::rive::JFunc_void_RiveError_cxx::registerNatives(); - margelo::nitro::rive::JFunc_void_UnifiedRiveEvent_cxx::registerNatives(); - margelo::nitro::rive::views::JHybridRiveViewStateUpdater::registerNatives(); - margelo::nitro::rive::JHybridViewModelSpec::registerNatives(); - margelo::nitro::rive::JHybridViewModelInstanceSpec::registerNatives(); - margelo::nitro::rive::JHybridViewModelPropertySpec::registerNatives(); - margelo::nitro::rive::JHybridViewModelNumberPropertySpec::registerNatives(); - margelo::nitro::rive::JFunc_void_cxx::registerNatives(); - margelo::nitro::rive::JFunc_void_double_cxx::registerNatives(); - margelo::nitro::rive::JHybridViewModelStringPropertySpec::registerNatives(); - margelo::nitro::rive::JFunc_void_std__string_cxx::registerNatives(); - margelo::nitro::rive::JHybridViewModelBooleanPropertySpec::registerNatives(); - margelo::nitro::rive::JFunc_void_bool_cxx::registerNatives(); - margelo::nitro::rive::JHybridViewModelColorPropertySpec::registerNatives(); - margelo::nitro::rive::JHybridViewModelEnumPropertySpec::registerNatives(); - margelo::nitro::rive::JHybridViewModelTriggerPropertySpec::registerNatives(); - margelo::nitro::rive::JHybridViewModelImagePropertySpec::registerNatives(); - margelo::nitro::rive::JHybridViewModelListPropertySpec::registerNatives(); - margelo::nitro::rive::JHybridViewModelArtboardPropertySpec::registerNatives(); + // Register native JNI methods + margelo::nitro::rive::JHybridBindableArtboardSpec::CxxPart::registerNatives(); + margelo::nitro::rive::JHybridRiveSpec::CxxPart::registerNatives(); + margelo::nitro::rive::JHybridRiveFileSpec::CxxPart::registerNatives(); + margelo::nitro::rive::JHybridRiveFileFactorySpec::CxxPart::registerNatives(); + margelo::nitro::rive::JHybridRiveImageSpec::CxxPart::registerNatives(); + margelo::nitro::rive::JHybridRiveImageFactorySpec::CxxPart::registerNatives(); + margelo::nitro::rive::JHybridRiveRuntimeSpec::CxxPart::registerNatives(); + margelo::nitro::rive::JHybridRiveViewSpec::CxxPart::registerNatives(); + margelo::nitro::rive::JHybridViewModelSpec::CxxPart::registerNatives(); + margelo::nitro::rive::JHybridViewModelInstanceSpec::CxxPart::registerNatives(); + margelo::nitro::rive::JHybridViewModelPropertySpec::CxxPart::registerNatives(); + margelo::nitro::rive::JHybridViewModelNumberPropertySpec::CxxPart::registerNatives(); + margelo::nitro::rive::JHybridViewModelStringPropertySpec::CxxPart::registerNatives(); + margelo::nitro::rive::JHybridViewModelBooleanPropertySpec::CxxPart::registerNatives(); + margelo::nitro::rive::JHybridViewModelColorPropertySpec::CxxPart::registerNatives(); + margelo::nitro::rive::JHybridViewModelEnumPropertySpec::CxxPart::registerNatives(); + margelo::nitro::rive::JHybridViewModelTriggerPropertySpec::CxxPart::registerNatives(); + margelo::nitro::rive::JHybridViewModelImagePropertySpec::CxxPart::registerNatives(); + margelo::nitro::rive::JHybridViewModelListPropertySpec::CxxPart::registerNatives(); + margelo::nitro::rive::JHybridViewModelArtboardPropertySpec::CxxPart::registerNatives(); + margelo::nitro::rive::JFunc_void_RiveError_cxx::registerNatives(); + margelo::nitro::rive::JFunc_void_UnifiedRiveEvent_cxx::registerNatives(); + margelo::nitro::rive::JFunc_void_cxx::registerNatives(); + margelo::nitro::rive::JFunc_void_double_cxx::registerNatives(); + margelo::nitro::rive::JFunc_void_std__string_cxx::registerNatives(); + margelo::nitro::rive::JFunc_void_bool_cxx::registerNatives(); + margelo::nitro::rive::views::JHybridRiveViewStateUpdater::registerNatives(); - // Register Nitro Hybrid Objects - HybridObjectRegistry::registerHybridObjectConstructor( - "Rive", - []() -> std::shared_ptr { - static DefaultConstructableObject object("com/margelo/nitro/rive/Rive"); - auto instance = object.create(); - return instance->cthis()->shared(); - } - ); - HybridObjectRegistry::registerHybridObjectConstructor( - "RiveFileFactory", - []() -> std::shared_ptr { - static DefaultConstructableObject object("com/margelo/nitro/rive/HybridRiveFileFactory"); - auto instance = object.create(); - return instance->cthis()->shared(); - } - ); - HybridObjectRegistry::registerHybridObjectConstructor( - "RiveFile", - []() -> std::shared_ptr { - static DefaultConstructableObject object("com/margelo/nitro/rive/HybridRiveFile"); - auto instance = object.create(); - return instance->cthis()->shared(); - } - ); - HybridObjectRegistry::registerHybridObjectConstructor( - "RiveView", - []() -> std::shared_ptr { - static DefaultConstructableObject object("com/margelo/nitro/rive/HybridRiveView"); - auto instance = object.create(); - return instance->cthis()->shared(); - } - ); - HybridObjectRegistry::registerHybridObjectConstructor( - "RiveImageFactory", - []() -> std::shared_ptr { - static DefaultConstructableObject object("com/margelo/nitro/rive/HybridRiveImageFactory"); - auto instance = object.create(); - return instance->cthis()->shared(); - } - ); - HybridObjectRegistry::registerHybridObjectConstructor( - "RiveRuntime", - []() -> std::shared_ptr { - static DefaultConstructableObject object("com/margelo/nitro/rive/HybridRiveRuntime"); - auto instance = object.create(); - return instance->cthis()->shared(); - } - ); - }); + // Register Nitro Hybrid Objects + HybridObjectRegistry::registerHybridObjectConstructor( + "Rive", + []() -> std::shared_ptr { + return JHybridRiveSpecImpl::create(); + } + ); + HybridObjectRegistry::registerHybridObjectConstructor( + "RiveFileFactory", + []() -> std::shared_ptr { + return JHybridRiveFileFactorySpecImpl::create(); + } + ); + HybridObjectRegistry::registerHybridObjectConstructor( + "RiveFile", + []() -> std::shared_ptr { + return JHybridRiveFileSpecImpl::create(); + } + ); + HybridObjectRegistry::registerHybridObjectConstructor( + "RiveView", + []() -> std::shared_ptr { + return JHybridRiveViewSpecImpl::create(); + } + ); + HybridObjectRegistry::registerHybridObjectConstructor( + "RiveImageFactory", + []() -> std::shared_ptr { + return JHybridRiveImageFactorySpecImpl::create(); + } + ); + HybridObjectRegistry::registerHybridObjectConstructor( + "RiveRuntime", + []() -> std::shared_ptr { + return JHybridRiveRuntimeSpecImpl::create(); + } + ); } } // namespace margelo::nitro::rive diff --git a/nitrogen/generated/android/riveOnLoad.hpp b/nitrogen/generated/android/riveOnLoad.hpp index f93091d2..332aaf3c 100644 --- a/nitrogen/generated/android/riveOnLoad.hpp +++ b/nitrogen/generated/android/riveOnLoad.hpp @@ -6,20 +6,29 @@ /// #include +#include #include namespace margelo::nitro::rive { + [[deprecated("Use registerNatives() instead.")]] + int initialize(JavaVM* vm); + /** - * Initializes the native (C++) part of rive, and autolinks all Hybrid Objects. - * Call this in your `JNI_OnLoad` function (probably inside `cpp-adapter.cpp`). + * Register the native (C++) part of rive, and autolinks all Hybrid Objects. + * Call this in your `JNI_OnLoad` function (probably inside `cpp-adapter.cpp`), + * inside a `facebook::jni::initialize(vm, ...)` call. * Example: * ```cpp (cpp-adapter.cpp) * JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void*) { - * return margelo::nitro::rive::initialize(vm); + * return facebook::jni::initialize(vm, []() { + * // register all rive HybridObjects + * margelo::nitro::rive::registerAllNatives(); + * // any other custom registrations go here. + * }); * } * ``` */ - int initialize(JavaVM* vm); + void registerAllNatives(); } // namespace margelo::nitro::rive