private bool IsResolvedToObject(ICSharpExpression expression)
{
var invocationExpression = expression as IInvocationExpression;
if (invocationExpression != null)
{
if (invocationExpression.Reference != null)
{
var result = invocationExpression.Reference.Resolve().Result.DeclaredElement as IParametersOwner;
if (result != null)
{
return result.ReturnType.IsObject();
}
}
}
var castExpression = expression as ICastExpression;
if (castExpression != null)
{
var typeUsage = castExpression.TargetType as IPredefinedTypeUsage;
if (typeUsage != null)
{
return IsReferenceToSystemObject(typeUsage.ScalarPredefinedTypeName);
}
}
var asExpression = expression as IAsExpression;
if (asExpression != null)
{
var typeUsage = asExpression.TypeOperand as IPredefinedTypeUsage;
if (typeUsage != null)
{
return IsReferenceToSystemObject(typeUsage.ScalarPredefinedTypeName);
}
}
var objectCreationExpression = expression as IObjectCreationExpression;
if (objectCreationExpression != null)
{
return IsReferenceToSystemObject(objectCreationExpression.TypeReference as IPredefinedTypeReference);
}
return false;
}