public override void OnConstructor(Constructor node)
{
if (WasVisited(node))
{
return;
}
MarkVisited(node);
Visit(node.Attributes);
Visit(node.Parameters);
InternalConstructor entity = (InternalConstructor)node.Entity;
ProcessMethodBody(entity);
if (node.IsRuntime)
{
CheckRuntimeMethod(node);
}
else
{
if (entity.DeclaringType.IsValueType)
{
if (0 == node.Parameters.Count
&& !node.IsStatic
&& !node.IsSynthetic)
{
Error(CompilerErrorFactory.ValueTypesCannotDeclareParameterlessConstructors(node));
}
}
else if (
!entity.HasSelfCall &&
!entity.HasSuperCall &&
!entity.IsStatic)
{
IType baseType = entity.DeclaringType.BaseType;
IConstructor super = GetCorrectConstructor(node, baseType, EmptyExpressionCollection);
if (null != super)
{
node.Body.Statements.Insert(0,
CodeBuilder.CreateSuperConstructorInvocation(super));
}
}
if (!entity.IsStatic)
CheckInstanceMethodInvocationsWithinConstructor(node);
}
}