Inheritance: SDMemberBase
コード例 #1
0
ファイル: MethodViewModel.cs プロジェクト: JoeHosman/sharpDox
 public MethodViewModel(SDMethod method, TypeViewModel parent, ObservableCollection<string> excludedIdentifiers)
     : base(method.Identifier, parent, excludedIdentifiers)
 {
     Text = method.Name;
     Accessibility = method.Accessibility;
     Image = string.Format("pack://application:,,,/SharpDox.Resources;component/Icons/Method_{0}.png", Accessibility);
 }
コード例 #2
0
ファイル: SDRepository.cs プロジェクト: llenroc/sharpDox
 public void AddMethod(SDMethod sdMethod)
 {
     if (!Methods.ContainsKey(sdMethod.Identifier))
     {
         Methods.Add(sdMethod.Identifier, sdMethod);
     }
 }
コード例 #3
0
ファイル: MethodViewModel.cs プロジェクト: llenroc/sharpDox
 public MethodViewModel(SDMethod method, TypeViewModel parent, ICoreConfigSection sharpDoxConfig)
     : base(method.Identifier, parent, sharpDoxConfig)
 {
     Text = method.Name;
     Accessibility = method.Accessibility;
     Image = string.Format("pack://application:,,,/SharpDox.GUI;component/Resources/Icons/Method_{0}.png", Accessibility);
 }
コード例 #4
0
 private void CreateReturn(SDMethod method)
 {
     if (!string.IsNullOrEmpty(method.ReturnType.Type.Name) && method.ReturnType.Type.Name.ToUpper() != "VOID")
     {
         _sequenceDiagram.AddConnection(_sequenceDiagram.StartNodeID, Guid.Empty, method.ReturnType.Type.Name, string.Empty, true);
     }
 }
コード例 #5
0
ファイル: MethodParser.cs プロジェクト: llenroc/sharpDox
        private SDMethod GetParsedMethod(IMethod method, bool isCtor)
        {
            var sdMethod = _repository.GetMethodByIdentifier(method.GetIdentifier());
            if (sdMethod != null)
            {
                return sdMethod;
            }

            var returnType = _typeParser.GetParsedType(method.ReturnType);

            sdMethod = new SDMethod(method.GetIdentifier(), isCtor ? method.DeclaringType.Name : method.Name)
            {
                Namespace = method.Namespace,
                DeclaringType = _typeParser.GetParsedType(method.DeclaringType),
                ReturnType = returnType,
                IsCtor = isCtor,
                Accessibility = method.Accessibility.ToString().ToLower(),
                IsAbstract = method.IsAbstract,
                IsShadowing = method.IsShadowing,
                IsOverride = method.IsOverride,
                IsPrivate = method.IsPrivate,
                IsProtected = method.IsProtected,
                IsPublic = method.IsPublic,
                IsSealed = method.IsSealed,
                IsVirtual = method.IsVirtual,
                IsStatic = method.IsStatic,
                Documentations = _documentationParser.ParseDocumentation(method),
                Region = new SDRegion
                {
                    BeginColumn = method.Region.BeginColumn,
                    BeginLine = method.Region.BeginLine,
                    EndColumn = method.Region.EndColumn,
                    EndLine = method.Region.EndLine,
                    Filename = method.Region.FileName
                }
            };

            foreach (ITypeParameter typeParameter in method.TypeParameters)
            {
                sdMethod.TypeParameters.Add(_typeParser.GetParsedType(typeParameter));
            }

            foreach (IParameter parameter in method.Parameters)
            {
                sdMethod.Parameters.Add(new SDParameter
                {
                    Name = parameter.Name,
                    ParamType = _typeParser.GetParsedType(parameter.Type),
                    IsOptional = parameter.IsOptional,
                    IsConst = parameter.IsConst,
                    ConstantValue = parameter.ConstantValue,
                    IsRef = parameter.IsRef,
                    IsOut = parameter.IsOut
                });
            }

            _repository.AddMethod(sdMethod);
            return sdMethod;
        }
コード例 #6
0
ファイル: MethodVisitor.cs プロジェクト: JoeHosman/sharpDox
		public MethodVisitor(SDRepository repository, SDMethod method, SDType type, CSharpFile file)
		{
            _repository = repository;
		    _method = method;
            _type = type;
			_file = file;
			_tokenList = method.Calls;
		}
コード例 #7
0
ファイル: CSharpMethodVisitor.cs プロジェクト: Geaz/sharpDox
 public CSharpMethodVisitor(SDRepository repository, SDMethod method, SDType type, Document file)
     : base(SyntaxWalkerDepth.StructuredTrivia)
 {
     _repository = repository;
     _method = method;
     _type = type;
     _file = file;
     _tokenList = method.Calls;
 }
コード例 #8
0
ファイル: MethodParser.cs プロジェクト: Geaz/sharpDox
        private SDMethod GetParsedMethod(IMethodSymbol method, bool isCtor)
        {
            var sdMethod = ParserOptions.SDRepository.GetMethodByIdentifier(method.GetIdentifier());
            if (sdMethod != null)
            {
                return sdMethod;
            }

            var returnType = _typeRefParser.GetParsedTypeReference(method.ReturnType);
            var syntaxReference = method.DeclaringSyntaxReferences.Any() ? method.DeclaringSyntaxReferences.Single() : null;
            sdMethod = new SDMethod(method.GetIdentifier(), isCtor ? method.ContainingType.Name : method.Name)
            {
                Namespace = method.ContainingNamespace.GetIdentifier(),
                DeclaringType = _typeRefParser.GetParsedTypeReference(method.ContainingType),
                ReturnType = returnType,
                IsCtor = isCtor,
                Accessibility = method.DeclaredAccessibility.ToString().ToLower(),
                IsAbstract = method.IsAbstract,
                IsOverride = method.IsOverride,
                IsPrivate = method.DeclaredAccessibility == Accessibility.Private,
                IsProtected = method.DeclaredAccessibility == Accessibility.Protected,
                IsPublic = method.DeclaredAccessibility == Accessibility.Public,
                IsSealed = method.IsSealed,
                IsVirtual = method.IsVirtual,
                IsStatic = method.IsStatic,
                Documentations = DocumentationParser.ParseDocumentation(method),
                Region = syntaxReference != null ? new SDRegion
                {
                    Start = syntaxReference.Span.Start,
                    End = syntaxReference.Span.End,
                    Filename = syntaxReference.SyntaxTree.FilePath
                } : null
            };

            foreach (var typeParameter in method.TypeParameters)
            {
                sdMethod.TypeParameters.Add(_typeRefParser.GetParsedTypeReference(typeParameter));
            }

            foreach (var parameter in method.Parameters)
            {
                sdMethod.Parameters.Add(new SDParameter
                {
                    Name = parameter.Name,
                    ParamType = _typeRefParser.GetParsedTypeReference(parameter.Type),
                    IsOptional = parameter.IsOptional,
                    IsConst = parameter.HasExplicitDefaultValue,
                    ConstantValue = parameter.HasExplicitDefaultValue ? parameter.ExplicitDefaultValue?.ToString() ?? "null" : null,
                    IsRef = parameter.RefKind == RefKind.Ref,
                    IsOut = parameter.RefKind == RefKind.Out
                });
            }

            ParserOptions.SDRepository.AddMethod(sdMethod);
            return sdMethod;
        }
コード例 #9
0
        public void ShouldReturnTrueForSequenceDiagramIsEmpty()
        {
            //Arrange
            var sdMethod = new SDMethod("SharpDox.UML.Tests.DiagramExtensionsTests.Method1", "Method1");

            //Act
            var isEmpty = sdMethod.IsSequenceDiagramEmpty();

            //Assert
            Assert.AreEqual(true, isEmpty);
        }
コード例 #10
0
        public void ShouldReturnTrueForSequenceDiagramIsEmptyBecauseOnlyCallsToStrangers()
        {
            //Arrange
            var sdType = new SDType("SharpDox.UML.Tests.DiagramExtensionsTests", "DiagramExtensionTests", new SDNamespace("SharpDox.UML.Tests"));
            var sdMethod = new SDMethod("SharpDox.UML.Tests.DiagramExtensionsTests.Method1", "Method1");

            var sdTypeStranger = new SDType("System.String", "String", new SDNamespace("System"));
            var sdMethodStranger = new SDMethod("System.String.Method1", "Method1");

            var sdNode = new SDTargetNode();
            sdNode.CalledType = sdTypeStranger;
            sdNode.CalledMethod = sdMethodStranger;
            sdNode.CallerMethod = sdMethod;
            sdNode.CallerType = sdType;

            sdMethod.Calls.Add(sdNode);

            //Act
            var isEmpty = sdMethod.IsSequenceDiagramEmpty();

            //Assert
            Assert.AreEqual(true, isEmpty);
        }
コード例 #11
0
        public void ShouldReturnFalseForSequenceDiagramIsEmpty()
        {
            //Arrange
            var sdType = new SDType("SharpDox.UML.Tests.DiagramExtensionsTests", "DiagramExtensionTests", new SDNamespace("SharpDox.UML.Tests"));
            sdType.IsProjectStranger = false;
            var sdMethod = new SDMethod("SharpDox.UML.Tests.DiagramExtensionsTests.Method1", "Method1");

            var sdNode = new SDTargetNode();
            sdNode.CalledMethod = new SDMethod("SharpDox.UML.Tests.DiagramExtensionsTests.Method2", "Method2");
            sdNode.CallerMethod = sdMethod;
            sdNode.CallerType = sdType;
            sdNode.CalledType = sdType;

            //Add this node twice, because the check will skipp call number one
            //because this one is usually the first call to the method itself
            sdMethod.Calls.Add(sdNode);
            sdMethod.Calls.Add(sdNode);

            //Act
            var isEmpty = sdMethod.IsSequenceDiagramEmpty();

            //Assert
            Assert.AreEqual(false, isEmpty);
        }
コード例 #12
0
ファイル: CSharpMethodVisitor.cs プロジェクト: Geaz/sharpDox
        private void ParseTargetExpression(InvocationExpressionSyntax expression)
        {
            var compilation = _file.Project.GetCompilationAsync().Result;
            var symbolInfo = compilation.GetSemanticModel(_file.GetSyntaxTreeAsync().Result).GetSymbolInfo(expression);

            if (symbolInfo.Symbol != null)
            {
                var member = symbolInfo.Symbol;
                var method = member as IMethodSymbol;

                if (method != null)
                {
                    var callerType = _type;
                    var callerMethod = _method;

                    SDType calledType = null;
                    var sdType = _repository.GetTypeByIdentifier(member.ContainingType.GetIdentifier());
                    if (sdType == null)
                    {
                        var sdNamespace = _repository.GetNamespaceByIdentifier(member.ContainingNamespace.GetIdentifier());
                        sdNamespace = sdNamespace ?? new SDNamespace(member.ContainingNamespace.GetIdentifier()) { IsProjectStranger = true };
                        calledType = new SDType(member.ContainingType.GetIdentifier(), member.ContainingType.Name, sdNamespace) { IsProjectStranger = true };
                    }
                    else
                    {
                        calledType = sdType;
                    }

                    SDMethod calledMethod = null;
                    if (calledType.IsProjectStranger)
                    {
                        calledMethod = new SDMethod(method.GetIdentifier(), method.Name);
                    }
                    else
                    {
                        SDMethod sdMethod = sdType.Methods.Concat(sdType.Constructors).SingleOrDefault(m => m.Identifier == method.GetIdentifier());
                        if (sdMethod != null)
                        {
                            calledMethod = sdMethod;
                        }
                    }

                    // Only add method, if it is project stranger, public or private (if not only public members option on)
                    if (calledMethod != null)
                    {
                        var token = new SDTargetNode
                        {
                            CalledType = calledType,
                            CallerType = callerType,
                            CalledMethod = calledMethod,
                            CallerMethod = callerMethod
                        };

                        _tokenList.Add(token);
                    }
                }
            }
        }
コード例 #13
0
 public SequenceDiagramParser(SDMethod method, SDRepository sdRepository = null)
 {
     _method = method;
     _sdRepository = sdRepository;
 }
コード例 #14
0
 public SequenceDiagramParser(SDMethod method, List<SDType> repositoryTypes = null)
 {
     _method = method;
     _repositoryTypes = repositoryTypes;
 }
コード例 #15
0
ファイル: MethodVisitor.cs プロジェクト: JoeHosman/sharpDox
        private void ParseTargetExpression(Expression expression)
        {
            if (_file != null)
            {
                var resolver = new CSharpAstResolver(_file.Project.Compilation, _file.SyntaxTree, _file.UnresolvedTypeSystemForFile);
                var resolveResult = resolver.Resolve(expression);

                if (resolveResult is CSharpInvocationResolveResult)
                {
                    var member = ((CSharpInvocationResolveResult)resolveResult).Member;
                    var method = member as IMethod;

                    if (method != null)
                    {
                        var callerType = _type;
                        var callerMethod = _method;

                        SDType calledType = null;
                        var sdType = _repository.GetTypeByIdentifier(member.DeclaringType.GetIdentifier());
                        if (sdType == null)
                        {
                            var sdNamespace = _repository.GetNamespaceByIdentifier(member.DeclaringType.Namespace);
                            sdNamespace = sdNamespace == null ? new SDNamespace(member.DeclaringType.Namespace) { IsProjectStranger = true } : sdNamespace;
                            calledType = new SDType(member.DeclaringType.GetIdentifier(), member.DeclaringType.Name, sdNamespace) { IsProjectStranger = true };
                        }
                        else
                        {
                            calledType = sdType;
                        }

                        SDMethod calledMethod = null;
                        if (calledType.IsProjectStranger)
                        {
                            calledMethod = new SDMethod(method.GetIdentifier(), method.Name);
                        }
                        else
                        {
                            SDMethod sdMethod = sdType.Methods.Concat(sdType.Constructors).SingleOrDefault(m => m.Identifier == method.GetIdentifier());
                            if(sdMethod != null)
                            {
                                calledMethod = sdMethod;
                            }
                        }

                        // Only add method, if it is project stranger, public or private (if not only public members option on)
                        if (calledMethod != null)
                        {
                            var token = new SDTargetNode
                                            {
                                                    CalledType = calledType,
                                                    CallerType = callerType,
                                                    CalledMethod = calledMethod,
                                                    CallerMethod = callerMethod
                                            };

                            _tokenList.Add(token);
                        }
                    }
                }
            }
        }