@@ -3,6 +3,26 @@ convert(::Type{Ptr{Nothing}}, obj::JavaObject{T}) where T = Ptr(obj)
3
3
convert (:: Type{JString} , str:: AbstractString ) = JString (str)
4
4
convert (:: Type{JObject} , str:: AbstractString ) = convert (JObject, JString (str))
5
5
6
+ # From JProxy
7
+ convert (:: Type{AbstractString} , str:: JString ) = unsafe_string (str)
8
+ convert (:: Type{JavaObject{Symbol("java.lang.Double")}} , n:: Real ) = jnew (Symbol (" java.lang.Double" ), (jdouble,), Float64 (n))
9
+ convert (:: Type{JavaObject{Symbol("java.lang.Float")}} , n:: Real ) = jnew (Symbol (" java.lang.Float" ), (jfloat,), Float32 (n))
10
+ convert (:: Type{JavaObject{Symbol("java.lang.Long")}} , n:: Real ) = jnew (Symbol (" java.lang.Long" ), (jlong,), Int64 (n))
11
+ convert (:: Type{JavaObject{Symbol("java.lang.Integer")}} , n:: Real ) = jnew (Symbol (" java.lang.Integer" ), (jint,), Int32 (n))
12
+ convert (:: Type{JavaObject{Symbol("java.lang.Short")}} , n:: Real ) = jnew (Symbol (" java.lang.Short" ), (jshort,), Int16 (n))
13
+ convert (:: Type{JavaObject{Symbol("java.lang.Byte")}} , n:: Real ) = jnew (Symbol (" java.lang.Byte" ), (jbyte,), Int8 (n))
14
+ convert (:: Type{JavaObject{Symbol("java.lang.Character")}} , n:: Real ) = jnew (Symbol (" java.lang.Character" ), (jchar,), Char (n))
15
+ convert (:: Type{JavaObject{:int}} , n) = convert (jint, n)
16
+ convert (:: Type{JavaObject{:long}} , n) = convert (jlong, n)
17
+ convert (:: Type{JavaObject{:byte}} , n) = convert (jbyte, n)
18
+ convert (:: Type{JavaObject{:boolean}} , n) = convert (jboolean, n)
19
+ convert (:: Type{JavaObject{:char}} , n) = convert (jchar, n)
20
+ convert (:: Type{JavaObject{:short}} , n) = convert (jshort, n)
21
+ convert (:: Type{JavaObject{:float}} , n) = convert (jfloat, n)
22
+ convert (:: Type{JavaObject{:double}} , n) = convert (jdouble, n)
23
+ convert (:: Type{JavaObject{:void}} , n) = convert (jvoid, n)
24
+ convert (:: Type{JavaObject{T}} , :: Nothing ) where T = jnull
25
+
6
26
# Cast java object from S to T . Needed for polymorphic calls
7
27
function convert (:: Type{JavaObject{T}} , obj:: JavaObject{S} ) where {T,S}
8
28
if isConvertible (T, S) # Safe static cast
91
111
function convert_arg (argtype:: Type{Array{T,1}} , arg) where T<: JavaObject
92
112
carg = convert (argtype, arg)
93
113
sz = length (carg)
94
- init = carg[1 ]
95
- arrayptr = JNI. NewObjectArray (sz, Ptr (metaclass (T)), Ptr ( init) )
114
+ init = sz == 0 ? C_NULL : Ptr ( carg[1 ])
115
+ arrayptr = JNI. NewObjectArray (sz, Ptr (metaclass (T)), init)
96
116
arrayptr === C_NULL && geterror ()
97
117
for i= 2 : sz
98
118
JNI. SetObjectArrayElement (arrayptr, i- 1 , Ptr (carg[i]))
@@ -259,13 +279,15 @@ function convert(::Type{@jimport(java.util.List)}, x::Vector, V::Type{JavaObject
259
279
end
260
280
261
281
# Convert a reference to a java.lang.String into a Julia string. Copies the underlying byte buffer
262
- function unsafe_string (jstr:: JString ) # jstr must be a jstring obtained via a JNI call
263
- if isnull (jstr); return " " ; end # Return empty string to keep type stability. But this is questionable
282
+ unsafe_string (jstr:: JString ) = unsafe_string (Ptr (jstr)) # jstr must be a jstring obtained via a JNI call
283
+
284
+ function unsafe_string (jstr:: Ptr{Nothing} ) # jstr must be a jstring obtained via a JNI call
285
+ if jstr == C_NULL ; return " " ; end # Return empty string to keep type stability. But this is questionable
264
286
pIsCopy = Array {jboolean} (undef, 1 )
265
287
# buf::Ptr{UInt8} = JNI.GetStringUTFChars(Ptr(jstr), pIsCopy)
266
- buf = JNI. GetStringUTFChars (Ptr ( jstr) , pIsCopy)
288
+ buf = JNI. GetStringUTFChars (jstr, pIsCopy)
267
289
s = unsafe_string (buf)
268
- JNI. ReleaseStringUTFChars (Ptr ( jstr) , buf)
290
+ JNI. ReleaseStringUTFChars (jstr, buf)
269
291
return s
270
292
end
271
293
0 commit comments