public override SyntaxNode VisitMethodDeclaration(MethodDeclarationSyntax node) { if (node.IsUnSafe()) { this.AppendCompileIssue(node, IssueType.Error, IssueId.UnsafeNotSupport); return node; } if (node.IsExtern()) { this.AppendCompileIssue(node, IssueType.Error, IssueId.ExternNotSupport); return node; } var info = _semanticModel.GetDeclaredSymbol(node); _isNative = info.IsNativeMethod(); var rInfo = _semanticModel.GetTypeInfo(node.ReturnType); if (!rInfo.Type.IsScriptSymbol()) { this.AppendCompileIssue(node, IssueType.Error, IssueId.UseNonScript, rInfo.Type); } BasicMethodTemplate template = _template.CreateMethodTemplate(_isStaticMember); template.Assign(BasicMethodTemplate.CLASS, _currentClass).Assign(BasicMethodTemplate.METHOD, info.GetMemberSymbolName()).Assign(BasicMethodTemplate.ARGS, this.MakeParametersList(node.ParameterList)); _output.Write(node.Identifier, template.GetBeginString()); if (_indentMember) _output.IncreaseIndent(); if (node.Body != null) this.VisitBlock(node.Body); if (node.ExpressionBody != null) { if (!_semanticModel.IsVoid(node)) _output.Write(node.ExpressionBody, "return "); this.Visit(node.ExpressionBody); _output.TrivialWriteLine(';'); } if (_indentMember) _output.DecreaseIndent(); _output.TrivialWrite(template.GetEndString()); this._isNative = false; return node; }