protected void overrideObjectReaderReadFieldsMethod(final NewConcreteType reader, final Type type) {
Checker.notNull("parameter:reader", reader);
Checker.notNull("parameter:type", type);
final GeneratorContext context = this.getGeneratorContext();
final NewMethod newMethod = reader.newMethod();
newMethod.setAbstract(false);
newMethod.setFinal(true);
newMethod.setName(SerializationConstants.CLIENT_OBJECT_READER_IMPL_READ_FIELDS_METHOD);
newMethod.setReturnType(context.getVoid());
newMethod.setStatic(false);
newMethod.setVisibility(Visibility.PUBLIC);
// rename parameters to the same names used in templates...
final NewMethodParameter object = newMethod.newParameter();
object.setName(SerializationConstants.CLIENT_OBJECT_READER_IMPL_READ_INSTANCE_PARAMETER);
object.setFinal(true);
object.setType(type);
final NewMethodParameter objectInputStream = newMethod.newParameter();
objectInputStream.setName(SerializationConstants.CLIENT_OBJECT_READER_IMPL_READ_FIELDS_OBJECT_INPUT_STREAM_PARAMETER);
objectInputStream.setFinal(true);
objectInputStream.setType(this.getObjectInputStream());
final ReadFieldsTemplatedFile body = new ReadFieldsTemplatedFile();
newMethod.setBody(body);
body.setType(type);
// add all fields to the template
final Iterator<Field> fields = this.filterSerializableFields(type.getFields()).iterator();
int fieldCount = 0;
context.branch();
while (fields.hasNext()) {
final Field field = fields.next();
final Method setter = this.createFieldSetter(reader, field);
body.addFieldSetter(setter);
fieldCount++;
}
context.unbranch();
context.debug("Overridden " + newMethod);
}