writer.generateBuilderClass(eventSimpleName, requiredFields, optionalFields);
writer.resetWhitespaces();
if (!requiredFields.isEmpty()) { // and required fields
writer.generateConstructorUsingFields(eventSimpleName, requiredFields, Modifier.PUBLIC);
}
writer.generateCustomBuilderConstructor(eventSimpleName, allFields);
generateFireSelfMethod(writer);
} else if (!requiredFields.isEmpty()) { // has only required fields
writer.generateEmptyConstructor(eventSimpleName, Modifier.PROTECTED);
writer.generateConstructorUsingFields(eventSimpleName, requiredFields, Modifier.PUBLIC);
generateFireFieldsStaticMethod(writer, requiredFields, eventSimpleName);