public override void VisitClass(ClassDefinition cls)
{
ClassDefinition prevClass = currentClass;
int prevIterCount = iterCount;
ArrayList prevAncestorMethods = ancestorMethods;
currentClass = cls;
iterCount = 0;
if (cls.Kind == ClassKind.Abstract) {
ancestorMethods = null;
}
else {
ancestorMethods = new ArrayList();
foreach (MethodData m in cls.TypeData.AncestorMethods) {
if (!m.IsIterCreator)
ancestorMethods.Add(m);
}
}
cls.Children.Accept(this);
if (cls.Kind != ClassKind.Abstract && ancestorMethods.Count > 0) {
foreach (MethodData method in ancestorMethods) {
report.Error(cls.Location,
"no implementation for {0} in {1}",
method,
cls.TypeData.FullName);
}
}
CreateAdapterMethods(cls);
currentClass = prevClass;
iterCount = prevIterCount;
ancestorMethods = prevAncestorMethods;
}