@@ -1347,6 +1347,11 @@ macro_rules! jgen_bind_method {
13471347/// Emits a cacheable method IDs API struct, lookup APIs and call APIs for a given set of methods
13481348///
13491349/// # Usage
1350+ /// ```
1351+ /// fn example_native_impl<'local>(env: &mut Env<'local>, this: JTest<'local>, arg0: jint, arg1: impl AsRef<JString>) -> Result<jboolean> {
1352+ /// // ...
1353+ /// Ok(true)
1354+ /// }
13501355///
13511356/// jgen_bind_api!{
13521357/// JTestAPI,
@@ -1356,60 +1361,79 @@ macro_rules! jgen_bind_method {
13561361/// },
13571362/// set_message = {
13581363/// name = "setMessage",
1359- /// sig = (java.lang.String as JString) -> void,
1364+ /// sig = (msg: java.lang.String as JString) -> void,
13601365/// }
13611366/// },
13621367/// static_methods = {
13631368/// example_static = {
13641369/// name = "exampleStatic",
1365- /// sig = (jint, java.lang.String as JString) -> jboolean,
1370+ /// sig = (val: jint, name: java.lang.String as JString) -> jboolean,
13661371/// }
13671372/// },
13681373/// native_methods = {
13691374/// example_native = {
13701375/// name = "exampleNative",
1371- /// sig = (jint, java.lang.String as JString) -> jboolean,
1376+ /// sig = (val: jint, name: java.lang.String as JString) -> jboolean,
13721377/// fn = example_native_impl,
13731378/// }
13741379/// }
13751380/// }
1381+ /// ```
13761382///
13771383/// # Outputs
13781384///
1385+ /// ```
13791386/// pub struct JTestAPI {
13801387/// class: Global<JClass>,
1381- /// get_message : JMethodID,
1382- /// set_message : JMethodID,
1383- /// example_static : JStaticMethodID,
1388+ /// get_message_method_id : JMethodID,
1389+ /// set_message_method_id : JMethodID,
1390+ /// example_static_method_id : JStaticMethodID,
13841391/// }
13851392/// impl JTestAPI {
1386- /// pub fn get(env: &mut Env) -> Result<&'static Self> {
1387- /// let static API: OnceCell<JTestAPI> = OnceCell::new();
1393+ /// pub fn get(env: &Env, loader_context: &LoaderContext ) -> Result<&'static Self> {
1394+ /// static API: once_cell::sync:: OnceCell<JTestAPI> = once_cell::sync:: OnceCell::new();
13881395/// API.get_or_try_init(|| {
1389- /// let class = env.find_class("com/example/Test")?.into_global(env);
1390- /// let native_methods: &[JNativeMethod] = &[
1391- /// JNativeMethod {
1392- /// name: "exampleNative",
1393- /// sig: "(ILjava/lang/String;)Z",
1394- /// fn: example_native_impl,
1395- /// }
1396- /// ];
1397- /// env.register_native_methods(&class, native_methods)?;
1398- /// Ok(JTestAPI {
1399- /// class: env.new_global_ref(class.as_ref())?,
1400- /// get_message: env.get_method_id(&class, "getMessage", "()Ljava/lang/String;")?,
1401- /// set_message: env.get_method_id(&class, "setMessage", "(Ljava/lang/String;)V")?,
1402- /// example_static: env.get_static_method_id(&class, "exampleStatic", "(ILjava/lang/String;)Z")?,
1396+ /// let mut env = env.with_local_frame(8, |env| {
1397+ /// let class = env.find_class("com/example/Test")?.into_global(env);
1398+ /// let native_methods: &[JNativeMethod] = &[
1399+ /// JNativeMethod {
1400+ /// name: "exampleNative",
1401+ /// sig: "(ILjava/lang/String;)Z",
1402+ /// fn: Self::example_native__shim,
1403+ /// }
1404+ /// ];
1405+ /// env.register_native_methods(&class, native_methods)?;
1406+ /// Ok(JTestAPI {
1407+ /// class: env.new_global_ref(class.as_ref())?,
1408+ /// get_message_method_id: env.get_method_id(&class, "getMessage", "()Ljava/lang/String;")?,
1409+ /// set_message_method_id: env.get_method_id(&class, "setMessage", "(Ljava/lang/String;)V")?,
1410+ /// example_static_method_id: env.get_static_method_id(&class, "exampleStatic", "(ILjava/lang/String;)Z")?,
1411+ /// })
14031412/// })
14041413/// })
1405- /// }
1414+ /// }
1415+ /// fn example_native__shim<'local>(env: UnownedEnv, this: JTest<'local>, arg0: jint, arg1: jni::sys::jobject) -> jboolean {
1416+ /// }
14061417/// }
14071418///
14081419/// impl JTest {
14091420/// pub fn get_message(&self, env: &mut Env) -> Result<JString> {
1410- /// let api = JTestAPI::get(env)?;
1411- /// _get_message_call(env, self, api.get_message)
1421+ /// let api = JTestAPI::get(env, &LoaderContext::None)?;
1422+ /// let jni_args = [ ];
1423+ /// __jgen_emit_jni_sys_call!(env, api.get_message_method_id, jni_args)
1424+ /// }
1425+ /// pub fn set_message(&self, env: &Env, msg: impl AsRef<JString>) -> Result<()> {
1426+ /// let api = JTestAPI::get(env, &LoaderContext::None)?;
1427+ /// let jni_args = [msg.as_ref().as_raw()];
1428+ /// __jgen_emit_jni_sys_call!(env, api.set_message_method_id, jni_args)
1429+ /// }
1430+ /// pub fn example_static(env: &mut Env, val: jint, msg: impl AsRef<JString>) -> Result<jboolean> {
1431+ /// let api = JTestAPI::get(env, &LoaderContext::None)?;
1432+ /// let jni_args = [val, msg.as_ref().as_raw()];
1433+ /// __jgen_emit_jni_sys_call!(env, api.example_static_method_id, jni_args)
1434+ /// }
14121435/// }
1436+ /// ```
14131437macro_rules! jgen_bind_methods {
14141438 ( ) => {
14151439 todo!( )
0 commit comments