diff --git a/Examples/test-suite/java/java_lib_arrays_runme.java b/Examples/test-suite/java/java_lib_arrays_runme.java index 9ee36210a..09a175ebb 100644 --- a/Examples/test-suite/java/java_lib_arrays_runme.java +++ b/Examples/test-suite/java/java_lib_arrays_runme.java @@ -23,6 +23,7 @@ public class java_lib_arrays_runme { // Create arrays for all the array types that ArrayStruct can handle String array_c = "X"; + byte[] array_c_extra = {11, 22}; byte[] array_sc = {10, 20}; short[] array_uc = {101, 201}; short[] array_s = {1002, 2002}; @@ -105,6 +106,12 @@ public class java_lib_arrays_runme { as.setArray_struct(array_struct); check_struct_array(array_struct, as.getArray_struct()); + + // Extended element (for char[]) + ArrayStructExtra ase = new ArrayStructExtra(); + ase.setArray_c2(array_c_extra); + check_byte_array(array_c_extra, ase.getArray_c2()); + } // Functions to check that the array values were set correctly diff --git a/Examples/test-suite/java_lib_arrays.i b/Examples/test-suite/java_lib_arrays.i index 0551cd100..8f9b0fd65 100644 --- a/Examples/test-suite/java_lib_arrays.i +++ b/Examples/test-suite/java_lib_arrays.i @@ -8,6 +8,7 @@ JAVA_ARRAYSOFCLASSES(SimpleStruct) %apply ARRAYSOFENUMS[ANY] { finger[ANY] } +//%apply signed char[ANY] { char array_c2[ANY] } %include "arrays.i" @@ -54,3 +55,15 @@ typedef enum { Big, Little } toe; void toestest(toe *t, toe tt[], toe ttt[2]) {} %} + +JAVA_ARRAYS_IMPL(char, jbyte, Byte, Char) +JAVA_ARRAYS_TYPEMAPS(char, byte, jbyte, Char, "[B") +%typecheck(SWIG_TYPECHECK_INT8_ARRAY) /* Java byte[] */ + signed char[ANY], signed char[] + "" + +%inline %{ +struct ArrayStructExtra { + char array_c2[ARRAY_LEN]; +}; +%} diff --git a/Lib/java/arrays_java.i b/Lib/java/arrays_java.i index ddaf7408c..64b85a89a 100644 --- a/Lib/java/arrays_java.i +++ b/Lib/java/arrays_java.i @@ -147,19 +147,19 @@ JAVA_ARRAYS_IMPL(double, jdouble, Double, Double) /* double[] */ %typemap(jstype) CTYPE[ANY], CTYPE[] %{JTYPE[]%} %typemap(in) CTYPE[] (JNITYPE *jarr) -%{ if (!SWIG_JavaArrayIn##JFUNCNAME(jenv, &jarr, &$1, $input)) return $null; %} +%{ if (!SWIG_JavaArrayIn##JFUNCNAME(jenv, &jarr, (CTYPE **)&$1, $input)) return $null; %} %typemap(in) CTYPE[ANY] (JNITYPE *jarr) %{ if ($input && JCALL1(GetArrayLength, jenv, $input) != $1_size) { SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, "incorrect array size"); return $null; } - if (!SWIG_JavaArrayIn##JFUNCNAME(jenv, &jarr, &$1, $input)) return $null; %} + if (!SWIG_JavaArrayIn##JFUNCNAME(jenv, &jarr, (CTYPE **)&$1, $input)) return $null; %} %typemap(argout) CTYPE[ANY], CTYPE[] -%{ SWIG_JavaArrayArgout##JFUNCNAME(jenv, jarr$argnum, $1, $input); %} +%{ SWIG_JavaArrayArgout##JFUNCNAME(jenv, jarr$argnum, (CTYPE *)$1, $input); %} %typemap(out) CTYPE[ANY] -%{$result = SWIG_JavaArrayOut##JFUNCNAME(jenv, $1, $1_dim0); %} +%{$result = SWIG_JavaArrayOut##JFUNCNAME(jenv, (CTYPE *)$1, $1_dim0); %} %typemap(out) CTYPE[] -%{$result = SWIG_JavaArrayOut##JFUNCNAME(jenv, $1, FillMeInAsSizeCannotBeDeterminedAutomatically); %} +%{$result = SWIG_JavaArrayOut##JFUNCNAME(jenv, (CTYPE *)$1, FillMeInAsSizeCannotBeDeterminedAutomatically); %} %typemap(freearg) CTYPE[ANY], CTYPE[] #ifdef __cplusplus %{ delete [] $1; %} @@ -172,6 +172,8 @@ JAVA_ARRAYS_IMPL(double, jdouble, Double, Double) /* double[] */ return $jnicall; } +%typemap(memberin) CTYPE[ANY], CTYPE[]; +%typemap(globalin) CTYPE[ANY], CTYPE[]; %enddef JAVA_ARRAYS_TYPEMAPS(bool, boolean, jboolean, Bool, "[Z") /* bool[ANY] */