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)));
        }
Пример #3
0
 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)));
     }
 }