private static StatementSyntax PostconditionStatement(IEnumerable <Contract> contracts, ITypeSymbol type, ReturnStatementSyntax node, SemanticModel model) { var returnedExpression = node.ChildNodes().FirstOrDefault().ToString(); var tempVariableName = IdentifierFactory.CreatePostconditionLocal(node, model); return(Block(ParseStatement( GetPostconditionText(contracts, type, returnedExpression, tempVariableName)))); }
/// <summary> /// Visits a return statement /// </summary> /// <param name="node">The return statement syntax</param> public override void VisitReturnStatement(ReturnStatementSyntax node) { foreach (SyntaxNode subNode in node.ChildNodes()) { _retType = FromSyntaxNode(subNode); // TODO: This will return the first return type, which could // be different than other return types. I will not care yet break; } }
/// <summary> /// Visits a return statement /// </summary> /// <param name="node">The return statement syntax</param> public override void VisitReturnStatement(ReturnStatementSyntax node) { SyntaxNode firstNode = node.ChildNodes().FirstOrDefault(); if (firstNode != null) { var type = _handlerFactory.CreateForSyntaxNode(firstNode).Handle(firstNode); if (type != null) { _candidates.Add(type); } } }
//TODO Was ist mit: //const int errorCode; //return errorCode; public bool IsAbsoluteValue(ReturnStatementSyntax returnStatement) { return(returnStatement.ChildNodes().OfType <LiteralExpressionSyntax>().Any(n => n.RawKind == NumericLiteralExpression) || returnStatement.ChildNodes().OfType <PrefixUnaryExpressionSyntax>().Any(n => n.RawKind == UnaryMinusExpression)); }
private Method TraverseReturnStatement(ReturnStatementSyntax rss) { Method retMethod = new Method(); foreach (SyntaxNode sn in rss.ChildNodes()) { if (sn is CallStatementSyntax) { retMethod.InvokedMethods.Add(TraverseInvokedMethod(sn as CallStatementSyntax)); } else if (sn is InvocationExpressionSyntax) { retMethod.InvokedMethods.Add(TraverseInvokedMethod(sn as InvocationExpressionSyntax)); } else if (sn is LocalDeclarationStatementSyntax) { Method tempMethod = TraverseVarDecls(sn as LocalDeclarationStatementSyntax); retMethod.AccessedVariables.AddRange(tempMethod.AccessedVariables); retMethod.InvokedMethods.AddRange(tempMethod.InvokedMethods); } else if (sn is AssignmentStatementSyntax) { Method tempMethod = TraverseAccessVars(sn as AssignmentStatementSyntax); retMethod.AccessedVariables.AddRange(tempMethod.AccessedVariables); retMethod.InvokedMethods.AddRange(tempMethod.InvokedMethods); } } return retMethod; }