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);
} else { // has no non-static fields
writer.generateEmptyConstructor(eventSimpleName, Modifier.PUBLIC);
generateFireFieldsStaticMethod(writer, requiredFields, eventSimpleName);