finalize() added to ported classes; javadoc anchor added to ported funcs
authorAndrey Pavlenko <no@email>
Fri, 8 Jul 2011 14:46:41 +0000 (14:46 +0000)
committerAndrey Pavlenko <no@email>
Fri, 8 Jul 2011 14:46:41 +0000 (14:46 +0000)
modules/java/gen_java.py

index f610c06..e322bf1 100644 (file)
@@ -427,6 +427,15 @@ class JavaWrapperGenerator(object):
             ) );\r
 \r
             # java part:\r
+\r
+            #java doc comment\r
+            f_name = fi.name\r
+            if fi.classname:\r
+                f_name = fi.classname + "::" + fi.name\r
+            self.java_code.write(indent + "//javadoc: " + f_name + "(%s)\n" % \\r
+                ", ".join([a.name for a in args])\r
+            )\r
+\r
             # public java wrapper method impl (calling native one above)\r
             # e.g.\r
             # public static void add( Mat src1, Mat src2, Mat dst, Mat mask, int dtype )\r
@@ -571,9 +580,44 @@ JNIEXPORT $rtype JNICALL Java_org_opencv_${module}_$fname
                     for fi in ffi.funcs:\r
                         self.gen_func(fi, len(ffi.funcs)>1, jn_code)\r
 \r
-            self.java_code.write("\n\n" + indent_m + "// native stuff\n")\r
-            self.java_code.write( indent_m + "//\n" + jn_code.getvalue() )\r
-            self.java_code.write( "\n\n" + indent + "}\n\n" )\r
+            # finalize()\r
+            self.java_code.write(\r
+"""\r
+        @Override\r
+        protected void finalize() throws Throwable {\r
+            n_delete(nativeObj);\r
+            super.finalize();\r
+        }\r
+\r
+"""\r
+            )\r
+\r
+            self.java_code.write(indent_m + "// native stuff\n\n")\r
+            self.java_code.write( jn_code.getvalue() )\r
+            self.java_code.write(\r
+"""\r
+        // native support for java finalize()\r
+        private static native void n_delete(long nativeObj);\r
+"""\r
+            )\r
+            self.java_code.write("\n" + indent + "}\n\n")\r
+\r
+            # native support for java finalize()\r
+            self.cpp_code.write( \\r
+"""\r
+//\r
+//  native support for java finalize()\r
+//  static void %(cls)s::n_delete( __int64 self )\r
+//\r
+\r
+JNIEXPORT void JNICALL Java_org_opencv_%(module)s_00024%(cls)s_n_1delete\r
+  (JNIEnv* env, jclass cls, jlong self)\r
+{\r
+    delete (%(cls)s*) self;\r
+}\r
+\r
+""" % {"module" : module, "cls" : name}\r
+            )\r
 \r
 \r
 if __name__ == "__main__":\r