protected int generatePropertyAccessors(Writer writer, int shift, AnnotationMirror annotation, ClassDefinition definition, TypeElement targetInterface) throws IOException {
        Types typeUtils = processingEnv.getTypeUtils();
        
        for (Field field : definition.getInnerFields(typeUtils)) {
            if(!field.isIgnored()) {
                Modifier methodModifier = Modifier.valueOf(field.getMethodModifier());
                shift = generateGetter(writer, shift, targetInterface, annotation, field, definition, methodModifier);
                if(!field.isReadOnly()) {
                    shift = generateSetter(writer, shift, targetInterface, annotation, field, definition, methodModifier);
                }
            }
        }
        
        for (Property property : definition.getProperties()) {
            if(!property.isIgnored()) {
                if(property.isReadable()) {
                    shift = generateGetter(writer, shift, targetInterface, annotation, property, definition, Modifier.PUBLIC);
                }

                if(property.isWritable()) {
                    shift = generateSetter(writer, shift, targetInterface, annotation, property, definition, Modifier.PUBLIC);
                }
            }
        }
        return shift;
    }