Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
Complex classes like FormBuilder often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
While breaking up the class, it is a good idea to analyze how other classes use FormBuilder, and based on these observations, apply Extract Interface, too.
1 | <?php namespace Anomaly\Streams\Platform\Ui\Form; |
||
39 | class FormBuilder |
||
40 | { |
||
41 | |||
42 | use DispatchesJobs; |
||
43 | use FiresCallbacks; |
||
44 | |||
45 | /** |
||
46 | * The ajax flag. |
||
47 | * |
||
48 | * @var bool |
||
49 | */ |
||
50 | protected $ajax = false; |
||
51 | |||
52 | /** |
||
53 | * The form handler. |
||
54 | * |
||
55 | * @var null|string |
||
56 | */ |
||
57 | protected $handler = null; |
||
58 | |||
59 | /** |
||
60 | * The form validator. |
||
61 | * |
||
62 | * @var null|string |
||
63 | */ |
||
64 | protected $validator = null; |
||
65 | |||
66 | /** |
||
67 | * The form repository. |
||
68 | * |
||
69 | * @var null|FormRepositoryInterface |
||
70 | */ |
||
71 | protected $repository = null; |
||
72 | |||
73 | /** |
||
74 | * The form model. |
||
75 | * |
||
76 | * @var null |
||
77 | */ |
||
78 | protected $model = null; |
||
79 | |||
80 | /** |
||
81 | * The entry object. |
||
82 | * |
||
83 | * @var null|int |
||
84 | */ |
||
85 | protected $entry = null; |
||
86 | |||
87 | /** |
||
88 | * The fields config. |
||
89 | * |
||
90 | * @var array|string |
||
91 | */ |
||
92 | protected $fields = []; |
||
93 | |||
94 | /** |
||
95 | * Fields to skip. |
||
96 | * |
||
97 | * @var array|string |
||
98 | */ |
||
99 | protected $skips = []; |
||
100 | |||
101 | /** |
||
102 | * The actions config. |
||
103 | * |
||
104 | * @var array|string |
||
105 | */ |
||
106 | protected $actions = []; |
||
107 | |||
108 | /** |
||
109 | * The buttons config. |
||
110 | * |
||
111 | * @var array|string |
||
112 | */ |
||
113 | protected $buttons = []; |
||
114 | |||
115 | /** |
||
116 | * The form options. |
||
117 | * |
||
118 | * @var array |
||
119 | */ |
||
120 | protected $options = []; |
||
121 | |||
122 | /** |
||
123 | * The form sections. |
||
124 | * |
||
125 | * @var array |
||
126 | */ |
||
127 | protected $sections = []; |
||
128 | |||
129 | /** |
||
130 | * The form assets. |
||
131 | * |
||
132 | * @var array |
||
133 | */ |
||
134 | protected $assets = []; |
||
135 | |||
136 | /** |
||
137 | * The save flag. |
||
138 | * |
||
139 | * @var bool |
||
140 | */ |
||
141 | protected $save = true; |
||
142 | |||
143 | /** |
||
144 | * The read only flag. |
||
145 | * |
||
146 | * @var bool |
||
147 | */ |
||
148 | protected $readOnly = false; |
||
149 | |||
150 | /** |
||
151 | * The form object. |
||
152 | * |
||
153 | * @var Form |
||
154 | */ |
||
155 | protected $form; |
||
156 | |||
157 | /** |
||
158 | * Crate a new FormBuilder instance. |
||
159 | * |
||
160 | * @param Form $form |
||
161 | */ |
||
162 | public function __construct(Form $form) |
||
166 | |||
167 | /** |
||
168 | * Build the form. |
||
169 | * |
||
170 | * @param null $entry |
||
171 | * @return $this |
||
172 | */ |
||
173 | public function build($entry = null) |
||
187 | |||
188 | /** |
||
189 | * Make the form. |
||
190 | * |
||
191 | * @param null $entry |
||
192 | * @return $this |
||
193 | */ |
||
194 | public function make($entry = null) |
||
209 | |||
210 | /** |
||
211 | * Handle the form post. |
||
212 | * |
||
213 | * @param null $entry |
||
214 | * @return $this |
||
215 | * @throws \Exception |
||
216 | */ |
||
217 | public function handle($entry = null) |
||
228 | |||
229 | /** |
||
230 | * Trigger post operations |
||
231 | * for the form. |
||
232 | * |
||
233 | * @return $this |
||
234 | */ |
||
235 | public function post() |
||
249 | |||
250 | /** |
||
251 | * Validate the form. |
||
252 | * |
||
253 | * @return $this |
||
254 | */ |
||
255 | public function validate() |
||
262 | |||
263 | /** |
||
264 | * Flash form information to be |
||
265 | * used in conjunction with redirect |
||
266 | * type responses (not self handling). |
||
267 | */ |
||
268 | public function flash() |
||
273 | |||
274 | /** |
||
275 | * Render the form. |
||
276 | * |
||
277 | * @param null $entry |
||
278 | * @return Response |
||
279 | */ |
||
280 | public function render($entry = null) |
||
290 | |||
291 | /** |
||
292 | * Fire field events. |
||
293 | * |
||
294 | * @param $trigger |
||
295 | * @param array $payload |
||
296 | */ |
||
297 | public function fireFieldEvents($trigger, array $payload = []) |
||
304 | |||
305 | /** |
||
306 | * Save the form. |
||
307 | */ |
||
308 | public function saveForm() |
||
312 | |||
313 | /** |
||
314 | * Get the form object. |
||
315 | * |
||
316 | * @return Form |
||
317 | */ |
||
318 | public function getForm() |
||
322 | |||
323 | /** |
||
324 | * Get the form presenter. |
||
325 | * |
||
326 | * @return FormPresenter |
||
327 | */ |
||
328 | public function getFormPresenter() |
||
332 | |||
333 | /** |
||
334 | * Get the ajax flag. |
||
335 | * |
||
336 | * @return bool |
||
337 | */ |
||
338 | public function isAjax() |
||
342 | |||
343 | /** |
||
344 | * Set the ajax flag. |
||
345 | * |
||
346 | * @param $ajax |
||
347 | * @return $this |
||
348 | */ |
||
349 | public function setAjax($ajax) |
||
355 | |||
356 | /** |
||
357 | * Get the handler. |
||
358 | * |
||
359 | * @return null|string |
||
360 | */ |
||
361 | public function getHandler() |
||
365 | |||
366 | /** |
||
367 | * Set the handler. |
||
368 | * |
||
369 | * @param $handler |
||
370 | * @return $this |
||
371 | */ |
||
372 | public function setHandler($handler) |
||
378 | |||
379 | /** |
||
380 | * Get the validator. |
||
381 | * |
||
382 | * @return null|string |
||
383 | */ |
||
384 | public function getValidator() |
||
388 | |||
389 | /** |
||
390 | * Set the validator. |
||
391 | * |
||
392 | * @param $validator |
||
393 | * @return $this |
||
394 | */ |
||
395 | public function setValidator($validator) |
||
401 | |||
402 | /** |
||
403 | * Get the repository. |
||
404 | * |
||
405 | * @return FormRepositoryInterface|null |
||
406 | */ |
||
407 | public function getRepository() |
||
411 | |||
412 | /** |
||
413 | * Set the form repository. |
||
414 | * |
||
415 | * @param FormRepositoryInterface $repository |
||
416 | * @return $this |
||
417 | */ |
||
418 | public function setRepository(FormRepositoryInterface $repository) |
||
424 | |||
425 | /** |
||
426 | * Set the form model. |
||
427 | * |
||
428 | * @param $model |
||
429 | * @return $this |
||
430 | */ |
||
431 | public function setModel($model) |
||
437 | |||
438 | /** |
||
439 | * Get the form model. |
||
440 | * |
||
441 | * @return null |
||
442 | */ |
||
443 | public function getModel() |
||
447 | |||
448 | /** |
||
449 | * Set the entry object. |
||
450 | * |
||
451 | * @param $entry |
||
452 | * @return $this |
||
453 | */ |
||
454 | public function setEntry($entry) |
||
460 | |||
461 | /** |
||
462 | * Get the entry object. |
||
463 | * |
||
464 | * @return null|EntryInterface|FieldInterface|mixed |
||
465 | */ |
||
466 | public function getEntry() |
||
470 | |||
471 | /** |
||
472 | * Set the fields. |
||
473 | * |
||
474 | * @param $fields |
||
475 | * @return $this |
||
476 | */ |
||
477 | public function setFields($fields) |
||
483 | |||
484 | /** |
||
485 | * Get the fields. |
||
486 | * |
||
487 | * @return array |
||
488 | */ |
||
489 | public function getFields() |
||
493 | |||
494 | /** |
||
495 | * Add a field. |
||
496 | * |
||
497 | * @param $field |
||
498 | */ |
||
499 | public function addField($field) |
||
503 | |||
504 | /** |
||
505 | * Add fields. |
||
506 | * |
||
507 | * @param array $fields |
||
508 | */ |
||
509 | public function addFields(array $fields) |
||
513 | |||
514 | /** |
||
515 | * Get the skipped fields. |
||
516 | * |
||
517 | * @return array |
||
518 | */ |
||
519 | public function getSkips() |
||
523 | |||
524 | /** |
||
525 | * Set the skipped fields. |
||
526 | * |
||
527 | * @param $skips |
||
528 | * @return $this |
||
529 | */ |
||
530 | public function setSkips($skips) |
||
536 | |||
537 | /** |
||
538 | * Merge in skipped fields. |
||
539 | * |
||
540 | * @param array $skips |
||
541 | * @return $this |
||
542 | */ |
||
543 | public function mergeSkips(array $skips) |
||
549 | |||
550 | /** |
||
551 | * Add a skipped field. |
||
552 | * |
||
553 | * @param $fieldSlug |
||
554 | * @return $this |
||
555 | */ |
||
556 | public function skipField($fieldSlug) |
||
562 | |||
563 | /** |
||
564 | * Set the actions config. |
||
565 | * |
||
566 | * @param $actions |
||
567 | * @return $this |
||
568 | */ |
||
569 | public function setActions($actions) |
||
575 | |||
576 | /** |
||
577 | * Add an action. |
||
578 | * |
||
579 | * @param $slug |
||
580 | * @param array $definition |
||
581 | * @return $this |
||
582 | */ |
||
583 | public function addAction($slug, array $definition = []) |
||
593 | |||
594 | /** |
||
595 | * Get the actions config. |
||
596 | * |
||
597 | * @return array |
||
598 | */ |
||
599 | public function getActions() |
||
603 | |||
604 | /** |
||
605 | * Set the buttons config. |
||
606 | * |
||
607 | * @param $buttons |
||
608 | * @return $this |
||
609 | */ |
||
610 | public function setButtons($buttons) |
||
616 | |||
617 | /** |
||
618 | * Get the buttons config. |
||
619 | * |
||
620 | * @return array |
||
621 | */ |
||
622 | public function getButtons() |
||
626 | |||
627 | /** |
||
628 | * The the options. |
||
629 | * |
||
630 | * @return array |
||
631 | */ |
||
632 | public function getOptions() |
||
636 | |||
637 | /** |
||
638 | * Set the options. |
||
639 | * |
||
640 | * @param array|string $options |
||
641 | * @return $this |
||
642 | */ |
||
643 | public function setOptions($options) |
||
649 | |||
650 | /** |
||
651 | * Merge in options. |
||
652 | * |
||
653 | * @param array|string $options |
||
654 | * @return $this |
||
655 | */ |
||
656 | public function mergeOptions($options) |
||
662 | |||
663 | /** |
||
664 | * Get the sections. |
||
665 | * |
||
666 | * @return array |
||
667 | */ |
||
668 | public function getSections() |
||
672 | |||
673 | /** |
||
674 | * Set the sections. |
||
675 | * |
||
676 | * @param array|Closure $sections |
||
677 | * @return $this |
||
678 | */ |
||
679 | public function setSections($sections) |
||
685 | |||
686 | /** |
||
687 | * Add a section. |
||
688 | * |
||
689 | * @param $slug |
||
690 | * @param array $section |
||
691 | * @return $this |
||
692 | */ |
||
693 | public function addSection($slug, array $section) |
||
699 | |||
700 | /** |
||
701 | * Add a section tab. |
||
702 | * |
||
703 | * @param $section |
||
704 | * @param $slug |
||
705 | * @param array $tab |
||
706 | * @return $this |
||
707 | */ |
||
708 | public function addSectionTab($section, $slug, array $tab) |
||
714 | |||
715 | /** |
||
716 | * Get an option value. |
||
717 | * |
||
718 | * @param $key |
||
719 | * @param null $default |
||
720 | * @return mixed |
||
721 | */ |
||
722 | public function getOption($key, $default = null) |
||
726 | |||
727 | /** |
||
728 | * Set an option value. |
||
729 | * |
||
730 | * @param $key |
||
731 | * @param $value |
||
732 | * @return $this |
||
733 | */ |
||
734 | public function setOption($key, $value) |
||
740 | |||
741 | /** |
||
742 | * Get the assets. |
||
743 | * |
||
744 | * @return array |
||
745 | */ |
||
746 | public function getAssets() |
||
750 | |||
751 | /** |
||
752 | * Set the assets. |
||
753 | * |
||
754 | * @param $assets |
||
755 | * @return $this |
||
756 | */ |
||
757 | public function setAssets($assets) |
||
763 | |||
764 | /** |
||
765 | * Add an asset. |
||
766 | * |
||
767 | * @param $collection |
||
768 | * @param $asset |
||
769 | * @return $this |
||
770 | */ |
||
771 | View Code Duplication | public function addAsset($collection, $asset) |
|
781 | |||
782 | /** |
||
783 | * Get the form's stream. |
||
784 | * |
||
785 | * @return StreamInterface|null |
||
786 | */ |
||
787 | public function getFormStream() |
||
791 | |||
792 | /** |
||
793 | * Get a form option value. |
||
794 | * |
||
795 | * @param $key |
||
796 | * @param null $default |
||
797 | * @return mixed |
||
798 | */ |
||
799 | public function getFormOption($key, $default = null) |
||
803 | |||
804 | /** |
||
805 | * Set a form option value. |
||
806 | * |
||
807 | * @param $key |
||
808 | * @param $value |
||
809 | * @return $this |
||
810 | */ |
||
811 | public function setFormOption($key, $value) |
||
817 | |||
818 | /** |
||
819 | * Get the form options. |
||
820 | * |
||
821 | * @return \Anomaly\Streams\Platform\Support\Collection |
||
822 | */ |
||
823 | public function getFormOptions() |
||
827 | |||
828 | /** |
||
829 | * Get the form model. |
||
830 | * |
||
831 | * @return \Anomaly\Streams\Platform\Entry\EntryModel|EloquentModel|null |
||
832 | */ |
||
833 | public function getFormModel() |
||
837 | |||
838 | /** |
||
839 | * Get the form entry. |
||
840 | * |
||
841 | * @return EloquentModel|EntryInterface|FieldInterface|AssignmentInterface |
||
842 | */ |
||
843 | public function getFormEntry() |
||
847 | |||
848 | /** |
||
849 | * Return the form entry's ID. |
||
850 | * |
||
851 | * @return int|mixed|null |
||
852 | */ |
||
853 | public function getFormEntryId() |
||
863 | |||
864 | /** |
||
865 | * Get the contextual entry ID. |
||
866 | * |
||
867 | * @return int|null |
||
868 | */ |
||
869 | public function getContextualId() |
||
873 | |||
874 | /** |
||
875 | * Get the form mode. |
||
876 | * |
||
877 | * @return null|string |
||
878 | */ |
||
879 | public function getFormMode() |
||
883 | |||
884 | /** |
||
885 | * Set the form mode. |
||
886 | * |
||
887 | * @param $mode |
||
888 | * @return $this |
||
889 | */ |
||
890 | public function setFormMode($mode) |
||
896 | |||
897 | /** |
||
898 | * Get a form value. |
||
899 | * |
||
900 | * @param $key |
||
901 | * @param null $default |
||
902 | * @return mixed |
||
903 | */ |
||
904 | public function getFormValue($key, $default = null) |
||
908 | |||
909 | /** |
||
910 | * Set a form value. |
||
911 | * |
||
912 | * @param $key |
||
913 | * @param $value |
||
914 | * @return $this |
||
915 | */ |
||
916 | public function setFormValue($key, $value) |
||
922 | |||
923 | /** |
||
924 | * Get the form values. |
||
925 | * |
||
926 | * @return \Anomaly\Streams\Platform\Support\Collection |
||
927 | */ |
||
928 | public function getFormValues() |
||
932 | |||
933 | /** |
||
934 | * Reset the form. |
||
935 | * |
||
936 | * @return $this |
||
937 | */ |
||
938 | public function resetForm() |
||
946 | |||
947 | /** |
||
948 | * Get the form input. |
||
949 | * |
||
950 | * @return array |
||
951 | */ |
||
952 | public function getFormInput() |
||
958 | |||
959 | /** |
||
960 | * Get the form data. |
||
961 | * |
||
962 | * @return \Anomaly\Streams\Platform\Support\Collection |
||
963 | */ |
||
964 | public function getFormData() |
||
968 | |||
969 | /** |
||
970 | * Add form data. |
||
971 | * |
||
972 | * @param $key |
||
973 | * @param $value |
||
974 | * @return $this |
||
975 | */ |
||
976 | public function addFormData($key, $value) |
||
982 | |||
983 | /** |
||
984 | * Ge the form response. |
||
985 | * |
||
986 | * @return null|Response |
||
987 | */ |
||
988 | public function getFormResponse() |
||
992 | |||
993 | /** |
||
994 | * Set the form response. |
||
995 | * |
||
996 | * @param null|false|Response $response |
||
997 | * @return $this |
||
998 | */ |
||
999 | public function setFormResponse(Response $response) |
||
1005 | |||
1006 | /** |
||
1007 | * Get the form content. |
||
1008 | * |
||
1009 | * @return null|string |
||
1010 | */ |
||
1011 | public function getFormContent() |
||
1015 | |||
1016 | /** |
||
1017 | * Get the form fields. |
||
1018 | * |
||
1019 | * @return Component\Field\FieldCollection |
||
1020 | */ |
||
1021 | public function getFormFields() |
||
1025 | |||
1026 | /** |
||
1027 | * Get the enabled form fields. |
||
1028 | * |
||
1029 | * @return Component\Field\FieldCollection |
||
1030 | */ |
||
1031 | public function getEnabledFormFields() |
||
1035 | |||
1036 | /** |
||
1037 | * Get the form field. |
||
1038 | * |
||
1039 | * @param $fieldSlug |
||
1040 | * @return FieldType |
||
1041 | */ |
||
1042 | public function getFormField($fieldSlug) |
||
1046 | |||
1047 | /** |
||
1048 | * Get the form attribute map. |
||
1049 | * |
||
1050 | * @return FieldType |
||
1051 | */ |
||
1052 | public function getFormFieldFromAttribute($attribute) |
||
1063 | |||
1064 | /** |
||
1065 | * Disable a form field. |
||
1066 | * |
||
1067 | * @param $fieldSlug |
||
1068 | * @return FieldType |
||
1069 | */ |
||
1070 | public function disableFormField($fieldSlug) |
||
1074 | |||
1075 | /** |
||
1076 | * Get the form field slugs. |
||
1077 | * |
||
1078 | * @param null $prefix |
||
1079 | * @return array |
||
1080 | */ |
||
1081 | public function getFormFieldSlugs($prefix = null) |
||
1092 | |||
1093 | /** |
||
1094 | * Get the form field names. |
||
1095 | * |
||
1096 | * @return array |
||
1097 | */ |
||
1098 | public function getFormFieldNames() |
||
1104 | |||
1105 | /** |
||
1106 | * Add a form field. |
||
1107 | * |
||
1108 | * @param FieldType $field |
||
1109 | * @return $this |
||
1110 | */ |
||
1111 | public function addFormField(FieldType $field) |
||
1117 | |||
1118 | /** |
||
1119 | * Set the form errors. |
||
1120 | * |
||
1121 | * @param MessageBag $errors |
||
1122 | * @return $this |
||
1123 | */ |
||
1124 | public function setFormErrors(MessageBag $errors) |
||
1130 | |||
1131 | /** |
||
1132 | * Get the form errors. |
||
1133 | * |
||
1134 | * @return null|MessageBag |
||
1135 | */ |
||
1136 | public function getFormErrors() |
||
1140 | |||
1141 | /** |
||
1142 | * Add an error to the form. |
||
1143 | * |
||
1144 | * @param $field |
||
1145 | * @param $message |
||
1146 | * @return $this |
||
1147 | */ |
||
1148 | public function addFormError($field, $message) |
||
1156 | |||
1157 | /** |
||
1158 | * Return whether the form has errors or not. |
||
1159 | * |
||
1160 | * @return bool |
||
1161 | */ |
||
1162 | public function hasFormErrors() |
||
1168 | |||
1169 | /** |
||
1170 | * Return whether the field has an error or not. |
||
1171 | * |
||
1172 | * @param $fieldName |
||
1173 | * @return bool |
||
1174 | */ |
||
1175 | public function hasFormError($fieldName) |
||
1179 | |||
1180 | /** |
||
1181 | * Get the form actions. |
||
1182 | * |
||
1183 | * @return ActionCollection |
||
1184 | */ |
||
1185 | public function getFormActions() |
||
1189 | |||
1190 | /** |
||
1191 | * Get the active form action. |
||
1192 | * |
||
1193 | * @return null|ActionInterface |
||
1194 | */ |
||
1195 | public function getActiveFormAction() |
||
1207 | |||
1208 | /** |
||
1209 | * Add a form button. |
||
1210 | * |
||
1211 | * @param ButtonInterface $button |
||
1212 | * @return $this |
||
1213 | */ |
||
1214 | public function addFormButton(ButtonInterface $button) |
||
1220 | |||
1221 | /** |
||
1222 | * Add a form section. |
||
1223 | * |
||
1224 | * @param $slug |
||
1225 | * @param array $section |
||
1226 | * @return $this |
||
1227 | */ |
||
1228 | public function addFormSection($slug, array $section) |
||
1234 | |||
1235 | /** |
||
1236 | * Set the form entry. |
||
1237 | * |
||
1238 | * @param $entry |
||
1239 | * @return $this |
||
1240 | */ |
||
1241 | public function setFormEntry($entry) |
||
1247 | |||
1248 | /** |
||
1249 | * Get a request value. |
||
1250 | * |
||
1251 | * @param $key |
||
1252 | * @param null $default |
||
1253 | * @return mixed |
||
1254 | */ |
||
1255 | public function getRequestValue($key, $default = null) |
||
1259 | |||
1260 | /** |
||
1261 | * Get a post value. |
||
1262 | * |
||
1263 | * @param $key |
||
1264 | * @param null $default |
||
1265 | * @return mixed |
||
1266 | */ |
||
1267 | public function getPostValue($key, $default = null) |
||
1271 | |||
1272 | /** |
||
1273 | * Return a post key flag. |
||
1274 | * |
||
1275 | * @param $key |
||
1276 | * @param null $default |
||
1277 | * @return mixed |
||
1278 | */ |
||
1279 | public function hasPostedInput($key) |
||
1283 | |||
1284 | /** |
||
1285 | * Return whether any post data exists. |
||
1286 | * |
||
1287 | * @return bool |
||
1288 | */ |
||
1289 | public function hasPostData() |
||
1300 | |||
1301 | /** |
||
1302 | * Set the save flag. |
||
1303 | * |
||
1304 | * @param bool $save |
||
1305 | * @return $this |
||
1306 | */ |
||
1307 | public function setSave($save) |
||
1313 | |||
1314 | /** |
||
1315 | * Return the save flag. |
||
1316 | * |
||
1317 | * @return bool |
||
1318 | */ |
||
1319 | public function canSave() |
||
1323 | |||
1324 | /** |
||
1325 | * Set the read only flag. |
||
1326 | * |
||
1327 | * @param $readOnly |
||
1328 | * @return $this |
||
1329 | */ |
||
1330 | public function setReadOnly($readOnly) |
||
1336 | |||
1337 | /** |
||
1338 | * Return the read only flag. |
||
1339 | * |
||
1340 | * @return bool |
||
1341 | */ |
||
1342 | public function isReadOnly() |
||
1346 | } |
||
1347 |
This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.
Consider making the comparison explicit by using
empty(..)
or! empty(...)
instead.