Open
Conversation
8e5892c to
99e6070
Compare
60da5ec to
a08fdba
Compare
41567e6 to
d44206f
Compare
6e74ab9 to
7abec01
Compare
7abec01 to
81c5caa
Compare
81c5caa to
fce47fb
Compare
2dc66bc to
6cb1a15
Compare
6cb1a15 to
f9618ea
Compare
f9618ea to
fa0f598
Compare
fa0f598 to
a74c94c
Compare
55fb0ce to
663c144
Compare
a8e668f to
9f2bd2c
Compare
9f2bd2c to
1c525b2
Compare
64b277c to
9b12c95
Compare
9b12c95 to
a0ea96e
Compare
a0ea96e to
db9b345
Compare
8f5cb52 to
2d1fe60
Compare
2d1fe60 to
ec471d6
Compare
ec471d6 to
e99a32a
Compare
500fb72 to
679e603
Compare
679e603 to
f1ebf33
Compare
f1ebf33 to
1bc613e
Compare
1bc613e to
44d897e
Compare
44d897e to
3a67e87
Compare
3a67e87 to
1a18f04
Compare
1a18f04 to
869e8a4
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
0.20→0.22Release Notes
jni-rs/jni-rs (jni)
v0.22.0Compare Source
Added
JavaVM / Thread Attachment APIs
JavaVM::singleton()lets you acquire theJavaVMfor the process when you know that theJavaVMsingleton has been initialized (#595)JavaVM::is_thread_attachedcan query whether the current thread is attached to the Java VM (#570)AttachGuard::from_unownedadded as a low-level (unsafe) way to represent a thread attachment with a rawjni_sys::Envpointer (#570)AttachConfigexposes fine-grained control over thread attachment includingThreadname,ThreadGroupand whether scoped or permanent. (#606)JavaVM::attach_current_thread_guardis a low-level (unsafe) building block for attaching threads that exposes theAttachGuardandAttachConfigcontrol. (#606)JavaVM::attach_current_thread_with_configis a safe building block for attaching threads that hides theAttachGuardbut exposesAttachConfigcontrol. (#606)JavaVM::with_local_frameadded as method to borrow aEnvthat is already attached to the current thread, after pushing a new JNI stack frame (#570, #673)JavaVM::with_top_local_frame_frameadded to borrow aEnvfor the top JNI stack frame (i.e. without pushing a new JNI stack frame) (#570, #673)Reference Type APIs
Referencetrait for all reference types likeJObject,JClass,JString, enablingGlobalandWeakto be generic overReferenceand enabling safe casting and global caching ofJClassreferences. (#596)Reference::lookup_classexposes a cachedGlobal<JClass>for allReferenceimplementations (#612)LoaderContext+LoaderContext::load_classfor loading classes, depending on available context (#612)Env::new_cast_global_refacts likenew_global_refwith a type cast (#612)Env::cast_globaltakes an ownedGlobal<From>and returns an ownedGlobal<To>(#612)Env::new_cast_local_refacts likenew_local_refwith a type cast (#612)Env::cast_localtakes an owned local reference and returns a new type-cast wrapper (owned) (#612)Env::as_castorCast::newborrows anyFrom: Reference(global or local) reference and returns aCast<To>that will Deref into&To(#612)Env::as_cast_uncheckedreturns aCast<To>likeas_cast()but without a runtimeIsInstanceOfcheck (#669)Env::as_cast_raworCast::from_rawborrows a rawjobjectreference and returns aCast<To>that will Deref into&ToCast::new_uncheckedandCast::from_raw_uncheckedlet you borrow a reference with an (unsafe) type cast, with no runtime check::cast_local()methods as a convenience for all reference types, such aslet s = JString::cast_local(obj)constnull()methods for all reference types.Global::null()andWeak::null()construct null references (equivalent toDefault::default()). (#596)JNI Environment APIs
Env::call_nonvirtual_methodandEnv::call_nonvirtual_method_uncheckedto call non-virtual method. (#454)Env::to_reflected_methodandEnv::to_reflected_static_methodfor retrieving the Java reflection API instance for a method or constructor. (#579)Env::throw_new_voidprovides an easy way to throw an exception that's constructed with no message argumentEnv::new_object_type_array<E>lets you you instantiate aJObjectArraywith a given element type likenew_object_type_array::<JString>Env::load_classsupports class lookups via the currentThreadcontext class loader, withFindClassfallback. (#674)MethodSignatureandFieldSignaturetypes have been added for compile-time parsed JNI method and field signaturesNative Method APIs
EnvUnownedis an FFI-safe type that can be used to capture ajni_sys::Envpointer given to native methods and give it a named lifetime (this can then be temporarily upgraded to a&mut Envreference viaEnvUnowned::with_env) (#570)Outcomeis like aResultwith the addition of a thirdPanic()variant, used for careful handling of errors in native methods. (#664)EnvOutcomerepresents anEnvUnowned::with_envoutcome whose errors can be handle, with access to JNI, via anErrorPolicy. (#664)ErrorPolicyis a trait withon_errorandon_panicmethods that can log native method errors or throw them as exceptions. (#664)ThrowRuntimeExAndDefaultis anErrorPolicythat throws any error as aRuntimeException(and returns a default value). (#664)LogErrorAndDefaultis anErrorPolicythat logs errors and returns a default value. (#664)LogContextErrorAndDefaultis anErrorPolicythat logs errors, with a given context string, and returns a default value. (#664)String APIs
New functions for converting Rust
charto and from Javacharandint(#427 / #434)JavaStr/MUTF8Chars,JNIStr, andJNIStringhave several new methods and traits, most notably ato_strmethod that converts to a regular Rust string. (#510 / #512)JNIStrnow implementsDebug,PartialEq,Eq,PartialOrd,OrdandHash(#615)JNIStringnow implementsDebug,PartialEq,Eq,PartialOrd,Ord,HashandClone(#615)PartialEq<&JNIStr> for JNIStringallowsJNIStrandJNIStringto be compared. (#615)From<&JNIStr>andFrom<MUTF8Chars>implementations forJNIString. (#615)JNIStr::from_cstrsafely does a zero-copy cast of aCStrto aJNIStrafter aconstmodified-utf8 encoding validation (#615,#617, #715)JNIStr::to_bytesgives access to a&[u8]slice over the bytes of a JNI string (likeCStr::to_bytes) (#615)java.lang APIs
JClassLoaderas aReferencewrapper forjava.lang.ClassLoaderreferences (#612)JCollection,JSetandJIteratorreference wrappers forjava.util.Collection,java.util.Setandjava.util.Iteratorinterfaces. (#621)JList::remove_itemfor removing a given value, by-reference, from the list (instead of by index). (#713)JList::clearallows a list to be cleared. (#713)JList::is_emptychecks if a list is empty. (#713)JList::as_collectioncasts a list into aJCollection(#713)JObjectArray::newlets you construct aJObjectArray<E>with strong element type parameterization, instead ofEnv::new_object_array(#657 + #688)JObjectArray::get/set_elementlet you get and set array elements as methods on the array. (#654)JPrimitiveArray::newlets you construct aJPrimitiveArray<E>, consistent withJObjectArray::new(#688)JStackTraceElementgives access to stack frame info within a stack trace, like filename, line number etc (#657)JStringnow has::new(),::from_strand::from_jni_strconstructor methods (#960)JThreadas aReferencewrapper forjava.lang.Threadreferences (#612)JThrowable::get_messageis a binding forgetMessage()and gives easy access to an exception messageJThrowable::get_stack_traceis a binding forgetStackTrace(), returning aJObjectArray<JStackTraceElement>Macros
#[jni_mangle()]attribute proc macro can export anextern "system"native method with a mangled name like "Java_com_example_myMethod" so it can be automatically resolved within a shared library by the JVM (#693)jni_str!andjni_cstr!macros can encode a MUTF-8&'static JNIStror&' static CStrat compile time with full unicode support. (#696)jni_sig!,jni_sig_str!,jni_sig_cstr!andjni_sig_jstr!macros can parse and compile signatures like(arg0: jint, arg1: JString) -> JStringintoMethodSignatureandFieldSignaturedescriptors or JNI string literals like "(ILjava/lang/String;)Ljava/lang/String;" (#697)native_method!macro binds a single native method to a Rust function with type safety and optionally exports it too. (#698)bind_java_type!macro can generate full Rust bindings for Java types (classes and interfaces) with fields, constructors, methods and native methods (#712)Changed
JavaVM / Thread Attachment APIs
>= 1.4. It needs>= 1.2so it can check for exceptions and needs>= 1.4to avoid runtime checks for direct byte buffers (#478)AttachGuardAttachGuardusage is now consideredunsafesince the type must be pinned to the stack (but that can't be guaranteed by the Rust type system alone).AttachGuardis pinned to the stack), attachment APIs take aFnOncewhose&mut Envarg borrows from a hiddenAttachGuardJavaVM::attach_current_threadrequests a permanent thread attachment (reducing cost of futureattach_current_thread()calls)JavaVM::attach_current_thread_for_scoperequests a thread attachment that's detached after the given closure returns.JavaVM::get_java_vm_pointerhas been renamedJavaVM::get_rawfor consistency.JavaVM::newandJavaVM::with_libjvmnow prevent libjvm from being unloaded. This isn't necessary for HotSpot, but other JVMs could crash if we don't do this. (#554)Reference and Primitive Types
Make
from_raw(),into_raw()andnull()methodsconst fn. (#453)Make
from_raw()require anEnvreference so the returned wrapper is guaranteed to have a local reference frame lifetime (#670)GlobalRefandWeakRefhave been renamed toGlobalandWeakand are now generic, parameterized, transparent wrappers over'staticreference types likeGlobal<JClass<'static>>(no longer anArcholding a reference and VM pointer) (#596)GlobalandWeakno longer implementClone, since JNI is required to create new reference (you'll need to explicitly useenv.new_global_ref)GlobalandWeakboth implementDefault, which will represent::null()references (equivalent toJObject::null())Global::into_rawreplacesGlobal::try_into_rawand is infallible (#596)AutoLocalhas been renamed toAutowith a deprecated type alias forAutoLocalto sign post the rename.AutoElementswas simplified to only be parameterized by one lifetime for the array reference, and accepts anyAsRef<JPrimitiveArray<T>>as a reference. (#508)JObjectArraysupports generic element types likeJObjectArray<JString>JavaTypewas simplified to not capture object names or array details (likeReturnType) since these details don't affectJValuetype checks and had a hidden cost that was redundant.JValueGenhas been removed.JValueandJValueOwnedare now separate, unrelated, non-generic types.(#429) (Note: previously
JValueandJValueOwnedwere type aliases forJValueGen, which was an internal type, but this design led to confusing error messages that made them harder to use)JNI Environment APIs
JNIEnvis no longer a#[transparent]FFI-safe pointer wrapper and has been split intoEnvUnowned(for FFI/native method args) andEnv(non-FFI) (#634)A
JNIEnvtype alias shows a verbose deprecation warning that explains how to migrate fromJNIEnvtoEnvUnownedandEnv(#634)Env::get_versionhas been renamed toEnv::version(#478)Envis no longer ever exposed in the API by-value can only be accessed by borrowing from a thread attachmentAttachGuard.Envimplements runtime borrow checking to ensure new local references may only be associated with the top JNI stack frameJavaVM::get_envis replaced byJavaVM::get_env_attachmentwhich returns anAttachGuardif the current thread is attached. (#570)The following functions are now infallible (#478):
Env::versionEnv::get_java_vmEnv::exception_checkEnv::exception_clearEnv::exception_describeEnv::exception_occurred(#517)Env::is_same_objectEnv::delete_local_refWeakRef::is_same_objectWeakRef::is_weak_ref_to_same_objectWeakRef::is_garbage_collectedEnv::fatal_erroris now guaranteed not to panic or allocate, but requires the error message to be encoded ahead of time. (#480)Env::get_native_interfacehas been removed since it's redundant andEnv::get_rawis more consistent with other APIs.Env::register_native_methodsis now markedunsafesince it requires all the given function pointers to be valid and match corresponding Java method signatures (568)get_object_classborrows theEnvmutably because it creates a new local reference. (#456)get/set_*_field_uncheckedhave been marked as unsafe since they can lead to undefined behaviour if the given types don't match the field type (#457 + #629)set_static_fieldtakes a field name and signature as strings so the ID is looked up internally to ensure it's valid. (#629)Env::get/set/take_rust_fieldno longer require a mutableEnvreference since they don't return any new local references to the caller (#455)Env::get_rust_fieldreturns aMutexGuard<'local>instead of taking the&'env selflifetime (so you don't lose any&mut Envreference you have) (#675)Env::is_assignable_fromandis_instance_ofno longer requires a mutableEnvreference, since they don't return any new local references to the callerEnv::new_weak_refreturns aResult<Weak>andError::ObjectFreedif the reference is null or has already been freed (instead ofResult<Option<Weak>>) (#596)Env::new_global_refand::new_local_refmay returnError::ObjectFreedin case a weak reference was given and the object has been freed. (#596)Env::with_local_framecan be used with a shared&Envreference since it doesn't return a new local reference. (#673)Env::with_local_frame_returning_localcan now return any kind of localReference, not justJObjectEnv::new_object_uncheckednow takes aDesc<JMethodID>for consistency/flexibility instead of directly taking aJMethodIDString APIs
JavaStrhas been renamedMUTF8Chars(with a deprecatedJavaStralias) and is intended to be got viaJString::mutf8_chars()JavaStr/MUTF8Chars::from_envhas been removed because it was unsound (it could cause undefined behavior and was not markedunsafe). UseJString::mutf8_charsinstead. (#510 / #512)JavaStr/MUTF8Chars::get_rawhas been renamed toas_ptr. (#510 / #512)JavaStr/MUTF8Chars,JNIStr, andJNIStringno longer coerce toCStr, because usingCStr::to_strwill often have incorrect results. You can still get aCStr, but must use the newas_cstrmethod to do so. (#510 / #512)Into<JNIString>, now takeAsRef<JNIStr>to avoid string copies every call. Considering that these strings are often literals for signatures or class names, most code can usejni_str!()to encode string literals at compile time, likeenv.find_class(jni_str!("java/lang/Foo")). (#617, #696)JavaStr/MUTF8CharsandJStringboth implementDisplayand thereforeToString, making it even easier to get a RustString.Env::get_stringperformance was optimized by caching an expensive class lookup, and using a faster instanceof check. (#531)Env::get_stringperformance was later further optimized to avoid the need for runtime type checking (#612)Env::get_stringhas been deprecated in favor ofJString::mutf8_charsandJString::to_string()orJString::try_to_string(env)Class Loading APIs
Env::find_classnow recommends consideringLoaderContext::load_classinstead.Desc<JClass>::lookup()is now based onLoaderContext::load_class(instead ofEnv::find_class), which checks for a thread context class loader by default.Env::define_classtakes aname: Option<>instead of having a separatedefine_unnamed_classAPI.Env::define_class_bytearraywas renamed toEnv::define_class_jbyteand is identical todefine_classexcept for taking a&[jbyte]slice instead of&[u8], which is a convenience if you have aJByteArrayorAutoElements<JByteArray>.Env::define_class[_jbyte]now takes aloader: AsRef<JClassLoader>instead ofloader: &JObject.java.lang APIs
JListis a simpler, transparent reference wrapper implementingReference, likeJObject,JClass,JStringetcJList::addreturns the boolean returned by the Java APIJList::getandJList::removeno longer returns anOptionsince there's nothing special about getting anullfrom the JavaListAPI.JList::popis deprecated since this doesn't map to standard JavaListmethod.JList::iterreturns aJIteratorinstead of aJListIterEnv::get_listhas been deprecated, in favor ofJList::cast_local, or other genericEnvcast_local/cast_globalAPIs.Env::get_array_elementsis deprecated in favor ofJPrimitiveArray::get_elementsEnv::get_array_elements_criticalis deprecated in favor ofJPrimitiveArray::get_elements_criticalEnv::get_*_array_regionandEnv::set_*_array_regionare deprecated in favor ofJPrimitiveArray::get/set_regionEnv::get_array_lengthis deprecated in favor ofJPrimitiveArray::lenandJObjectArray::lenEnv::get/set_object_array_elementare deprecated in favor ofJObjectArray::get/set_elementEnv::new_*_arraymethods for primitive array types (likeJByteArray) take a&mut Envand ausizelen, and the docs recommend usingJ<Type>Array::new()instead.Miscellaneous
AutoElements[Critical]::discard()now takes ownership of the elements and drops them to release the pointer after setting the mode toNoCopyBack(#645)MonitorGuardwith#[must_use]to warn when the guard is dropped accidentally (#676)NativeMethod(used withEnv::register_native_methods) is a now a transparentjni::sys::JNINativeWrapperwrapper with anunsafe::from_raw_partsconstructor.Env::get_method_id,Env::call_methodetc) now require a pre-parsedMethodSignatureorFieldSignaturetype instead of a raw string. This enables compile-time signature parsing via thejni_sig!macro, and avoids runtime signature parsing costs. (#714)Dependencies
jni-sysdependency bumped to0.4(#478)Fixed
Env::get_stringno longer leaks local references. (#528, #557)Removed
JavaVM::attach_current_thread_as_daemon(and general support for 'daemon' threads) has been removed, since their semantics are inherently poorly defined and unsafe (the distinction relates to the poorly defined limbo state after callingJavaDestroyVM, where it becomes undefined to touch the JVM) (#593)AttachGuard::with_envcan be used instead) (#570)Env::from_raw,Env::from_raw_uncheckedandEnv::unsafe_clonehave been removed, since the API no longer exposes theEnvtype by-value, it must always be borrowed from anAttachGuard. (#570)Error::NullDerefandError::JavaVMMethodNotFoundhave been removed since they were unused.JavaType::Methodwas removed since a method signature isn't a type, and all usage was being matched as unreachable or an error.Env::define_unnamed_classwas removed in favor of having thedefine_class[_jbyte]APIs take aname: Optioninstead.v0.21.1Compare Source
Fixes
chartypes. (#419)JNIEnv::get_stringno longer leaks local references. (#528)v0.21.0Compare Source
This release makes extensive breaking changes in order to improve safety. Most projects that use this library will need to be changed. Please see the migration guide.
Added
JavaStr::into_raw()which drops theJavaStrand releases ownership of the raw string pointer (#374)JavaStr::from_raw()which takes ownership of a raw string pointer to create aJavaStr(#374)JNIEnv::get_string_uncheckedis a cheaper,unsafealternative toget_stringthat doesn't check the given object is ajava.lang.Stringinstance. (#328)WeakRefandJNIEnv#new_weak_ref. (#304)define_class_bytearraymethod that takes anAutoElements<jbyte>rather than a&[u8](#244)JObjectnow has anas_rawmethod that borrows theJObjectinstead of taking ownership likeinto_raw. Needed becauseJObjectno longer has theCopytrait. (#392)JavaVM::destroy()(unsafe) as a way to try and unload aJavaVMon supported platforms (#391)JavaVM::detach_current_thread()(unsafe) as a way to explicitly detach a thread (normally this is automatic on thread exit). Needed to detach daemon threads manually if usingJavaVM::destroy()(#391)JPrimitiveArray<T: TypeArray>and type-specific aliases likeJByteArray,JIntArrayetc now provide safe, reference wrappers for thesystypesjarrayandjbyteArrayetc with a lifetime likeJObject(#400)JObjectArrayprovides a reference wrapper for ajobjectArraywith a lifetime likeJObject. (#400)AutoElementsandAutoElementsCritical(previouslyAutoArray/AutoPrimitiveArray) implementDeref<Target=[T]>andDerefMutso array elements can be accessed via slices without needing additionalunsafecode. (#400)AsJArrayRawtrait which enablesJNIEnv::get_array_length()to work withJPrimitiveArrayorJObjectArraytypes (#400)InitArgsBuildernow hastry_optionandoption_encodedmethods. (#414)Changed
JNIEnv::get_stringchecks that the given object is ajava.lang.Stringinstance to avoid undefined behaviour from the JNI implementation potentially aborting the program. (#328)JNIEnv::call_*method_uncheckedwas markedunsafe, as passing improper argument types, or a bad number of arguments, can cause a JVM crash. (#385)JNIEnv::new_object_uncheckedfunction now takes arguments as&[jni::sys::jvalue]to avoid allocating, putting it inline with changes toJniEnv::call_*_uncheckedfrom 0.20.0 (#382)get_superclassfunction now returns an Option instead of a null pointer if the class has no superclass (#151)invocationfeature now locates the JVM implementation dynamically at runtime (via thejava-locatorcrate by default) instead of linking with the JVM at build time (#293)JNIEnvmethods now require&mut self. This improves safety by preventingJObjects from getting an invalid lifetime. Most native method implementations (that is,#[no_mangle] extern "system" fns) must now make theJNIEnvparametermut. See the example on the crate documentation. (#392)JByteBuffer,JClass,JNIEnv,JObject,JString, andJThrowableno longer have theCloneorCopytraits. This improves safety by preventing object references from being used after the JVM deletes them. Most functions that take one of these types as a parameter (exceptextern fns that are directly called by the JVM) should now borrow it instead, e.g.&JObjectinstead ofJObject. (#392)AutoLocalis now generic in the type of object reference (JString, etc). (#392)JNIEnv::with_local_framemust now take a&mut JNIEnvparameter, which has a different lifetime. This improves safety by preventing local references from escaping the closure, which would cause a use-after-free bug.Executor::with_attachedandExecutor::with_attached_capacityhave been similarly changed. (#392)JNIEnv::with_local_framecan now return a genericResult<T, E>so long as the error implementsFrom<jni::errors::Error>(#399)JNIEnv::with_local_framenow returns the same type that the given closure returns (#399)JNIEnv::with_local_frameno longer supports returning a local reference directly to the calling scope (seewith_local_frame_returning_local) (#399)Executor::with_attachedandExecutor::with_attached_capacityhave been changed in the same way asJNIEnv::with_local_frame(they are thin wrappers) (#399)Desc,JNIEnv::pop_local_frame, andTypeArrayare nowunsafe. (#392)Desctrait now has an associated typeOutput. Many implementations now returnAutoLocal, so if you callDesc::lookupyourself and then callas_rawon the returned object, make sure theAutoLocalisn't dropped too soon (see theDesc::lookupdocumentation for examples). (#392)Desc<JClass>trait is no longer implemented forJObjector&JObject. The previous implementation that called.get_object_class()was surprising and a simpler cast would make it easy to mistakenly pass instances where a class is required. (#118)'localinstead of'a). The new naming convention is explained in theJNIEnvdocumentation. (#392)JObject,JClass,AutoLocal,GlobalRef, etc) now implementAsRef<JObject>andDeref<Target = JObject>. Typed wrappers likeJClassalso implementInto<JObject>, butGlobalRefdoes not. (#392)JListandJMapmethods now require a&mut JNIEnvparameter.JListIterandJMapIterno longer implementIterator, and instead have anextmethod that requires a&mut JNIEnvparameter (usewhile letloops instead offor). (#392)JValuehas been changed in several ways: (#392)JValueGen.JValueis now a type alias forJValueGen<&JObject>, that is, it borrows an object reference.JValueOwnedis a type alias forJValueGen<JObject>, that is, it owns an object reference.JValueOwneddoes not have theCopytrait.to_jnimethod is now namedas_jni, and it borrows theJValueGeninstead of taking ownership.JObjectcan no longer be converted directly toJValue, which was commonly done when calling Java methods or constructors. Instead ofobj.into(), use(&obj).into().JNIEnvarray APIs now work in terms ofJPrimitiveArrayandJObjectArray(reference wrappers with a lifetime) instead ofsystypes likejarrayandjbyteArray(#400)AutoArrayandAutoPrimitiveArrayhave been renamedAutoElementsandAutoElementsCriticalto show their connection and differentiate from newJPrimitiveArrayAPI (#400)get_primitive_array_criticalis nowunsafeand has been renamed toget_array_elements_critical(consistent with the rename ofAutoPrimitiveArray) with more detailed safety documentation (#400)get_array_elementsis now alsounsafe(for many of the same reasons asget_array_elements_critical) and has detailed safety documentation (#400)AutoArray/AutoArrayCritical::size()has been replaced with.len()which can't fail and returns ausize(#400)TypeArraytrait is now a private / sealed trait, that is considered to be an implementation detail for theAutoArrayAPI.JvmErrorhas several more variants and is nownon_exhaustive. (#414)InitArgsBuilder::optionraises an error on Windows if the string is too long. The limit is currently1048576bytes. (#414)Fixed
AutoLocal,JNIEnv::delete_local_ref, andJNIEnv::with_local_frame. (Most of the limitations added in #392, listed above, were needed to make this work.) (#381, #392)Desctrait now returnAutoLocals, which prevents them from leaking. (#109, #392)InitArgsBuilder::optionproperly encodes non-ASCII characters on Windows. (#414)Removed
get_string_utf_charsandrelease_string_utf_charsfromJNIEnv(SeeJavaStr::into_raw()andJavaStr::from_raw()instead) (#372)JNIEnv::get_<type>_array_elements()methods have been removed as redundant since they would all be equivalent toget_array_elements()with the introduction ofJPrimitiveArray(#400)Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.