private ITypeSymbol GetInvocationTargetType(int pos, InvocationExpressionSyntax node, IMethodSymbol methodSymbol)
        {
            ITypeSymbol retval;
            var         notError = false;

            if (node.Expression is MemberAccessExpressionSyntax)
            {
                retval = this.semanticModel.GetSpeculativeTypeInfo(pos, ((MemberAccessExpressionSyntax)node.Expression).Expression, SpeculativeBindingOption.BindAsExpression).Type;
            }
            else if (node.Expression is IdentifierNameSyntax || node.Expression is GenericNameSyntax)
            {
                notError = true;
                retval   = null;
            }
            else if (node.Expression is MemberBindingExpressionSyntax)
            {
                if (node.Parent is ConditionalAccessExpressionSyntax)
                {
                    retval = this.semanticModel.GetSpeculativeTypeInfo(pos, ((ConditionalAccessExpressionSyntax)node.Parent).Expression, SpeculativeBindingOption.BindAsExpression).Type;
                }
                else if (node.Parent is MemberAccessExpressionSyntax)
                {
                    retval = this.semanticModel.GetSpeculativeTypeInfo(pos, ((MemberAccessExpressionSyntax)node.Parent).Expression, SpeculativeBindingOption.BindAsExpression).Type;
                }
                else
                {
                    var property = node.Parent?.GetType().GetProperty("Expression");

                    if (property != null)
                    {
                        retval =
                            this.semanticModel.GetSpeculativeTypeInfo
                                (pos, (SyntaxNode)property.GetValue(node.Parent), SpeculativeBindingOption.BindAsExpression).Type;
                    }
                    else
                    {
                        retval = null;
                    }
                }
            }
            else
            {
                retval = null;
            }

            if (retval == null)
            {
                retval = methodSymbol.ExtensionMethodNormalizingReceiverType();

                if (!notError)
                {
                    this.log.LogError($"Unable to determine type of {node.Expression} in {node.SyntaxTree.FilePath} {node.Expression.GetType()} at {node.GetLocation().GetMappedLineSpan()}");
                }
            }

            return(retval);
        }
		private ITypeSymbol GetInvocationTargetType(int pos, InvocationExpressionSyntax node, IMethodSymbol methodSymbol)
		{
			ITypeSymbol retval;
			var notError = false;

			if (node.Expression is MemberAccessExpressionSyntax)
			{
				retval = this.semanticModel.GetSpeculativeTypeInfo(pos, ((MemberAccessExpressionSyntax)node.Expression).Expression, SpeculativeBindingOption.BindAsExpression).Type;
			}
			else if (node.Expression is IdentifierNameSyntax)
			{
				notError = true;
				retval = null;
			}
			else if (node.Expression is MemberBindingExpressionSyntax)
			{
				if (node.Parent is ConditionalAccessExpressionSyntax)
				{
					retval = this.semanticModel.GetSpeculativeTypeInfo(pos, ((ConditionalAccessExpressionSyntax)node.Parent).Expression, SpeculativeBindingOption.BindAsExpression).Type;
				}
				else if (node.Parent is MemberAccessExpressionSyntax)
				{
					retval = this.semanticModel.GetSpeculativeTypeInfo(pos, ((MemberAccessExpressionSyntax)node.Parent).Expression, SpeculativeBindingOption.BindAsExpression).Type;
				}
				else
				{
					var property = node.Parent?.GetType().GetProperty("Expression");

					if (property != null)
					{
						retval =
							this.semanticModel.GetSpeculativeTypeInfo
								(pos, (SyntaxNode)property.GetValue(node.Parent), SpeculativeBindingOption.BindAsExpression).Type;
					}
					else
					{
						retval = null;
					}
				}
			}
			else
			{
				retval = null;
			}

			if (retval == null)
			{
				retval = methodSymbol.ExtensionMethodNormalizingReceiverType();

				if (!notError)
				{
					this.log.LogError($"Unable to determine type of {node.Expression} in {node.SyntaxTree.FilePath} {node.Expression.GetType()} at {node.GetLocation().GetMappedLineSpan()}");
				}
			}

			return retval;
		}