public Void visitBoundImplementsDeclaration(BoundImplementsDeclaration bid) {
// check for a schema match
if (!template.getSchema().equals(bid.getImplementable().getSchema())) {
alertSink.add(new SchemaMismatchError(bid, template.getName().toString()));
}
Implementable implementable = bid.getImplementable();
// check that the number of params match
// the interface should have one extra param ("this") that the template does not
if (template.getParameters().size() !=
implementable.getParameters().size() - 1) {
alertSink.add(new NumParamsMismatchError(bid,
implementable.getParameters().size() - 1,
template.getParameters().size()));
} else {
Iterator<FormalParameter> interfaceParams = implementable.getParameters().iterator();
Iterator<Parameter> templateParams = template.getParameters().iterator();
while (interfaceParams.hasNext()) {
FormalParameter interfaceParam = interfaceParams.next();
if (!Implementable.INSTANCE_PARAM_NAME.equals(interfaceParam.getPrimaryName())) {
Parameter templateParam = templateParams.next();