ICSharpCode.SharpDevelop.Dom.NRefactoryResolver.CSharpToVBNetConvertVisitor.HandleAssignmentStatement C# (CSharp) Method

HandleAssignmentStatement() private method

private HandleAssignmentStatement ( AssignmentExpression assignmentExpression ) : void
assignmentExpression AssignmentExpression
return void
		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);
					}
				}
			}
		}