Beispiel #1
0
        public string AutoDetectEnumifiedOverrideReturn(AncestorDescendantCache cache)
        {
            if (RetVal.FullName != "int")
            {
                return(null);
            }

            var classes = cache.GetAncestorsAndDescendants(DeclaringType);

            classes = classes.Concat(classes.SelectMany(x => x.GetAllImplementedInterfaces()));

            foreach (var t in classes)
            {
                foreach (var candidate in t.GetAllMethods().Where(m => m.Name == Name && m.Parameters.Count == Parameters.Count))
                {
                    if (JniSignature != candidate.JniSignature)
                    {
                        continue;
                    }
                    if (candidate.IsReturnEnumified)
                    {
                        RetVal.SetGeneratedEnumType(candidate.RetVal.FullName);
                    }
                }
            }
            return(null);
        }
Beispiel #2
0
        public void AutoDetectEnumifiedOverrideProperties(AncestorDescendantCache cache)
        {
            if (Type != "int")
            {
                return;
            }

            var classes = cache.GetAncestorsAndDescendants(Getter.DeclaringType);

            classes = classes.Concat(classes.SelectMany(x => x.GetAllImplementedInterfaces()));

            foreach (var t in classes)
            {
                foreach (var candidate in t.Properties.Where(p => p.Name == Name))
                {
                    if (Getter.JniSignature != candidate.Getter.JniSignature)
                    {
                        continue;
                    }
                    if (candidate.Getter.IsReturnEnumified)
                    {
                        Getter.RetVal.SetGeneratedEnumType(candidate.Getter.RetVal.FullName);
                    }
                }
            }
        }
        public string [] AutoDetectEnumifiedOverrideParameters(AncestorDescendantCache cache)
        {
            if (Parameters.All(p => p.Type != "int"))
            {
                return(null);
            }

            var classes = cache.GetAncestorsAndDescendants(DeclaringType);

            classes = classes.Concat(classes.SelectMany(x => x.GetAllImplementedInterfaces()));

            foreach (var t in classes)
            {
                foreach (var candidate in t.GetAllMethods().Where(m => m.Name == Name &&
                                                                  m.Parameters.Count == Parameters.Count &&
                                                                  m.Parameters.Any(p => p.IsEnumified)))
                {
                    var  ret      = new string [Parameters.Count];
                    bool mismatch = false;
                    for (int i = 0; i < Parameters.Count; i++)
                    {
                        if (Parameters [i].Type == "int" && candidate.Parameters [i].IsEnumified)
                        {
                            ret [i] = candidate.Parameters [i].Type;
                        }
                        else if (Parameters [i].Type != candidate.Parameters [i].Type)
                        {
                            mismatch = true;
                            break;
                        }
                    }
                    if (mismatch)
                    {
                        continue;
                    }
                    for (int i = 0; i < ret.Length; i++)
                    {
                        if (ret [i] != null)
                        {
                            Parameters [i].SetGeneratedEnumType(ret [i]);
                        }
                    }
                    return(ret);
                }
            }
            return(null);
        }