本文整理汇总了C#中Microsoft.CodeAnalysis.CSharp.Syntax.ReturnStatementSyntax类的典型用法代码示例。如果您正苦于以下问题:C# ReturnStatementSyntax类的具体用法?C# ReturnStatementSyntax怎么用?C# ReturnStatementSyntax使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
ReturnStatementSyntax类属于Microsoft.CodeAnalysis.CSharp.Syntax命名空间,在下文中一共展示了ReturnStatementSyntax类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C#代码示例。
示例1: CreateNewReturnStm
private StatementSyntax CreateNewReturnStm(ReturnStatementSyntax ret)
{
var statements = new List<StatementSyntax>();
var arg = DocumentWeaver.ParametersToArg(_m.ParameterList.Parameters, x => x.Modifiers.Count(y => y.Kind() == SyntaxKind.OutKeyword || y.Kind() == SyntaxKind.RefKeyword) > 0);
if (DocumentWeaver.IsFunction(_m))
{
//pushResult
var left = SyntaxFactory.IdentifierName(DocumentWeaver.RESULTMARKER);
var newNode = SyntaxFactory.AssignmentExpression(SyntaxKind.SimpleAssignmentExpression, left, ret.Expression);
var returnVar = SyntaxFactory.ReturnStatement(left);
//specialvar = xxxx
statements.Add(SyntaxFactory.ExpressionStatement(newNode));
//pushresult (speacialvar)
statements.Add(DocumentWeaver.ReportStatement("PushResult", SyntaxFactory.Argument(SyntaxFactory.IdentifierName(DocumentWeaver.RESULTMARKER))));
//place here values of ref/out args
if (arg != null)
statements.Add(DocumentWeaver.ReportStatement("PushOutArgs", SyntaxFactory.Argument(arg)));
//return specialvar
statements.Add(returnVar);
}
else
{
//place here values of ref/out args
if (arg != null)
statements.Add(DocumentWeaver.ReportStatement("PushOutArgs", SyntaxFactory.Argument(arg)));
//if void method there is no expression after return, so we add the same expression 'return;'
statements.Add(ret);
}
return SyntaxFactory.Block(statements);
}
开发者ID:pgourlain,项目名称:CodeWeaver,代码行数:30,代码来源:ReturnReplacement.cs
示例2: GetMatch
static bool GetMatch(IfStatementSyntax node, out ExpressionSyntax c, out ReturnStatementSyntax e1, out ReturnStatementSyntax e2, out ReturnStatementSyntax rs)
{
rs = e1 = e2 = null;
c = node.Condition;
//attempt to match if(condition) return else return
e1 = ConvertIfStatementToNullCoalescingExpressionAction.GetSimpleStatement(node.Statement) as ReturnStatementSyntax;
if (e1 == null)
return false;
e2 = node.Else != null ? ConvertIfStatementToNullCoalescingExpressionAction.GetSimpleStatement(node.Else.Statement) as ReturnStatementSyntax : null;
//match
if (e1 != null && e2 != null)
{
return true;
}
//attempt to match if(condition) return; return
if (e1 != null)
{
var parentBlock = node.Parent as BlockSyntax;
if (parentBlock == null)
return false;
var index = parentBlock.Statements.IndexOf(node);
if (index + 1 < parentBlock.Statements.Count)
{
rs = parentBlock.Statements[index + 1] as ReturnStatementSyntax;
}
if (rs != null)
{
e2 = rs;
return true;
}
}
return false;
}
开发者ID:alecor191,项目名称:RefactoringEssentials,代码行数:35,代码来源:ConvertIfStatementToReturnStatementAction.cs
示例3: GetMatch
static bool GetMatch(IfStatementSyntax node, out ExpressionSyntax c, out ReturnStatementSyntax e1, out ReturnStatementSyntax e2, out ReturnStatementSyntax rs)
{
rs = e1 = e2 = null;
c = node.Condition;
//attempt to match if(condition) return else return
e1 = ConvertIfStatementToNullCoalescingExpressionAction.GetSimpleStatement(node.Statement) as ReturnStatementSyntax;
if (e1 == null)
return false;
e2 = node.Else != null ? ConvertIfStatementToNullCoalescingExpressionAction.GetSimpleStatement(node.Else.Statement) as ReturnStatementSyntax : null;
//match
if (e1 != null && e2 != null)
{
return true;
}
//attempt to match if(condition) return
if (e1 != null)
{
rs = node.Parent.ChildThatContainsPosition(node.GetTrailingTrivia().Max(t => t.FullSpan.End) + 1).AsNode() as ReturnStatementSyntax;
if (rs != null)
{
e2 = rs;
return true;
}
}
return false;
}
开发者ID:Kavignon,项目名称:RefactoringEssentials,代码行数:27,代码来源:ConvertIfStatementToReturnStatementAction.cs
示例4: VisitReturnStatement
public override void VisitReturnStatement(ReturnStatementSyntax node)
{
if (node.Expression != null && node.Expression.Kind() == SyntaxKind.NullLiteralExpression)
{
AddMessage(node.Expression, "Can't return null");
}
}
开发者ID:jimdeselms,项目名称:codeformatter,代码行数:7,代码来源:ReturnNullValidationRule.cs
示例5: VisitReturnStatement
public override SyntaxNode VisitReturnStatement(ReturnStatementSyntax node)
{
if (!IsInLambda(node))
{
modified = true;
return CreateNewReturnStm(node);
}
return base.VisitReturnStatement(node);
}
开发者ID:pgourlain,项目名称:CodeWeaver,代码行数:9,代码来源:ReturnReplacement.cs
示例6: GetMemberAccessExpressionFromReturn
private static MemberAccessExpressionSyntax GetMemberAccessExpressionFromReturn(ReturnStatementSyntax returnIf, ReturnStatementSyntax returnElse)
{
if (returnIf?.Expression == null || returnElse?.Expression == null) return null;
var nullLiteral = returnElse.Expression as LiteralExpressionSyntax;
if (nullLiteral == null) return null;
if (!nullLiteral.IsKind(SyntaxKind.NullLiteralExpression)) return null;
var memberAccessExpression = returnIf.Expression as MemberAccessExpressionSyntax;
return memberAccessExpression;
}
开发者ID:JeanLLopes,项目名称:code-cracker,代码行数:9,代码来源:ExistenceOperatorAnalyzer.cs
示例7: ReturnStatement
public static string ReturnStatement(ReturnStatementSyntax statement)
{
var output = "return";
if (statement.Expression != null)
{
output += " " + SyntaxNode(statement.Expression);
}
return output + Semicolon(statement.SemicolonToken);
}
开发者ID:UIKit0,项目名称:SharpSwift,代码行数:11,代码来源:StatementSyntaxParser.cs
示例8: ReplaceWithEmptyEnumerable
private async Task<Document> ReplaceWithEmptyEnumerable(Document document, ReturnStatementSyntax returnNullStatement, MethodDeclarationSyntax method, CancellationToken cancellationToken)
{
var semanticModel = await document.GetSemanticModelAsync(cancellationToken);
var typeSymbol = semanticModel.GetSymbolInfo(method.ReturnType, cancellationToken).Symbol as INamedTypeSymbol;
var genericTypeArgument = typeSymbol.TypeArguments.Single();
var empty = SyntaxFactory.ParseExpression($"Enumerable.Empty<{genericTypeArgument.Name}>()");
var returnEmptyStatement = returnNullStatement.WithExpression(empty);
SyntaxNode root = await document.GetSyntaxRootAsync(cancellationToken);
var newRoot = root.ReplaceNode(returnNullStatement, returnEmptyStatement);
return document.WithSyntaxRoot(newRoot) ;
}
开发者ID:Jetabroad,项目名称:DotNetUserGroup,代码行数:12,代码来源:CodeFixProvider.cs
示例9: UseExistenceOperatorAsyncWithReturnAsync
private static async Task<Document> UseExistenceOperatorAsyncWithReturnAsync(Document document, IfStatementSyntax ifStatement, CancellationToken cancellationToken, ReturnStatementSyntax returnIf)
{
var newMemberAccess = ((MemberAccessExpressionSyntax)returnIf.Expression).ToConditionalAccessExpression();
var newReturn = SyntaxFactory.ReturnStatement(newMemberAccess)
.WithLeadingTrivia(ifStatement.GetLeadingTrivia())
.WithTrailingTrivia(ifStatement.GetTrailingTrivia())
.WithAdditionalAnnotations(Formatter.Annotation);
var root = await document.GetSyntaxRootAsync(cancellationToken);
var newRoot = root.ReplaceNode(ifStatement, newReturn);
var newDocument = document.WithSyntaxRoot(newRoot);
return newDocument;
}
开发者ID:JeanLLopes,项目名称:code-cracker,代码行数:12,代码来源:ExistenceOperatorCodeFixProvider.cs
示例10: VisitReturnStatement
public override SyntaxNode VisitReturnStatement(ReturnStatementSyntax node)
{
var newNode = node.WithExpression(
SyntaxFactory.InvocationExpression(
SyntaxFactory.MemberAccessExpression(
SyntaxKind.SimpleMemberAccessExpression,
SyntaxFactory.ParseName("System.Threading.Tasks.Task")
.WithAdditionalAnnotations(Simplifier.Annotation),
SyntaxFactory.IdentifierName("FromResult")),
SyntaxFactory.ArgumentList().AddArguments(SyntaxFactory.Argument(node.Expression))));
return base.VisitReturnStatement(newNode);
}
开发者ID:denhul,项目名称:code-cracker,代码行数:13,代码来源:MakeMethodNonAsyncCodeFixProvider.cs
示例11: TryGetNewReturnStatement
public static bool TryGetNewReturnStatement(IfStatementSyntax ifStatement, SemanticModel semanticModel, out ReturnStatementSyntax returnStatement)
{
returnStatement = null;
var conditional = new ReturnConditionalAnalyzer(ifStatement, semanticModel).CreateConditional();
if (conditional == null)
{
return false;
}
returnStatement = SyntaxFactory.ReturnStatement(conditional);
return true;
}
开发者ID:Rickinio,项目名称:roslyn,代码行数:14,代码来源:ReturnConditionalAnalyzer.cs
示例12: TryGetReturnStatements
private static bool TryGetReturnStatements(IfStatementSyntax ifStatement, out ReturnStatementSyntax whenTrueStatement, out ReturnStatementSyntax whenFalseStatement)
{
Debug.Assert(ifStatement != null);
Debug.Assert(ifStatement.Else != null);
whenTrueStatement = null;
whenFalseStatement = null;
var statement = ifStatement.Statement.SingleStatementOrSelf() as ReturnStatementSyntax;
if (statement == null)
{
return false;
}
var elseStatement = ifStatement.Else.Statement.SingleStatementOrSelf() as ReturnStatementSyntax;
if (elseStatement == null)
{
return false;
}
whenTrueStatement = statement;
whenFalseStatement = elseStatement;
return true;
}
开发者ID:Rickinio,项目名称:roslyn,代码行数:24,代码来源:ReturnConditionalAnalyzer.cs
示例13: VisitReturnStatement
public override void VisitReturnStatement(ReturnStatementSyntax node)
{
if (node.Expression != null)
{
Visit(node.Expression, _enclosing);
}
}
开发者ID:XieShuquan,项目名称:roslyn,代码行数:7,代码来源:LocalBinderFactory.cs
示例14: BindReturn
private BoundReturnStatement BindReturn(ReturnStatementSyntax syntax, DiagnosticBag diagnostics)
{
var expressionSyntax = syntax.Expression;
BoundExpression arg = null;
if (expressionSyntax != null)
{
arg = BindValue(expressionSyntax, diagnostics, BindValueKind.RValue);
}
else
{
// If this is a void return statement in a script, return default(T).
var interactiveInitializerMethod = this.ContainingMemberOrLambda as SynthesizedInteractiveInitializerMethod;
if (interactiveInitializerMethod != null)
{
arg = new BoundDefaultOperator(interactiveInitializerMethod.GetNonNullSyntaxNode(), interactiveInitializerMethod.ResultType);
}
}
bool hasErrors;
if (IsDirectlyInIterator)
{
diagnostics.Add(ErrorCode.ERR_ReturnInIterator, syntax.ReturnKeyword.GetLocation());
hasErrors = true;
}
else if (arg != null)
{
hasErrors = arg.HasErrors || ((object)arg.Type != null && arg.Type.IsErrorType());
}
else
{
hasErrors = false;
}
if (hasErrors)
{
return new BoundReturnStatement(syntax, arg, hasErrors: true);
}
TypeSymbol retType = GetCurrentReturnType();
// The return type could be null; we might be attempting to infer the return type either
// because of method type inference, or because we are attempting to do error analysis
// on a lambda expression of unknown return type.
if ((object)retType != null)
{
if (retType.SpecialType == SpecialType.System_Void || IsTaskReturningAsyncMethod())
{
if (arg != null)
{
var container = this.ContainingMemberOrLambda;
var lambda = container as LambdaSymbol;
if ((object)lambda != null)
{
// Error case: void-returning or async task-returning method or lambda with "return x;"
var errorCode = retType.SpecialType == SpecialType.System_Void
? ErrorCode.ERR_RetNoObjectRequiredLambda
: ErrorCode.ERR_TaskRetNoObjectRequiredLambda;
// Anonymous function converted to a void returning delegate cannot return a value
Error(diagnostics, errorCode, syntax.ReturnKeyword);
// COMPATIBILITY: The native compiler also produced an error
// COMPATIBILITY: "Cannot convert lambda expression to delegate type 'Action' because some of the
// COMPATIBILITY: return types in the block are not implicitly convertible to the delegate return type"
// COMPATIBILITY: This error doesn't make sense in the "void" case because the whole idea of
// COMPATIBILITY: "conversion to void" is a bit unusual, and we've already given a good error.
}
else
{
// Error case: void-returning or async task-returning method or lambda with "return x;"
var errorCode = retType.SpecialType == SpecialType.System_Void
? ErrorCode.ERR_RetNoObjectRequired
: ErrorCode.ERR_TaskRetNoObjectRequired;
Error(diagnostics, errorCode, syntax.ReturnKeyword, container);
}
}
}
else
{
if (arg == null)
{
// Error case: non-void-returning or Task<T>-returning method or lambda but just have "return;"
var requiredType = IsGenericTaskReturningAsyncMethod()
? retType.GetMemberTypeArgumentsNoUseSiteDiagnostics().Single()
: retType;
Error(diagnostics, ErrorCode.ERR_RetObjectRequired, syntax.ReturnKeyword, requiredType);
}
else
{
arg = CreateReturnConversion(syntax, diagnostics, arg, retType);
}
}
}
else
{
// Check that the returned expression is not void.
if ((object)arg?.Type != null && arg.Type.SpecialType == SpecialType.System_Void)
{
//.........这里部分代码省略.........
开发者ID:jeffanders,项目名称:roslyn,代码行数:101,代码来源:Binder_Statements.cs
示例15: VisitReturnStatement
public override SyntaxNode VisitReturnStatement(ReturnStatementSyntax node)
{
if (node.Expression != null)
{
_output.Write(node.ReturnKeyword, "return ");
this.VisitExpression(node.Expression);
}
else
{
_output.Write(node.ReturnKeyword, "return");
}
return node;
}
开发者ID:rexzh,项目名称:SharpJs,代码行数:14,代码来源:Rewriter_BasicStructure.cs
示例16: InferTypeForReturnStatement
private IEnumerable<ITypeSymbol> InferTypeForReturnStatement(ReturnStatementSyntax returnStatement, SyntaxToken? previousToken = null)
{
// If we are position based, then we have to be after the return statement.
if (previousToken.HasValue && previousToken.Value != returnStatement.ReturnKeyword)
{
return SpecializedCollections.EmptyEnumerable<ITypeSymbol>();
}
var ancestorExpressions = returnStatement.GetAncestorsOrThis<ExpressionSyntax>();
// If we're in a lambda, then use the return type of the lambda to figure out what to
// infer. i.e. Func<int,string> f = i => { return Foo(); }
var lambda = ancestorExpressions.FirstOrDefault(e => e.IsKind(SyntaxKind.ParenthesizedLambdaExpression, SyntaxKind.SimpleLambdaExpression));
if (lambda != null)
{
return InferTypeInLambdaExpression(lambda);
}
// If we are inside a delegate then use the return type of the Invoke Method of the delegate type
var delegateExpression = ancestorExpressions.FirstOrDefault(e => e.IsKind(SyntaxKind.AnonymousMethodExpression));
if (delegateExpression != null)
{
var delegateType = InferTypesWorker(delegateExpression).FirstOrDefault();
if (delegateType != null && delegateType.IsDelegateType())
{
var delegateInvokeMethod = delegateType.GetDelegateType(this.Compilation).DelegateInvokeMethod;
if (delegateInvokeMethod != null)
{
return SpecializedCollections.SingletonEnumerable(delegateInvokeMethod.ReturnType);
}
}
}
var memberSymbol = GetDeclaredMemberSymbolFromOriginalSemanticModel(this.semanticModel, returnStatement.GetAncestorOrThis<MemberDeclarationSyntax>());
if (memberSymbol.IsKind(SymbolKind.Method))
{
var method = memberSymbol as IMethodSymbol;
if (method.IsAsync)
{
var typeArguments = method.ReturnType.GetTypeArguments();
var taskOfT = this.Compilation.TaskOfTType();
return taskOfT != null && method.ReturnType.OriginalDefinition == taskOfT && typeArguments.Any()
? SpecializedCollections.SingletonEnumerable(typeArguments.First())
: SpecializedCollections.EmptyEnumerable<ITypeSymbol>();
}
else
{
return SpecializedCollections.SingletonEnumerable(method.ReturnType);
}
}
else if (memberSymbol.IsKind(SymbolKind.Property))
{
return SpecializedCollections.SingletonEnumerable((memberSymbol as IPropertySymbol).Type);
}
else if (memberSymbol.IsKind(SymbolKind.Field))
{
return SpecializedCollections.SingletonEnumerable((memberSymbol as IFieldSymbol).Type);
}
return SpecializedCollections.EmptyEnumerable<ITypeSymbol>();
}
开发者ID:jerriclynsjohn,项目名称:roslyn,代码行数:63,代码来源:CSharpTypeInferenceService.TypeInferrer.cs
示例17: BindReturn
private BoundStatement BindReturn(ReturnStatementSyntax syntax, DiagnosticBag diagnostics)
{
if (syntax.Expression == null)
{
return BindReturnParts(syntax, diagnostics);
}
var binder = GetBinder(syntax);
Debug.Assert(binder != null);
return binder.WrapWithVariablesIfAny(syntax, binder.BindReturnParts(syntax, diagnostics));
}
开发者ID:abock,项目名称:roslyn,代码行数:11,代码来源:Binder_Statements.cs
示例18: VisitReturnStatement
public override void VisitReturnStatement(ReturnStatementSyntax node)
{
if (node.Expression != null)
{
var patternBinder = new PatternVariableBinder(node, _enclosing);
AddToMap(node, patternBinder);
Visit(node.Expression, patternBinder);
}
}
开发者ID:CAPCHIK,项目名称:roslyn,代码行数:9,代码来源:LocalBinderFactory.cs
示例19: VisitReturnStatement
public override void VisitReturnStatement(ReturnStatementSyntax node)
{
Emit(node.ToString());
}
开发者ID:benlaan,项目名称:cs2ts,代码行数:4,代码来源:Transpiler.cs
示例20: SuppDiagReturnCheck
// Checks the return value of the get accessor within SupportedDiagnostics
private bool SuppDiagReturnCheck(CompilationAnalysisContext context, InvocationExpressionSyntax valueClause, ReturnStatementSyntax returnDeclarationLocation, List<string> ruleNames, PropertyDeclarationSyntax propertyDeclaration)
{
if (valueClause == null)
{
ReportDiagnostic(context, IncorrectAccessorReturnRule, returnDeclarationLocation.ReturnKeyword.GetLocation());
return false;
}
var valueExpression = valueClause.Expression as MemberAccessExpressionSyntax;
if (valueExpression == null)
{
ReportDiagnostic(context, IncorrectAccessorReturnRule, returnDeclarationLocation.ReturnKeyword.GetLocation());
return false;
}
var valueExprExpr = valueExpression.Expression as IdentifierNameSyntax;
var valueExprName = valueExpression.Name as IdentifierNameSyntax;
if (valueExprExpr == null || valueExprExpr.Identifier.Text != "ImmutableArray")
{
ReportDiagnostic(context, IncorrectAccessorReturnRule, valueExpression.GetLocation(), propertyDeclaration.Identifier.Text);
return false;
}
if (valueExprName == null || valueExprName.Identifier.Text != "Create")
{
ReportDiagnostic(context, SuppDiagReturnValueRule, valueExpression.GetLocation(), propertyDeclaration.Identifier.Text);
return false;
}
var valueArguments = valueClause.ArgumentList as ArgumentListSyntax;
if (valueArguments == null)
{
ReportDiagnostic(context, SupportedRulesRule, valueExpression.GetLocation(), propertyDeclaration.Identifier.Text);
return false;
}
SeparatedSyntaxList<ArgumentSyntax> valueArgs = valueArguments.Arguments;
if (valueArgs.Count == 0)
{
ReportDiagnostic(context, SupportedRulesRule, valueExpression.GetLocation());
return false;
}
if (ruleNames.Count != valueArgs.Count)
{
ReportDiagnostic(context, SupportedRulesRule, valueExpression.GetLocation());
return false;
}
List<string> newRuleNames = new List<string>();
foreach (string rule in ruleNames)
{
newRuleNames.Add(rule);
}
foreach (ArgumentSyntax arg in valueArgs)
{
bool foundRule = false;
foreach (string ruleName in ruleNames)
{
var argExpression = arg.Expression as IdentifierNameSyntax;
if (argExpression != null)
{
if (argExpression.Identifier.Text == ruleName)
{
foundRule = true;
}
}
}
if (!foundRule)
{
ReportDiagnostic(context, SupportedRulesRule, valueExpression.GetLocation());
return false;
}
}
return true;
}
开发者ID:maggiemsft,项目名称:roslyn-analyzers,代码行数:80,代码来源:DiagnosticAnalyzer.cs
注:本文中的Microsoft.CodeAnalysis.CSharp.Syntax.ReturnStatementSyntax类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论