Ejemplo n.º 1
0
        string GenJavaDelegateCode(DelegateType d, ForeignMacroExpr dEntity, string entrypointName)
        {
            using (var tw = new StringWriter())
            {
                using (var ftw = new TextFormatter(tw))
                {
                    var voidReturn = d.ReturnType.IsVoid;
                    var name       = Convert.Name.JavaDelegateName(d);
                    var fullName   = Convert.Name.JavaDelegateName(d, true);
                    var package    = fullName.Substring(0, fullName.LastIndexOf('.'));
                    var implements = (voidReturn && d.Parameters.Length == 0) ? " implements java.lang.Runnable" : "";
                    ftw.WriteLine("package " + package + ";");
                    ftw.WriteLine("import com.foreign.*;");
                    ftw.WriteLine("import com.uno.BoolArray;");
                    ftw.WriteLine("import com.uno.ByteArray;");
                    ftw.WriteLine("import com.uno.CharArray;");
                    ftw.WriteLine("import com.uno.DoubleArray;");
                    ftw.WriteLine("import com.uno.FloatArray;");
                    ftw.WriteLine("import com.uno.IntArray;");
                    ftw.WriteLine("import com.uno.LongArray;");
                    ftw.WriteLine("import com.uno.ObjectArray;");
                    ftw.WriteLine("import com.uno.ShortArray;");
                    ftw.WriteLine("import com.uno.StringArray;");
                    ftw.WriteLine("import com.uno.UnoObject;");
                    ftw.WriteLine("");
                    ftw.WriteLine("public class " + name + " extends com.uno.UnoObject" + implements);
                    ftw.Indent("{");
                    ftw.WriteLine("public " + name + "(long ptr) { super(ptr); }");

                    ftw.Indent("public " + Convert.Type.UnoToJavaType(d.ReturnType, true) + " run(" + string.Join(", ", d.Parameters.Select(Convert.Param.UnoToJavaParameter)) + ") {");

                    var args = d.Parameters.Select(x => x.Name).ToList();
                    args.Insert(0, "this");

                    ftw.WriteLine((voidReturn ? "" : "return ") + dEntity.GenCallToNativeMethod(entrypointName, args) + ";");

                    ftw.Unindent("}");

                    ftw.Unindent("}");
                    var finalStr = tw.ToString();
                    return(finalStr);
                }
            }
        }
Ejemplo n.º 2
0
        string InterceptCallToUno(Function func, object callArgs)
        {
            var ufunc          = new ForeignMacroExpr(func, Convert, Helpers);
            var entrypointName = Convert.Name.GenNativeMethodName(func);

            // Add requirements
            BlockHost.RequireMember(func);
            BlockHost.Include(ufunc.EntrypointIncludes);

            // Generate c++ entrypoint
            BlockHost.AddCppEntrypoint(ufunc, entrypointName);

            // Generate java native method
            BlockHost.NativeJavaMethods.Add(ufunc.GenJavaNativeMethod(entrypointName));

            // Generate java call to java native method
            var args       = (List <string>)callArgs;
            var castedArgs = ufunc.Params.Zip(args, (x, y) => x.JavaArgCast + y);

            return(ufunc.GenCallToNativeMethod(entrypointName, new List <string>(castedArgs)));
        }
Ejemplo n.º 3
0
        string InterceptProperty(string macroText, string expansionResult, Property property, object callArgs)
        {
            var isGetter       = !macroText.Contains(":Set(");
            var ufunc          = new ForeignMacroExpr(property, isGetter, Convert, Helpers);
            var entrypointName = Convert.Name.GenNativePropertyName(property, isGetter);

            // Add requirements
            BlockHost.RequireMember(property);
            BlockHost.Include(property.DeclaringType);
            BlockHost.Include(ufunc.EntrypointIncludes);

            // Generate c++ entrypoint
            BlockHost.AddCppEntrypoint(ufunc, entrypointName);

            // Generate java native method
            BlockHost.NativeJavaMethods.Add(ufunc.GenJavaNativeMethod(entrypointName));

            // Generate java call to java native method
            var args = callArgs == null ? new List <string>() : new List <string>((List <string>)callArgs);

            return(ufunc.GenCallToNativeMethod(entrypointName, args));
        }