예제 #1
0
        public string[] PostCall(CodeGenerationOptions opt, string var_name)
        {
            string managed_name = opt.GetSafeIdentifier(var_name);
            string native_name  = opt.GetSafeIdentifier(TypeNameUtilities.GetNativeName(var_name));

            if (opt.CodeGenerationTarget == CodeGenerationTarget.JavaInterop1)
            {
                if (IsParams)
                {
                    return(new[] {
                        $"if ({managed_name} != null) {{",
                        $"\t{native_name}.CopyTo ({managed_name}, 0);",
                        $"\t{native_name}.Dispose ();",
                        $"}}",
                    });
                }
                return(new[] {
                    $"if ({managed_name} != null) {{",
                    $"\t{native_name}.DisposeUnlessReferenced ();",
                    $"}}",
                });
            }
            return(new[] {
                $"if ({managed_name} != null) {{",
                $"\tJNIEnv.CopyArray ({native_name}, {managed_name});",
                $"\tJNIEnv.DeleteLocalRef ({native_name});",
                $"}}",
            });
        }
예제 #2
0
        internal override void WriteFieldSetBody(Field field, string indent, GenBase type)
        {
            writer.WriteLine("{0}if ({1} == IntPtr.Zero)", indent, field.ID);
            writer.WriteLine("{0}\t{1} = JNIEnv.Get{2}FieldID (class_ref, \"{3}\", \"{4}\");", indent, field.ID, field.IsStatic ? "Static" : String.Empty, field.JavaName, field.Symbol.JniName);

            string arg;
            bool   have_prep = false;

            if (field.Symbol.IsArray)
            {
                arg = opt.GetSafeIdentifier(TypeNameUtilities.GetNativeName("value"));
                writer.WriteLine("{0}IntPtr {1} = global::Android.Runtime.JavaArray<{2}>.ToLocalJniHandle (value);", indent, arg, opt.GetOutputName(field.Symbol.ElementType));
            }
            else
            {
                foreach (string prep in field.SetParameters.GetCallPrep(opt))
                {
                    have_prep = true;
                    writer.WriteLine("{0}{1}", indent, prep);
                }

                arg = field.SetParameters [0].ToNative(opt);
                if (field.SetParameters.HasCleanup && !have_prep)
                {
                    arg = opt.GetSafeIdentifier(TypeNameUtilities.GetNativeName("value"));
                    writer.WriteLine("{0}IntPtr {1} = JNIEnv.ToLocalJniHandle (value);", indent, arg);
                }
            }

            writer.WriteLine("{0}try {{", indent);

            writer.WriteLine("{0}\tJNIEnv.Set{1}Field ({2}, {3}, {4});",
                             indent,
                             field.IsStatic
                                                ? "Static"
                                                : String.Empty,
                             field.IsStatic
                                                ? "class_ref"
                                                : type.GetObjectHandleProperty("this"),
                             field.ID,
                             arg);

            writer.WriteLine("{0}}} finally {{", indent);
            if (field.Symbol.IsArray)
            {
                writer.WriteLine("{0}\tJNIEnv.DeleteLocalRef ({1});", indent, arg);
            }
            else
            {
                foreach (string cleanup in field.SetParameters.GetCallCleanup(opt))
                {
                    writer.WriteLine("{0}\t{1}", indent, cleanup);
                }
                if (field.SetParameters.HasCleanup && !have_prep)
                {
                    writer.WriteLine("{0}\tJNIEnv.DeleteLocalRef ({1});", indent, arg);
                }
            }
            writer.WriteLine("{0}}}", indent);
        }
예제 #3
0
 public string[] PreCall(CodeGenerationOptions opt, string var_name)
 {
     return(new string[] {
         string.Format("var {0} = {1};",
                       opt.GetSafeIdentifier(TypeNameUtilities.GetNativeName(var_name)), opt.GetSafeIdentifier(var_name)),
     });
 }
 public string[] PreCall(CodeGenerationOptions opt, string var_name)
 {
     return(new string[] {
         string.Format("IntPtr {0} = JNIEnv.ToLocalJniHandle ({1});",
                       opt.GetSafeIdentifier(TypeNameUtilities.GetNativeName(var_name)), opt.GetSafeIdentifier(var_name)),
     });
 }
 public string[] PostCall(CodeGenerationOptions opt, string var_name)
 {
     return(new string[] {
         string.Format("JNIEnv.DeleteLocalRef ({0});",
                       opt.GetSafeIdentifier(TypeNameUtilities.GetNativeName(var_name))),
     });
 }
        internal override void WriteFieldSetBody(Field field, string indent, GenBase type)
        {
            writer.WriteLine("{0}const string __id = \"{1}.{2}\";", indent, field.JavaName, field.Symbol.JniName);
            writer.WriteLine();

            var invokeType = GetInvokeType(field.GetMethodPrefix);
            var indirect   = field.IsStatic ? "StaticFields" : "InstanceFields";

            string arg;
            bool   have_prep = false;

            if (field.Symbol.IsArray)
            {
                arg = opt.GetSafeIdentifier(TypeNameUtilities.GetNativeName("value"));
                writer.WriteLine("{0}IntPtr {1} = global::Android.Runtime.JavaArray<{2}>.ToLocalJniHandle (value);", indent, arg, opt.GetOutputName(field.Symbol.ElementType));
            }
            else
            {
                foreach (string prep in field.SetParameters.GetCallPrep(opt))
                {
                    have_prep = true;
                    writer.WriteLine("{0}{1}", indent, prep);
                }

                arg = field.SetParameters [0].ToNative(opt);
                if (field.SetParameters.HasCleanup && !have_prep)
                {
                    arg = opt.GetSafeIdentifier(TypeNameUtilities.GetNativeName("value"));
                    writer.WriteLine("{0}IntPtr {1} = global::Android.Runtime.JNIEnv.ToLocalJniHandle (value);", indent, arg);
                }
            }

            writer.WriteLine("{0}try {{", indent);

            writer.WriteLine("{0}\t_members.{1}.SetValue (__id{2}, {3});",
                             indent,
                             indirect,
                             field.IsStatic ? "" : ", this",
                             invokeType != "Object" ? arg : "new JniObjectReference (" + arg + ")");

            writer.WriteLine("{0}}} finally {{", indent);
            if (field.Symbol.IsArray)
            {
                writer.WriteLine("{0}\tglobal::Android.Runtime.JNIEnv.DeleteLocalRef ({1});", indent, arg);
            }
            else
            {
                foreach (string cleanup in field.SetParameters.GetCallCleanup(opt))
                {
                    writer.WriteLine("{0}\t{1}", indent, cleanup);
                }
                if (field.SetParameters.HasCleanup && !have_prep)
                {
                    writer.WriteLine("{0}\tglobal::Android.Runtime.JNIEnv.DeleteLocalRef ({1});", indent, arg);
                }
            }
            writer.WriteLine("{0}}}", indent);
        }
예제 #7
0
 public string[] PreCall(CodeGenerationOptions opt, string var_name)
 {
     return(new string[] {
         string.Format("IntPtr {0} = global::Android.Runtime.{1}Adapter.ToLocalJniHandle ({2});",
                       opt.GetSafeIdentifier(TypeNameUtilities.GetNativeName(var_name)),
                       base_name,
                       opt.GetSafeIdentifier(var_name)),
     });
 }
예제 #8
0
        public string[] PostCall(CodeGenerationOptions opt, string var_name)
        {
            string native_name = opt.GetSafeIdentifier(TypeNameUtilities.GetNativeName(var_name));

            string[] result = new string [2];
            result [0] = String.Format("if ({0} != null)", opt.GetSafeIdentifier(var_name));
            result [1] = String.Format("\t{0}.CopyTo({1}, 0);", native_name, opt.GetSafeIdentifier(var_name));
            return(result);
        }
예제 #9
0
 public string[] PreCallback(CodeGenerationOptions opt, string var_name, bool owned)
 {
     return(new string[] {
         string.Format("System.IO.Stream {0} = global::Android.Runtime.{1}Invoker.FromJniHandle ({2}, {3});",
                       var_name,
                       base_name,
                       opt.GetSafeIdentifier(TypeNameUtilities.GetNativeName(var_name)),
                       owned ? "JniHandleOwnership.TransferLocalRef" : "JniHandleOwnership.DoNotTransfer"),
     });
 }
 public string[] PreCallback(CodeGenerationOptions opt, string var_name, bool owned)
 {
     return(new string[] {
         string.Format("var {1} = global::Java.Lang.Object.GetObject<{0}> ({2}, {3});",
                       opt.GetOutputName(FullName),
                       var_name,
                       opt.GetSafeIdentifier(TypeNameUtilities.GetNativeName(var_name)),
                       owned ? "JniHandleOwnership.TransferLocalRef" : "JniHandleOwnership.DoNotTransfer"),
     });
 }
예제 #11
0
 public string[] PreCallback(CodeGenerationOptions opt, string var_name, bool owned)
 {
     return(new string[] {
         string.Format("var {0} = global::Java.Util.InteroperableArrays.ToLocal{1} ({2}, {3});",
                       opt.GetSafeIdentifier(var_name),
                       GetManagedTypeName(opt),
                       opt.GetSafeIdentifier(TypeNameUtilities.GetNativeName(var_name)),
                       owned ? "JniHandleOwnership.TransferLocalRef" : "JniHandleOwnership.DoNotTransfer"),
     });
 }
예제 #12
0
        public string[] PostCall(CodeGenerationOptions opt, string var_name)
        {
            string native_name = opt.GetSafeIdentifier(TypeNameUtilities.GetNativeName(var_name));

            string[] result = new string [4];
            result [0] = String.Format("if ({0} != null) {{", opt.GetSafeIdentifier(var_name));
            result [1] = String.Format("\tJNIEnv.CopyArray ({0}, {1});", native_name, opt.GetSafeIdentifier(var_name));
            result [2] = String.Format("\tJNIEnv.DeleteLocalRef ({0});", native_name);
            result [3] = "}";
            return(result);
        }
예제 #13
0
        public string[] PreCall(CodeGenerationOptions opt, string var_name)
        {
            string managed_name = opt.GetSafeIdentifier(var_name);
            string native_name  = opt.GetSafeIdentifier(TypeNameUtilities.GetNativeName(var_name));

            if (opt.CodeGenerationTarget == CodeGenerationTarget.JavaInterop1)
            {
                return(new[] {
                    $"var {native_name} = global::{GetJavaInterop1MarshalMethod ()} ({managed_name});",
                });
            }
            return(new string[] { String.Format("IntPtr {0} = JNIEnv.NewArray ({1});", opt.GetSafeIdentifier(TypeNameUtilities.GetNativeName(var_name)), opt.GetSafeIdentifier(var_name)) });
        }
예제 #14
0
        public string[] PostCall(CodeGenerationOptions opt, string var_name)
        {
            string native_name = opt.GetSafeIdentifier(TypeNameUtilities.GetNativeName(var_name));

            if (opt.CodeGenerationTarget == CodeGenerationTarget.JavaInterop1)
            {
                return(new[] {
                    $"global::Java.Interop.JniObjectReference.Dispose (ref {native_name});",
                });
            }
            return(new string[] {
                string.Format("JNIEnv.DeleteLocalRef ({0});", opt.GetSafeIdentifier(TypeNameUtilities.GetNativeName(var_name))),
            });
        }
예제 #15
0
        public string[] PreCall(CodeGenerationOptions opt, string var_name)
        {
            string managed_name = opt.GetSafeIdentifier(var_name);
            string native_name  = opt.GetSafeIdentifier(TypeNameUtilities.GetNativeName(var_name));

            if (opt.CodeGenerationTarget == CodeGenerationTarget.JavaInterop1)
            {
                return(new[] {
                    $"var {native_name} = global::Java.Interop.JniEnvironment.Strings.NewString ({managed_name});",
                });
            }
            return(new[] {
                $"IntPtr {native_name} = JNIEnv.NewString ({managed_name});",
            });
        }
예제 #16
0
        public string[] PostCallback(CodeGenerationOptions opt, string var_name)
        {
            string managed_name = opt.GetSafeIdentifier(var_name);
            string native_name  = opt.GetSafeIdentifier(TypeNameUtilities.GetNativeName(var_name));

            if (opt.CodeGenerationTarget == CodeGenerationTarget.JavaInterop1)
            {
                return(new string[] {
                    $"throw new NotSupportedException (\"ArraySymbol.PostCallback\");",
                });
            }
            return(new[] {
                $"if ({managed_name} != null)",
                $"\tJNIEnv.CopyArray ({managed_name}, {native_name});",
            });
        }
예제 #17
0
 public string[] PostCallback(CodeGenerationOptions opt, string var_name)
 {
     string[] result = new string [2];
     result [0] = String.Format("if ({0} != null)", opt.GetSafeIdentifier(var_name));
     result [1] = String.Format("\tglobal::Java.Util.InteroperableArrays.ArrayCopy({0}, {1});", opt.GetSafeIdentifier(var_name), opt.GetSafeIdentifier(TypeNameUtilities.GetNativeName(var_name)));
     return(result);
 }
예제 #18
0
 public string[] PostCallback(CodeGenerationOptions opt, string var_name)
 {
     string[] result = new string [2];
     result [0] = String.Format("if ({0} != null)", opt.GetSafeIdentifier(var_name));
     result [1] = String.Format("\tJNIEnv.CopyArray ({0}, {1});", opt.GetSafeIdentifier(var_name), opt.GetSafeIdentifier(TypeNameUtilities.GetNativeName(var_name)));
     return(result);
 }
예제 #19
0
 public string ToInteroperableJavaObject(string var_name)
 {
     return(GetGenericJavaObjectTypeOverride() != null?TypeNameUtilities.GetNativeName(var_name) : var_name);
 }
예제 #20
0
 public string[] PreCallback(CodeGenerationOptions opt, string var_name, bool owned)
 {
     return(new string[] { String.Format("string {0} = JNIEnv.GetString ({1}, JniHandleOwnership.DoNotTransfer);", opt.GetSafeIdentifier(var_name), opt.GetSafeIdentifier(TypeNameUtilities.GetNativeName(var_name))) });
 }
예제 #21
0
 public string[] PreCallback(CodeGenerationOptions opt, string var_name, bool owned)
 {
     return(new string[] { String.Format("var {1} = ({0}[]) JNIEnv.GetArray ({2}, JniHandleOwnership.DoNotTransfer, typeof ({3}));", opt.GetOutputName(ElementType), opt.GetSafeIdentifier(var_name), opt.GetSafeIdentifier(TypeNameUtilities.GetNativeName(var_name)), opt.GetOutputName(sym.FullName)) });
 }
 public string[] PreCallback(CodeGenerationOptions opt, string var_name, bool owned)
 {
     return(new string[] { String.Format("global::Java.Lang.ICharSequence {0} = global::Java.Lang.Object.GetObject<global::Java.Lang.ICharSequence> ({1}, JniHandleOwnership.DoNotTransfer);", var_name, TypeNameUtilities.GetNativeName(var_name)) });
 }
예제 #23
0
 public string[] PreCall(CodeGenerationOptions opt, string var_name)
 {
     return(new string[] { String.Format("var {0} = global::Java.Util.InteroperableArrays.NewArray ({1});", opt.GetSafeIdentifier(TypeNameUtilities.GetNativeName(var_name)), opt.GetSafeIdentifier(var_name)) });
 }
예제 #24
0
 public string[] PreCallback(CodeGenerationOptions opt, string var_name, bool owned)
 {
     return(new string[] { String.Format("var {1} = ({0}[]{4}) global::Java.Util.InteroperableArrays.GetArray<{3}> ({2}, JniHandleOwnership.DoNotTransfer);", opt.GetOutputName(ElementType), opt.GetSafeIdentifier(var_name), opt.GetSafeIdentifier(TypeNameUtilities.GetNativeName(var_name)), opt.GetOutputName(sym.FullName), opt.NullableOperator) });
 }
 public string[] PreCallback(CodeGenerationOptions opt, string var_name, bool owned)
 {
     return(new string[] { String.Format("var {0} = global::Android.Runtime.XmlResourceParserReader.FromJniHandle ({1}, JniHandleOwnership.DoNotTransfer);", opt.GetSafeIdentifier(var_name), opt.GetSafeIdentifier(TypeNameUtilities.GetNativeName(var_name))) });
 }
예제 #26
0
 public string[] PreCall(CodeGenerationOptions opt, string var_name)
 {
     return(new string[] { String.Format("JniObjectReference {0} = JniEnvironment.Strings.NewString ({1});", opt.GetSafeIdentifier(TypeNameUtilities.GetNativeName(var_name)), opt.GetSafeIdentifier(var_name)) });
 }
 public string Call(CodeGenerationOptions opt, string var_name)
 {
     return(opt.GetSafeIdentifier(TypeNameUtilities.GetNativeName(var_name)));
 }
예제 #28
0
 public string ToInteroperableJavaObject(string var_name)
 {
     return(TypeNameUtilities.GetNativeName(var_name));
 }
 public string[] PreCall(CodeGenerationOptions opt, string var_name)
 {
     return(new string[] { String.Format("IntPtr {0} = global::Android.Runtime.XmlReaderResourceParser.ToLocalJniHandle ({1});", opt.GetSafeIdentifier(TypeNameUtilities.GetNativeName(var_name)), opt.GetSafeIdentifier(var_name)) });
 }
예제 #30
0
 public string[] PreCallback(CodeGenerationOptions opt, string var_name, bool owned)
 {
     return(new string[] { String.Format("var {0} = JniEnvironment.Strings.ToString ({1});", opt.GetSafeIdentifier(var_name), opt.GetSafeIdentifier(TypeNameUtilities.GetNativeName(var_name))) });
 }