Esempio n. 1
0
        public CodeExpression FromNative(CodeExpression arg)
        {
            switch (GetKind(type))
            {
            // ArraySymbol:
            //	return String.Format ("({0}[]) JNIEnv.GetArray ({1}, {2}, typeof ({3}))", ElementType, var_name, owned ? "JniHandleOwnership.TransferLocalRef" : "JniHandleOwnership.DoNotTransfer", opt.GetOutputName (sym.FullName));
            case SymbolKind.Array:
                return(new CodeMethodCall(jnienv_getarray.MakeGenericMethod(type.GetElementType()), arg, do_not_transfer_literal, new CodeLiteral(type)).CastTo(type.GetElementType().MakeArrayType()));

            // CharSequence:
            //	return String.Format ("Java.Lang.Object.GetObject<Java.Lang.ICharSequence> ({0}, {1})", var_name, owned ? "JniHandleOwnership.TransferLocalRef" : "JniHandleOwnership.DoNotTransfer");
            case SymbolKind.CharSequence:
                return(new CodeMethodCall(object_getobject.MakeGenericMethod(type), arg, do_not_transfer_literal));

            // ClassGen:
            //	return String.Format ("Java.Lang.Object.GetObject<{0}> ({1}, {2})", opt.GetOutputName (FullName), varname, owned ? "JniHandleOwnership.TransferLocalRef" : "JniHandleOwnership.DoNotTransfer");
            case SymbolKind.Class:
                return(new CodeMethodCall(object_getobject.MakeGenericMethod(type), arg, do_not_transfer_literal));

            // EnumSymbol:
            //	return String.Format ("({0}) {1}", type, varname);
            case SymbolKind.Enum:
                return(arg.CastTo(type));

            // SimpleSymbol/FormatSymbol:
            //	return as is
            case SymbolKind.SimpleFormat:
                return(arg);

            /*
             * // GenericSymbol:
             * //	return gen.FromNative (opt, varname, owned);
             * case SymbolKind.Generic:
             *      throw new NotImplementedException ();
             */

            // GenericTypeParameter:
            //	return String.Format ("({0}) Java.Lang.Object.GetObject<{3}> ({1}, {2})", type, varname, owned ? "JniHandleOwnership.TransferLocalRef" : "JniHandleOwnership.DoNotTransfer", FullName);
            case SymbolKind.GenericTypeParameter:
                return(new CodeMethodCall(object_getobject.MakeGenericMethod(type), arg, do_not_transfer_literal).CastTo(type));

            // InterfaceGen:
            //	return String.Format ("Java.Lang.Object.GetObject<{0}> ({1}, {2})", opt.GetOutputName (FullName), varname, owned ? "JniHandleOwnership.TransferLocalRef" : "JniHandleOwnership.DoNotTransfer");
            case SymbolKind.Interface:
                return(new CodeMethodCall(object_getobject.MakeGenericMethod(type), arg, do_not_transfer_literal));

            // StreamSymbol:
            //	return String.Format (opt.GetOutputName ("Android.Runtime.{0}Invoker") + ".FromJniHandle ({1}, {2})", base_name, var_name, owned ? "JniHandleOwnership.TransferLocalRef" : "JniHandleOwnership.DoNotTransfer");
            case SymbolKind.Stream:
                switch (parameter_kind)
                {
                case ExportParameterKind.InputStream:
                    return(new CodeMethodCall(inputstreaminvoker_fromjnihandle, arg, do_not_transfer_literal));

                case ExportParameterKind.OutputStream:
                    return(new CodeMethodCall(outputstreaminvoker_fromjnihandle, arg, do_not_transfer_literal));

                default:
                    throw new NotSupportedException("To use Stream type in callback, ExportParameterAttribute is required on the parameter to indicate its Java appropriate parameter kind");
                }

            // StringSymbol:
            //	return String.Format ("JNIEnv.GetString ({0}, {1})", var_name, owned ? "JniHandleOwnership.TransferLocalRef" : "JniHandleOwnership.DoNotTransfer");
            case SymbolKind.String:
                return(new CodeMethodCall(jnienv_getstring, arg, do_not_transfer_literal));

            // XmlPullParserSymbol:
            //	return String.Format (opt.GetOutputName ("Android.Runtime.XmlPullParserReader") + ".FromJniHandle ({0}, {1})", var_name, owned ? "JniHandleOwnership.TransferLocalRef" : "JniHandleOwnership.DoNotTransfer");
            // XmlResourceParserSymbol:
            //	return String.Format (opt.GetOutputName ("Android.Runtime.XmlResourceParserReader") + ".FromJniHandle ({0}, {1})", var_name, owned ? "JniHandleOwnership.TransferLocalRef" : "JniHandleOwnership.DoNotTransfer");
            case SymbolKind.XmlReader:
                switch (parameter_kind)
                {
                case ExportParameterKind.XmlPullParser:
                    return(new CodeMethodCall(xmlpullparserreader_fromjnihandle, arg, do_not_transfer_literal));

                case ExportParameterKind.XmlResourceParser:
                    return(new CodeMethodCall(xmlresourceparserreader_fromjnihandle, arg, do_not_transfer_literal));

                default:
                    throw new NotSupportedException("To use XmlReader type in callback, ExportParameterAttribute is required on the parameter to indicate its Java appropriate parameter kind");
                }
            }

            throw new InvalidOperationException();
        }
Esempio n. 2
0
        // Ignore ToNative() overload that takes generic instancing mapping. The reflected method should have nothing to do with it.
        public CodeExpression ToNative(CodeExpression arg)
        {
            switch (GetKind(type))
            {
            // ArraySymbol:
            //	return String.Format ("JNIEnv.NewArray ({0})", var_name);
            case SymbolKind.Array:
                return(new CodeMethodCall(jnienv_newarray.MakeGenericMethod(type.GetElementType()), arg));

            // CharSequenceSymbol:
            //	return String.Format ("CharSequence.ToLocalJniHandle ({0})", var_name);
            case SymbolKind.CharSequence:
                return(new CodeMethodCall(charsequence_tojnihandle, arg));

            // ClassGen:
            //	return String.Format ("JNIEnv.ToLocalJniHandle ({0})", varname);
            case SymbolKind.Class:
                return(new CodeMethodCall(jnienv_tojnihandle, arg));

            // CollectionSymbol:
            //	return String.Format ("{0}.ToLocalJniHandle ({1})", opt.GetOutputName (marshaler + (parms != null && parms.IsConcrete ? parms.ToString () : String.Empty)), varname);
            case SymbolKind.Collection:
                return(new CodeMethodCall(type.GetMethod("ToLocalJniHandle"), arg));

            // EnumSymbol:
            //	return "(int) " + varname;
            case SymbolKind.Enum:
                return(arg.CastTo(typeof(int)));

            // SimpleSymbol/FormatSymbol:
            //	return as is
            case SymbolKind.SimpleFormat:
                return(arg);

            /*
             * // GenericSymbol:
             * case SymbolKind.Generic:
             *      throw new NotImplementedException ();
             */

            // GenericTypeParameter:
            //	return String.Format ("JNIEnv.ToLocalJniHandle ({0})", varname);
            case SymbolKind.GenericTypeParameter:
                return(new CodeMethodCall(jnienv_tojnihandle, arg));

            // InterfaceGen:
            //	return String.Format ("JNIEnv.ToLocalJniHandle ({0})", varname);
            case SymbolKind.Interface:
                return(new CodeMethodCall(jnienv_tojnihandle, arg));

            // StreamSymbol:
            case SymbolKind.Stream:
                //	return String.Format (opt.GetOutputName ("Android.Runtime.{0}Adapter") + ".ToLocalJniHandle ({1})", base_name, var_name);
                switch (parameter_kind)
                {
                case ExportParameterKind.InputStream:
                    return(new CodeMethodCall(inputstreamadapter_tojnihandle, arg));

                case ExportParameterKind.OutputStream:
                    return(new CodeMethodCall(outputstreamadapter_tojnihandle, arg));

                default:
                    throw new NotSupportedException("To use Stream type in callback, ExportParameterAttribute is required on the parameter to indicate its Java appropriate parameter kind");
                }

            // StringSymbol:
            //	return String.Format ("JNIEnv.NewString ({0})", var_name);
            case SymbolKind.String:
                return(new CodeMethodCall(jnienv_newstring, arg));

            // XmlPullParserSymbol:
            //	return String.Format ("global::Android.Runtime.XmlReaderPullParser.ToLocalJniHandle ({0})", var_name);
            // XmlResourceParserSymbol:
            //	return String.Format ("global::Android.Runtime.XmlReaderResourceParser.ToLocalJniHandle ({0})", var_name);
            case SymbolKind.XmlReader:
                switch (parameter_kind)
                {
                case ExportParameterKind.XmlPullParser:
                    return(new CodeMethodCall(xmlreaderpullparser_tojnihandle, arg));

                case ExportParameterKind.XmlResourceParser:
                    return(new CodeMethodCall(xmlreaderresourceparser_tojnihandle, arg));

                default:
                    throw new NotSupportedException("To use XmlReader type in callback, ExportParameterAttribute is required on the parameter to indicate its Java appropriate parameter kind");
                }
            }

            throw new InvalidOperationException();
        }
 public static CodeCastExpression CastTo(this CodeExpression expr, Type type)
 {
     return(expr.CastTo(Easy.TypeRef(type)));
 }