From f94fb52bfb8068909e4ae9ada3635238cac9ec32 Mon Sep 17 00:00:00 2001 From: the_fiddler Date: Mon, 5 Dec 2011 16:12:54 +0000 Subject: [PATCH] Do not rely on JNA types that are not available on Android. Replaced generic multiple wrappers by a single Buffer wrapper. --- Source/Bind/JavaSpecWriter.cs | 58 ++++++++++++++++++++++++----------- 1 file changed, 40 insertions(+), 18 deletions(-) diff --git a/Source/Bind/JavaSpecWriter.cs b/Source/Bind/JavaSpecWriter.cs index 82b25446..91cf9bdf 100644 --- a/Source/Bind/JavaSpecWriter.cs +++ b/Source/Bind/JavaSpecWriter.cs @@ -74,6 +74,8 @@ namespace Bind sw.WriteLine("package {0}.{1};", Settings.OutputNamespace, Settings.GLClass); sw.WriteLine(); + sw.WriteLine("import java.nio.*;"); + sw.WriteLine(); WriteDefinitions(sw, enums, wrappers, Type.CSTypes); @@ -144,17 +146,25 @@ namespace Bind sw.WriteLine("{"); sw.Indent(); int count = @enum.ConstantCollection.Values.Count; - foreach (var c in @enum.ConstantCollection.Values) + if (count == 0) { - sw.WriteLine(String.Format("{0}({1}{2}){3}", - c.Name, - !String.IsNullOrEmpty(c.Reference) ? (c.Reference + Settings.NamespaceSeparator) : "", - !String.IsNullOrEmpty(c.Reference) ? c.Value : c.Value.ToLower(), - --count == 0 ? ";" : ",")); + // Java enums must have at least one value. + sw.WriteLine("None;"); + } + else + { + foreach (var c in @enum.ConstantCollection.Values) + { + sw.WriteLine(String.Format("{0}({1}{2}){3}", + c.Name, + !String.IsNullOrEmpty(c.Reference) ? (c.Reference + Settings.NamespaceSeparator) : "", + !String.IsNullOrEmpty(c.Reference) ? c.Value : c.Value.ToLower(), + --count == 0 ? ";" : ",")); + } + sw.WriteLine(); + sw.WriteLine("{0} mValue;", @enum.Type); + sw.WriteLine("{0}({1} value) {{ mValue = value; }}", @enum.Name, @enum.Type); } - sw.WriteLine(); - sw.WriteLine("{0} mValue;", @enum.Type); - sw.WriteLine("{0}({1} value) {{ mValue = value; }}", @enum.Name, @enum.Type); sw.Unindent(); sw.WriteLine("}"); sw.WriteLine(); @@ -170,14 +180,15 @@ namespace Bind var valid = true; var generic_parameters = GenerateGenericTypeString(f); var parameters = GenerateParameterString(f, out valid); + var ret_parameter = GenerateReturnParameterString(f); if (!valid) return; if (!String.IsNullOrEmpty(generic_parameters)) sw.WriteLine("public static <{0}> {1} {2}({3})", generic_parameters, - f.ReturnType, f.TrimmedName, parameters); + ret_parameter, f.TrimmedName, parameters); else - sw.WriteLine("public static {0} {1}({2})", f.ReturnType, f.TrimmedName, + sw.WriteLine("public static {0} {1}({2})", ret_parameter, f.TrimmedName, parameters); sw.WriteLine("{"); @@ -196,8 +207,6 @@ namespace Bind // sw.WriteLine("GLES20.{0}{1};", f.WrappedDelegate.Name, callstring); } - #region GenerateParameterString - static string GenerateParameterString(Function f, out bool valid) { if (f == null) @@ -239,6 +248,13 @@ namespace Bind } else if (p.Array > 0) { + // Generic arrays are handled in the IntPtr case below. + if (p.Generic) + { + valid = false; + return String.Empty; + } + sb.Append(p.CurrentType); for (int i = 0; i < p.Array; i++) sb.Append("[]"); @@ -250,6 +266,10 @@ namespace Bind valid = false; return String.Empty; } + else if (p.CurrentType == "IntPtr") + { + sb.Append("Buffer"); + } else { sb.Append(p.CurrentType); @@ -267,10 +287,6 @@ namespace Bind return sb.ToString(); } - #endregion - - #region GenerateGenericTypeString - static string GenerateGenericTypeString(Function f) { var parameters = f.Parameters.Where(p => p.Generic); @@ -291,7 +307,13 @@ namespace Bind return String.Empty; } - #endregion + private static string GenerateReturnParameterString(Function f) + { + if (f.ReturnType.CurrentType == "IntPtr") + return "Buffer"; + else + return f.ReturnType.CurrentType; + } static DocProcessor processor = new DocProcessor(Path.Combine(Settings.DocPath, Settings.DocFile)); static Dictionary docfiles;