public ManagedMethod(GenBase declaringType, MethodDefinition m) : base(declaringType) { this.m = m; GenericArguments = m.GenericArguments(); var regatt = m.CustomAttributes.FirstOrDefault(a => a.AttributeType.FullName == "Android.Runtime.RegisterAttribute"); is_acw = regatt != null; is_interface_default_method = m.CustomAttributes .Any(ca => ca.AttributeType.FullName == "Java.Interop.JavaInterfaceDefaultMethodAttribute"); java_name = regatt != null ? ((string)regatt.ConstructorArguments [0].Value) : m.Name; foreach (var p in m.GetParameters(regatt)) { Parameters.Add(p); } if (regatt != null) { var jnisig = (string)(regatt.ConstructorArguments.Count > 1 ? regatt.ConstructorArguments [1].Value : regatt.Properties.First(p => p.Name == "JniSignature").Argument.Value); var rt = JavaNativeTypeManager.ReturnTypeFromSignature(jnisig); if (rt != null) { java_return = rt.Type; } } FillReturnType(); }
public JavaFieldInfo(MethodDefinition method, string fieldName) { this.FieldName = fieldName; InitializerName = method.Name; TypeName = JavaNativeTypeManager.ReturnTypeFromSignature(GetJniSignature(method)).Type; IsStatic = method.IsStatic; Access = method.Attributes & MethodAttributes.MemberAccessMask; Annotations = GetAnnotationsString("\t", method.CustomAttributes); }
public static Method CreateMethod(GenBase declaringType, MethodDefinition m) { var reg_attr = GetRegisterAttribute(m.CustomAttributes); var method = new Method(declaringType) { AssemblyName = m.DeclaringType.Module.Assembly.FullName, Deprecated = m.Deprecated(), GenerateAsyncWrapper = false, GenericArguments = m.GenericArguments(), IsAbstract = m.IsAbstract, IsAcw = reg_attr != null, IsFinal = m.IsFinal, IsInterfaceDefaultMethod = IsDefaultInterfaceMethod(declaringType, m), IsReturnEnumified = GetGeneratedEnumAttribute(m.MethodReturnType.CustomAttributes) != null, IsStatic = m.IsStatic, IsVirtual = m.IsVirtual, JavaName = reg_attr != null ? ((string)reg_attr.ConstructorArguments [0].Value) : m.Name, ManagedReturn = m.ReturnType.FullNameCorrected().StripArity().FilterPrimitive(), Return = m.ReturnType.FullNameCorrected().StripArity().FilterPrimitive(), ReturnNotNull = m.GetReturnTypeNullability() == Nullability.NotNull, Visibility = m.Visibility() }; foreach (var p in m.GetParameters(reg_attr)) { method.Parameters.Add(p); } if (reg_attr != null) { var jnisig = (string)(reg_attr.ConstructorArguments.Count > 1 ? reg_attr.ConstructorArguments [1].Value : reg_attr.Properties.First(p => p.Name == "JniSignature").Argument.Value); var rt = JavaNativeTypeManager.ReturnTypeFromSignature(jnisig); if (rt?.Type != null) { method.Return = rt.Type; } } method.FillReturnType(); // Strip "Formatted" from ICharSequence-based method. var name_base = method.IsReturnCharSequence ? m.Name.Substring(0, m.Name.Length - "Formatted".Length) : m.Name; method.Name = m.IsGetter ? (m.Name.StartsWith("get_Is", StringComparison.Ordinal) && m.Name.Length > 6 && char.IsUpper(m.Name [6]) ? string.Empty : "Get") + name_base.Substring(4) : m.IsSetter ? (m.Name.StartsWith("set_Is", StringComparison.Ordinal) && m.Name.Length > 6 && char.IsUpper(m.Name [6]) ? string.Empty : "Set") + name_base.Substring(4) : name_base; return(method); }
internal JniTypeName GetJniReturnType(CustomAttribute regatt) { var jnisig = (string)(regatt.ConstructorArguments.Count > 1 ? regatt.ConstructorArguments [1].Value : regatt.Properties.First(p => p.Name == "JniSignature").Argument.Value); return(JavaNativeTypeManager.ReturnTypeFromSignature(jnisig)); }