public static string GetId(this Parameter parameter, ParametersMember member) { var id = new StringBuilder(); id.AppendFormat("{0}#", member.GetId()); id.Append(Array.IndexOf(member.Parameters, parameter)); return(id.ToString()); }
IEnumerable<DataType> CalcImportsForExternBlock(ParametersMember func) { var ret = new List<DataType> {func.DeclaringType}; ret.AddRange(CalcImportsForExternBlock(func.ReturnType)); foreach (var arg in func.Parameters) if (arg.Type.IsGenericParameterization) foreach (var genericParam in arg.Type.GenericArguments) ret.AddRange(CalcImportsForExternBlock(genericParam)); return ret; }
void ValidateMethod(ParametersMember f, IEssentials essentials) { if (f.Parameters.Any(x => x.Type.IsGenericType)) { throw new Exception("Foreign Code Limitation: The compiler cannot currently convert generics arguments to a Java types.\nFound in: " + f.FullName); } if (f.ReturnType.IsGenericType) { throw new Exception("Foreign Code Limitation: The compiler cannot currently handle generics return types.\nFound in: " + f.FullName); } foreach (var p in f.Parameters) { if ((p.Type.IsEnum ? p.Type.Base : p.Type) == _essentials.Byte) { throw new Exception("Foreign Code Limitation: Method '" + f.FullName + "' has an argument '" + p.UnoName + "' of type byte. Java does not support byte. It does however support sbyte."); } } if ((f.ReturnType.IsEnum ? f.ReturnType.Base : f.ReturnType) == _essentials.Byte) { throw new Exception("Foreign Code Limitation: Method '" + f.FullName + "' has a return type of byte. Java does not support byte. It does however support sbyte."); } }