Exemplo n.º 1
0
 public static ParameterInfo[] GetParameterInfo(JniWrapper vm, object[] args)
 {
     ParameterInfo[] ret = new ParameterInfo[args.Length];
     for (int i = 0; i < args.Length; i++)
     {
         if (args[i] == null)
         {
             ret[i] = new ParameterInfo(new JValue(IntPtr.Zero), new NullType());
         }
         else
         {
             JavaObjectFactory objectFactory = GetJavaType(vm, args[i].GetType(), args[i]);
             ret[i] = new ParameterInfo(objectFactory.Create(args[i]), objectFactory.JavaType);
         }
     }
     return(ret);
 }
Exemplo n.º 2
0
            public static JavaObjectFactory Array(JniWrapper vm, Type dotNetType, Array prototype)
            {
                object innerPrototype = null;

                if (prototype != null && prototype.Length > 0)
                {
                    innerPrototype = prototype.GetValue(0);
                }
                JavaObjectFactory innerFactory  = GetJavaType(vm, dotNetType.GetElementType(), innerPrototype);
                ArrayType         javaArrayType = new ArrayType(innerFactory.JavaType);

                return(new JavaObjectFactory(o =>
                {
                    Array asArray = (Array)o;
                    PrimitiveType asPrimitive = javaArrayType.MemberType as PrimitiveType;
                    if (asPrimitive != null)
                    {
                        switch (asPrimitive.Kind)
                        {
                        case PrimitiveTypeKind.Boolean: return vm.NewBooleanArray((bool[])o);

                        case PrimitiveTypeKind.Byte: return vm.NewByteArray((byte[])o);

                        case PrimitiveTypeKind.Char: return vm.NewCharArray((char[])o);

                        case PrimitiveTypeKind.Double: return vm.NewDoubleArray((double[])o);

                        case PrimitiveTypeKind.Float: return vm.NewFloatArray((float[])o);

                        case PrimitiveTypeKind.Int: return vm.NewIntArray((int[])o);

                        case PrimitiveTypeKind.Long: return vm.NewLongArray((long[])o);

                        case PrimitiveTypeKind.Short: return vm.NewShortArray((short[])o);

                        default: throw new InvalidOperationException("Unknown primitive kind: " + asPrimitive.Kind);
                        }
                    }
                    else
                    {
                        IntPtr[] elements = asArray.Cast <object>().Select(innerFactory._factory).Select(v => v.ToIntPtr()).ToArray();
                        return vm.NewArray(vm.FindClass(innerFactory.JavaType.JniClassName), elements);
                    }
                }, javaArrayType));
            }
Exemplo n.º 3
0
 private static JavaObjectFactory GetJavaType(JniWrapper vm, Type dotNetType, object prototype)
 {
     if (dotNetType.IsArray)
     {
         return(JavaObjectFactory.Array(vm, dotNetType, (Array)prototype));
     }
     else if (dotNetType.IsAssignableFrom(typeof(string)))
     {
         return(JavaObjectFactory.String(vm));
     }
     else if (dotNetType.IsAssignableFrom(typeof(byte)))
     {
         return(JavaObjectFactory.Byte(vm));
     }
     else if (dotNetType.IsAssignableFrom(typeof(short)))
     {
         return(JavaObjectFactory.Short(vm));
     }
     else if (dotNetType.IsAssignableFrom(typeof(int)))
     {
         return(JavaObjectFactory.Int(vm));
     }
     else if (dotNetType.IsAssignableFrom(typeof(long)))
     {
         return(JavaObjectFactory.Long(vm));
     }
     else if (dotNetType.IsAssignableFrom(typeof(float)))
     {
         return(JavaObjectFactory.Float(vm));
     }
     else if (dotNetType.IsAssignableFrom(typeof(double)))
     {
         return(JavaObjectFactory.Double(vm));
     }
     else if (dotNetType.IsAssignableFrom(typeof(char)))
     {
         return(JavaObjectFactory.Char(vm));
     }
     else if (dotNetType.IsAssignableFrom(typeof(bool)))
     {
         return(JavaObjectFactory.Boolean(vm));
     }
     else if (dotNetType.IsAssignableFrom(typeof(JavaObject)))
     {
         if (prototype == null)
         {
             throw new InvalidOperationException("Can't infer the type of the Java object without an instance.");
         }
         return(JavaObjectFactory.Object(vm, ((JavaObject)prototype).Class));
     }
     else if (dotNetType.IsAssignableFrom(typeof(JavaArray)))
     {
         if (prototype == null)
         {
             throw new InvalidOperationException("Can't infer the type of the Java array without an instance.");
         }
         return(JavaObjectFactory.Array(vm, ((JavaArray)prototype).ArrayType));
     }
     else
     {
         throw new InvalidOperationException("Can't infer the Java type of " + dotNetType);
     }
 }