All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
Default
trait implemented forJObject
,JString
,JClass
, andJByteBuffer
(#199)
- The
release_string_utf_chars
function has been marked as unsafe. (#334)
0.19.0 — 2021-01-24
AutoArray
and genericget_array_elements()
, along withget_<type>_array_elements
helpers. (#287)size()
method toAutoArray
andAutoPrimitiveArray
. (#278 / #287)discard()
method toAutoArray
andAutoPrimitiveArray
. (#275 / #287)
- Removed AutoPrimitiveArray::commit(). (#290)
AutoByte/PrimitiveArray.commit()
now returnsResult
. (#275)- Removed methods get/release/commit_byte/primitive_array_{elements|critical}. (#281)
- Renamed methods get_auto_byte/long/primitive_array_{elements|critical} to get_byte/long/primitive_array_{elements|critical}. (#281)
0.18.0 — 2020-09-23
JNIEnv#define_unnamed_class
function that allows loading a class without specifying its name. The name is inferred from the class data. (#246)SetStatic<type>Field
. (#248)TryFrom<JValue>
for types inside JValue variants (#264).- Implemented Copy for JNIEnv (#255).
repr(transparent)
attribute to JavaVM struct (#259)
- Switch from
error-chain
tothiserror
, making all errorsSend
. Also, support all JNI errors in thejni_error_code_to_result
function and add more information to theInvalidArgList
error. (#242)
0.17.0 — 2020-06-30
- Get/ReleaseByteArrayElements, and Get/ReleasePrimitiveArrayCritical. (#237)
0.16.0 — 2020-02-28
- Java VM instantiation with some MacOS configurations. (#220, #229, #230).
0.15.0 — 2020-02-28
- Ability to pass object wrappers that are convertible to
JObject
as arguments to the majority of JNIEnv methods without explicit conversion. (#213) JNIEnv#is_same_object
implementation. (#213)JNIEnv#register_native_methods
. (#214)- Conversion from
Into<JObject>
toJValue::Object
.
- Passing
null
as class loader todefine_class
method now allowed according to the JNI specification. (#225)
0.14.0 — 2019-10-31
- Relaxed some lifetime restrictions in JNIEnv to support the case when method, field ids; and global references to classes have a different (larger) lifetime than JNIEnv. (#209)
0.13.1 — 2019-08-22
- Various documentation improvements.
0.13.0 — 2019-07-05
0.13 brings major improvements in thread management, allowing to attach the native threads
permanently and safely; Executor
for extra convenience and safety; and other
improvements and fixes.
JavaVM::attach_current_thread_permanently
method, which attaches the current thread and detaches it when the thread finishes. Daemon threads attached withJavaVM::attach_current_thread_as_daemon
also automatically detach themselves when finished. The number of currently attached threads may be acquired usingJavaVM::threads_attached
method. (#179, #180)Executor
— a simple thread attachment manager which helps to safely execute a closure in attached thread context and to automatically free created local references at closure exit. (#186)
- The default JNI API version in
InitArgsBuilder
from V1 to V8. (#178) - Extended the lifetimes of
AutoLocal
to make it more flexible. (#190) - Default exception type from checked
java.lang.Exception
to uncheckedjava.lang.RuntimeException
. It is used implicitly whenJNIEnv#throw
is invoked with exception message:env.throw("Exception message")
; however, for efficiency reasons, it is recommended to specify the exception type explicitly and usethrow_new
:env.throw_new(exception_type, "Exception message")
. (#194)
- Native threads attached with
JavaVM::attach_current_thread_as_daemon
now automatically detach themselves on exit, preventing Java Thread leaks. (#179) - Local reference leaks in
JList
,JMap
andJMapIter
. (#190, #191)
From<jboolean>
implementation forJValue
(#173)Debug
trait for InitArgsBuilder. (#175)InitArgsBuilder#options
returning the collected JVM options. (#177)
- Updated documentation of GetXArrayRegion methods (#169)
- Improved ABI compatibility on various platforms (#170)
This release does not bring code changes.
- Updated project documentation.
JString
,JMap
andJavaStr
and their respective iterators now require an extra lifetime so that they can now work with&'b JNIEnv<'a>
, where'a: 'b
.
This release brings various improvements and fixes, outlined below. The most notable changes are:
null
is no longer represented as anErr
with error kindNullPtr
if it is a value of some nullable Java reference (not an indication of an error). Related issues: #136, #148, #163.unsafe
methods, providing a low-level API similar to JNI, has been marked safe and renamed to have_unchecked
suffix. Such methods can be used to implement caching of class references and method IDs to improve performance in loops and frequently called Java callbacks. If you have such, check out the docs and one of early usages of this feature.
- Invocation API support on Windows and AppVeyor CI (#149)
-
push_local_frame
,delete_global_ref
andrelease_string_utf_chars
no longer check for exceptions as they are safe to call if there is a pending exception (#124):push_local_frame
will now work in case of pending exceptions — as the spec requires; and fail in case of allocation errorsdelete_global_ref
andrelease_string_utf_chars
won't print incorrect log messages
-
Rename some macros to better express their intent (see #123):
- Rename
jni_call
tojni_non_null_call
as it checks the return value to be non-null. - Rename
jni_non_null_call
(which may return nulls) tojni_non_void_call
.
- Rename
-
A lot of public methods of
JNIEnv
have been marked as safe, all unsafe code has been isolated inside internal macros. Methods with_unsafe
suffixes have been renamed and now have_unchecked
suffixes (#140) -
from_str
method of theJavaType
has been replaced by theFromStr
implementation -
Implemented Sync for GlobalRef (#102).
-
Improvements in macro usage for JNI methods calls (#136):
call_static_method_unchecked
andget_static_field_unchecked
methods are allowed to return NULL object- Added checking for pending exception to the
call_static_method_unchecked
method (eliminated WARNING messages in log)
-
Further improvements in macro usage for JNI method calls (#150):
- The new_global_ref() and new_local_ref() functions are allowed to work with NULL objects according to specification.
- Fixed the family of functions new_direct_byte_buffer(), get_direct_buffer_address() and get_direct_buffer_capacity() by adding checking for null and error codes.
- Increased tests coverage for JNIEnv functions.
-
Implemented Clone for JNIEnv (#147).
-
The get_superclass(), get_field_unchecked() and get_object_array_element() are allowed to return NULL object according to the specification (#163).
- The issue with early detaching of a thread by nested AttachGuard. (#139)
JavaVM#get_java_vm_pointer
to retrieve a JavaVM pointer (#98)- This changelog and other project documents (#106)
- The project is moved to an organization (#104)
- Updated versions of dependencies (#105)
- Improved project documents (#107)
- Crate type of a shared library with native methods
must be
cdylib
(#100)
- No changes has been made to the Changelog until this release.