From a055caf7af1c2fb8bc6b69fc0c8c0946be55dcf4 Mon Sep 17 00:00:00 2001 From: Marc Rousavy Date: Tue, 29 Oct 2024 09:26:56 +0100 Subject: [PATCH 1/2] fix: Fix jboolean parse in Structs --- packages/nitrogen/src/syntax/kotlin/KotlinCxxBridgedType.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/nitrogen/src/syntax/kotlin/KotlinCxxBridgedType.ts b/packages/nitrogen/src/syntax/kotlin/KotlinCxxBridgedType.ts index cb1d146ee..3adbe11a4 100644 --- a/packages/nitrogen/src/syntax/kotlin/KotlinCxxBridgedType.ts +++ b/packages/nitrogen/src/syntax/kotlin/KotlinCxxBridgedType.ts @@ -537,6 +537,10 @@ export class KotlinCxxBridgedType implements BridgedType<'kotlin', 'c++'> { // unbox an object (JDouble) to a primitive (double) return `${parameterName}->value()` } else { + if (this.type.kind === 'boolean') { + // jboolean =/= bool (it's a char in Java) + return `static_cast(${parameterName})` + } return parameterName } default: From 38cae9e8ac99d73ac69c1499311b2175c5da9cd0 Mon Sep 17 00:00:00 2001 From: Marc Rousavy Date: Tue, 29 Oct 2024 09:29:21 +0100 Subject: [PATCH 2/2] feat: Add `isFast` to Car to test bool in structs --- example/src/getTests.ts | 4 ++++ .../margelo/nitro/image/HybridTestObjectKotlin.kt | 2 +- .../cpp/HybridTestObjectCpp.cpp | 2 +- .../ios/HybridTestObjectSwift.swift | 8 ++++---- .../nitrogen/generated/android/c++/JCar.hpp | 8 ++++++-- .../c++/JHybridTestObjectSwiftKotlinSpec.cpp | 4 ++-- .../android/kotlin/com/margelo/nitro/image/Car.kt | 3 ++- .../nitrogen/generated/ios/swift/Car.swift | 15 +++++++++++++-- .../nitrogen/generated/shared/c++/Car.hpp | 8 ++++++-- .../src/specs/TestObject.nitro.ts | 1 + 10 files changed, 40 insertions(+), 15 deletions(-) diff --git a/example/src/getTests.ts b/example/src/getTests.ts index 13c03559b..a7882553f 100644 --- a/example/src/getTests.ts +++ b/example/src/getTests.ts @@ -36,6 +36,7 @@ const TEST_CAR: Car = { power: 640, powertrain: 'gas', driver: undefined, // <-- value needs to be explicitly set, to equal it with native's std::optional<..> + isFast: true, } function createTest( @@ -760,6 +761,7 @@ export function getTests( model: 'Huracan Performante', power: 640, powertrain: 'gas', + isFast: true, }) ) .didNotThrow() @@ -773,6 +775,7 @@ export function getTests( model: 'Huracan Performante', power: 640, powertrain: 'gas', + isFast: true, }) ) .didNotThrow() @@ -787,6 +790,7 @@ export function getTests( power: 640, powertrain: 'gas', driver: { age: 24, name: 'marc' }, + isFast: true, }) ) .didNotThrow() diff --git a/packages/react-native-nitro-image/android/src/main/java/com/margelo/nitro/image/HybridTestObjectKotlin.kt b/packages/react-native-nitro-image/android/src/main/java/com/margelo/nitro/image/HybridTestObjectKotlin.kt index c8e3610a4..5253d7511 100644 --- a/packages/react-native-nitro-image/android/src/main/java/com/margelo/nitro/image/HybridTestObjectKotlin.kt +++ b/packages/react-native-nitro-image/android/src/main/java/com/margelo/nitro/image/HybridTestObjectKotlin.kt @@ -139,7 +139,7 @@ class HybridTestObjectKotlin: HybridTestObjectSwiftKotlinSpec() { } override fun getCar(): Car { - return Car(2018.0, "Lamborghini", "Huracán", 640.0, Powertrain.GAS, null) + return Car(2018.0, "Lamborghini", "Huracán", 640.0, Powertrain.GAS, null, true) } override fun isCarElectric(car: Car): Boolean { diff --git a/packages/react-native-nitro-image/cpp/HybridTestObjectCpp.cpp b/packages/react-native-nitro-image/cpp/HybridTestObjectCpp.cpp index 5f8443280..f948cdda2 100644 --- a/packages/react-native-nitro-image/cpp/HybridTestObjectCpp.cpp +++ b/packages/react-native-nitro-image/cpp/HybridTestObjectCpp.cpp @@ -286,7 +286,7 @@ HybridTestObjectCpp::getValueFromJsCallback(const std::function Car { - return Car(year: 2018, make: "Lamborghini", model: "Huracán", power: 640, powertrain: .gas, driver: nil) + return Car(year: 2018, make: "Lamborghini", model: "Huracán", power: 640, powertrain: .gas, driver: nil, isFast: true) } func isCarElectric(car: Car) throws -> Bool { diff --git a/packages/react-native-nitro-image/nitrogen/generated/android/c++/JCar.hpp b/packages/react-native-nitro-image/nitrogen/generated/android/c++/JCar.hpp index 615d85a89..9e827fefe 100644 --- a/packages/react-native-nitro-image/nitrogen/generated/android/c++/JCar.hpp +++ b/packages/react-native-nitro-image/nitrogen/generated/android/c++/JCar.hpp @@ -47,13 +47,16 @@ namespace margelo::nitro::image { jni::local_ref powertrain = this->getFieldValue(fieldPowertrain); static const auto fieldDriver = clazz->getField("driver"); jni::local_ref driver = this->getFieldValue(fieldDriver); + static const auto fieldIsFast = clazz->getField("isFast"); + jboolean isFast = this->getFieldValue(fieldIsFast); return Car( year, make->toStdString(), model->toStdString(), power, powertrain->toCpp(), - driver != nullptr ? std::make_optional(driver->toCpp()) : std::nullopt + driver != nullptr ? std::make_optional(driver->toCpp()) : std::nullopt, + static_cast(isFast) ); } @@ -69,7 +72,8 @@ namespace margelo::nitro::image { jni::make_jstring(value.model), value.power, JPowertrain::fromCpp(value.powertrain), - value.driver.has_value() ? JPerson::fromCpp(value.driver.value()) : nullptr + value.driver.has_value() ? JPerson::fromCpp(value.driver.value()) : nullptr, + value.isFast ); } }; diff --git a/packages/react-native-nitro-image/nitrogen/generated/android/c++/JHybridTestObjectSwiftKotlinSpec.cpp b/packages/react-native-nitro-image/nitrogen/generated/android/c++/JHybridTestObjectSwiftKotlinSpec.cpp index fbad2f5f2..fb5e65596 100644 --- a/packages/react-native-nitro-image/nitrogen/generated/android/c++/JHybridTestObjectSwiftKotlinSpec.cpp +++ b/packages/react-native-nitro-image/nitrogen/generated/android/c++/JHybridTestObjectSwiftKotlinSpec.cpp @@ -98,7 +98,7 @@ namespace margelo::nitro::image { bool JHybridTestObjectSwiftKotlinSpec::getBoolValue() { static const auto method = _javaPart->getClass()->getMethod("getBoolValue"); auto __result = method(_javaPart); - return __result; + return static_cast(__result); } void JHybridTestObjectSwiftKotlinSpec::setBoolValue(bool boolValue) { static const auto method = _javaPart->getClass()->getMethod("setBoolValue"); @@ -398,7 +398,7 @@ namespace margelo::nitro::image { bool JHybridTestObjectSwiftKotlinSpec::isCarElectric(const Car& car) { static const auto method = _javaPart->getClass()->getMethod /* car */)>("isCarElectric"); auto __result = method(_javaPart, JCar::fromCpp(car)); - return __result; + return static_cast(__result); } std::optional JHybridTestObjectSwiftKotlinSpec::getDriver(const Car& car) { static const auto method = _javaPart->getClass()->getMethod(jni::alias_ref /* car */)>("getDriver"); diff --git a/packages/react-native-nitro-image/nitrogen/generated/android/kotlin/com/margelo/nitro/image/Car.kt b/packages/react-native-nitro-image/nitrogen/generated/android/kotlin/com/margelo/nitro/image/Car.kt index 7bea2c6ee..f560ea2c0 100644 --- a/packages/react-native-nitro-image/nitrogen/generated/android/kotlin/com/margelo/nitro/image/Car.kt +++ b/packages/react-native-nitro-image/nitrogen/generated/android/kotlin/com/margelo/nitro/image/Car.kt @@ -21,5 +21,6 @@ data class Car( val model: String, val power: Double, val powertrain: Powertrain, - val driver: Person? + val driver: Person?, + val isFast: Boolean ) diff --git a/packages/react-native-nitro-image/nitrogen/generated/ios/swift/Car.swift b/packages/react-native-nitro-image/nitrogen/generated/ios/swift/Car.swift index a03005ea4..77921de61 100644 --- a/packages/react-native-nitro-image/nitrogen/generated/ios/swift/Car.swift +++ b/packages/react-native-nitro-image/nitrogen/generated/ios/swift/Car.swift @@ -18,14 +18,14 @@ public extension Car { /** * Create a new instance of `Car`. */ - init(year: Double, make: String, model: String, power: Double, powertrain: Powertrain, driver: Person?) { + init(year: Double, make: String, model: String, power: Double, powertrain: Powertrain, driver: Person?, isFast: Bool) { self.init(year, std.string(make), std.string(model), power, powertrain, { () -> bridge.std__optional_Person_ in if let __unwrappedValue = driver { return bridge.create_std__optional_Person_(__unwrappedValue) } else { return .init() } - }()) + }(), isFast) } var year: Double { @@ -105,4 +105,15 @@ public extension Car { }() } } + + var isFast: Bool { + @inline(__always) + get { + return self.__isFast + } + @inline(__always) + set { + self.__isFast = newValue + } + } } diff --git a/packages/react-native-nitro-image/nitrogen/generated/shared/c++/Car.hpp b/packages/react-native-nitro-image/nitrogen/generated/shared/c++/Car.hpp index 8151c1252..6038138c0 100644 --- a/packages/react-native-nitro-image/nitrogen/generated/shared/c++/Car.hpp +++ b/packages/react-native-nitro-image/nitrogen/generated/shared/c++/Car.hpp @@ -41,9 +41,10 @@ namespace margelo::nitro::image { double power SWIFT_PRIVATE; Powertrain powertrain SWIFT_PRIVATE; std::optional driver SWIFT_PRIVATE; + bool isFast SWIFT_PRIVATE; public: - explicit Car(double year, std::string make, std::string model, double power, Powertrain powertrain, std::optional driver): year(year), make(make), model(model), power(power), powertrain(powertrain), driver(driver) {} + explicit Car(double year, std::string make, std::string model, double power, Powertrain powertrain, std::optional driver, bool isFast): year(year), make(make), model(model), power(power), powertrain(powertrain), driver(driver), isFast(isFast) {} }; } // namespace margelo::nitro::image @@ -63,7 +64,8 @@ namespace margelo::nitro { JSIConverter::fromJSI(runtime, obj.getProperty(runtime, "model")), JSIConverter::fromJSI(runtime, obj.getProperty(runtime, "power")), JSIConverter::fromJSI(runtime, obj.getProperty(runtime, "powertrain")), - JSIConverter>::fromJSI(runtime, obj.getProperty(runtime, "driver")) + JSIConverter>::fromJSI(runtime, obj.getProperty(runtime, "driver")), + JSIConverter::fromJSI(runtime, obj.getProperty(runtime, "isFast")) ); } static inline jsi::Value toJSI(jsi::Runtime& runtime, const Car& arg) { @@ -74,6 +76,7 @@ namespace margelo::nitro { obj.setProperty(runtime, "power", JSIConverter::toJSI(runtime, arg.power)); obj.setProperty(runtime, "powertrain", JSIConverter::toJSI(runtime, arg.powertrain)); obj.setProperty(runtime, "driver", JSIConverter>::toJSI(runtime, arg.driver)); + obj.setProperty(runtime, "isFast", JSIConverter::toJSI(runtime, arg.isFast)); return obj; } static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) { @@ -87,6 +90,7 @@ namespace margelo::nitro { if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, "power"))) return false; if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, "powertrain"))) return false; if (!JSIConverter>::canConvert(runtime, obj.getProperty(runtime, "driver"))) return false; + if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, "isFast"))) return false; return true; } }; diff --git a/packages/react-native-nitro-image/src/specs/TestObject.nitro.ts b/packages/react-native-nitro-image/src/specs/TestObject.nitro.ts index 5aa0a5fdc..ae0b89edf 100644 --- a/packages/react-native-nitro-image/src/specs/TestObject.nitro.ts +++ b/packages/react-native-nitro-image/src/specs/TestObject.nitro.ts @@ -27,6 +27,7 @@ export interface Car { power: number powertrain: Powertrain driver?: Person + isFast: boolean } // A `type T = { ... }` declaration is the same as a `interface T { ... }` - it's a `struct` in C++.