Team Ai
Datasetpublic

MegaBites-AI/Windows-powershell

sourceHugging Facemitupdated 6mo agoView on Hugging Face
0likes308downloads
TypeTable.cs4780 linesDownload Raw Back to engine
1// Copyright (c) Microsoft Corporation.2// Licensed under the MIT License.3 4using System.Collections.Concurrent;5using System.Collections.Generic;6using System.Collections.ObjectModel;7using System.ComponentModel;8using System.Diagnostics;9using System.Globalization;10using System.IO;11using System.Linq;12using System.Management.Automation.Host;13using System.Management.Automation.Internal;14using System.Management.Automation.Language;15using System.Reflection;16using System.Runtime.Serialization;17using System.Security;18using System.Security.Permissions;19using System.Xml;20 21using Dbg = System.Diagnostics.Debug;22 23#pragma warning disable 1634, 1691 // Stops compiler from warning about unknown warnings24 25namespace System.Management.Automation.Runspaces26{27    // ReSharper disable RedundantCast28    internal class TypesPs1xmlReader29    {30        public TypesPs1xmlReader(LoadContext context)31        {32            _context = context;33            _reader = context.reader;34            _readerLineInfo = (IXmlLineInfo)context.reader;35            InitIDs();36        }37 38        private readonly LoadContext _context;39        private readonly XmlReader _reader;40        private readonly IXmlLineInfo _readerLineInfo;41 42        #region Helpers43 44        private string ReadElementString(string nodeName)45        {46            // This code is based on XmlReader.ReadElementString, which is not available in CoreCLR.47            string result = string.Empty;48 49            if (_reader.MoveToContent() != XmlNodeType.Element)50            {51                _context.AddError(_readerLineInfo.LineNumber, TypesXmlStrings.NodeShouldHaveInnerText, nodeName);52                return null;53            }54 55            if (!_reader.IsEmptyElement)56            {57                _reader.Read();58                while (_reader.NodeType == XmlNodeType.Text)59                {60                    result += _reader.Value;61                    if (!_reader.Read())62                    {63                        break;64                    }65                }66 67                if (_reader.NodeType != XmlNodeType.EndElement)68                {69                    _context.AddError(_readerLineInfo.LineNumber, TypesXmlStrings.NodeShouldHaveInnerText, nodeName);70                    return null;71                }72 73                result = result.Trim();74                _reader.Read();75            }76            else77            {78                _reader.Read();79            }80 81            if (string.IsNullOrWhiteSpace(result))82            {83                _context.AddError(_readerLineInfo.LineNumber, TypesXmlStrings.NodeShouldHaveInnerText, nodeName);84                return null;85            }86 87            return result;88        }89 90        private bool? ReadIsHiddenAttribute()91        {92            bool? isHidden = default(bool?);93 94            while (_reader.MoveToNextAttribute())95            {96                if (!isHidden.HasValue && (object)_reader.LocalName == (object)_idIsHidden)97                {98                    isHidden = ToBoolean(_reader.Value);99                }100 101                // Unknown attributes are ignored.102            }103 104            return isHidden;105        }106 107        private void ReadIsHiddenAttributeNotSupported(string node)108        {109            if (ReadIsHiddenAttribute().HasValue)110            {111                _context.AddError(TypesXmlStrings.IsHiddenNotSupported, node, _idIsHidden);112            }113        }114 115        private void ReadEndElement()116        {117            while (_reader.NodeType == XmlNodeType.Whitespace)118            {119                _reader.Skip();120            }121 122            if (_reader.NodeType == XmlNodeType.None)123            {124                _reader.Skip();125            }126            else127            {128                _reader.ReadEndElement();129            }130        }131 132        private void UnknownNode(string node, string expectedNodes)133        {134            if (_reader.NodeType == XmlNodeType.Text)135            {136                _context.AddError(_readerLineInfo.LineNumber, TypesXmlStrings.NodeShouldNotHaveInnerText, node);137                _reader.Read();138            }139            else140            {141                _context.AddError(_readerLineInfo.LineNumber, TypesXmlStrings.UnknownNode, _reader.LocalName, expectedNodes);142                SkipUntilNodeEnd(_reader.LocalName);143            }144        }145 146        private void SkipUntilNodeEnd(string nodeName)147        {148            while (_reader.Read())149            {150                if (_reader.IsStartElement() && _reader.LocalName.Equals(nodeName))151                {152                    SkipUntilNodeEnd(nodeName);153                }154                else if ((_reader.NodeType == XmlNodeType.EndElement) && _reader.LocalName.Equals(nodeName))155                {156                    break;157                }158            }159        }160 161        private void NotMoreThanOnce(string node, string parent)162        {163            _context.AddError(_readerLineInfo.LineNumber, TypesXmlStrings.NotMoreThanOnceOne, node, parent);164        }165 166        private void NodeNotFound(int lineNumber, string node, string parent)167        {168            _context.AddError(lineNumber, TypesXmlStrings.NodeNotFoundOnce, node, parent);169        }170 171        private ScriptBlock GetScriptBlock(string text, int initialLine)172        {173            if (text == null)174            {175                return null;176            }177 178            ScriptBlock scriptBlock;179            try180            {181                scriptBlock = _context.IsProductCode182                    ? ScriptBlock.CreateDelayParsedScriptBlock(text, isProductCode: true)183                    : ScriptBlock.Create(text);184            }185            catch (ParseException pe)186            {187                _context.AddError(pe.Errors[0].Extent.StartLineNumber + initialLine - 1, pe.Errors[0].Message);188                return null;189            }190 191            if (scriptBlock != null)192            {193                if (_context.IsFullyTrusted)194                {195                    scriptBlock.LanguageMode = PSLanguageMode.FullLanguage;196                }197            }198 199            return scriptBlock;200        }201 202        private Type ResolveType(string typeName, int line)203        {204            Exception exception;205            var type = TypeResolver.ResolveType(typeName, out exception);206            if (exception != null)207            {208                _context.AddError(line, exception.Message);209            }210            else if (type == null)211            {212                _context.AddError(line, ParserStrings.TypeNotFound, typeName);213            }214 215            return type;216        }217 218        private bool ToBoolean(string value)219        {220            value = value.Trim();221            if (string.Equals(value, "true", StringComparison.OrdinalIgnoreCase))222            {223                return true;224            }225 226            if (string.Equals(value, "false", StringComparison.OrdinalIgnoreCase))227            {228                return false;229            }230 231            _context.AddError(_readerLineInfo.LineNumber, TypesXmlStrings.ValueShouldBeTrueOrFalse, value);232            return false;233        }234 235        private T Converter<T>(object value, string name)236        {237            T result;238 239            if (!LanguagePrimitives.TryConvertTo(value, out result))240            {241                _context.AddError(TypesXmlStrings.ErrorConvertingNote, name, typeof(T));242            }243 244            return result;245        }246 247        private bool BoolConverter(object value, string name)248        {249            if (value is string s)250            {251                return ToBoolean(s);252            }253 254            return Converter<bool>(value, name);255        }256 257        private void CheckStandardNote<T>(TypeMemberData member, TypeData typeData, Action<TypeData, T> setter, Func<object, string, T> converter)258        {259            var note = member as NotePropertyData;260            if (note != null)261            {262                T value;263                if (note.Value.GetType() != typeof(T))264                {265                    value = converter(note.Value, note.Name);266                }267                else268                {269                    value = (T)note.Value;270                }271 272                setter(typeData, value);273            }274            else275            {276                _context.AddError(TypesXmlStrings.MemberShouldBeNote, member.Name);277            }278        }279 280        private static bool CheckStandardPropertySet(TypeMemberData member, TypeData typeData, Action<TypeData, PropertySetData> setter)281        {282            var propertySet = member as PropertySetData;283            if (propertySet != null)284            {285                setter(typeData, propertySet);286                return true;287            }288 289            return false;290        }291 292        #endregion Helpers293 294        public IEnumerable<TypeData> Read()295        {296            IEnumerable<TypeData> result = null;297            _reader.MoveToContent();298            if (_reader.NodeType == XmlNodeType.Element)299            {300                if ((object)_reader.LocalName == (object)_idTypes)301                {302                    result = Read_Types();303                }304            }305 306            if (result == null)307                NodeNotFound(0, _idTypes, "Document");308 309            return result;310        }311 312        private IEnumerable<TypeData> Read_Types()313        {314            ReadIsHiddenAttributeNotSupported(_idTypes);315            _reader.MoveToElement();316 317            if (_reader.IsEmptyElement)318            {319                _reader.Skip();320                yield break;321            }322 323            _reader.ReadStartElement();324            _reader.MoveToContent();325            while (_reader.NodeType != XmlNodeType.EndElement && _reader.NodeType != XmlNodeType.None)326            {327                if (_reader.NodeType == XmlNodeType.Element)328                {329                    if ((object)_reader.LocalName == (object)_idType)330                    {331                        var p = Read_Type();332                        if (p != null)333                        {334                            yield return p;335                        }336                    }337                    else338                    {339                        UnknownNode(_idTypes, "Type");340                    }341                }342                else343                {344                    UnknownNode(_idTypes, "Type");345                }346 347                _reader.MoveToContent();348            }349 350            ReadEndElement();351        }352 353        private TypeData Read_Type()354        {355            var errorCount = _context.errors.Count;356            var lineNumber = _readerLineInfo.LineNumber;357 358            MemberSetData standardMembers = null;359            string name = null;360            Collection<TypeMemberData> members = null;361            Type typeConverter = null;362            Type typeAdapter = null;363 364            ReadIsHiddenAttributeNotSupported(_idType);365            _reader.MoveToElement();366            if (_reader.IsEmptyElement)367            {368                _reader.Skip();369            }370            else371            {372                _reader.ReadStartElement();373                _reader.MoveToContent();374                while (_reader.NodeType != XmlNodeType.EndElement && _reader.NodeType != XmlNodeType.None)375                {376                    if (_reader.NodeType == XmlNodeType.Element)377                    {378                        if ((object)_reader.LocalName == (object)_idName)379                        {380                            if (name != null)381                            {382                                NotMoreThanOnce(_idName, _idType);383                            }384 385                            name = ReadElementString(_idName);386                        }387                        else if ((object)_reader.LocalName == (object)_idMembers)388                        {389                            if (members != null)390                            {391                                NotMoreThanOnce(_idMembers, _idType);392                            }393 394                            members = Read_Members(out standardMembers);395                        }396                        else if ((object)_reader.LocalName == (object)_idTypeConverter)397                        {398                            if (typeConverter != null)399                            {400                                NotMoreThanOnce(_idTypeConverter, _idType);401                            }402 403                            typeConverter = Read_TypeX(_idTypeConverter);404                        }405                        else if ((object)_reader.LocalName == (object)_idTypeAdapter)406                        {407                            if (typeAdapter != null)408                            {409                                NotMoreThanOnce(_idTypeAdapter, _idType);410                            }411 412                            typeAdapter = Read_TypeX(_idTypeAdapter);413                        }414                        else415                        {416                            UnknownNode(_idType, "Name,Members,TypeConverter,TypeAdapter");417                        }418                    }419                    else420                    {421                        UnknownNode(_idType, "Name,Members,TypeConverter,TypeAdapter");422                    }423 424                    _reader.MoveToContent();425                }426 427                ReadEndElement();428            }429 430            if (string.IsNullOrWhiteSpace(name))431            {432                NodeNotFound(lineNumber, _idName, _idType);433            }434            else if (members == null && typeConverter == null && typeAdapter == null)435            {436                _context.AddError(name, lineNumber, TypesXmlStrings.TypeNodeShouldHaveMembersOrTypeConverters);437            }438 439            if (_context.errors.Count != errorCount)440            {441                return null;442            }443 444            var typeData = new TypeData(name, true);445            if (members != null)446            {447                foreach (var m in members)448                {449                    typeData.Members.Add(m.Name, m);450                }451            }452 453            typeData.TypeAdapter = typeAdapter;454            typeData.TypeConverter = typeConverter;455 456            if (standardMembers != null)457            {458                foreach (var m in standardMembers.Members)459                {460                    if (m.Name.Equals(TypeTable.DefaultDisplayProperty, StringComparison.OrdinalIgnoreCase))461                    {462                        CheckStandardNote(m, typeData, static (t, v) => t.DefaultDisplayProperty = v, Converter<string>);463                    }464                    else if (m.Name.Equals(TypeTable.DefaultDisplayPropertySet, StringComparison.OrdinalIgnoreCase))465                    {466                        if (!CheckStandardPropertySet(m, typeData, (t, p) => t.DefaultDisplayPropertySet = p))467                        {468                            _context.AddError(TypesXmlStrings.MemberShouldHaveType, TypeTable.DefaultDisplayPropertySet, _idPropertySet);469                        }470                    }471                    else if (m.Name.Equals(TypeTable.DefaultKeyPropertySet, StringComparison.OrdinalIgnoreCase))472                    {473                        if (!CheckStandardPropertySet(m, typeData, (t, p) => t.DefaultKeyPropertySet = p))474                        {475                            _context.AddError(TypesXmlStrings.MemberShouldHaveType, TypeTable.DefaultKeyPropertySet, _idPropertySet);476                        }477                    }478                    else if (m.Name.Equals(TypeTable.SerializationMethodNode, StringComparison.OrdinalIgnoreCase))479                    {480                        CheckStandardNote(m, typeData, static (t, v) => t.SerializationMethod = v, Converter<string>);481                    }482                    else if (m.Name.Equals(TypeTable.SerializationDepth, StringComparison.OrdinalIgnoreCase))483                    {484                        CheckStandardNote(m, typeData, static (t, v) => t.SerializationDepth = v, Converter<uint>);485                    }486                    else if (m.Name.Equals(TypeTable.StringSerializationSource, StringComparison.OrdinalIgnoreCase))487                    {488                        var aliasData = m as AliasPropertyData;489                        if (aliasData != null)490                        {491                            typeData.StringSerializationSource = aliasData.ReferencedMemberName;492                        }493                        else494                        {495                            typeData.StringSerializationSourceProperty = m;496                        }497                    }498                    else if (m.Name.Equals(TypeTable.PropertySerializationSet, StringComparison.OrdinalIgnoreCase))499                    {500                        if (!CheckStandardPropertySet(m, typeData, (t, p) => t.PropertySerializationSet = p))501                        {502                            _context.AddError(TypesXmlStrings.MemberShouldHaveType, TypeTable.PropertySerializationSet, _idPropertySet);503                        }504                    }505                    else if (m.Name.Equals(TypeTable.InheritPropertySerializationSet, StringComparison.OrdinalIgnoreCase))506                    {507                        CheckStandardNote(m, typeData, static (t, v) => t.InheritPropertySerializationSet = v, BoolConverter);508                    }509                    else if (m.Name.Equals(TypeTable.TargetTypeForDeserialization, StringComparison.OrdinalIgnoreCase))510                    {511                        CheckStandardNote(m, typeData, static (t, v) => t.TargetTypeForDeserialization = v, Converter<Type>);512                    }513                    else514                    {515                        _context.AddError(TypesXmlStrings.NotAStandardMember, m.Name);516                    }517                }518            }519 520            return typeData;521        }522 523        private Type Read_TypeX(string elementName)524        {525            var errorCount = _context.errors.Count;526            var lineNumber = _readerLineInfo.LineNumber;527            int typeLineNumber = 0;528 529            string typeName = null;530 531            ReadIsHiddenAttributeNotSupported(elementName);532            _reader.MoveToElement();533            if (_reader.IsEmptyElement)534            {535                _reader.Skip();536            }537            else538            {539                _reader.ReadStartElement();540                _reader.MoveToContent();541                while (_reader.NodeType != XmlNodeType.EndElement && _reader.NodeType != XmlNodeType.None)542                {543                    if (_reader.NodeType == XmlNodeType.Element)544                    {545                        if ((object)_reader.LocalName == (object)_idTypeName)546                        {547                            if (typeName != null)548                            {549                                NotMoreThanOnce(_idTypeName, elementName);550                            }551 552                            typeLineNumber = _readerLineInfo.LineNumber;553                            typeName = ReadElementString(_idTypeName);554                        }555                        else556                        {557                            UnknownNode(elementName, "TypeName");558                        }559                    }560                    else561                    {562                        UnknownNode(elementName, "TypeName");563                    }564 565                    _reader.MoveToContent();566                }567 568                ReadEndElement();569            }570 571            if (string.IsNullOrWhiteSpace(typeName))572            {573                NodeNotFound(lineNumber, _idTypeName, elementName);574            }575 576            if (_context.errors.Count != errorCount)577            {578                return null;579            }580 581            return ResolveType(typeName, typeLineNumber);582        }583 584        private Collection<TypeMemberData> Read_Members(out MemberSetData standardMembers)585        {586            var errorCount = _context.errors.Count;587 588            standardMembers = null;589            var members = new Collection<TypeMemberData>();590 591            ReadIsHiddenAttributeNotSupported(_idMembers);592            _reader.MoveToElement();593            if (_reader.IsEmptyElement)594            {595                _reader.Skip();596            }597            else598            {599                _reader.ReadStartElement();600                _reader.MoveToContent();601                while (_reader.NodeType != XmlNodeType.EndElement && _reader.NodeType != XmlNodeType.None)602                {603                    if (_reader.NodeType == XmlNodeType.Element)604                    {605                        if ((object)_reader.LocalName == (object)_idNoteProperty)606                        {607                            var p = Read_NoteProperty();608                            if (p != null)609                            {610                                members.Add(p);611                            }612                        }613                        else if ((object)_reader.LocalName == (object)_idAliasProperty)614                        {615                            var p = Read_AliasProperty();616                            if (p != null)617                            {618                                members.Add(p);619                            }620                        }621                        else if ((object)_reader.LocalName == (object)_idScriptProperty)622                        {623                            var p = Read_ScriptProperty();624                            if (p != null)625                            {626                                members.Add(p);627                            }628                        }629                        else if ((object)_reader.LocalName == (object)_idCodeProperty)630                        {631                            var p = Read_CodeProperty();632                            if (p != null)633                            {634                                members.Add(p);635                            }636                        }637                        else if ((object)_reader.LocalName == (object)_idScriptMethod)638                        {639                            var p = Read_ScriptMethod();640                            if (p != null)641                            {642                                members.Add(p);643                            }644                        }645                        else if ((object)_reader.LocalName == (object)_idCodeMethod)646                        {647                            var p = Read_CodeMethod();648                            if (p != null)649                            {650                                members.Add(p);651                            }652                        }653                        else if ((object)_reader.LocalName == (object)_idPropertySet)654                        {655                            var p = Read_PropertySet();656                            if (p != null)657                            {658                                members.Add(p);659                            }660                        }661                        else if ((object)_reader.LocalName == (object)_idMemberSet)662                        {663                            var p = Read_MemberSet();664                            if (p != null)665                            {666                                if (p.Name.Equals(TypeTable.PSStandardMembers, StringComparison.OrdinalIgnoreCase))667                                {668                                    standardMembers = p;669                                }670                                else671                                {672                                    members.Add(p);673                                }674                            }675                        }676                        else677                        {678                            UnknownNode(_idMembers, "NoteProperty,AliasProperty,ScriptProperty,CodeProperty,ScriptMethod,CodeMethod,PropertySet,MemberSet");679                        }680                    }681                    else682                    {683                        UnknownNode(_idMembers, "NoteProperty,AliasProperty,ScriptProperty,CodeProperty,ScriptMethod,CodeMethod,PropertySet,MemberSet");684                    }685 686                    _reader.MoveToContent();687                }688 689                ReadEndElement();690            }691 692            return _context.errors.Count == errorCount ? members : null;693        }694 695        private MemberSetData Read_MemberSet()696        {697            var errorCount = _context.errors.Count;698            var lineNumber = _readerLineInfo.LineNumber;699 700            string name = null;701            Collection<TypeMemberData> members = null;702            bool? inheritMembers = default(bool?);703 704            bool? isHidden = ReadIsHiddenAttribute();705            _reader.MoveToElement();706            if (_reader.IsEmptyElement)707            {708                _reader.Skip();709            }710            else711            {712                _reader.ReadStartElement();713                _reader.MoveToContent();714                while (_reader.NodeType != XmlNodeType.EndElement && _reader.NodeType != XmlNodeType.None)715                {716                    if (_reader.NodeType == XmlNodeType.Element)717                    {718                        if ((object)_reader.LocalName == (object)_idName)719                        {720                            if (name != null)721                            {722                                NotMoreThanOnce(_idName, _idMemberSet);723                            }724 725                            name = ReadElementString(_idName);726                        }727                        else if ((object)_reader.LocalName == (object)_idInheritMembers)728                        {729                            if (inheritMembers.HasValue)730                            {731                                NotMoreThanOnce(_idInheritMembers, _idMemberSet);732                            }733 734                            inheritMembers = ToBoolean(ReadElementString(_idMemberSet));735                        }736                        else if ((object)_reader.LocalName == (object)_idMembers)737                        {738                            if (members != null)739                            {740                                NotMoreThanOnce(_idMembers, _idMemberSet);741                            }742 743                            MemberSetData standardMembers;744                            members = Read_Members(out standardMembers);745                            if (standardMembers != null)746                            {747                                // Somewhat pointless - but if we see PSStandardMembers inside a memberset, it's748                                // really just another ordinary member.749                                members.Add(standardMembers);750                            }751                        }752                        else753                        {754                            UnknownNode(_idMemberSet, "Name,InheritMembers,Members");755                        }756                    }757                    else758                    {759                        UnknownNode(_idMemberSet, "Name,InheritMembers,Members");760                    }761 762                    _reader.MoveToContent();763                }764 765                ReadEndElement();766            }767 768            if (string.IsNullOrWhiteSpace(name))769            {770                NodeNotFound(lineNumber, _idName, _idMemberSet);771            }772 773            // Somewhat pointlessly (backcompat), we allow a missing Member node774            members ??= new Collection<TypeMemberData>();775 776            if (_context.errors.Count != errorCount)777            {778                return null;779            }780 781            var result = new MemberSetData(name, members)782            {783                IsHidden = isHidden.GetValueOrDefault()784            };785 786            if (inheritMembers.HasValue)787            {788                result.InheritMembers = inheritMembers.Value;789            }790 791            return result;792        }793 794        private PropertySetData Read_PropertySet()795        {796            var errorCount = _context.errors.Count;797            var lineNumber = _readerLineInfo.LineNumber;798 799            string name = null;800            List<string> referencedProperties = null;801 802            bool? isHidden = ReadIsHiddenAttribute();803            _reader.MoveToElement();804            if (_reader.IsEmptyElement)805            {806                _reader.Skip();807            }808            else809            {810                _reader.ReadStartElement();811                _reader.MoveToContent();812                while (_reader.NodeType != XmlNodeType.EndElement && _reader.NodeType != XmlNodeType.None)813                {814                    if (_reader.NodeType == XmlNodeType.Element)815                    {816                        if ((object)_reader.LocalName == (object)_idName)817                        {818                            if (name != null)819                            {820                                NotMoreThanOnce(_idName, _idPropertySet);821                            }822 823                            name = ReadElementString(_idName);824                        }825                        else if ((object)_reader.LocalName == (object)_idReferencedProperties)826                        {827                            if (_reader.IsEmptyElement)828                            {829                                _reader.Skip();830                            }831                            else832                            {833                                _reader.ReadStartElement();834                                _reader.MoveToContent();835                                while (_reader.NodeType != XmlNodeType.EndElement && _reader.NodeType != XmlNodeType.None)836                                {837                                    if (_reader.NodeType == XmlNodeType.Element)838                                    {839                                        if ((object)_reader.LocalName == (object)_idName)840                                        {841                                            referencedProperties ??= new List<string>(8);842 843                                            referencedProperties.Add(ReadElementString(_idName));844                                        }845                                        else846                                        {847                                            UnknownNode(_idPropertySet, "Name");848                                        }849                                    }850                                    else851                                    {852                                        UnknownNode(_idPropertySet, "Name");853                                    }854 855                                    _reader.MoveToContent();856                                }857 858                                ReadEndElement();859                            }860                        }861                        else862                        {863                            UnknownNode(_idPropertySet, "Name,ReferencedProperties");864                        }865                    }866                    else867                    {868                        UnknownNode(_idPropertySet, "Name,ReferencedProperties");869                    }870 871                    _reader.MoveToContent();872                }873 874                ReadEndElement();875            }876 877            if (string.IsNullOrWhiteSpace(name))878                NodeNotFound(lineNumber, _idName, _idPropertySet);879            if (referencedProperties == null)880                NodeNotFound(lineNumber, _idReferencedProperties, _idPropertySet);881 882            if (_context.errors.Count != errorCount)883            {884                return null;885            }886 887            return new PropertySetData(referencedProperties)888            {889                Name = name,890                IsHidden = isHidden.GetValueOrDefault()891            };892        }893 894        private CodeMethodData Read_CodeMethod()895        {896            var errorCount = _context.errors.Count;897            var lineNumber = _readerLineInfo.LineNumber;898            var methodLineNumber = 0;899 900            string name = null;901            MethodInfo codeReference = null;902 903            ReadIsHiddenAttributeNotSupported(_idCodeMethod);904            _reader.MoveToElement();905            if (_reader.IsEmptyElement)906            {907                _reader.Skip();908            }909            else910            {911                _reader.ReadStartElement();912                _reader.MoveToContent();913                while (_reader.NodeType != XmlNodeType.EndElement && _reader.NodeType != XmlNodeType.None)914                {915                    if (_reader.NodeType == XmlNodeType.Element)916                    {917                        if ((object)_reader.LocalName == (object)_idName)918                        {919                            if (name != null)920                            {921                                NotMoreThanOnce(_idName, _idCodeMethod);922                            }923 924                            name = ReadElementString(_idName);925                        }926                        else if ((object)_reader.LocalName == (object)_idCodeReference)927                        {928                            if (codeReference != null)929                            {930                                NotMoreThanOnce(_idCodeReference, _idCodeMethod);931                            }932 933                            methodLineNumber = _readerLineInfo.LineNumber;934                            codeReference = Read_CodeReference();935                            if (codeReference == null)936                                _context.AddError(methodLineNumber, ExtendedTypeSystem.CodeMethodMethodFormat);937                        }938                        else939                        {940                            UnknownNode(_idCodeMethod, "Name,CodeReference");941                        }942                    }943                    else944                    {945                        UnknownNode(_idCodeMethod, "Name,CodeReference");946                    }947 948                    _reader.MoveToContent();949                }950 951                ReadEndElement();952            }953 954            if (string.IsNullOrWhiteSpace(name))955                NodeNotFound(lineNumber, _idName, _idCodeMethod);956            if (codeReference == null && methodLineNumber == 0)957                NodeNotFound(lineNumber, _idCodeReference, _idCodeMethod);958            if (codeReference != null && !PSCodeMethod.CheckMethodInfo(codeReference))959                _context.AddError(methodLineNumber, ExtendedTypeSystem.CodeMethodMethodFormat);960 961            if (_context.errors.Count != errorCount)962            {963                return null;964            }965 966            return new CodeMethodData(name, codeReference);967        }968 969        private MethodInfo Read_CodeReference()970        {971            var errorCount = _context.errors.Count;972            var lineNumber = _readerLineInfo.LineNumber;973            int typeLineNumber = 0;974            int methodLineNumber = 0;975 976            string typeName = null;977            string methodName = null;978 979            ReadIsHiddenAttributeNotSupported(_idCodeReference);980            _reader.MoveToElement();981            if (_reader.IsEmptyElement)982            {983                _reader.Skip();984            }985            else986            {987                _reader.ReadStartElement();988                _reader.MoveToContent();989                while (_reader.NodeType != XmlNodeType.EndElement && _reader.NodeType != XmlNodeType.None)990                {991                    if (_reader.NodeType == XmlNodeType.Element)992                    {993                        if ((object)_reader.LocalName == (object)_idTypeName)994                        {995                            if (typeName != null)996                            {997                                NotMoreThanOnce(_idTypeName, _idCodeReference);998                            }999 1000                            typeLineNumber = _readerLineInfo.LineNumber;1001                            typeName = ReadElementString(_idTypeName);1002                        }1003                        else if ((object)_reader.LocalName == (object)_idMethodName)1004                        {1005                            if (methodName != null)1006                            {1007                                NotMoreThanOnce(_idMethodName, _idCodeReference);1008                            }1009 1010                            methodLineNumber = _readerLineInfo.LineNumber;1011                            methodName = ReadElementString(_idMethodName);1012                        }1013                        else1014                        {1015                            UnknownNode(_idCodeReference, "TypeName,MethodName");1016                        }1017                    }1018                    else1019                    {1020                        UnknownNode(_idCodeReference, "TypeName,MethodName");1021                    }1022 1023                    _reader.MoveToContent();1024                }1025 1026                ReadEndElement();1027            }1028 1029            if (string.IsNullOrWhiteSpace(typeName))1030                NodeNotFound(lineNumber, _idTypeName, _idCodeReference);1031            if (string.IsNullOrWhiteSpace(methodName))1032                NodeNotFound(lineNumber, _idMethodName, _idCodeReference);1033 1034            if (_context.errors.Count != errorCount)1035            {1036                return null;1037            }1038 1039            MethodInfo member = null;1040            var type = ResolveType(typeName, typeLineNumber);1041            if (type != null)1042            {1043                try1044                {1045                    member = type.GetMethod(methodName, BindingFlags.Static | BindingFlags.Public | BindingFlags.IgnoreCase);1046                }1047                catch (AmbiguousMatchException e)1048                {1049                    _context.AddError(methodLineNumber, e.Message);1050                }1051            }1052 1053            return member;1054        }1055 1056        private ScriptMethodData Read_ScriptMethod()1057        {1058            var errorCount = _context.errors.Count;1059            var lineNumber = _readerLineInfo.LineNumber;1060 1061            string name = null;1062            string script = null;1063            int scriptLineNumber = 0;1064 1065            ReadIsHiddenAttributeNotSupported(_idScriptMethod);1066            _reader.MoveToElement();1067            if (_reader.IsEmptyElement)1068            {1069                _reader.Skip();1070            }1071            else1072            {1073                _reader.ReadStartElement();1074                _reader.MoveToContent();1075                while (_reader.NodeType != XmlNodeType.EndElement && _reader.NodeType != XmlNodeType.None)1076                {1077                    if (_reader.NodeType == XmlNodeType.Element)1078                    {1079                        if ((object)_reader.LocalName == (object)_idName)1080                        {1081                            if (name != null)1082                            {1083                                NotMoreThanOnce(_idName, _idScriptMethod);1084                            }1085 1086                            name = ReadElementString(_idName);1087                        }1088                        else if ((object)_reader.LocalName == (object)_idScript)1089                        {1090                            if (script != null)1091                            {1092                                NotMoreThanOnce(_idScript, _idScriptMethod);1093                            }1094 1095                            scriptLineNumber = _readerLineInfo.LineNumber;1096                            script = ReadElementString(_idScript);1097                        }1098                        else1099                        {1100                            UnknownNode(_idScriptMethod, "Name,Script");1101                        }1102                    }1103                    else1104                    {1105                        UnknownNode(_idScriptMethod, "Name,Script");1106                    }1107 1108                    _reader.MoveToContent();1109                }1110 1111                ReadEndElement();1112            }1113 1114            if (string.IsNullOrWhiteSpace(name))1115            {1116                NodeNotFound(lineNumber, _idName, _idScriptMethod);1117            }1118 1119            if (string.IsNullOrWhiteSpace(script))1120            {1121                NodeNotFound(lineNumber, _idScript, _idScriptMethod);1122            }1123 1124            ScriptBlock scriptBlock = GetScriptBlock(script, scriptLineNumber);1125 1126            if (_context.errors.Count != errorCount)1127            {1128                return null;1129            }1130 1131            return new ScriptMethodData(name, scriptBlock);1132        }1133 1134        private CodePropertyData Read_CodeProperty()1135        {1136            var errorCount = _context.errors.Count;1137            var lineNumber = _readerLineInfo.LineNumber;1138            var getterLineNumber = 0;1139            var setterLineNumber = 0;1140 1141            string name = null;1142            MethodInfo getter = null;1143            MethodInfo setter = null;1144 1145            var isHidden = ReadIsHiddenAttribute();1146            _reader.MoveToElement();1147            if (_reader.IsEmptyElement)1148            {1149                _reader.Skip();1150            }1151            else1152            {1153                _reader.ReadStartElement();1154                _reader.MoveToContent();1155                while (_reader.NodeType != XmlNodeType.EndElement && _reader.NodeType != XmlNodeType.None)1156                {1157                    if (_reader.NodeType == XmlNodeType.Element)1158                    {1159                        if ((object)_reader.LocalName == (object)_idName)1160                        {1161                            if (name != null)1162                            {1163                                NotMoreThanOnce(_idName, _idCodeProperty);1164                            }1165 1166                            name = ReadElementString(_idName);1167                        }1168                        else if ((object)_reader.LocalName == (object)_idGetCodeReference)1169                        {1170                            if (getter != null)1171                            {1172                                NotMoreThanOnce(_idGetCodeReference, _idCodeProperty);1173                            }1174 1175                            getterLineNumber = _readerLineInfo.LineNumber;1176                            getter = Read_CodeReference();1177                            if (getter == null)1178                            {1179                                _context.AddError(getterLineNumber, ExtendedTypeSystem.CodePropertyGetterAndSetterNull);1180                            }1181                        }1182                        else if ((object)_reader.LocalName == (object)_idSetCodeReference)1183                        {1184                            if (setter != null)1185                            {1186                                NotMoreThanOnce(_idSetCodeReference, _idCodeProperty);1187                            }1188 1189                            setterLineNumber = _readerLineInfo.LineNumber;1190                            setter = Read_CodeReference();1191                            if (setter == null)1192                            {1193                                _context.AddError(setterLineNumber, ExtendedTypeSystem.CodePropertyGetterAndSetterNull);1194                            }1195                        }1196                        else1197                        {1198                            UnknownNode(_idCodeProperty, "Name,GetCodeReference,SetCodeReference");1199                        }1200                    }

Showing the first 1,200 of 4780 lines. Download the file for the rest.