From f38808a39f420521b29287858a79082eef06db4c Mon Sep 17 00:00:00 2001 From: Dmitry Kurtaev Date: Tue, 17 Jul 2018 13:41:46 +0300 Subject: [PATCH] Add Java overloads for each default argument (#11940) * Add Java overloads for each default argument * Add "fisheye_" prefix for cv::fisheye:: functions and enums --- modules/calib3d/misc/java/gen_dict.json | 3 +++ modules/java/generator/gen_java.py | 24 +++++++++++++++--------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/modules/calib3d/misc/java/gen_dict.json b/modules/calib3d/misc/java/gen_dict.json index 4c2d9d2..4658096 100644 --- a/modules/calib3d/misc/java/gen_dict.json +++ b/modules/calib3d/misc/java/gen_dict.json @@ -18,6 +18,9 @@ ] } }, + "namespaces_dict": { + "cv.fisheye": "fisheye" + }, "func_arg_fix" : { "findFundamentalMat" : { "points1" : {"ctype" : "vector_Point2f"}, "points2" : {"ctype" : "vector_Point2f"} }, diff --git a/modules/java/generator/gen_java.py b/modules/java/generator/gen_java.py index 5de2e34..d3a4664 100755 --- a/modules/java/generator/gen_java.py +++ b/modules/java/generator/gen_java.py @@ -67,6 +67,10 @@ type_dict = { "double[]": { "j_type" : "double[]", "jn_type" : "double[]", "jni_type" : "jdoubleArray", "suffix" : "_3D" } } +# Defines a rule to add extra prefixes for names from specific namespaces. +# In example, cv::fisheye::stereoRectify from namespace fisheye is wrapped as fisheye_stereoRectify +namespaces_dict = {} + # { class : { func : {j_code, jn_code, cpp_code} } } ManualFuncs = {} @@ -148,6 +152,8 @@ class ConstInfo(GeneralInfo): self.cname = self.name.replace(".", "::") self.value = decl[1] self.addedManually = addedManually + if self.namespace in namespaces_dict: + self.name = '%s_%s' % (namespaces_dict[self.namespace], self.name) def __repr__(self): return Template("CONST $name=$value$manual").substitute(name=self.name, @@ -297,11 +303,13 @@ class ArgInfo(): class FuncInfo(GeneralInfo): def __init__(self, decl, namespaces=[]): # [ funcname, return_ctype, [modifiers], [args] ] GeneralInfo.__init__(self, "func", decl, namespaces) - self.cname = self.name.replace(".", "::") + self.cname = decl[0].replace(".", "::") self.jname = self.name self.isconstructor = self.name == self.classname if "[" in self.name: self.jname = "getelem" + if self.namespace in namespaces_dict: + self.jname = '%s_%s' % (namespaces_dict[self.namespace], self.jname) for m in decl[2]: if m.startswith("="): self.jname = m[1:] @@ -688,9 +696,9 @@ class JavaWrapperGenerator(object): # java part: #java doc comment - f_name = fi.name + f_name = fi.jname if fi.classname: - f_name = fi.classname + "::" + fi.name + f_name = fi.classname + "::" + fi.jname java_doc = "//javadoc: " + f_name + "(%s)" % ", ".join([a.name for a in args if a.ctype]) j_code.write(" "*4 + java_doc + "\n") @@ -897,13 +905,10 @@ JNIEXPORT $rtype JNICALL Java_org_opencv_${module}_${clazz}_$fname j_signatures.append(j_signature) # processing args with default values - if not args or not args[-1].defval: + if args and args[-1].defval: + args.pop() + else: break - while args and args[-1].defval: - # 'smart' overloads filtering - a = args.pop() - if a.name in ('mask', 'dtype', 'ddepth', 'lineType', 'borderType', 'borderMode', 'criteria'): - break @@ -1146,6 +1151,7 @@ if __name__ == "__main__": type_dict.update(gen_type_dict.get("type_dict", {})) ManualFuncs.update(gen_type_dict.get("ManualFuncs", {})) func_arg_fix.update(gen_type_dict.get("func_arg_fix", {})) + namespaces_dict.update(gen_type_dict.get("namespaces_dict", {})) if 'module_j_code' in gen_type_dict: module_j_code = read_contents(checkFileRemap(os.path.join(misc_location, gen_type_dict['module_j_code']))) if 'module_jn_code' in gen_type_dict: -- 2.7.4