public async Task <IEnumerable <RelatedSymbolPair> > GetRelatedSymbolsAsync( ISymbol symbol, DirectedModelRelationshipType?directedModelRelationshipType = null) { var result = Enumerable.Empty <RelatedSymbolPair>(); var stereotype = _roslynSymbolTranslator.GetStereotype(symbol); if (!_symbolFinderMethods.TryGetValue(stereotype, out var methodsForStereotype)) { return(result); } var methodsToExecute = (directedModelRelationshipType == null ? methodsForStereotype : methodsForStereotype.Where(i => i.Key == directedModelRelationshipType)) .Select(i => i.Value); foreach (var symbolFinderDelegate in methodsToExecute) { var foundSymbols = await symbolFinderDelegate.Invoke(symbol); result = result.Union(foundSymbols); } return(result); }
public IRelatedNodeItemViewModel Create(IModelNode modelNode) { var symbol = (ISymbol)modelNode.Payload; return(new RelatedNodeItemViewModel( modelNode.Id, _roslynSymbolTranslator.GetName(symbol), _roslynSymbolTranslator.GetFullName(symbol), _roslynSymbolTranslator.GetStereotype(symbol), _roslynSymbolTranslator.GetIsStatic(symbol))); }
private IModelNode GetOrAddNode([NotNull] ISymbol symbol) { using (_asyncLock.Lock()) { return(_modelService.LatestModel.TryGetNodeByPayload(symbol).Match( some => some, () => _modelService.AddNode( _roslynSymbolTranslator.GetName(symbol), _roslynSymbolTranslator.GetStereotype(symbol), symbol))); } }