internal ProgramState ProcessInvocation() { var symbol = semanticModel.GetSymbolInfo(invocation).Symbol; var methodSymbol = symbol as IMethodSymbol; var invocationArgsCount = invocation.ArgumentList?.Arguments.Count ?? 0; if (IsInstanceEqualsCall(methodSymbol)) { return(HandleInstanceEqualsCall()); } if (IsStaticEqualsCall(methodSymbol)) { return(HandleStaticEqualsCall()); } if (IsReferenceEqualsCall(methodSymbol)) { return(HandleReferenceEqualsCall()); } if (IsStringNullCheckMethod(methodSymbol)) { return(HandleStringNullCheckMethod()); } if (methodSymbol != null && ValidatesNotNull(methodSymbol, out var validatedArgumentIndex)) { return(HandleNullValidationMethod(validatedArgumentIndex, invocationArgsCount)); } if (invocation.IsNameof(semanticModel)) { return(HandleNameofExpression()); } return(programState .PopValues(invocationArgsCount + 1) .PushValue(new SymbolicValue())); }
private static ProgramState VisitInitializer(SyntaxNode instruction, ExpressionSyntax parenthesizedExpression, ProgramState programState) { var init = (InitializerExpressionSyntax)instruction; var newProgramState = programState.PopValues(init.Expressions.Count); if (!(parenthesizedExpression.Parent is ObjectCreationExpressionSyntax) && !(parenthesizedExpression.Parent is ArrayCreationExpressionSyntax) && !(parenthesizedExpression.Parent is AnonymousObjectCreationExpressionSyntax) && !(parenthesizedExpression.Parent is ImplicitArrayCreationExpressionSyntax)) { newProgramState = newProgramState.PushValue(new SymbolicValue()); } return(newProgramState); }