Skip to content

Commit 5f548c8

Browse files
committed
test fix
1 parent 28a19fd commit 5f548c8

1 file changed

Lines changed: 54 additions & 2 deletions

File tree

zenoh-jni/build.rs

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use itertools::Itertools;
22
use proc_macro2::TokenStream;
33
use quote::quote;
4+
use std::fs;
45

56
use zenoh_flat::core::{
67
primitive_builtins, FunctionsConverter, InputFn, NameMangler, OutputFn, TypeRegistry,
@@ -85,7 +86,11 @@ macro_rules! decode_option_arc_from_raw {
8586
InputFn::new(|input: &syn::Ident| -> TokenStream {
8687
quote! {
8788
if #input != 0 {
88-
Some(unsafe { std::sync::Arc::from_raw(#input as *const $inner) })
89+
Some(unsafe {
90+
let raw = #input as *const $inner;
91+
std::sync::Arc::increment_strong_count(raw);
92+
std::sync::Arc::from_raw(raw)
93+
})
8994
} else {
9095
None
9196
}
@@ -190,7 +195,7 @@ fn shared_bindings() -> TypeRegistry {
190195
Some(output) => quote! {
191196
#output
192197
.as_ref()
193-
.map(|ptr| std::sync::Arc::as_ptr(ptr) as i64)
198+
.map(|ptr| std::sync::Arc::into_raw(ptr.clone()) as i64)
194199
.unwrap_or(0)
195200
},
196201
None => quote! { 0 },
@@ -304,6 +309,16 @@ fn shared_kotlin_types() -> KotlinTypeMap {
304309
.add("ZResult<bool>", "Boolean")
305310
}
306311

312+
fn patch_generated_kotlin_data_classes(path: &str, replacements: &[(&str, &str)]) {
313+
let mut content = fs::read_to_string(path)
314+
.unwrap_or_else(|err| panic!("failed to read generated Kotlin file {path}: {err}"));
315+
for (from, to) in replacements {
316+
content = content.replace(from, to);
317+
}
318+
fs::write(path, content)
319+
.unwrap_or_else(|err| panic!("failed to patch generated Kotlin file {path}: {err}"));
320+
}
321+
307322
fn main() {
308323
let source = prebindgen::Source::new(zenoh_flat::PREBINDGEN_OUT_DIR);
309324

@@ -467,6 +482,36 @@ fn main() {
467482
session_kotlin
468483
.write()
469484
.expect("failed to write generated JNISessionNative.kt");
485+
patch_generated_kotlin_data_classes(
486+
"../zenoh-jni/generated-kotlin/io/zenoh/jni/JNISessionNative.kt",
487+
&[
488+
("val isHeartbeat: Boolean,", "var isHeartbeat: Boolean = false,"),
489+
("val periodMs: Long,", "var periodMs: Long = 0L,"),
490+
("val maxSamples: Long,", "var maxSamples: Long = 0L,"),
491+
("val repliesPriority: Int,", "var repliesPriority: Int = 0,"),
492+
(
493+
"val repliesCongestionControl: Int,",
494+
"var repliesCongestionControl: Int = 0,",
495+
),
496+
(
497+
"val repliesIsExpress: Boolean,",
498+
"var repliesIsExpress: Boolean = false,",
499+
),
500+
(
501+
"val enableHeartbeat: Boolean,",
502+
"var enableHeartbeat: Boolean = false,",
503+
),
504+
("val isSporadic: Boolean,", "var isSporadic: Boolean = false,"),
505+
(
506+
"val detectLatePublishers: Boolean,",
507+
"var detectLatePublishers: Boolean = false,",
508+
),
509+
(
510+
"val maxAgeSeconds: Double,",
511+
"var maxAgeSeconds: Double = 0.0,",
512+
),
513+
],
514+
);
470515

471516
let mut keyexpr_kotlin = KotlinInterfaceGenerator::builder()
472517
.output_path("../zenoh-jni/generated-kotlin/io/zenoh/jni/JNIKeyExprNative.kt")
@@ -488,4 +533,11 @@ fn main() {
488533
keyexpr_kotlin
489534
.write()
490535
.expect("failed to write generated JNIKeyExprNative.kt");
536+
patch_generated_kotlin_data_classes(
537+
"../zenoh-jni/generated-kotlin/io/zenoh/jni/JNIKeyExprNative.kt",
538+
&[
539+
("val ptr: Long,", "var ptr: Long = 0L,"),
540+
("val string: String,", "var string: String = \"\","),
541+
],
542+
);
491543
}

0 commit comments

Comments
 (0)