private bool IsContractInvocation( InvocationExpressionSyntax invocationExpression, ContractMethodNames allowedMethodNames, INamedTypeSymbol contractTypeSymbol) { MemberAccessExpressionSyntax?memberAccess = invocationExpression .Expression.As(x => x as MemberAccessExpressionSyntax); if ((ParseContractMethodName(memberAccess?.Name.Identifier.Text) & allowedMethodNames) == ContractMethodNames.None) { return(false); } var memberSymbol = memberAccess ?.As(x => _semanticModel.GetSymbolInfo(x).Symbol as IMethodSymbol); // TODO: ToMetadataFullName() on every call is probably somewhat expensive if (memberSymbol == null || !memberSymbol.ContainingType.Equals(contractTypeSymbol)) { // This is not Contract. return(false); } return(true); }