Exemplo n.º 1
0
        // Windows API 系(Declare)
        public override void VisitDeclareStatement(DeclareStatementSyntax statementNode)
        {
            var isSubMethod = statementNode.ChildTokens().Any(x => x.Kind() == SyntaxKind.SubKeyword);
            var defineName  = statementNode.ChildTokens().FirstOrDefault(x => x.Kind() == SyntaxKind.IdentifierToken).ToString();

            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.WindowsAPI, startLength, endLength);

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

            base.VisitDeclareStatement(statementNode);
        }
Exemplo n.º 2
0
 public override void VisitDeclareStatement(DeclareStatementSyntax node)
 {
     LogicalLineCount++;
     base.VisitDeclareStatement(node);
 }