예제 #1
0
        static ConstantEntry FromVersion1String(CsvParser parser, bool transientMode)
        {
            var entry = new ConstantEntry {
                Action        = ConstantAction.Enumify,
                ApiLevel      = parser.GetFieldAsInt(0),
                EnumFullType  = parser.GetField(1),
                EnumMember    = parser.GetField(2),
                JavaSignature = parser.GetField(3),
                Value         = parser.GetField(4),
                IsFlags       = parser.GetField(5).ToLowerInvariant() == "flags",
                FieldAction   = transientMode ? FieldAction.Remove : FieldAction.Keep
            };

            if (!entry.EnumNamespace.HasValue())
            {
                // This is a line that only deletes a const, not maps it to an enum
                entry.Action      = ConstantAction.Remove;
                entry.FieldAction = FieldAction.Remove;
            }
            else if (!entry.JavaSignature.HasValue())
            {
                // This is a line that adds an unmapped enum member
                entry.Action      = ConstantAction.Add;
                entry.FieldAction = transientMode ? FieldAction.Remove : FieldAction.None;
            }

            entry.NormalizeJavaSignature();

            return(entry);
        }
        public static List <ConstantEntry> FromEnumMapCsv(TextReader reader)
        {
            var constants = new List <ConstantEntry> ();
            var transient = false;

            string s;

            // Read the enum csv file
            while ((s = reader.ReadLine()) != null)
            {
                // Skip empty lines and comments
                if (string.IsNullOrEmpty(s) || s.StartsWith("//", StringComparison.Ordinal))
                {
                    continue;
                }

                // Transient mode means remove the original field
                if (s == "- ENTER TRANSIENT MODE -")
                {
                    transient = true;
                    continue;
                }

                constants.Add(ConstantEntry.FromString(s, transient));
            }

            return(constants);
        }
예제 #3
0
        static ConstantEntry FromVersion2String(CsvParser parser)
        {
            var entry = new ConstantEntry {
                Action        = FromConstantActionString(parser.GetField(0)),
                ApiLevel      = parser.GetFieldAsInt(1),
                JavaSignature = parser.GetField(2),
                Value         = parser.GetField(3),
                EnumFullType  = parser.GetField(4),
                EnumMember    = parser.GetField(5),
                FieldAction   = FromFieldActionString(parser.GetField(6)),
                IsFlags       = parser.GetField(7).ToLowerInvariant() == "flags"
            };

            entry.NormalizeJavaSignature();

            return(entry);
        }
예제 #4
0
        public static ConstantEntry FromElement(XElement elem)
        {
            var entry = new ConstantEntry {
                Action        = ConstantAction.None,
                ApiLevel      = NamingConverter.ParseApiLevel(elem.Attribute("merge.SourceFile")?.Value),
                JavaSignature = elem.Parent.Parent.Attribute("name").Value,
                Value         = elem.Attribute("value")?.Value,
            };

            var java_package = elem.Parent.Parent.Attribute("name").Value.Replace('.', '/');
            var java_type    = elem.Parent.Attribute("name").Value.Replace('.', '$');
            var java_member  = elem.Attribute("name").Value;

            entry.JavaSignature = $"{java_package}/{java_type}.{java_member}".TrimStart('/');

            // Interfaces get an "I:" prefix
            if (elem.Parent.Name.LocalName == "interface")
            {
                entry.JavaSignature = "I:" + entry.JavaSignature;
            }

            return(entry);
        }
        public static List <ConstantEntry> FromApiXml(XDocument doc)
        {
            var int_fields = doc.XPathSelectElements("//field[@type='int']");

            return(int_fields.Select(f => ConstantEntry.FromElement(f)).Where(c => c.Value.HasValue()).ToList());
        }