def __call__(self, *args): '''Constructors''' env = J.get_env() jconstructors = self.klass.getConstructors() for jconstructor in env.get_object_array_elements(jconstructors): constructor = J.get_constructor_wrapper(jconstructor) params = env.get_object_array_elements( constructor.getParameterTypes()) is_var_args = J.call(constructor.o, "isVarArgs", "()Z") if len(args) < len(params) - (1 if is_var_args else 0): continue if len(args) > len(params) and not is_var_args: continue if is_var_args: pm1 = len(params)-1 args1 = args[:pm1] + [args[pm1:]] else: args1 = args try: cargs = [cast(o, klass) for o, klass in zip(args1, params)] except: last_e = sys.exc_info()[1] continue args_sig = "".join(map(sig, params)) msig = "(%s)V" % (args_sig) result = J.make_instance(self.cname, msig, *cargs) result = JWrapper(result) return result raise TypeError("No matching constructor found")
def __call__(self, *args): '''Constructors''' env = J.get_env() jconstructors = self.klass.getConstructors() for jconstructor in env.get_object_array_elements(jconstructors): constructor = J.get_constructor_wrapper(jconstructor) params = env.get_object_array_elements( constructor.getParameterTypes()) is_var_args = J.call(constructor.o, "isVarArgs", "()Z") if len(args) < len(params) - (1 if is_var_args else 0): continue if len(args) > len(params) and not is_var_args: continue if is_var_args: pm1 = len(params) - 1 args1 = args[:pm1] + [args[pm1:]] else: args1 = args try: cargs = [cast(o, klass) for o, klass in zip(args1, params)] except: last_e = sys.exc_info()[1] continue args_sig = "".join(map(sig, params)) msig = "(%s)V" % (args_sig) result = J.make_instance(self.cname, msig, *cargs) result = JWrapper(result) return result raise TypeError("No matching constructor found")
def get_plugin(classname): '''Return an instance of the named plugin''' if classname.startswith("ij."): cls = J.class_for_name(classname) else: cls = J.class_for_name(classname, get_user_loader()) cls = J.get_class_wrapper(cls, True) constructor = J.get_constructor_wrapper(cls.getConstructor(None)) return constructor.newInstance(None)