public void Merge(ReferenceItem other) { if (other == null) { throw new ArgumentNullException(nameof(other)); } IsDefinition = Merge(other.IsDefinition, IsDefinition); Definition = Merge(other.Definition, Definition); Parent = Merge(other.Parent, Parent); if (other.Parts != null && Parts != null) { foreach (var pair in other.Parts) { var sourceParts = pair.Value; List <LinkItem> targetParts; if (Parts.TryGetValue(pair.Key, out targetParts)) { if (sourceParts.Count == 0) { continue; } Debug.Assert(sourceParts.Count == targetParts.Count); for (int i = 0; i < sourceParts.Count; i++) { Debug.Assert(sourceParts[i].Name == targetParts[i].Name); // Disable for now as it will fail for .NET Core project // Debug.Assert(sourceParts[i].DisplayName == targetParts[i].DisplayName); // Debug.Assert(sourceParts[i].DisplayQualifiedNames == targetParts[i].DisplayQualifiedNames); targetParts[i].IsExternalPath &= sourceParts[i].IsExternalPath; targetParts[i].Href = targetParts[i].Href ?? sourceParts[i].Href; } } else { Parts.Add(pair.Key, pair.Value); } } } else { Parts = Parts ?? other.Parts; } }
internal string AddReference(ISymbol symbol, Dictionary <string, ReferenceItem> references, SymbolVisitorAdapter adapter) { var id = VisitorHelper.GetId(symbol); ReferenceItem reference = new ReferenceItem(); reference.Parts = new SortedList <SyntaxLanguage, List <LinkItem> >(); reference.IsDefinition = symbol.IsDefinition; GenerateReferenceInternal(symbol, reference, adapter); if (!references.ContainsKey(id)) { references[id] = reference; } else { references[id].Merge(reference); } return(id); }
internal override sealed void GenerateReferenceInternal(ISymbol symbol, ReferenceItem reference, SymbolVisitorAdapter adapter) { GenerateReference(symbol, reference, adapter); }
protected abstract void GenerateReference(ISymbol symbol, ReferenceItem reference, SymbolVisitorAdapter adapter);
protected override void GenerateReference(ISymbol symbol, ReferenceItem reference, SymbolVisitorAdapter adapter) { symbol.Accept(new VBReferenceItemVisitor(reference)); }
protected ReferenceItemVisitor(ReferenceItem referenceItem) { ReferenceItem = referenceItem; }
internal abstract void GenerateReferenceInternal(ISymbol symbol, ReferenceItem reference, SymbolVisitorAdapter adapter);