From c496049ff7002e4a14e3cb4881c8097bf228bd52 Mon Sep 17 00:00:00 2001
From: ayounes <amine.younes-bouacida@savoirfairelinux.com>
Date: Wed, 22 Jan 2020 09:25:50 -0500
Subject: [PATCH] swig4: bump to swig 4
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

+ fix uint8_t conversion to jbyte
+ update JavaJNI2CJNI_Load.py to account for java inner classes

Change-Id: I9177a93611e6ef5b164586f70f20112bc8cc6f68
Reviewed-by: Sébastien Blin <sebastien.blin@savoirfairelinux.com>
---
 bin/jni/JavaJNI2CJNI_Load.py |  4 +--
 bin/jni/jni_interface.i      | 57 +++++++++++++++++++++---------------
 2 files changed, 35 insertions(+), 26 deletions(-)

diff --git a/bin/jni/JavaJNI2CJNI_Load.py b/bin/jni/JavaJNI2CJNI_Load.py
index 7e1de3d65f..668ef0e4e8 100755
--- a/bin/jni/JavaJNI2CJNI_Load.py
+++ b/bin/jni/JavaJNI2CJNI_Load.py
@@ -49,9 +49,9 @@ def type_to_signature(itype):
 		return "D"
 	if itype == "String":
 		return "Ljava/lang/String;"
-	if itype == "Object":
+	if itype == "Object" or itype == "java.lang.Object":
 		return "Ljava/lang/Object;"
-	return "Lcx/ring/daemon/%s;" % itype
+	return "Lcx/ring/daemon/%s;" % itype.replace('.', '$')
 
 def parse_java_file(input_stream, package, module):
 	outputs = []
diff --git a/bin/jni/jni_interface.i b/bin/jni/jni_interface.i
index b31c85c3f1..1a9201cdc4 100644
--- a/bin/jni/jni_interface.i
+++ b/bin/jni/jni_interface.i
@@ -52,6 +52,29 @@
     return $jnicall;
 }
 
+/* Convert unsigned char and thus uint8_t to jbyte */
+%typemap(jni) unsigned char,      const unsigned char &      "jbyte"
+%typemap(jtype) unsigned char,      const unsigned char &      "byte"
+%typemap(jstype) unsigned char,      const unsigned char &      "byte"
+%typemap(jboxtype) unsigned char,      const unsigned char &      "Byte"
+%typemap(directorin, descriptor="B") unsigned char    "$input = (jbyte) $1;"
+%typemap(out) unsigned char  %{ $result = (jbyte)$1; %}
+%typemap(out) const unsigned char &  %{ $result = (jbyte)*$1; %}
+
+%typecheck(SWIG_TYPECHECK_INT8) /* Java byte */
+    jbyte,
+    signed char,
+    const signed char &,
+    unsigned char,
+    const unsigned char
+    ""
+
+%typecheck(SWIG_TYPECHECK_INT16) /* Java short */
+    jshort,
+    short,
+    const short &
+    ""
+
 /* Maps exceptions */
 %typemap(throws, throws="java.lang.IllegalArgumentException") std::invalid_argument {
   jclass excep = jenv->FindClass("java/lang/IllegalArgumentException");
@@ -79,19 +102,19 @@ namespace std {
     $javaclassname n = new $javaclassname();
     for (java.util.Map.Entry<String, String> entry : in.entrySet()) {
       if (entry.getValue() != null) {
-        n.set(entry.getKey(), entry.getValue());
+        n.put(entry.getKey(), entry.getValue());
       }
     }
     return n;
   }
+
   public java.util.HashMap<String,String> toNative() {
     java.util.HashMap<String,String> out = new java.util.HashMap<>((int)size());
-    StringVect keys = keys();
-    for (String s : keys) {
-        out.put(s, get(s));
-    }
+    for (Entry<String, String> e : entrySet())
+        out.put(e.getKey(), e.getValue());
     return out;
   }
+
   public java.util.HashMap<String,String> toNativeFromUtf8() {
       java.util.HashMap<String,String> out = new java.util.HashMap<>((int)size());
       StringVect keys = keys();
@@ -101,6 +124,7 @@ namespace std {
       return out;
   }
 %}
+
 %extend map<string, string> {
     std::vector<std::string> keys() const {
         std::vector<std::string> k;
@@ -118,24 +142,8 @@ namespace std {
         return {v.begin(), v.end()};
     }
 }
-%template(StringMap) map<string, string>;
 
-%typemap(javabase) vector<string> "java.util.AbstractList<String>"
-%typemap(javainterface) vector<string> "java.util.RandomAccess"
-%extend vector<string> {
-  value_type set(int i, const value_type& in) throw (std::out_of_range) {
-    const std::string old = $self->at(i);
-    $self->at(i) = in;
-    return old;
-  }
-  bool add(const value_type& in) {
-    $self->push_back(in);
-    return true;
-  }
-  int32_t size() const {
-    return $self->size();
-  }
-}
+%template(StringMap) map<string, string>;
 %template(StringVect) vector<string>;
 
 %typemap(javacode) vector< map<string,string> > %{
@@ -160,9 +168,10 @@ namespace std {
     } catch (java.io.UnsupportedEncodingException e) {
       dat = in.getBytes();
     }
-    Blob n = new Blob(dat.length);
+    Blob n = new Blob();
+    n.reserve(dat.length);
     for (int i=0; i<dat.length; i++) {
-      n.set(i, dat[i]);
+      n.add(dat[i]);
     }
     return n;
   }
-- 
GitLab