@@ -70,10 +70,13 @@ cdef class JavaClass(object):
70
70
71
71
cdef void resolve_methods(self ):
72
72
# search all the JavaMethod within our class.
73
- for name, value in self .__dict__ .iteritems():
73
+ cdef JavaMethod jm
74
+ for name in dir (self .__class__):
75
+ value = getattr (self .__class__, name)
74
76
if not isinstance (value, JavaMethod):
75
77
continue
76
- value.resolve_method(self , name)
78
+ jm = value
79
+ jm.resolve_method(self , name)
77
80
78
81
cdef int populate_args(self , list definition_args, jvalue * j_args, args):
79
82
cdef JavaObject j_object
@@ -137,7 +140,12 @@ cdef class JavaMethod(object):
137
140
self .j_env = jc.j_env
138
141
self .j_cls = jc.j_cls
139
142
self .j_self = jc.j_self
140
- self .j_method = self .j_env[0 ].GetMethodID(self .j_env, self .j_cls, < char * > name, self .definition)
143
+ if self .is_static:
144
+ self .j_method = self .j_env[0 ].GetStaticMethodID(
145
+ self .j_env, self .j_cls, < char * > name, self .definition)
146
+ else :
147
+ self .j_method = self .j_env[0 ].GetMethodID(
148
+ self .j_env, self .j_cls, < char * > name, self .definition)
141
149
assert (self .j_method != NULL )
142
150
143
151
cdef void parse_definition(self , definition):
@@ -203,36 +211,36 @@ cdef class JavaMethod(object):
203
211
ret = True if j_boolean else False
204
212
elif r == ' B' :
205
213
j_byte = self .j_env[0 ].CallByteMethodA(self .j_env, self .j_self, self .j_method, j_args)
206
- self .error_if_null(ret)
214
+ # self.error_if_null(ret)
207
215
ret = < char > j_byte
208
216
elif r == ' C' :
209
217
j_char = self .j_env[0 ].CallCharMethodA(self .j_env, self .j_self, self .j_method, j_args)
210
- self .error_if_null(ret)
218
+ # self.error_if_null(ret)
211
219
ret = < char > j_char
212
220
elif r == ' S' :
213
221
j_short = self .j_env[0 ].CallShortMethodA(self .j_env, self .j_self, self .j_method, j_args)
214
- self .error_if_null(ret)
222
+ # self.error_if_null(ret)
215
223
ret = < short > j_short
216
224
elif r == ' I' :
217
225
j_int = self .j_env[0 ].CallIntMethodA(self .j_env, self .j_self, self .j_method, j_args)
218
- self .error_if_null(ret)
226
+ # self.error_if_null(ret)
219
227
ret = < int > j_int
220
228
elif r == ' J' :
221
229
j_long = self .j_env[0 ].CallLongMethodA(self .j_env, self .j_self, self .j_method, j_args)
222
- self .error_if_null(ret)
230
+ # self.error_if_null(ret)
223
231
ret = < long > j_long
224
232
elif r == ' F' :
225
233
j_float = self .j_env[0 ].CallFloatMethodA(self .j_env, self .j_self, self .j_method, j_args)
226
- self .error_if_null(ret)
234
+ # self.error_if_null(ret)
227
235
ret = < float > j_float
228
236
elif r == ' D' :
229
237
j_double = self .j_env[0 ].CallDoubleMethodA(self .j_env, self .j_self, self .j_method, j_args)
230
- self .error_if_null(ret)
238
+ # self.error_if_null(ret)
231
239
ret = < double > j_double
232
240
elif r == ' L' :
233
241
# accept only string for the moment
234
242
j_object = self .j_env[0 ].CallObjectMethodA(self .j_env, self .j_self, self .j_method, j_args)
235
- self .error_if_null(ret)
243
+ # self.error_if_null(ret)
236
244
if r == ' Ljava/lang/String;' :
237
245
c_str = < char * > self .j_env[0 ].GetStringUTFChars(self .j_env, j_object, NULL )
238
246
py_str = < bytes> c_str
@@ -272,6 +280,14 @@ cdef class JavaMethod(object):
272
280
# return type of the java method
273
281
r = self .definition_return[0 ]
274
282
283
+ '''
284
+ print 'TYPE', r
285
+ print 'jenv', 'ok' if self.j_env else 'nop'
286
+ print 'jcls', 'ok' if self.j_cls else 'nop'
287
+ print 'jmethods', 'ok' if self.j_method else 'nop'
288
+ print 'jargs', 'ok' if j_args else 'nop'
289
+ '''
290
+
275
291
# now call the java method
276
292
if r == ' V' :
277
293
self .j_env[0 ].CallStaticVoidMethodA(self .j_env, self .j_cls, self .j_method, j_args)
@@ -280,36 +296,36 @@ cdef class JavaMethod(object):
280
296
ret = True if j_boolean else False
281
297
elif r == ' B' :
282
298
j_byte = self .j_env[0 ].CallStaticByteMethodA(self .j_env, self .j_cls, self .j_method, j_args)
283
- self .error_if_null(ret)
299
+ # self.error_if_null(ret)
284
300
ret = < char > j_byte
285
301
elif r == ' C' :
286
302
j_char = self .j_env[0 ].CallStaticCharMethodA(self .j_env, self .j_cls, self .j_method, j_args)
287
- self .error_if_null(ret)
303
+ # self.error_if_null(ret)
288
304
ret = < char > j_char
289
305
elif r == ' S' :
290
306
j_short = self .j_env[0 ].CallStaticShortMethodA(self .j_env, self .j_cls, self .j_method, j_args)
291
- self .error_if_null(ret)
307
+ # self.error_if_null(ret)
292
308
ret = < short > j_short
293
309
elif r == ' I' :
294
310
j_int = self .j_env[0 ].CallStaticIntMethodA(self .j_env, self .j_cls, self .j_method, j_args)
295
- self .error_if_null(ret)
311
+ # self.error_if_null(ret)
296
312
ret = < int > j_int
297
313
elif r == ' J' :
298
314
j_long = self .j_env[0 ].CallStaticLongMethodA(self .j_env, self .j_cls, self .j_method, j_args)
299
- self .error_if_null(ret)
315
+ # self.error_if_null(ret)
300
316
ret = < long > j_long
301
317
elif r == ' F' :
302
318
j_float = self .j_env[0 ].CallStaticFloatMethodA(self .j_env, self .j_cls, self .j_method, j_args)
303
- self .error_if_null(ret)
319
+ # self.error_if_null(ret)
304
320
ret = < float > j_float
305
321
elif r == ' D' :
306
322
j_double = self .j_env[0 ].CallStaticDoubleMethodA(self .j_env, self .j_cls, self .j_method, j_args)
307
- self .error_if_null(ret)
323
+ # self.error_if_null(ret)
308
324
ret = < double > j_double
309
325
elif r == ' L' :
310
326
# accept only string for the moment
311
327
j_object = self .j_env[0 ].CallStaticObjectMethodA(self .j_env, self .j_cls, self .j_method, j_args)
312
- self .error_if_null(ret)
328
+ # self.error_if_null(ret)
313
329
if r == ' Ljava/lang/String;' :
314
330
c_str = < char * > self .j_env[0 ].GetStringUTFChars(self .j_env, j_object, NULL )
315
331
py_str = < bytes> c_str
0 commit comments