@@ -70,10 +70,13 @@ cdef class JavaClass(object):
7070
7171 cdef void resolve_methods(self ):
7272 # 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)
7476 if not isinstance (value, JavaMethod):
7577 continue
76- value.resolve_method(self , name)
78+ jm = value
79+ jm.resolve_method(self , name)
7780
7881 cdef int populate_args(self , list definition_args, jvalue * j_args, args):
7982 cdef JavaObject j_object
@@ -137,7 +140,12 @@ cdef class JavaMethod(object):
137140 self .j_env = jc.j_env
138141 self .j_cls = jc.j_cls
139142 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)
141149 assert (self .j_method != NULL )
142150
143151 cdef void parse_definition(self , definition):
@@ -203,36 +211,36 @@ cdef class JavaMethod(object):
203211 ret = True if j_boolean else False
204212 elif r == ' B' :
205213 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)
207215 ret = < char > j_byte
208216 elif r == ' C' :
209217 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)
211219 ret = < char > j_char
212220 elif r == ' S' :
213221 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)
215223 ret = < short > j_short
216224 elif r == ' I' :
217225 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)
219227 ret = < int > j_int
220228 elif r == ' J' :
221229 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)
223231 ret = < long > j_long
224232 elif r == ' F' :
225233 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)
227235 ret = < float > j_float
228236 elif r == ' D' :
229237 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)
231239 ret = < double > j_double
232240 elif r == ' L' :
233241 # accept only string for the moment
234242 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)
236244 if r == ' Ljava/lang/String;' :
237245 c_str = < char * > self .j_env[0 ].GetStringUTFChars(self .j_env, j_object, NULL )
238246 py_str = < bytes> c_str
@@ -272,6 +280,14 @@ cdef class JavaMethod(object):
272280 # return type of the java method
273281 r = self .definition_return[0 ]
274282
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+
275291 # now call the java method
276292 if r == ' V' :
277293 self .j_env[0 ].CallStaticVoidMethodA(self .j_env, self .j_cls, self .j_method, j_args)
@@ -280,36 +296,36 @@ cdef class JavaMethod(object):
280296 ret = True if j_boolean else False
281297 elif r == ' B' :
282298 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)
284300 ret = < char > j_byte
285301 elif r == ' C' :
286302 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)
288304 ret = < char > j_char
289305 elif r == ' S' :
290306 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)
292308 ret = < short > j_short
293309 elif r == ' I' :
294310 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)
296312 ret = < int > j_int
297313 elif r == ' J' :
298314 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)
300316 ret = < long > j_long
301317 elif r == ' F' :
302318 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)
304320 ret = < float > j_float
305321 elif r == ' D' :
306322 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)
308324 ret = < double > j_double
309325 elif r == ' L' :
310326 # accept only string for the moment
311327 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)
313329 if r == ' Ljava/lang/String;' :
314330 c_str = < char * > self .j_env[0 ].GetStringUTFChars(self .j_env, j_object, NULL )
315331 py_str = < bytes> c_str
0 commit comments