private void AddIssuesFromNode(IEnumerable <EditorState> states, EditorState state, IBaseNode rootNode, string fileName, string groupName) { if (typeof(CppNode).Equals(rootNode.GetType())) { CppNode cppNode = (CppNode)rootNode; CppEntity cppEntity = cppNode.Entity; if (cppEntity.DocumentationNode != null) { DoxygenNode doxyNode = (DoxygenNode)cppEntity.DocumentationNode; if (doxyNode.Entity.Kind == DoxygenEntityKind.BlockMulti) { DoxygenNode seeNode = doxyNode.TypedChildren.FirstOrDefault(c => c.Entity.Kind == DoxygenEntityKind.See) as DoxygenNode; bool hasDocumented = false; if (seeNode != null) { DoxygenNode refNode = seeNode.TypedChildren.FirstOrDefault(c => c.Entity.Kind == DoxygenEntityKind.Reference) as DoxygenNode; if (refNode != null) { hasDocumented = true; } } if (!hasDocumented) { AddIssue(lvCppIssues, new IssueTag(state, cppEntity.StartRange.Position), IssueType.Warning, "Not documented (Add a @see @ref [section or page id])", cppEntity.Id, cppEntity.Kind.ToString(), "C/C++", cppEntity.StartRange.Position.Line + 1, fileName); } } } } foreach (var child in rootNode.Children) { AddIssuesFromNode(states, state, child, fileName, "Child"); } }
public string BaseNodeAsString(IBaseNode baseNode) { string result = baseNode != null?baseNode.GetType().ToString() : typeof(IBaseNodeImpl).ToString(); foreach (string key in SakwaObjectMapping.Keys) { if (SakwaObjectMapping[key] == result) { result = key; break; } } return(result); }
/// <summary> /// true, if node1 is derived from node2 or vice versa; else false /// </summary> private bool compareTypes(IBaseNode node1, IBaseNode node2) { Type type1 = node1.GetType(); Type type2 = node2.GetType(); if (type1 == type2) { return(true); } if (type1.IsAssignableFrom(type2) || type2.IsAssignableFrom(type1)) { return(true); } return(false); }