{"record":{"id":"948121a703cfac5e","repo":"flowable/flowable-engine","slug":"task-name-list-is-empty-948121","errorCode":null,"errorMessage":"Task name list is empty","messagePattern":"Task name list is empty","errorType":"validation","errorClass":"FlowableIllegalArgumentException","httpStatus":null,"severity":"error","filePath":"modules/flowable-task-service/src/main/java/org/flowable/task/service/impl/TaskQueryImpl.java","lineNumber":256,"sourceCode":"        if (name == null) {\n            throw new FlowableIllegalArgumentException(\"Task name is null\");\n        }\n\n        if (orActive) {\n            currentOrQueryObject.name = name;\n        } else {\n            this.name = name;\n        }\n        return this;\n    }\n\n    @Override\n    public TaskQuery taskNameIn(Collection<String> nameList) {\n        if (nameList == null) {\n            throw new FlowableIllegalArgumentException(\"Task name list is null\");\n        }\n        if (nameList.isEmpty()) {\n            throw new FlowableIllegalArgumentException(\"Task name list is empty\");\n        }\n        for (String name : nameList) {\n            if (name == null) {\n                throw new FlowableIllegalArgumentException(\"None of the given task names can be null\");\n            }\n        }\n\n        if (name != null) {\n            throw new FlowableIllegalArgumentException(\"Invalid query usage: cannot set both taskNameIn and name\");\n        }\n        if (nameLike != null) {\n            throw new FlowableIllegalArgumentException(\"Invalid query usage: cannot set both taskNameIn and nameLike\");\n        }\n        if (nameLikeIgnoreCase != null) {\n            throw new FlowableIllegalArgumentException(\"Invalid query usage: cannot set both taskNameIn and nameLikeIgnoreCase\");\n        }\n\n        if (orActive) {","sourceCodeStart":238,"sourceCodeEnd":274,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-task-service/src/main/java/org/flowable/task/service/impl/TaskQueryImpl.java#L238-L274","documentation":"Flowable throws this FlowableIllegalArgumentException when TaskQuery.taskNameIn is given an empty collection. An empty IN list would generate invalid or pointless SQL, so Flowable rejects it during query construction, after the null check.","triggerScenarios":"Calling createTaskQuery().taskNameIn(Collections.emptyList()) or taskNameIn(new ArrayList<>()) - any collection with size 0.","commonSituations":"Dynamic filters where the user selected no names; upstream filtering (e.g. by tenant or permission) removed all entries from the list before the query was built.","solutions":["Check isEmpty() before calling taskNameIn and omit the filter when the list is empty.","Decide semantics explicitly: an empty selection usually means 'no filter' or 'no results' - implement whichever is intended.","Short-circuit and return an empty result set yourself if empty selection must mean zero results.","Make the UI/API forbid submitting a name filter with zero entries."],"exampleFix":"// before\nquery.taskNameIn(selectedNames); // throws when selectedNames is empty\n// after\nif (selectedNames != null && !selectedNames.isEmpty()) {\n    query.taskNameIn(selectedNames);\n} // else: no name filter applied","handlingStrategy":"validation","validationCode":"if (names != null && !names.isEmpty()) {\n    query.taskNameIn(names);\n} else if (names != null) {\n    return Collections.emptyList(); // empty selection means no matches by design\n}","typeGuard":"boolean isNonEmpty(Collection<?> c) { return c != null && !c.isEmpty(); }","tryCatchPattern":"try {\n    query.taskNameIn(names);\n} catch (FlowableIllegalArgumentException e) {\n    if (e.getMessage().equals(\"Task name list is empty\")) {\n        log.warn(\"Empty name list; returning no results\");\n        return Collections.emptyList();\n    }\n    throw e;\n}","preventionTips":["Decide and document empty-selection semantics (no filter vs no results)","Check isEmpty() at the call site before building the query","Avoid passing UI-cleared selections straight into taskNameIn","Test the empty-list path of every dynamic query"],"tags":["flowable","query-builder","empty-collection","validation"],"backgroundTag":"empty-required-field","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}