EOJ: make easier double insert in int array 22/14122/3
Calixte DENIZET [Tue, 25 Mar 2014 11:19:11 +0000 (12:19 +0100)]
Change-Id: I0de999e91f3f6e0a98a524b45597b04a1b2a6b0c

scilab/modules/external_objects_java/src/java/org/scilab/modules/external_objects_java/FunctionArguments.java
scilab/modules/external_objects_java/src/java/org/scilab/modules/external_objects_java/ScilabJavaArray.java
scilab/modules/external_objects_java/tests/unit_tests/jarray.dia.ref
scilab/modules/external_objects_java/tests/unit_tests/jarray.tst

index 581b2c1..671dd16 100644 (file)
@@ -181,6 +181,29 @@ public final class FunctionArguments {
     }
 
     /**
+     * Convert an object x into another one according to base Class
+     * @param x the object to convert
+     * @param base the base Class
+     * @return the converted object
+     */
+    public static final Object convert(Object x, Class base) {
+        if (x == null) {
+            return null;
+        }
+        final Class clazz = x.getClass();
+        if (base.isAssignableFrom(clazz)) {
+            return x;
+        }
+        for (Converter converter : converters) {
+            if (converter.canConvert(clazz, base)) {
+                return converter.convert(x, base);
+            }
+        }
+
+        return x;
+    }
+
+    /**
      * To find the "correct" method we proceed as follow:
      * i) We calculate the distance between the Class of the arguments.
      *    For a Class B which derivates from A (A.isAssignableFrom(B) == true), the distance between A and B is the number of
index fb60864..5dc82b7 100644 (file)
@@ -155,7 +155,7 @@ public final class ScilabJavaArray {
         if (obj != null && obj.getClass().isArray()) {
             if (index[i] >= 0 && index[i] < Array.getLength(obj)) {
                 try {
-                    Array.set(obj, index[i], x);
+                    Array.set(obj, index[i], FunctionArguments.convert(x, obj.getClass().getComponentType()));
                 } catch (IllegalArgumentException e) {
                     throw new ScilabJavaException("Array " + obj + " cannot contain object which is an instance of " + x.getClass());
                 }
index f5b8987..bddc8f6 100644 (file)
@@ -15,3 +15,6 @@ a(2, 1, 3) = str;
 assert_checkequal(length(str), length(a(2, 1, 3)));
 assert_checkequal(str, a(2, 1, 3));
 assert_checkequal(a(1), ["" ""; "" ""; "Hi Jims !" ""]);
+a = jarray("int", 1);
+a(1) = 2;
+assert_checkequal(2, double(a(1)));
index 1050bb1..8de06bd 100644 (file)
@@ -13,4 +13,9 @@ a(2, 1, 3) = str;
 
 assert_checkequal(length(str), length(a(2, 1, 3)));
 assert_checkequal(str, a(2, 1, 3));
-assert_checkequal(a(1), ["" ""; "" ""; "Hi Jims !" ""]);
\ No newline at end of file
+assert_checkequal(a(1), ["" ""; "" ""; "Hi Jims !" ""]);
+
+a = jarray("int", 1);
+a(1) = 2;
+
+assert_checkequal(2, double(a(1)));