コード例 #1
0
        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();
        }
コード例 #2
0
 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);
 }
コード例 #3
0
        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);
        }
コード例 #4
0
ファイル: MethodBase.cs プロジェクト: windperson/java.interop
        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));
        }