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); }
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))); }
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; }