public string CastJniToUno(DataType unoType, string line, bool stackArg) { var unbox = stackArg ? "UnBox" : "UnBoxFreeingLocalRef"; if (_helpers.IsPrimitive(unoType) || unoType.IsEnum) { return("(@{" + unoType.FullName + "})" + line); } if (unoType == _essentials.String) { return("JniHelper::JavaToUnoString((jstring)" + line + ")"); } if (IsJavaObject(unoType)) { return("(@{" + unoType.FullName + "})@{global::Android.Base.Wrappers.JavaObjectHelper.JObjectToJWrapper(global::Android.Base.Primitives.ujobject,bool):Call(" + line + ", " + stackArg.ToString().ToLower() + ")}"); } if (unoType.IsStruct) { return(_helpers.UnboxStruct(unoType, "@{" + ForeignJavaPass.UnoToJavaBoxingClass.FullName + "." + unbox + "(global::Android.Base.Primitives.ujobject):Call(" + line + ")}")); } if (!IsVoid(unoType)) { return(_helpers.CastTo(unoType, "@{" + ForeignJavaPass.UnoToJavaBoxingClass.FullName + "." + unbox + "(global::Android.Base.Primitives.ujobject):Call(" + line + ")}")); } throw new InvalidCastException("ForeignCode: Could not establish how to convert from '" + line + "' to the uno type '" + unoType + "'"); }
public MacroParam(Parameter p, Converters.Converter convert, ForeignHelpers helpers) { var unoArgName = "uno_" + p.Name; var isThis = (p.Name == CppThisArgName || p.Name == DelegateArgName); var callForm = helpers.IsPrimitive(p.Type) || p.Type.IsEnum || p.Type.IsStruct ? unoArgName : helpers.CastTo(p.Type, unoArgName); UnoArgName = unoArgName; Type = p.Type; JniSigType = convert.Type.UnoToJniSigType(p.Type); CppArgName = p.Name + _javaArgPointerPostfix; CppTypedName = UnoToJniParameter(p, convert); JavaArgCast = "(" + convert.Type.UnoToJavaType(p.Type, false) + ")"; JavaTypedName = convert.Param.UnoToJavaParameter(p); JniToUnoCoversion = GenToUnoConversion(p, unoArgName, convert, helpers); if (!helpers.IsPrimitive(p) && p.Type.IsStruct) { Console.Write(""); } CallForm = callForm; HasPointerArg = convert.Type.IsJavaObject(p.Type); IsThis = isThis; }