示例#1
0
        private bool IsSymbolPairMatchingRelationship(RelatedSymbolPair symbolPair, [NotNull] IModelRelationship relationship)
        {
            var sourceNode = LatestModel.TryGetNode(relationship.Source).Value;
            var targetNode = LatestModel.TryGetNode(relationship.Target).Value;

            return(relationship.Stereotype == symbolPair.Stereotype &&
                   _symbolEqualityComparer.Equals((ISymbol)sourceNode.Payload, symbolPair.SourceSymbol) &&
                   _symbolEqualityComparer.Equals((ISymbol)targetNode.Payload, symbolPair.TargetSymbol));
        }
        private void AddRelationshipIfNotExists(RelatedSymbolPair relatedSymbolPair)
        {
            var sourceNode = CurrentRoslynModel.GetNodeBySymbol(relatedSymbolPair.SourceSymbol);
            var targetNode = CurrentRoslynModel.GetNodeBySymbol(relatedSymbolPair.TargetSymbol);

            if (CurrentRoslynModel.RelationshipExists(sourceNode, targetNode, relatedSymbolPair.Stereotype))
            {
                return;
            }

            var newRelationship = RoslynModelItemFactory.CreateRoslynRelationship(sourceNode, targetNode, relatedSymbolPair.Stereotype);

            AddRelationship(newRelationship);
        }
示例#3
0
 public IModelRelationship GetOrAddRelationship(RelatedSymbolPair relatedSymbolPair)
 {
     using (_asyncLock.Lock())
     {
         return(_modelService.LatestModel.TryGetRelationshipByPayload(relatedSymbolPair).Match(
                    some => some,
                    () =>
         {
             var sourceNode = GetOrAddNode(relatedSymbolPair.SourceSymbol);
             var targetNode = GetOrAddNode(relatedSymbolPair.TargetSymbol);
             return _modelService.AddRelationship(sourceNode.Id, targetNode.Id, relatedSymbolPair.Stereotype, relatedSymbolPair);
         }));
     }
 }
 private static RelatedSymbolPair GetOriginalDefinition(RelatedSymbolPair symbolPair)
 {
     return(symbolPair.WithRelatedSymbol(GetOriginalDefinition(symbolPair.RelatedSymbol)));
 }