Пример #1
0
 static GacUDT[] ExtractRelatedUDT(GacUDT udt)
 {
     if (udt.Name.StartsWith("vl::presentation::"))
     {
         return(udt.BaseClasses.Select(b => b.UDT).Concat(
                    udt.Fields.Where(f => f.Access == GacAccess.Public).SelectMany(f => ExtractRelatedUDT(f.Type)).Concat(
                        udt.StaticFields.Where(f => f.Access == GacAccess.Public).SelectMany(f => ExtractRelatedUDT(f.Type)).Concat(
                            udt.Methods.Where(f => f.Access == GacAccess.Public).SelectMany(f => ExtractRelatedUDT(f.Type)).Concat(
                                udt.StaticMethods.Where(f => f.Access == GacAccess.Public).SelectMany(f => ExtractRelatedUDT(f.Type))
                                )))).Distinct().ToArray());
     }
     else
     {
         return(new GacUDT[0]);
     }
 }
Пример #2
0
 static bool IsUDTImportant(GacUDT udt)
 {
     return(!udt.Name.StartsWith("vl::presentation::Description<") &&
            !udt.Name.StartsWith("vl::Func<") &&
            !udt.Name.StartsWith("vl::presentation::windows::") &&
            !udt.Name.Contains("vl::presentation::DescriptableValue") &&
            !udt.Name.Contains("vl::presentation::IType") &&
            !udt.Name.Contains("vl::presentation::IMemberDescriptor") &&
            !udt.Name.Contains("vl::presentation::IParameterDescriptor") &&
            !udt.Name.Contains("vl::presentation::IMethodDescriptor") &&
            !udt.Name.Contains("vl::presentation::IPropertyDescriptor") &&
            !udt.Name.Contains("vl::presentation::ITypeDescriptor") &&
            !udt.Name.Contains("vl::presentation::ITypeProvider") &&
            udt.Name != "vl::Interface" &&
            udt.Name != "vl::Object"
            );
 }
Пример #3
0
        static Dictionary <string, GacUDT> LoadXML(XDocument document)
        {
            Dictionary <string, GacUDT> udts = new Dictionary <string, GacUDT>();

            foreach (var udtElement in document.Root.Elements().Where(e => e.Name != "functions"))
            {
                GacUDT udt = new GacUDT();
                udt.Name = udtElement.Attribute("name").Value;
                switch (udtElement.Name.LocalName)
                {
                case "class":
                    udt.Kind = GacUDTKind.Class;
                    break;

                case "enum":
                    udt.Kind = GacUDTKind.Enum;
                    break;
                }
                udts.Add(udt.Name, udt);
            }
            foreach (var udtElement in document.Root.Elements().Where(e => e.Name != "functions"))
            {
                FillUdt(udts, udts[udtElement.Attribute("name").Value], udtElement);
            }
            foreach (var udt in udts.Values)
            {
                List <GacBaseClass> newBaseClasses  = new List <GacBaseClass>();
                HashSet <GacUDT>    baseBaseClasses = new HashSet <GacUDT>(udt.BaseClasses.SelectMany(b => GetBaseClasses(b.UDT)));
                foreach (var baseUdt in udt.BaseClasses)
                {
                    if (!baseBaseClasses.Contains(baseUdt.UDT))
                    {
                        newBaseClasses.Add(baseUdt);
                    }
                }
                udt.BaseClasses = newBaseClasses.ToArray();
            }
            return(udts);
        }
Пример #4
0
 static void FillUdt(Dictionary <string, GacUDT> udts, GacUDT udt, XElement udtElement)
 {
     udt.BaseClasses = udtElement.Element("baseClasses") == null ? new GacBaseClass[0] : udtElement
                       .Element("baseClasses")
                       .Elements("baseClass")
                       .Select(e => new GacBaseClass
     {
         Access = TranslateAccess(e.Attribute("access").Value),
         UDT    = udts[e.Attribute("name").Value],
     })
                       .ToArray();
     udt.Fields = udtElement.Element("fields") == null ? new GacField[0] : udtElement
                  .Element("fields")
                  .Elements("field")
                  .Select(e => TranslateField(udts, e, udt))
                  .ToArray();
     udt.StaticFields = udtElement.Element("fields") == null ? new GacField[0] : udtElement
                        .Element("fields")
                        .Elements("staticField")
                        .Select(e => TranslateField(udts, e, udt))
                        .ToArray();
     udt.Constants = udtElement.Element("fields") == null ? new GacConst[0] : udtElement
                     .Element("fields")
                     .Elements("const")
                     .Select(e => TranslateEnumField(udts, e, udt))
                     .ToArray();
     udt.Methods = udtElement.Element("methods") == null ? new GacMethod[0] : udtElement
                   .Element("methods")
                   .Elements("method")
                   .Select(e => TranslateMethod(udts, e, udt))
                   .ToArray();
     udt.StaticMethods = udtElement.Element("methods") == null ? new GacMethod[0] : udtElement
                         .Element("methods")
                         .Elements("staticMethod")
                         .Select(e => TranslateMethod(udts, e, udt))
                         .ToArray();
     udt.IsAbstract = udt.Methods.Any(m => m.Kind == GacMethodKind.Abstract);
 }
Пример #5
0
 static bool InheritsFromObjectOrInterface(GacUDT udt)
 {
     return(udt.BaseClasses.Any(t => t.UDT.Name == "vl::Object" || t.UDT.Name == "vl::Interface" || InheritsFromObjectOrInterface(t.UDT)));
 }
Пример #6
0
 static GacUDT[] GetBaseClasses(GacUDT udt)
 {
     return(udt.BaseClasses.Select(b => b.UDT).Concat(udt.BaseClasses.SelectMany(b => GetBaseClasses(b.UDT))).ToArray());
 }
Пример #7
0
 static GacMethod TranslateMethod(Dictionary <string, GacUDT> udts, XElement methodElement, GacUDT ownerUDT)
 {
     return(new GacMethod
     {
         Name = methodElement.Attribute("name").Value,
         Kind = TranslateVirtual(methodElement.Attribute("virtual").Value),
         Access = TranslateAccess(methodElement.Attribute("access").Value),
         Type = TranslateType(udts, methodElement.Element("type").Elements().First()),
         ParameterNames = methodElement.Element("arguments").Elements("argument").Select(e => e.Attribute("name").Value).ToArray(),
         OwnerUDT = ownerUDT,
     });
 }
Пример #8
0
        static GacConst TranslateEnumField(Dictionary <string, GacUDT> udts, XElement fieldElement, GacUDT ownerUDT)
        {
            GacField field = TranslateField(udts, fieldElement, ownerUDT);

            return(new GacConst
            {
                Name = field.Name,
                Access = field.Access,
                Type = field.Type,
                OwnerUDT = field.OwnerUDT,
                EnumItemValue = int.Parse(fieldElement.Element("intValue").Attribute("value").Value),
            });
        }
Пример #9
0
 static GacField TranslateField(Dictionary <string, GacUDT> udts, XElement fieldElement, GacUDT ownerUDT)
 {
     return(new GacField
     {
         Name = fieldElement.Attribute("name").Value,
         Access = TranslateAccess(fieldElement.Attribute("access").Value),
         Type = TranslateType(udts, fieldElement.Element("type").Elements().First()),
         OwnerUDT = ownerUDT,
     });
 }