Checker.notNull("parameter:writer", writer);
Checker.notNull("parameter:type", type);
final GeneratorContext context = this.getGeneratorContext();
final NewMethod newMethod = writer.newMethod();
newMethod.setAbstract(false);
newMethod.setFinal(true);
newMethod.setName(SerializationConstants.CLIENT_OBJECT_WRITER_IMPL_WRITE_FIELDS_METHOD);
newMethod.setNative(false);
newMethod.setReturnType(context.getVoid());
newMethod.setStatic(false);
newMethod.setVisibility(Visibility.PUBLIC);
final NewMethodParameter instance = newMethod.newParameter();
instance.setFinal(true);
instance.setName(SerializationConstants.CLIENT_OBJECT_WRITER_IMPL_WRITE_FIELDS_INSTANCE_PARAMETER);
instance.setType(type);
final NewMethodParameter objectOutputStream = newMethod.newParameter();
objectOutputStream.setFinal(true);
objectOutputStream.setName(SerializationConstants.CLIENT_OBJECT_WRITER_IMPL_WRITE_FIELDS_OBJECT_OUTPUT_STREAM_PARAMETER);
objectOutputStream.setType(this.getObjectOutputStream());
final WriteFieldsTemplatedFile body = new WriteFieldsTemplatedFile();
body.setType(type);
newMethod.setBody(body);
// add all fields to the template
final Iterator fields = this.filterSerializableFields(type.getFields()).iterator();
int fieldCount = 0;