internal IntPtr Box() { PrimitiveType memberAsPrimitive = (PrimitiveType)_arrayType.MemberType; JavaClass boxClass = memberAsPrimitive.GetBoxClass(); IntPtr[] members; switch (memberAsPrimitive.Kind) { case PrimitiveTypeKind.Boolean: members = _vm.GetBooleanArray(_arrayPtr).Select(b => boxClass.Box(b, memberAsPrimitive).ToIntPtr()).ToArray(); break; case PrimitiveTypeKind.Byte: members = _vm.GetByteArray(_arrayPtr).Select(b => boxClass.Box(b, memberAsPrimitive).ToIntPtr()).ToArray(); break; case PrimitiveTypeKind.Char: members = _vm.GetCharArray(_arrayPtr).Select(b => boxClass.Box(b, memberAsPrimitive).ToIntPtr()).ToArray(); break; case PrimitiveTypeKind.Double: members = _vm.GetDoubleArray(_arrayPtr).Select(b => boxClass.Box(b, memberAsPrimitive).ToIntPtr()).ToArray(); break; case PrimitiveTypeKind.Float: members = _vm.GetFloatArray(_arrayPtr).Select(b => boxClass.Box(b, memberAsPrimitive).ToIntPtr()).ToArray(); break; case PrimitiveTypeKind.Int: members = _vm.GetIntArray(_arrayPtr).Select(b => boxClass.Box(b, memberAsPrimitive).ToIntPtr()).ToArray(); break; case PrimitiveTypeKind.Long: members = _vm.GetLongArray(_arrayPtr).Select(b => boxClass.Box(b, memberAsPrimitive).ToIntPtr()).ToArray(); break; case PrimitiveTypeKind.Short: members = _vm.GetShortArray(_arrayPtr).Select(b => boxClass.Box(b, memberAsPrimitive).ToIntPtr()).ToArray(); break; default: throw new InvalidOperationException("Unknown primitive kind: " + memberAsPrimitive.Kind); } return(boxClass.NewArray(members)); }
public JValue Value(JniWrapper vm, bool box) { if (!box) { return(_value); } else { ArrayType asArray; if ((asArray = _type as ArrayType) != null) { JavaArray arrayObject = new JavaArray(vm, _value.ToIntPtr(), asArray); return(arrayObject.Box()); } else { PrimitiveType primitiveType = (PrimitiveType)_type; return(primitiveType.GetBoxClass().Box(_value, primitiveType)); } } }