{"record":{"id":"0c22bb3fd77ce1dc","repo":"theonedev/onedev","slug":"at-least-two-filters-needed","errorCode":null,"errorMessage":"At least two filters needed.","messagePattern":"At least two filters needed\\.","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"server-core/src/main/java/org/eclipse/jgit/revwalk/filter/AndRevFilter.java","lineNumber":62,"sourceCode":"\t\t\treturn b;\n\t\tif (b == ALL)\n\t\t\treturn a;\n\t\treturn new Binary(a, b);\n\t}\n\n\t/**\n\t * Create a filter around many filters, all of which must match.\n\t *\n\t * @param list\n\t *            list of filters to match against. Must contain at least 2\n\t *            filters.\n\t * @return a filter that must match all input filters.\n\t */\n\tpublic static RevFilter create(RevFilter[] list) {\n\t\tif (list.length == 2)\n\t\t\treturn create(list[0], list[1]);\n\t\tif (list.length < 2)\n\t\t\tthrow new IllegalArgumentException(JGitText.get().atLeastTwoFiltersNeeded);\n\t\tfinal RevFilter[] subfilters = new RevFilter[list.length];\n\t\tSystem.arraycopy(list, 0, subfilters, 0, list.length);\n\t\treturn new List(subfilters);\n\t}\n\n\t/**\n\t * Create a filter around many filters, all of which must match.\n\t *\n\t * @param list\n\t *            list of filters to match against. Must contain at least 2\n\t *            filters.\n\t * @return a filter that must match all input filters.\n\t */\n\tpublic static RevFilter create(Collection<RevFilter> list) {\n\t\tif (list.size() < 2)\n\t\t\tthrow new IllegalArgumentException(JGitText.get().atLeastTwoFiltersNeeded);\n\t\tfinal RevFilter[] subfilters = new RevFilter[list.size()];\n\t\tlist.toArray(subfilters);","sourceCodeStart":44,"sourceCodeEnd":80,"githubUrl":"https://github.com/theonedev/onedev/blob/d44925c47c37992c828ea673a5f9620539bc3ff2/server-core/src/main/java/org/eclipse/jgit/revwalk/filter/AndRevFilter.java#L44-L80","documentation":"AndRevFilter.create(RevFilter[]) throws IllegalArgumentException when the array has fewer than two filters. An AND over zero or one filters is meaningless (the single-filter case is a no-op), so JGit requires at least two inputs.","triggerScenarios":"Calling AndRevFilter.create(new RevFilter[]{f}) or AndRevFilter.create(new RevFilter[0]) — typically from generic code that collects filters into a varargs/array without checking size.","commonSituations":"Building a filter array from dynamic predicate lists that ended up with one (or zero) entries; migrations from null-based 'no filter' handling.","solutions":["Check the array length before calling: if length is 0 return RevFilter.NONE/ALL as appropriate, if 1 return the single filter directly","Guard with if (list.length >= 2) before invoking create","Use AndRevFilter.create(RevFilter a, RevFilter b) only for the exact two-filter case"],"exampleFix":"// before\nRevFilter f = AndRevFilter.create(collectedFilters); // may have < 2 entries\n// after\nRevFilter f = collectedFilters.length == 0 ? RevFilter.ALL\n        : collectedFilters.length == 1 ? collectedFilters[0]\n        : AndRevFilter.create(collectedFilters);","handlingStrategy":"validation","validationCode":"if (filters == null || filters.length < 2) {\n    throw new IllegalArgumentException(\"AndRevFilter.create needs at least 2 filters\");\n}","typeGuard":"boolean canAnd(RevFilter[] fs) { return fs != null && fs.length >= 2; }","tryCatchPattern":"try {\n    RevFilter f = AndRevFilter.create(list);\n} catch (IllegalArgumentException e) {\n    RevFilter f = list.length == 1 ? list[0] : RevFilter.ALL;\n}","preventionTips":["Normalize filter collections (0 -> identity filter, 1 -> itself) before combining","Wrap combine logic in a helper instead of calling AndRevFilter.create directly from dynamic code","Unit-test filter builders with empty and single-element inputs"],"tags":["jgit","revfilter","illegal-argument","precondition"],"backgroundTag":"invalid-argument-value","analyzedSha":"d44925c47c37992c828ea673a5f9620539bc3ff2","analyzedAt":"2026-09-06T07:18:27.995Z","contentChangedAt":"2026-09-06T07:18:27.995Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}