private object GetCaller(ICSharpCode.NRefactory.CSharp.Expression expression, CodeContext codeContext)
{
object caller;
if (expression is MemberReferenceExpression)
{
MemberReferenceExpression mre = expression as MemberReferenceExpression;
caller = EvaluateExpression(mre.Target, codeContext);
if (caller == null)
{
Type type = TypeManager.GetTypeFromString(mre.Target.GetText());
if (type != null)
{
TypeReference typeReference = new TypeReference();
typeReference.Type = type;
caller = typeReference;
}
}
if (caller == null)
{
caller = codeContext.ContainerInstance;
}
return caller;
}
else if (expression is InvocationExpression)
{
return codeContext.ContainerInstance;
}
else if (expression is IdentifierExpression)
{
return codeContext.ContainerInstance;
}
else
{
return null;
}
}