Inheritance: ICloneable
示例#1
0
        /// <summary>
        /// e.g. Classes
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        private string CheckNamespaceMembers(MetadataItem member)
        {
            StringBuilder message = new StringBuilder();

            // Skip if it is already invalid
            if (member.Items == null || member.IsInvalid)
            {
                return string.Empty;
            }

            foreach (var i in member.Items)
            {
                Debug.Assert(!i.Type.IsPageLevel());
                if (i.Type.IsPageLevel())
                {
                    Logger.Log(LogLevel.Error, $"Invalid item inside yaml metadata: {i.Type.ToString()} is not allowed inside {member.Type.ToString()}. Will be ignored.");
                    message.AppendFormat("{0} is not allowed inside {1}.", i.Type.ToString(), member.Type.ToString());
                    i.IsInvalid = true;
                }
                else
                {
                    var result = CheckNamespaceMembersMembers(i);
                    if (!string.IsNullOrEmpty(result))
                    {
                        message.AppendLine(result);
                    }
                }
            }

            return message.ToString();
        }
示例#2
0
        public override void GenerateNamedType(INamedTypeSymbol symbol, MetadataItem item, SymbolVisitorAdapter adapter)
        {
            base.GenerateNamedType(symbol, item, adapter);

            var modifiers = new List<string>();
            var visiblity = GetVisiblity(symbol.DeclaredAccessibility);
            if (visiblity != null)
            {
                modifiers.Add(visiblity);
            }
            if (symbol.TypeKind == TypeKind.Class)
            {
                if (symbol.IsAbstract)
                {
                    modifiers.Add("MustInherit");
                }
                else if (symbol.IsSealed)
                {
                    modifiers.Add("NotInheritable");
                }
            }
            switch (symbol.TypeKind)
            {
                case TypeKind.Module:
                    modifiers.Add("Module");
                    break;
                case TypeKind.Class:
                    if (symbol.IsStatic)
                    {
                        modifiers.Add("Module");
                    }
                    else
                    {
                        modifiers.Add("Class");
                    }
                    break;
                case TypeKind.Delegate:
                    modifiers.Add("Delegate");
                    break;
                case TypeKind.Enum:
                    modifiers.Add("Enum");
                    break;
                case TypeKind.Interface:
                    modifiers.Add("Interface");
                    break;
                case TypeKind.Struct:
                    modifiers.Add("Structure");
                    break;
                default:
                    break;
            }
            item.Modifiers[SyntaxLanguage.VB] = modifiers;
        }
示例#3
0
 public static void FeedComments(MetadataItem item, ITripleSlashCommentParserContext context)
 {
     if (!string.IsNullOrEmpty(item.RawComment))
     {
         var commentModel = TripleSlashCommentModel.CreateModel(item.RawComment, item.Language, context);
         if (commentModel == null) return;
         item.Summary = commentModel.Summary;
         item.Remarks = commentModel.Remarks;
         item.Exceptions = commentModel.Exceptions;
         item.Sees = commentModel.Sees;
         item.SeeAlsos = commentModel.SeeAlsos;
         item.Examples = commentModel.Examples;
         item.CommentModel = commentModel;
     }
 }
示例#4
0
 private void AddIndirectReference(ResolverContext context, MetadataItem page, List<ReferenceItem> addedReferences)
 {
     while (addedReferences.Count > 0)
     {
         var addingReferences = new List<ReferenceItem>();
         foreach (var r in addedReferences)
         {
             foreach (var key in GetReferenceKeys(r))
             {
                 TryAddReference(context, page, addingReferences, key);
             }
         }
         addedReferences = addingReferences;
     }
 }
示例#5
0
 private static bool TryParseYamlMetadataFile(string metadataFileName, out MetadataItem projectMetadata)
 {
     projectMetadata = null;
     try
     {
         using (StreamReader reader = new StreamReader(metadataFileName))
         {
             projectMetadata = YamlUtility.Deserialize <MetadataItem>(reader);
             return(true);
         }
     }
     catch (Exception e)
     {
         Logger.LogInfo($"Error parsing yaml metadata file: {e.Message}");
         return(false);
     }
 }
示例#6
0
 private static void TryAddReference(ResolverContext context, MetadataItem page, List <ReferenceItem> addingReferences, string key)
 {
     if (!page.References.ContainsKey(key))
     {
         ReferenceItem item;
         if (context.References.TryGetValue(key, out item))
         {
             var reference = context.References[key].Clone();
             page.References.Add(key, reference);
             addingReferences.Add(reference);
         }
         else
         {
             Debug.Fail(string.Format("Reference not found: {0}", key));
         }
     }
 }
示例#7
0
 private static void TryAddReference(ResolverContext context, MetadataItem page, List<ReferenceItem> addingReferences, string key)
 {
     if (!page.References.ContainsKey(key))
     {
         ReferenceItem item;
         if (context.References.TryGetValue(key, out item))
         {
             var reference = context.References[key].Clone();
             page.References.Add(key, reference);
             addingReferences.Add(reference);
         }
         else
         {
             Debug.Fail(string.Format("Reference not found: {0}", key));
         }
     }
 }
示例#8
0
        private static bool TryGetItemByCommentId(MetadataItem item, string commentId, ref MetadataItem resultItem)
        {
            if (string.Equals(item.CommentId, commentId, StringComparison.OrdinalIgnoreCase))
            {
                resultItem = item;
                return(true);
            }

            foreach (var metadataItem in item.Items ?? Enumerable.Empty <MetadataItem>())
            {
                if (TryGetItemByCommentId(metadataItem, commentId, ref resultItem))
                {
                    return(true);
                }
            }
            return(false);
        }
示例#9
0
 public static void FeedComments(MetadataItem item, ITripleSlashCommentParserContext context)
 {
     if (!string.IsNullOrEmpty(item.RawComment))
     {
         var commentModel = TripleSlashCommentModel.CreateModel(item.RawComment, item.Language, context);
         if (commentModel == null)
         {
             return;
         }
         item.Summary      = commentModel.Summary;
         item.Remarks      = commentModel.Remarks;
         item.Exceptions   = commentModel.Exceptions;
         item.Sees         = commentModel.Sees;
         item.SeeAlsos     = commentModel.SeeAlsos;
         item.Examples     = commentModel.Examples;
         item.CommentModel = commentModel;
     }
 }
示例#10
0
        /// <summary>
        /// Only when Namespace is not empty, return it
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        public static MetadataItem ShrinkToSimpleTocWithNamespaceNotEmpty(this MetadataItem item)
        {
            MetadataItem shrinkedItem = new MetadataItem
            {
                Name         = item.Name,
                DisplayNames = item.DisplayNames,
                Type         = item.Type,
                Items        = null
            };

            if (item.Type == MemberType.Toc || item.Type == MemberType.Namespace)
            {
                if (item.Items != null)
                {
                    foreach (var i in item.Items)
                    {
                        if (shrinkedItem.Items == null)
                        {
                            shrinkedItem.Items = new List <MetadataItem>();
                        }

                        if (i.IsInvalid)
                        {
                            continue;
                        }
                        var shrinkedI = i.ShrinkToSimpleTocWithNamespaceNotEmpty();
                        if (shrinkedI != null)
                        {
                            shrinkedItem.Items.Add(shrinkedI);
                        }
                    }
                }
            }

            if (item.Type == MemberType.Namespace)
            {
                if (shrinkedItem.Items == null || shrinkedItem.Items.Count == 0)
                {
                    return(null);
                }
            }

            return(shrinkedItem);
        }
示例#11
0
        public static PageViewModel ToPageViewModel(this MetadataItem model)
        {
            if (model == null)
            {
                return(null);
            }
            var result = new PageViewModel();

            result.Items.Add(model.ToItemViewModel());
            if (model.Type.AllowMultipleItems())
            {
                AddChildren(model, result);
            }
            foreach (var item in model.References)
            {
                result.References.Add(item.ToReferenceViewModel());
            }
            return(result);
        }
示例#12
0
        public void CopyInheritedData(MetadataItem src)
        {
            if (src == null)
            {
                throw new ArgumentNullException(nameof(src));
            }

            if (Summary == null)
            {
                Summary = src.Summary;
            }
            if (Remarks == null)
            {
                Remarks = src.Remarks;
            }

            if (Exceptions == null && src.Exceptions != null)
            {
                Exceptions = src.Exceptions.Select(e => e.Clone()).ToList();
            }
            if (Sees == null && src.Sees != null)
            {
                Sees = src.Sees.Select(s => s.Clone()).ToList();
            }
            if (SeeAlsos == null && src.SeeAlsos != null)
            {
                SeeAlsos = src.SeeAlsos.Select(s => s.Clone()).ToList();
            }
            if (Examples == null && src.Examples != null)
            {
                Examples = new List <string>(src.Examples);
            }

            if (CommentModel != null && src.CommentModel != null)
            {
                CommentModel.CopyInheritedData(src.CommentModel);
            }
            if (Syntax != null && src.Syntax != null)
            {
                Syntax.CopyInheritedData(src.Syntax);
            }
        }
示例#13
0
        public static TocViewModel ToTocViewModel(this MetadataItem item)
        {
            if (item == null)
            {
                Debug.Fail("item is null.");
                return(null);
            }
            switch (item.Type)
            {
            case MemberType.Toc:
            case MemberType.Namespace:
                var result = new List <TocItemViewModel>();
                foreach (var child in item.Items)
                {
                    result.Add(child.ToTocItemViewModel());
                }
                return(new TocViewModel(result.OrderBy(s => s.Name)));

            default:
                return(null);
            }
        }
示例#14
0
 private static void AddMemberToIndexer(MetadataItem memberModel, string outputPath, ApiReferenceViewModel indexer)
 {
     if (memberModel.Type == MemberType.Namespace)
     {
         indexer.Add(memberModel.Name, outputPath);
     }
     else
     {
         TreeIterator.Preorder(memberModel, null, s => s.Items, (member, parent) =>
         {
             if (indexer.TryGetValue(member.Name, out string path))
             {
                 Logger.LogWarning($"{member.Name} already exists in {path}, the duplicate one {outputPath} will be ignored.");
             }
             else
             {
                 indexer.Add(member.Name, outputPath);
             }
             return(true);
         });
     }
 }
示例#15
0
        public override void GenerateMethod(IMethodSymbol symbol, MetadataItem item, SymbolVisitorAdapter adapter)
        {
            base.GenerateMethod(symbol, item, adapter);

            var modifiers = new List<string>();
            if (symbol.ContainingType.TypeKind != TypeKind.Interface)
            {
                var visiblity = GetVisiblity(symbol.DeclaredAccessibility);
                if (visiblity != null)
                {
                    modifiers.Add(visiblity);
                }
                if (symbol.IsStatic)
                {
                    modifiers.Add("static");
                }
                if (symbol.IsAbstract)
                {
                    modifiers.Add("abstract");
                }
                if (symbol.IsOverride)
                {
                    modifiers.Add("override");
                }
                if (symbol.IsVirtual && symbol.IsSealed)
                {
                }
                else if (symbol.IsVirtual)
                {
                    modifiers.Add("virtual");
                }
                else if (symbol.IsSealed)
                {
                    modifiers.Add("sealed");
                }
            }
            item.Modifiers[SyntaxLanguage.CSharp] = modifiers;
        }
示例#16
0
        /// <summary>
        /// e.g. Methods
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        private string CheckNamespaceMembersMembers(MetadataItem member)
        {
            StringBuilder message = new StringBuilder();

            if (member.IsInvalid)
            {
                return(string.Empty);
            }

            // does method has members?
            Debug.Assert(member.Items == null);
            if (member.Items != null)
            {
                foreach (var i in member.Items)
                {
                    i.IsInvalid = true;
                }

                Logger.Log(LogLevel.Error, $"Invalid item inside yaml metadata: {member.Type.ToString()} should not contain items. Will be ignored.");
                message.AppendFormat("{0} should not contain items.", member.Type.ToString());
            }

            return(message.ToString());
        }
示例#17
0
 public virtual void GenerateProperty(IPropertySymbol symbol, MetadataItem item, SymbolVisitorAdapter adapter)
 {
 }
示例#18
0
 public virtual void DefaultVisit(ISymbol symbol, MetadataItem item, SymbolVisitorAdapter adapter)
 {
 }
示例#19
0
        public override void GenerateProperty(IPropertySymbol symbol, MetadataItem item, SymbolVisitorAdapter adapter)
        {
            base.GenerateProperty(symbol, item, adapter);

            var modifiers = new List<string>();
            var propertyVisiblity = GetVisiblity(symbol.DeclaredAccessibility);
            if (symbol.ContainingType.TypeKind != TypeKind.Interface)
            {
                if (propertyVisiblity != null)
                {
                    modifiers.Add(propertyVisiblity);
                }
                if (symbol.IsStatic)
                {
                    modifiers.Add("static");
                }
                if (symbol.IsAbstract)
                {
                    modifiers.Add("abstract");
                }
                if (symbol.IsOverride)
                {
                    modifiers.Add("override");
                }
                if (symbol.IsVirtual && symbol.IsSealed)
                {
                }
                else if (symbol.IsVirtual)
                {
                    modifiers.Add("virtual");
                }
                else if (symbol.IsSealed)
                {
                    modifiers.Add("sealed");
                }
            }
            if (symbol.GetMethod != null)
            {
                var getMethodVisiblity = GetVisiblity(symbol.GetMethod.DeclaredAccessibility);
                if (propertyVisiblity != null && getMethodVisiblity == null)
                {
                }
                else if (getMethodVisiblity != propertyVisiblity)
                {
                    modifiers.Add($"{getMethodVisiblity} get");
                }
                else
                {
                    modifiers.Add("get");
                }
            }
            if (symbol.SetMethod != null)
            {
                var setMethodVisiblity = GetVisiblity(symbol.SetMethod.DeclaredAccessibility);
                if (propertyVisiblity != null && setMethodVisiblity == null)
                {
                }
                else if (setMethodVisiblity != propertyVisiblity)
                {
                    modifiers.Add($"{setMethodVisiblity} set");
                }
                else
                {
                    modifiers.Add("set");
                }
            }
            item.Modifiers[SyntaxLanguage.CSharp] = modifiers;
        }
示例#20
0
        public static ApiParameter GetTypeParameterDescription(ITypeParameterSymbol symbol, MetadataItem item, ITripleSlashCommentParserContext context)
        {
            string comment = item.CommentModel?.GetTypeParameter(symbol.Name);

            return(new ApiParameter
            {
                Name = symbol.Name,
                Description = comment,
            });
        }
示例#21
0
 public virtual void GenerateMethod(IMethodSymbol symbol, MetadataItem item, SymbolVisitorAdapter adapter)
 {
 }
        static void InheritDoc(MetadataItem dest, ResolverContext context)
        {
            dest.IsInheritDoc = false;

            switch (dest.Type)
            {
            case MemberType.Constructor:
                if (dest.Parent == null || dest.Syntax == null || dest.Syntax.Parameters == null)
                {
                    return;
                }
                Debug.Assert(dest.Parent.Type == MemberType.Class);

                //try to find the base class
                if (dest.Parent.Inheritance?.Count == 0)
                {
                    return;
                }
                MetadataItem baseClass;
                if (!context.Members.TryGetValue(dest.Parent.Inheritance[dest.Parent.Inheritance.Count - 1], out baseClass))
                {
                    return;
                }
                if (baseClass.Items == null)
                {
                    return;
                }

                //look a constructor in the base class which has a matching signature
                foreach (var ctor in baseClass.Items)
                {
                    if (ctor.Type != MemberType.Constructor)
                    {
                        continue;
                    }
                    if (ctor.Syntax == null || ctor.Syntax.Parameters == null)
                    {
                        continue;
                    }
                    if (ctor.Syntax.Parameters.Count != dest.Syntax.Parameters.Count)
                    {
                        continue;
                    }

                    bool parametersMatch = true;
                    for (int ndx = 0; ndx < dest.Syntax.Parameters.Count; ndx++)
                    {
                        var myParam   = dest.Syntax.Parameters[ndx];
                        var baseParam = ctor.Syntax.Parameters[ndx];
                        if (myParam.Name != baseParam.Name)
                        {
                            parametersMatch = false;
                        }
                        if (myParam.Type != baseParam.Type)
                        {
                            parametersMatch = false;
                        }
                    }

                    if (parametersMatch)
                    {
                        Copy(dest, ctor, context);
                        return;
                    }
                }
                break;

            case MemberType.Method:
            case MemberType.Property:
            case MemberType.Event:
                Copy(dest, dest.Overridden, context);
                if (dest.Implements != null)
                {
                    foreach (var item in dest.Implements)
                    {
                        Copy(dest, item, context);
                    }
                }
                break;

            case MemberType.Class:
                if (dest.Inheritance.Count != 0)
                {
                    Copy(dest, dest.Inheritance[dest.Inheritance.Count - 1], context);
                }
                if (dest.Implements != null)
                {
                    foreach (var item in dest.Implements)
                    {
                        Copy(dest, item, context);
                    }
                }
                break;
            }
        }
示例#23
0
 public static ApiParameter GetParameterDescription(ISymbol symbol, MetadataItem item, string id, bool isReturn, ITripleSlashCommentParserContext context)
 {
     string comment = isReturn ? item.CommentModel?.Returns : item.CommentModel?.GetParameter(symbol.Name);
     return new ApiParameter
     {
         Name = isReturn ? null : symbol.Name,
         Type = id,
         Description = comment,
     };
 }
示例#24
0
        /// <summary>
        /// e.g. Methods
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        private string CheckNamespaceMembersMembers(MetadataItem member)
        {
            StringBuilder message = new StringBuilder();
            if (member.IsInvalid)
            {
                return string.Empty;
            }

            // does method has members?
            Debug.Assert(member.Items == null);
            if (member.Items != null)
            {
                foreach (var i in member.Items)
                {
                    i.IsInvalid = true;
                }

                Logger.Log(LogLevel.Error, $"Invalid item inside yaml metadata: {member.Type.ToString()} should not contain items. Will be ignored.");
                message.AppendFormat("{0} should not contain items.", member.Type.ToString());
            }

            return message.ToString();
        }
示例#25
0
 public static ApiParameter GetTypeParameterDescription(ITypeParameterSymbol symbol, MetadataItem item, ITripleSlashCommentParserContext context)
 {
     string comment = item.CommentModel?.GetTypeParameter(symbol.Name);
     return new ApiParameter
     {
         Name = symbol.Name,
         Description = comment,
     };
 }
示例#26
0
 public virtual void GenerateField(IFieldSymbol symbol, MetadataItem item, SymbolVisitorAdapter adapter)
 {
 }
示例#27
0
        private IEnumerable <string> GetReferenceKeys(MetadataItem current)
        {
            if (current.NamespaceName != null)
            {
                yield return(current.NamespaceName);
            }

            if (current.Overridden != null)
            {
                yield return(current.Overridden);
            }

            if (current.Overload != null)
            {
                yield return(current.Overload);
            }

            if (current.Inheritance?.Count > 0)
            {
                foreach (var item in current.Inheritance)
                {
                    yield return(item);
                }
            }

            if (current.Implements?.Count > 0)
            {
                foreach (var item in current.Implements)
                {
                    yield return(item);
                }
            }

            if (current.DerivedClasses?.Count > 0)
            {
                foreach (var item in current.DerivedClasses)
                {
                    yield return(item);
                }
            }

            if (current.InheritedMembers?.Count > 0)
            {
                foreach (var item in current.InheritedMembers)
                {
                    yield return(item);
                }
            }

            if (current.ExtensionMethods?.Count > 0)
            {
                foreach (var item in current.ExtensionMethods)
                {
                    yield return(item);
                }
            }

            if (current.Exceptions?.Count > 0)
            {
                foreach (var item in current.Exceptions)
                {
                    yield return(item.Type);
                }
            }

            if (current.Sees?.Count > 0)
            {
                foreach (var item in current.Sees.Where(l => l.LinkType == LinkType.CRef))
                {
                    yield return(item.LinkId);
                }
            }

            if (current.SeeAlsos?.Count > 0)
            {
                foreach (var item in current.SeeAlsos.Where(l => l.LinkType == LinkType.CRef))
                {
                    yield return(item.LinkId);
                }
            }

            if (current.Syntax != null)
            {
                if (current.Syntax.Parameters?.Count > 0)
                {
                    foreach (var item in current.Syntax.Parameters)
                    {
                        yield return(item.Type);
                    }
                }

                if (current.Syntax.Return != null)
                {
                    yield return(current.Syntax.Return.Type);
                }
            }
        }
示例#28
0
 public virtual void GenerateEvent(IEventSymbol symbol, MetadataItem item, SymbolVisitorAdapter adapter)
 {
 }
示例#29
0
 public virtual void GenerateProperty(IPropertySymbol symbol, MetadataItem item, SymbolVisitorAdapter adapter)
 {
 }
示例#30
0
        private IEnumerable<string> GetReferenceKeys(MetadataItem current)
        {
            if (current.NamespaceName != null)
            {
                yield return current.NamespaceName;
            }

            if (current.Overridden != null)
            {
                yield return current.Overridden;
            }

            if (current.Overload != null)
            {
                yield return current.Overload;
            }

            if (current.Inheritance?.Count > 0)
            {
                foreach (var item in current.Inheritance)
                {
                    yield return item;
                }
            }

            if (current.Implements?.Count > 0)
            {
                foreach (var item in current.Implements)
                {
                    yield return item;
                }
            }

            if (current.InheritedMembers?.Count > 0)
            {
                foreach (var item in current.InheritedMembers)
                {
                    yield return item;
                }
            }

            if (current.ExtensionMethods?.Count > 0)
            {
                foreach (var item in current.ExtensionMethods)
                {
                    yield return item;
                }
            }

            if (current.Exceptions?.Count > 0)
            {
                foreach (var item in current.Exceptions)
                {
                    yield return item.Type;
                }
            }

            if (current.Sees?.Count > 0)
            {
                foreach (var item in current.Sees.Where(l => l.LinkType == LinkType.CRef))
                {
                    yield return item.LinkId;
                }
            }

            if (current.SeeAlsos?.Count > 0)
            {
                foreach (var item in current.SeeAlsos.Where(l => l.LinkType == LinkType.CRef))
                {
                    yield return item.LinkId;
                }
            }

            if (current.Syntax != null)
            {
                if (current.Syntax.Parameters?.Count > 0)
                {
                    foreach (var item in current.Syntax.Parameters)
                    {
                        yield return item.Type;
                    }
                }

                if (current.Syntax.Return != null)
                {
                    yield return current.Syntax.Return.Type;
                }
            }
        }
示例#31
0
        private IEnumerable <string> GetReferenceKeys(MetadataItem current)
        {
            if (current.NamespaceName != null)
            {
                yield return(current.NamespaceName);
            }

            if (current.Overridden != null)
            {
                yield return(current.Overridden);
            }

            if (current.Inheritance?.Count > 0)
            {
                foreach (var item in current.Inheritance)
                {
                    yield return(item);
                }
            }

            if (current.Implements?.Count > 0)
            {
                foreach (var item in current.Implements)
                {
                    yield return(item);
                }
            }

            if (current.InheritedMembers?.Count > 0)
            {
                foreach (var item in current.InheritedMembers)
                {
                    yield return(item);
                }
            }

            if (current.Exceptions?.Count > 0)
            {
                foreach (var item in current.Exceptions)
                {
                    yield return(item.Type);
                }
            }

            if (current.Sees?.Count > 0)
            {
                foreach (var item in current.Sees)
                {
                    yield return(item.Type);
                }
            }

            if (current.SeeAlsos?.Count > 0)
            {
                foreach (var item in current.SeeAlsos)
                {
                    yield return(item.Type);
                }
            }

            if (current.Syntax != null)
            {
                if (current.Syntax.Parameters?.Count > 0)
                {
                    foreach (var item in current.Syntax.Parameters)
                    {
                        yield return(item.Type);
                    }
                }

                if (current.Syntax.Return != null)
                {
                    yield return(current.Syntax.Return.Type);
                }
            }
        }
示例#32
0
        public override void GenerateEvent(IEventSymbol symbol, MetadataItem item, SymbolVisitorAdapter adapter)
        {
            base.GenerateEvent(symbol, item, adapter);

            var modifiers = new List<string>();
            if (symbol.ContainingType.TypeKind != TypeKind.Interface)
            {
                var visiblity = GetVisiblity(symbol.DeclaredAccessibility);
                if (visiblity != null)
                {
                    modifiers.Add(visiblity);
                }
                if (symbol.IsStatic)
                {
                    modifiers.Add("Shared");
                }
                if (symbol.IsAbstract)
                {
                    modifiers.Add("MustOverride");
                }
                if (symbol.IsOverride)
                {
                    modifiers.Add("Overrides");
                }
                if (symbol.IsVirtual && symbol.IsSealed)
                {
                }
                else if (symbol.IsVirtual)
                {
                    modifiers.Add("Overridable");
                }
                else if (symbol.IsSealed)
                {
                    modifiers.Add("NotOverridable");
                }
            }
            item.Modifiers[SyntaxLanguage.VB] = modifiers;
        }
示例#33
0
        public override void GenerateField(IFieldSymbol symbol, MetadataItem item, SymbolVisitorAdapter adapter)
        {
            base.GenerateField(symbol, item, adapter);

            var modifiers = new List<string>();
            var visiblity = GetVisiblity(symbol.DeclaredAccessibility);
            if (visiblity != null)
            {
                modifiers.Add(visiblity);
            }
            if (symbol.IsConst)
            {
                modifiers.Add("const");
            }
            else if (symbol.IsStatic)
            {
                modifiers.Add("static");
            }
            if (symbol.IsReadOnly)
            {
                modifiers.Add("readonly");
            }
            if (symbol.IsVolatile)
            {
                modifiers.Add("volatile");
            }
            item.Modifiers[SyntaxLanguage.CSharp] = modifiers;
        }
示例#34
0
 public virtual void GenerateNamedType(INamedTypeSymbol symbol, MetadataItem item, SymbolVisitorAdapter adapter)
 {
 }
示例#35
0
 public override void DefaultVisit(ISymbol symbol, MetadataItem item, SymbolVisitorAdapter adapter)
 {
     item.DisplayNames[SyntaxLanguage.CSharp] = NameVisitorCreator.GetCSharp(NameOptions.WithGenericParameter | NameOptions.WithParameter).GetName(symbol);
     item.DisplayNamesWithType[SyntaxLanguage.CSharp] = NameVisitorCreator.GetCSharp(NameOptions.WithType | NameOptions.WithGenericParameter | NameOptions.WithParameter).GetName(symbol);
     item.DisplayQualifiedNames[SyntaxLanguage.CSharp] = NameVisitorCreator.GetCSharp(NameOptions.Qualified | NameOptions.WithGenericParameter | NameOptions.WithParameter).GetName(symbol);
 }
示例#36
0
 public virtual void DefaultVisit(ISymbol symbol, MetadataItem item, SymbolVisitorAdapter adapter)
 {
 }
示例#37
0
 public virtual void GenerateNamedType(INamedTypeSymbol symbol, MetadataItem item, SymbolVisitorAdapter adapter)
 {
 }
示例#38
0
 public virtual void GenerateMethod(IMethodSymbol symbol, MetadataItem item, SymbolVisitorAdapter adapter)
 {
 }
示例#39
0
        public static ItemViewModel ToItemViewModel(this MetadataItem model)
        {
            if (model == null)
            {
                return(null);
            }
            var result = new ItemViewModel
            {
                Uid       = model.Name,
                CommentId = model.CommentId,
                IsExplicitInterfaceImplementation = model.IsExplicitInterfaceImplementation,
                IsExtensionMethod = model.IsExtensionMethod,
                Parent            = model.Parent?.Name,
                Children          = model.Items?.Select(x => x.Name).OrderBy(s => s).ToList(),
                Type             = model.Type,
                Source           = model.Source,
                Documentation    = model.Documentation,
                AssemblyNameList = model.AssemblyNameList,
                NamespaceName    = model.NamespaceName,
                Summary          = model.Summary,
                Remarks          = model.Remarks,
                Examples         = model.Examples,
                Syntax           = model.Syntax.ToSyntaxDetailViewModel(),
                Overridden       = model.Overridden,
                Overload         = model.Overload,
                Exceptions       = model.Exceptions,
                Sees             = model.Sees,
                SeeAlsos         = model.SeeAlsos,

                Inheritance      = model.Inheritance,
                Implements       = model.Implements,
                InheritedMembers = model.InheritedMembers,
                ExtensionMethods = model.ExtensionMethods,
                Attributes       = model.Attributes,
            };

            result.Id = model.Name.Substring((model.Parent?.Name?.Length ?? -1) + 1);

            result.Name = model.DisplayNames.GetLanguageProperty(SyntaxLanguage.Default);
            var nameForCSharp = model.DisplayNames.GetLanguageProperty(SyntaxLanguage.CSharp);

            if (result.Name != nameForCSharp)
            {
                result.NameForCSharp = nameForCSharp;
            }
            var nameForVB = model.DisplayNames.GetLanguageProperty(SyntaxLanguage.VB);

            if (result.Name != nameForVB)
            {
                result.NameForVB = nameForVB;
            }

            result.NameWithType = model.DisplayNamesWithType.GetLanguageProperty(SyntaxLanguage.Default);
            var nameWithTypeForCSharp = model.DisplayNamesWithType.GetLanguageProperty(SyntaxLanguage.CSharp);

            if (result.NameWithType != nameWithTypeForCSharp)
            {
                result.NameWithTypeForCSharp = nameWithTypeForCSharp;
            }
            var nameWithTypeForVB = model.DisplayNamesWithType.GetLanguageProperty(SyntaxLanguage.VB);

            if (result.NameWithType != nameWithTypeForVB)
            {
                result.NameWithTypeForVB = nameWithTypeForVB;
            }

            result.FullName = model.DisplayQualifiedNames.GetLanguageProperty(SyntaxLanguage.Default);
            var fullnameForCSharp = model.DisplayQualifiedNames.GetLanguageProperty(SyntaxLanguage.CSharp);

            if (result.FullName != fullnameForCSharp)
            {
                result.FullNameForCSharp = fullnameForCSharp;
            }
            var fullnameForVB = model.DisplayQualifiedNames.GetLanguageProperty(SyntaxLanguage.VB);

            if (result.FullName != fullnameForVB)
            {
                result.FullNameForVB = fullnameForVB;
            }

            var modifierCSharp = model.Modifiers.GetLanguageProperty(SyntaxLanguage.CSharp);

            if (modifierCSharp?.Count > 0)
            {
                result.Modifiers["csharp"] = modifierCSharp;
            }
            var modifierForVB = model.Modifiers.GetLanguageProperty(SyntaxLanguage.VB);

            if (modifierForVB?.Count > 0)
            {
                result.Modifiers["vb"] = modifierForVB;
            }

            return(result);
        }
示例#40
0
 public virtual void GenerateField(IFieldSymbol symbol, MetadataItem item, SymbolVisitorAdapter adapter)
 {
 }
示例#41
0
        private static void GetAllItemByCommentId(Dictionary <string, MetadataItem> items, MetadataItem item)
        {
            if (!items.ContainsKey(item.CommentId))
            {
                items.Add(item.CommentId, item);
            }

            foreach (var metadataItem in item.Items ?? Enumerable.Empty <MetadataItem>())
            {
                GetAllItemByCommentId(items, metadataItem);
            }
        }
示例#42
0
 public virtual void GenerateEvent(IEventSymbol symbol, MetadataItem item, SymbolVisitorAdapter adapter)
 {
 }
示例#43
0
        private static void PatchViewModel(MetadataItem item, string comment)
        {
            var context = new TripleSlashCommentParserContext
            {
                AddReferenceDelegate = (s, e) => { }
            };
            var commentModel = TripleSlashCommentModel.CreateModel(comment, SyntaxLanguage.CSharp, context);
            var summary      = commentModel.Summary;

            if (!string.IsNullOrEmpty(summary))
            {
                item.Summary = summary;
            }
            var remarks = commentModel.Remarks;

            if (!string.IsNullOrEmpty(remarks))
            {
                item.Remarks = remarks;
            }
            var exceptions = commentModel.Exceptions;

            if (exceptions != null && exceptions.Count > 0)
            {
                item.Exceptions = exceptions;
            }
            var sees = commentModel.Sees;

            if (sees != null && sees.Count > 0)
            {
                item.Sees = sees;
            }
            var seeAlsos = commentModel.SeeAlsos;

            if (seeAlsos != null && seeAlsos.Count > 0)
            {
                item.SeeAlsos = seeAlsos;
            }
            var examples = commentModel.Examples;

            if (examples != null && examples.Count > 0)
            {
                item.Examples = examples;
            }
            if (item.Syntax != null)
            {
                if (item.Syntax.Parameters != null)
                {
                    foreach (var p in item.Syntax.Parameters)
                    {
                        var description = commentModel.GetParameter(p.Name);
                        if (!string.IsNullOrEmpty(description))
                        {
                            p.Description = description;
                        }
                    }
                }
                if (item.Syntax.TypeParameters != null)
                {
                    foreach (var p in item.Syntax.TypeParameters)
                    {
                        var description = commentModel.GetTypeParameter(p.Name);
                        if (!string.IsNullOrEmpty(description))
                        {
                            p.Description = description;
                        }
                    }
                }
                if (item.Syntax.Return != null)
                {
                    var returns = commentModel.Returns;
                    if (!string.IsNullOrEmpty(returns))
                    {
                        item.Syntax.Return.Description = returns;
                    }
                }
            }
            // todo more.
        }
示例#44
0
        public override void GenerateProperty(IPropertySymbol symbol, MetadataItem item, SymbolVisitorAdapter adapter)
        {
            base.GenerateProperty(symbol, item, adapter);

            var modifiers = new List<string>();
            var propertyVisiblity = GetVisiblity(symbol.DeclaredAccessibility);
            if (symbol.ContainingType.TypeKind != TypeKind.Interface)
            {
                if (propertyVisiblity != null)
                {
                    modifiers.Add(propertyVisiblity);
                }
                if (symbol.IsStatic)
                {
                    modifiers.Add("Shared");
                }
                if (symbol.IsAbstract)
                {
                    modifiers.Add("MustOverride");
                }
                if (symbol.IsOverride)
                {
                    modifiers.Add("Overrides");
                }
                if (symbol.IsVirtual && symbol.IsSealed)
                {
                }
                else if (symbol.IsVirtual)
                {
                    modifiers.Add("Overridable");
                }
                else if (symbol.IsSealed)
                {
                    modifiers.Add("NotOverridable");
                }
            }
            bool hasGetMethod = symbol.GetMethod != null;
            bool hasSetMethod = symbol.SetMethod != null;
            var getMethodVisiblity = hasGetMethod ? GetVisiblity(symbol.GetMethod.DeclaredAccessibility) : null;
            var setMethodVisiblity = hasSetMethod ? GetVisiblity(symbol.SetMethod.DeclaredAccessibility) : null;
            if (hasGetMethod ^ hasSetMethod)
            {
                if (hasGetMethod)
                {
                    modifiers.Add("ReadOnly");
                }
                else
                {
                    modifiers.Add("WriteOnly");
                }
            }
            else if (propertyVisiblity != null &&
                (getMethodVisiblity == null ^ setMethodVisiblity == null))
            {
                if (setMethodVisiblity == null)
                {
                    modifiers.Add("ReadOnly");
                }
                if (getMethodVisiblity == null)
                {
                    modifiers.Add("WriteOnly");
                }
            }
            else if (getMethodVisiblity != propertyVisiblity ||
                setMethodVisiblity != propertyVisiblity)
            {
                if (getMethodVisiblity != propertyVisiblity)
                {
                    modifiers.Add($"{getMethodVisiblity} Get");
                }
                else
                {
                    modifiers.Add("Get");
                }
                if (setMethodVisiblity != propertyVisiblity)
                {
                    modifiers.Add($"{setMethodVisiblity} Set");
                }
                else
                {
                    modifiers.Add("Set");
                }
            }
            item.Modifiers[SyntaxLanguage.VB] = modifiers;
        }