private void BindClassEvent(Event node, IType type, bool typeIsCallable)
{
Field backingField = CodeBuilder.CreateField("___" + node.Name, type);
if (node.IsTransient)
{
backingField.Modifiers |= TypeMemberModifiers.Transient;
}
if (node.IsStatic)
{
backingField.Modifiers |= TypeMemberModifiers.Static;
}
node.DeclaringType.Members.Add(backingField);
((InternalEvent)node.Entity).BackingField = (InternalField)backingField.Entity;
if (null == node.Add)
{
node.Add = CreateEventAddMethod(node, backingField);
}
else
{
Visit(node.Add);
}
if (null == node.Remove)
{
node.Remove = CreateEventRemoveMethod(node, backingField);
}
else
{
Visit(node.Remove);
}
if (null == node.Raise)
{
if (typeIsCallable)
{
node.Raise = CreateEventRaiseMethod(node, backingField);
}
}
else
{
Visit(node.Raise);
}
}