Beispiel #1
0
        public override void VisitDelegateStatement(DelegateStatementSyntax statementNode)
        {
            var isSubMethod = statementNode.ChildTokens().Any(x => x.Kind() == SyntaxKind.SubKeyword);
            var defineName  = statementNode.ChildTokens().FirstOrDefault(x => x.Kind() == SyntaxKind.IdentifierToken).ToString();

            // ジェネリック型を定義している場合
            if (statementNode.ChildNodes().OfType <TypeParameterListSyntax>().Any())
            {
                var listNode     = statementNode.ChildNodes().OfType <TypeParameterListSyntax>().FirstOrDefault();
                var genericTypes = listNode
                                   .ChildNodes()
                                   .OfType <TypeParameterSyntax>()
                                   .Select(x => x.ChildTokens().FirstOrDefault(y => y.Kind() == SyntaxKind.IdentifierToken).ToString());

                defineName = $"{defineName}<{string.Join(", ", genericTypes)}>";
            }

            var methodArguments = new List <MethodArgument>();

            if (statementNode.ChildNodes().OfType <ParameterListSyntax>().FirstOrDefault().ChildNodes().Any())
            {
                var listNode = statementNode.ChildNodes().OfType <ParameterListSyntax>().FirstOrDefault();
                methodArguments = GetMethodArguments(listNode);
            }

            var returnType = string.Empty;

            if (!isSubMethod)
            {
                var asNode = statementNode.ChildNodes().FirstOrDefault(x => x is SimpleAsClauseSyntax);
                returnType = asNode.ChildNodes().FirstOrDefault().ToString();
            }

            var startLength     = statementNode.Span.Start;
            var endLength       = statementNode.Span.End;
            var parentNamespace = GetNamespace(DefineKinds.Delegate, startLength, endLength);

            UserDefinitions.Add(new UserDefinition
            {
                DefineKinds     = DefineKinds.Delegate,
                Namespace       = parentNamespace,
                DefineName      = defineName,
                DefineFullName  = $"{parentNamespace}.{defineName}",
                MethodArguments = methodArguments,
                ReturnType      = ConvertCSharpType(returnType),
                SourceFile      = SourceFile,
                StartLength     = startLength,
                EndLength       = endLength,
            });

            base.VisitDelegateStatement(statementNode);
        }
Beispiel #2
0
 public override SyntaxNode VisitDelegateStatement(DelegateStatementSyntax node)
 {
     return(EnsureVisibility(node, node.Modifiers, (x, l) => x.WithModifiers(l), () => SyntaxKind.PublicKeyword));
 }
 public override SyntaxNode VisitDelegateStatement(DelegateStatementSyntax node)
 {
     return(EnsureVisibility(node, node.Modifiers, (x, l) => x.WithModifiers(l), () => GetDelegateTypeDefaultVisibility(node)));
 }
Beispiel #4
0
 public override void VisitDelegateStatement(DelegateStatementSyntax node)
 {
     LogicalLineCount++;
     base.VisitDelegateStatement(node);
 }
 public override void VisitDelegateStatement(DelegateStatementSyntax node) =>
 TryAddPublicApi(node);
        private Model.Delegate TraverseDelegate(DelegateStatementSyntax ebs)
        {
            Model.Delegate retDelegate = new Model.Delegate();

            foreach (SyntaxToken st in ebs.Modifiers)
            {
                string modifier = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(st.ValueText);
                Encapsulation encap;
                if (System.Enum.TryParse<Encapsulation>(modifier, out encap))
                {
                    retDelegate.Encapsulation.Add(encap);
                }
            }

            Method aMethod = new Method();

            aMethod.Name = ebs.Identifier.ValueText;

            ParameterListSyntax pls = ebs.ParameterList;

            //Parameters
            foreach (ParameterSyntax ps in pls.Parameters)
            {
                aMethod.Parameters.Add(TraverseParameters(ps));
            }

            retDelegate.ReferencedMethods.Add(aMethod);

            return retDelegate;
        }