Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit3a48760

Browse files
committed
Explicit types + ClosureRunnable
1 parent77d016c commit3a48760

File tree

5 files changed

+105
-90
lines changed

5 files changed

+105
-90
lines changed

‎Sources/JNICore.swift

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import Dispatch
1717
@_silgen_name("JNI_OnLoad")
1818
publicfunc JNI_OnLoad( jvm:UnsafeMutablePointer<JavaVM?>, ptr:UnsafeRawPointer)->jint{
1919
JNI.jvm= jvm
20-
letenv=JNI.GetEnv()
20+
letenv:UnsafeMutablePointer<JNIEnv?>?=JNI.GetEnv()
2121
JNI.api= env!.pointee!.pointee
2222
JNI.envCache[JNI.threadKey]= env
2323
#if os(Android)
@@ -84,10 +84,10 @@ open class JNICore {
8484
returntrue
8585
}
8686

87-
varoptions= options
87+
varoptions:[String]?= options
8888
if options==nil{
89-
varclasspath=String( cString:getenv("HOME"))+"/.swiftjava.jar"
90-
iflet CLASSPATH=getenv("CLASSPATH"){
89+
varclasspath:String=String( cString:getenv("HOME"))+"/.swiftjava.jar"
90+
iflet CLASSPATH:UnsafeMutablePointer<Int8>=getenv("CLASSPATH"){
9191
classpath+=":"+String( cString: CLASSPATH)
9292
}
9393
options=["-Djava.class.path="+classpath,
@@ -105,7 +105,7 @@ open class JNICore {
105105
vmArgs.nOptions=jint(options?.count??0)
106106
vmArgs.options= vmOptionsPtr
107107

108-
iflet options= options{
108+
iflet options:[String]= options{
109109
foriin0..<options.count{
110110
options[i].withCString{
111111
(cString)in
@@ -169,7 +169,7 @@ open class JNICore {
169169
openfunc FindClass( _ name:UnsafePointer<Int8>, _ file:StaticString= #file, _ line:Int= #line)->jclass?{
170170
autoInit()
171171
ExceptionReset()
172-
letclazz= api.FindClass( env, name)
172+
letclazz:jclass?= api.FindClass( env, name)
173173
if clazz==nil{
174174
report("Could not find class\(String( cString: name))", file, line)
175175
ifstrncmp( name,"org/swiftjava/",14)==0{
@@ -183,7 +183,7 @@ open class JNICore {
183183

184184
openfunc CachedFindClass( _ name:UnsafePointer<Int8>, _ classCache:UnsafeMutablePointer<jclass?>,
185185
_ file:StaticString= #file, _ line:Int= #line){
186-
if classCache.pointee==nil,let clazz=FindClass( name, file, line){
186+
if classCache.pointee==nil,let clazz:jclass=FindClass( name, file, line){
187187
classCache.pointee= api.NewGlobalRef( env, clazz)
188188
api.DeleteLocalRef( env, clazz)
189189
}
@@ -195,7 +195,7 @@ open class JNICore {
195195
if object==nil{
196196
report("GetObjectClass with nil object", file, line)
197197
}
198-
letclazz= api.GetObjectClass( env, object)
198+
letclazz:jclass?= api.GetObjectClass( env, object)
199199
if clazz==nil{
200200
report("GetObjectClass returns nil class", file, line)
201201
}
@@ -207,9 +207,9 @@ open class JNICore {
207207

208208
privatestaticvarjava_lang_ObjectClass:jclass?
209209

210-
openfunc NewObjectArray( _ count:Int, _ array:[jobject?]?, _ locals:UnsafeMutablePointer<[jobject]>, _ file:StaticString= #file, _ line:Int= #line)->jobject?{
210+
openfunc NewObjectArray( _ count:Int, _ array:[jobject?]?, _ locals:UnsafeMutablePointer<[jobject]>, _ file:StaticString= #file, _ line:Int= #line)->jobjectArray?{
211211
CachedFindClass("java/lang/Object",&JNICore.java_lang_ObjectClass, file, line)
212-
vararrayClass=JNICore.java_lang_ObjectClass
212+
vararrayClass:jclass?=JNICore.java_lang_ObjectClass
213213
if array?.count!=0{
214214
arrayClass=JNI.GetObjectClass(array![0], locals)
215215
}
@@ -218,7 +218,7 @@ open class JNICore {
218218
returnnil
219219
#endif
220220
}
221-
letarray= api.NewObjectArray( env,jsize(count), arrayClass,nil)
221+
letarray:jobjectArray?= api.NewObjectArray( env,jsize(count), arrayClass,nil)
222222
if array==nil{
223223
report("Could not create array", file, line)
224224
}
@@ -231,7 +231,7 @@ open class JNICore {
231231
}
232232
}
233233

234-
privatevarthrownCache=[pthread_t:jthrowable]()
234+
privatevarthrownCache=[pthread_t:jthrowable]()
235235
privateletthrownLock=NSLock()
236236

237237
openfunc check<T>( _ result:T, _ locals:UnsafeMutablePointer<[jobject]>, removeLast:Bool=false, _ file:StaticString= #file, _ line:Int= #line)->T{
@@ -241,7 +241,7 @@ open class JNICore {
241241
forlocalin locals.pointee{
242242
DeleteLocalRef( local)
243243
}
244-
if api.ExceptionCheck( env)!=0,let throwable= api.ExceptionOccurred( env){
244+
if api.ExceptionCheck( env)!=0,let throwable:jthrowable= api.ExceptionOccurred( env){
245245
report("Exception occured", file, line)
246246
thrownLock.lock()
247247
thrownCache[threadKey]= throwable
@@ -252,8 +252,8 @@ open class JNICore {
252252
}
253253

254254
openfunc ExceptionCheck()->jthrowable?{
255-
letcurrentThread= threadKey
256-
iflet throwable=thrownCache[currentThread]{
255+
letcurrentThread:pthread_t= threadKey
256+
iflet throwable:jthrowable=thrownCache[currentThread]{
257257
thrownLock.lock()
258258
thrownCache.removeValue(forKey: currentThread)
259259
thrownLock.unlock()
@@ -263,7 +263,7 @@ open class JNICore {
263263
}
264264

265265
openfunc ExceptionReset(){
266-
iflet throwable=ExceptionCheck(){
266+
iflet throwable:jthrowable=ExceptionCheck(){
267267
report("Left over exception")
268268
Throwable( javaObject: throwable).printStackTrace()
269269
}

‎Sources/JNIMethod.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public class JNIMethod {
2525
_ methodCache:UnsafeMutablePointer<jmethodID?>, _ object:jobject?,
2626
_ locals:UnsafeMutablePointer<[jobject]>,
2727
_ file:StaticString= #file, _ line:Int= #line){
28-
letclazz=JNI.GetObjectClass( object, locals, file, line)
28+
letclazz:jclass?=JNI.GetObjectClass( object, locals, file, line)
2929
methodCache.pointee=JNI.api.GetMethodID(JNI.env, clazz, methodName, methodSig)
3030
if methodCache.pointee==nil{
3131
JNI.report("Failed to lookup method\(String(describing: object)).\(String(describing: clazz)).\(String(cString: methodName))(\(String(cString: methodSig)) )", file, line)

‎Sources/JNIObject.swift

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ extension JNIObjectProtocol {
2828

2929
publicfunc withJavaObject<Result>( _ body:@escaping(jobject?)throws->Result)rethrows->Result{
3030
varlocals=[jobject]()
31-
letjavaObject=localJavaObject(&locals)
31+
letjavaObject:jobject?=localJavaObject(&locals)
3232
defer{
3333
forlocalin locals{
3434
JNI.DeleteLocalRef( local)
@@ -66,7 +66,7 @@ open class JNIObject: JNIObjectProtocol, JNIObjectInit {
6666
}
6767
set(newValue){
6868
if newValue!= _javaObject{
69-
letoldValue= _javaObject
69+
letoldValue:jobject?= _javaObject
7070
if newValue!=nil{
7171
_javaObject=JNI.api.NewGlobalRef(JNI.env, newValue)
7272
}
@@ -93,7 +93,7 @@ open class JNIObject: JNIObjectProtocol, JNIObjectInit {
9393
}
9494

9595
openfunc localJavaObject( _ locals:UnsafeMutablePointer<[jobject]>)->jobject?{
96-
iflet local= _javaObject!=nil?JNI.api.NewLocalRef(JNI.env, _javaObject):nil{
96+
iflet local:jobject= _javaObject!=nil?JNI.api.NewLocalRef(JNI.env, _javaObject):nil{
9797
locals.pointee.append( local)
9898
return local
9999
}
@@ -114,7 +114,7 @@ open class JNIObjectForward: JNIObject {
114114
extensionString:JNIObjectProtocol{
115115

116116
publicfunc localJavaObject( _ locals:UnsafeMutablePointer<[jobject]>)->jobject?{
117-
iflet javaObject=Array(utf16).withUnsafeBufferPointer({
117+
iflet javaObject:jstring=Array(utf16).withUnsafeBufferPointer({
118118
JNI.env?.pointee?.pointee.NewString(JNI.env, $0.baseAddress,jsize($0.count))
119119
}){
120120
locals.pointee.append( javaObject)
@@ -128,7 +128,7 @@ extension String: JNIObjectInit {
128128

129129
publicinit( javaObject:jobject?){
130130
varisCopy:jboolean=0
131-
iflet javaObject= javaObject,let value=JNI.api.GetStringChars(JNI.env, javaObject,&isCopy){
131+
iflet javaObject:jobject= javaObject,let value:UnsafePointer<jchar>=JNI.api.GetStringChars(JNI.env, javaObject,&isCopy){
132132
self.init( utf16CodeUnits: value, count:Int(JNI.api.GetStringLength(JNI.env, javaObject)))
133133
if isCopy!=0 ||true{
134134
JNI.api.ReleaseStringChars(JNI.env, javaObject, value) ////
@@ -144,7 +144,7 @@ extension jobject {
144144

145145
publicfunc arrayMap<T>( block:( _ javaObject:jobject?)->T)->[T]{
146146
return(0..<JNI.api.GetArrayLength(JNI.env,self)).map{
147-
letelement=JNI.api.GetObjectArrayElement(JNI.env,self, $0)
147+
letelement:jobject?=JNI.api.GetObjectArrayElement(JNI.env,self, $0)
148148
defer{JNI.DeleteLocalRef( element)}
149149
returnblock( element)
150150
}
@@ -167,15 +167,15 @@ extension JNIType {
167167
publicstaticfunc toJavaArray<T>( value:[T]?, locals:UnsafeMutablePointer<[jobject]>,
168168
block:(_ value:T, _ locals:UnsafeMutablePointer<[jobject]>)->jvalue)->jvalue{
169169
vararray:jarray?
170-
iflet value= value{
170+
iflet value:[T]= value{
171171
foriin0..< value.count{
172172
varsublocals=[jobject]()
173-
letelement=block(value[i],&sublocals).l
173+
letelement:jobject?=block(value[i],&sublocals).l
174174
if array==nil{
175175
if element==nil{
176176
break
177177
}
178-
letelementClass=JNI.GetObjectClass( element,&sublocals)
178+
letelementClass:jclass?=JNI.GetObjectClass( element,&sublocals)
179179
array=JNI.api.NewObjectArray(JNI.env,jsize(value.count), elementClass,nil)
180180
}
181181
JNI.api.SetObjectArrayElement(JNI.env, array,jsize(i), element)
@@ -210,19 +210,19 @@ extension JNIType {
210210
}
211211

212212
publicstaticfunc toSwift<T:JNIObjectInit>( type:T.Type, from:jobject?, consume:Bool=true)->T?{
213-
guardlet from= fromelse{returnnil}
213+
guardlet from:jobject= fromelse{returnnil}
214214
defer{if consume{JNI.DeleteLocalRef( from)}}
215215
returnT( javaObject: from)
216216
}
217217

218218
publicstaticfunc toSwift<T:JNIObjectInit>( type:[T].Type, from:jobject?, consume:Bool=true)->[T]?{
219-
guardlet from= fromelse{returnnil}
219+
guardlet from:jobject= fromelse{returnnil}
220220
defer{if consume{JNI.DeleteLocalRef( from)}}
221221
return from.arrayMap{T( javaObject: $0)}
222222
}
223223

224224
publicstaticfunc toSwift<T:JNIObjectInit>( type:[[T]].Type, from:jobject?, consume:Bool=true)->[[T]]?{
225-
guardlet from= fromelse{returnnil}
225+
guardlet from:jobject= fromelse{returnnil}
226226
defer{if consume{JNI.DeleteLocalRef( from)}}
227227
return from.arrayMap{toSwift( type:[T].self, from: $0, consume:false)??[T]()}
228228
}
@@ -231,14 +231,14 @@ extension JNIType {
231231
returnjvalue( l: value?.localJavaObject( locals))
232232
}
233233

234-
publicstaticfunc toJava( value:[String:JNIObjectProtocol]?, mapClass:String, locals:UnsafeMutablePointer<[jobject]>)->jvalue{
235-
guardlet value= valueelse{returnjvalue( l:nil)}
234+
publicstaticfunc toJava( value:[String:JNIObjectProtocol]?, mapClass:String, locals:UnsafeMutablePointer<[jobject]>)->jvalue{
235+
guardlet value:[String:JNIObjectProtocol]= valueelse{returnjvalue( l:nil)}
236236

237237
varclassCache:jclass?
238238
varmethodID:jmethodID?
239239
var__locals=[jobject]()
240240
var__args=[jvalue]( repeating:jvalue(), count:1)
241-
guardlet __object=JNIMethod.NewObject( className: mapClass, classCache:&classCache,
241+
guardlet __object:jobject=JNIMethod.NewObject( className: mapClass, classCache:&classCache,
242242
methodSig:"()V", methodCache:&methodID, args:&__args, locals:&__locals)else{
243243
JNI.report("Unable to create HashMap of class\(mapClass)")
244244
returnjvalue( l:nil)
@@ -261,22 +261,22 @@ extension JNIType {
261261
returnjvalue( l: __object)
262262
}
263263

264-
publicstaticfunc toJava( value:[String:[JNIObjectProtocol]]?, mapClass:String, locals:UnsafeMutablePointer<[jobject]>)->jvalue{
265-
guardlet value= valueelse{returnjvalue( l:nil)}
264+
publicstaticfunc toJava( value:[String:[JNIObjectProtocol]]?, mapClass:String, locals:UnsafeMutablePointer<[jobject]>)->jvalue{
265+
guardlet value:[String:[JNIObjectProtocol]]= valueelse{returnjvalue( l:nil)}
266266

267267
varclassCache:jclass?
268268
varmethodID:jmethodID?
269269
var__args=[jvalue]( repeating:jvalue(), count:1)
270270
var__locals=[jobject]()
271-
guardlet __object=JNIMethod.NewObject( className: mapClass, classCache:&classCache,
271+
guardlet __object:jobject=JNIMethod.NewObject( className: mapClass, classCache:&classCache,
272272
methodSig:"()V", methodCache:&methodID, args:&__args, locals:&__locals)else{
273273
JNI.report("Unable to create HashMap of class\(mapClass)")
274274
returnjvalue( l:nil)
275275
}
276276

277277
JNI.api.DeleteGlobalRef(JNI.env, classCache)
278278

279-
letmap=HashMap( javaObject: __object)
279+
letmap:HashMap=HashMap( javaObject: __object)
280280
for(key, item)in value{
281281
varsublocals=[jobject]()
282282
letjavaKey=JavaObject( javaObject:toJava( value: key, locals:&sublocals).l)
@@ -291,8 +291,8 @@ extension JNIType {
291291
returnjvalue( l: __object)
292292
}
293293

294-
publicstaticfunc toSwift<T:JNIObjectInit>( type:[String:T].Type, from:jobject?, consume:Bool=true)->[String:T]?{
295-
guardlet from= fromelse{returnnil}
294+
publicstaticfunc toSwift<T:JNIObjectInit>( type:[String:T].Type, from:jobject?, consume:Bool=true)->[String:T]?{
295+
guardlet from:jobject= fromelse{returnnil}
296296
defer{if consume{JNI.DeleteLocalRef( from)}}
297297
letmap=HashMap( javaObject: from)
298298
varout=[String:T]()
@@ -301,7 +301,7 @@ extension JNIType {
301301
keyObjectin
302302
map.get(key).withJavaObject{
303303
itemObjectin
304-
iflet keystr=JNIType.toSwift( type:String.self, from: keyObject, consume:false){
304+
iflet keystr:String=JNIType.toSwift( type:String.self, from: keyObject, consume:false){
305305
out[keystr]=T( javaObject: itemObject)
306306
}
307307
}
@@ -310,8 +310,8 @@ extension JNIType {
310310
return out
311311
}
312312

313-
publicstaticfunc toSwift<T:JNIObjectInit>( type:[String:[T]].Type, from:jobject?, consume:Bool=true)->[String:[T]]?{
314-
guardlet from= fromelse{returnnil}
313+
publicstaticfunc toSwift<T:JNIObjectInit>( type:[String:[T]].Type, from:jobject?, consume:Bool=true)->[String:[T]]?{
314+
guardlet from:jobject= fromelse{returnnil}
315315
defer{if consume{JNI.DeleteLocalRef( from)}}
316316
letmap=HashMap( javaObject: from)
317317
varout=[String:[T]]()
@@ -320,8 +320,8 @@ extension JNIType {
320320
keyObjectin
321321
map.get(key).withJavaObject{
322322
itemObjectin
323-
iflet keystr=JNIType.toSwift( type:String.self, from: keyObject, consume:false),
324-
let value=JNIType.toSwift( type:[T].self, from: itemObject, consume:false){
323+
iflet keystr:String=JNIType.toSwift( type:String.self, from: keyObject, consume:false),
324+
let value:[T]=JNIType.toSwift( type:[T].self, from: itemObject, consume:false){
325325
out[keystr]= value
326326
}
327327
}

‎Sources/JNIProxy.swift

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ open class JNIReleasableProxy {
2929
}
3030

3131
staticpublicfunc canrelease( swiftObject:jlong){
32-
lettoRelease=unsafeBitCast(recoverPointer( swiftObject), to:JNIReleasableProxy.self)
32+
lettoRelease:JNIReleasableProxy=unsafeBitCast(recoverPointer( swiftObject), to:JNIReleasableProxy.self)
3333
toRelease.clearLocal()
3434
Unmanaged.passUnretained(toRelease).release()
3535
}
@@ -51,8 +51,8 @@ public let JNIReleasableProxy__finalize_thunk: JNIReleasableProxy__finalize_type
5151
openclassJNILocalProxy<Owned, OwnedType>:JNIReleasableProxy,JNIObjectProtocol{
5252

5353
publicfunc localJavaObject( _ locals:UnsafeMutablePointer<[jobject]>)->jobject?{
54-
letproxy=createProxy( className:type(of:self).proxyClassName(),
55-
classObject:type(of:self).proxyClass())
54+
letproxy:jobject?=createProxy( className:type(of:self).proxyClassName(),
55+
classObject:type(of:self).proxyClass())
5656
locals.pointee.append( proxy!)
5757
return proxy
5858
}
@@ -78,8 +78,8 @@ open class JNILocalProxy<Owned, OwnedType>: JNIReleasableProxy, JNIObjectProtoco
7878
guard javaObject!=nilelse{return}
7979
varlocals=[jobject]()
8080
varfieldID:jfieldID?
81-
letexisting=JNIField.GetLongField( fieldName:"__swiftObject", fieldType:"J", fieldCache:&fieldID,
82-
object: javaObject, file, line)
81+
letexisting:jlong=JNIField.GetLongField( fieldName:"__swiftObject", fieldType:"J", fieldCache:&fieldID,
82+
object: javaObject, file, line)
8383
JNIField.SetLongField( fieldName:"__swiftObject", fieldType:"J", fieldCache:&fieldID,
8484
object: javaObject, value:swiftValue().j, locals:&locals, file, line)
8585
if existing!=0{
@@ -95,9 +95,9 @@ open class JNILocalProxy<Owned, OwnedType>: JNIReleasableProxy, JNIObjectProtoco
9595
varlocals=[jobject]()
9696
varmethodID:jmethodID?
9797
varargs:[jvalue]=[swiftValue()]
98-
iflet newObject=JNIMethod.NewObject( className: className, classObject: classObject,
99-
methodSig:"(J)V", methodCache:&methodID,
100-
args:&args, locals:&locals){
98+
iflet newObject:jobject=JNIMethod.NewObject( className: className, classObject: classObject,
99+
methodSig:"(J)V", methodCache:&methodID,
100+
args:&args, locals:&locals){
101101
return newObject
102102
}
103103
else{
@@ -111,7 +111,7 @@ open class JNILocalProxy<Owned, OwnedType>: JNIReleasableProxy, JNIObjectProtoco
111111
openclassJNIObjectProxy<ObjectOwned>:JNILocalProxy<ObjectOwned,JNIObject>where ObjectOwned:JNIObject{
112112

113113
overridepublicfunc localJavaObject(_ locals:UnsafeMutablePointer<[jobject]>)->jobject?{
114-
letlocal=JNI.api.NewLocalRef(JNI.env, owned.javaObject)
114+
letlocal:jobject?=JNI.api.NewLocalRef(JNI.env, owned.javaObject)
115115
if local!=nil{
116116
locals.pointee.append( local!)
117117
}
@@ -123,3 +123,18 @@ open class JNIObjectProxy<ObjectOwned> : JNILocalProxy<ObjectOwned, JNIObject> w
123123
}
124124

125125
}
126+
127+
publicclassClosureRunnable:Runnable{
128+
129+
letclosure:()->()
130+
131+
publicinit( _ closure:@escaping()->()){
132+
self.closure= closure
133+
}
134+
135+
publicfunc run(){
136+
closure()
137+
JNI.envCache[JNI.threadKey]=nil
138+
}
139+
140+
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp