void HandleAssignmentStatement(AssignmentExpression assignmentExpression)
{
if (resolver.CompilationUnit == null || assignmentExpression == null)
return;
if (assignmentExpression.Op == AssignmentOperatorType.Add || assignmentExpression.Op == AssignmentOperatorType.Subtract) {
ResolveResult rr = resolver.ResolveInternal(assignmentExpression.Left, ExpressionContext.Default);
if (rr is MemberResolveResult && (rr as MemberResolveResult).ResolvedMember is IEvent) {
if (assignmentExpression.Op == AssignmentOperatorType.Add) {
ReplaceCurrentNode(new AddHandlerStatement(assignmentExpression.Left, assignmentExpression.Right));
} else {
ReplaceCurrentNode(new RemoveHandlerStatement(assignmentExpression.Left, assignmentExpression.Right));
}
} else if (rr != null && rr.ResolvedType != null) {
IClass c = rr.ResolvedType.GetUnderlyingClass();
if (c != null && c.ClassType == ClassType.Delegate) {
InvocationExpression invocation =
new IdentifierExpression("Delegate").Call(
assignmentExpression.Op == AssignmentOperatorType.Add ? "Combine" : "Remove",
assignmentExpression.Left);
invocation.Arguments.Add(assignmentExpression.Right);
assignmentExpression.Op = AssignmentOperatorType.Assign;
assignmentExpression.Right = new CastExpression(
Refactoring.CodeGenerator.ConvertType(rr.ResolvedType, CreateContext()),
invocation, CastType.Cast);
}
}
}
}