{"record":{"id":"302686b3d4bc8d37","repo":"theonedev/onedev","slug":"at-least-two-filters-needed-302686","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/OrRevFilter.java","lineNumber":60,"sourceCode":"\tpublic static RevFilter create(RevFilter a, RevFilter b) {\n\t\tif (a == ALL || b == ALL)\n\t\t\treturn ALL;\n\t\treturn new Binary(a, b);\n\t}\n\n\t/**\n\t * Create a filter around many filters, one 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 at least one input filter.\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, one 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 at least one input filter.\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":42,"sourceCodeEnd":78,"githubUrl":"https://github.com/theonedev/onedev/blob/d44925c47c37992c828ea673a5f9620539bc3ff2/server-core/src/main/java/org/eclipse/jgit/revwalk/filter/OrRevFilter.java#L42-L78","documentation":"OrRevFilter.create(RevFilter[]) throws IllegalArgumentException when the array holds fewer than two filters. An OR over zero or one filter is meaningless, so JGit requires at least two subfilters, mirroring AndRevFilter.","triggerScenarios":"Calling OrRevFilter.create with an array of length 0 or 1 — typically dynamic filter-building code that collects optional predicates without a size check.","commonSituations":"Building OR-search filters from multiple user-supplied terms where only one term matched; generic filter pipelines that previously always had >= 2 conditions.","solutions":["Check array length before calling: return the single filter for length 1, and a constant (RevFilter.NONE) for length 0","Only construct an OrRevFilter once at least two subfilters are present","Prefer OrRevFilter.create(RevFilter a, RevFilter b) for the fixed two-filter case"],"exampleFix":"// before\nRevFilter f = OrRevFilter.create(terms); // terms may contain 1 element\n// after\nRevFilter f = terms.length == 0 ? RevFilter.NONE\n        : terms.length == 1 ? terms[0]\n        : OrRevFilter.create(terms);","handlingStrategy":"validation","validationCode":"if (filters == null || filters.length < 2) {\n    throw new IllegalArgumentException(\"OrRevFilter.create needs at least 2 filters\");\n}","typeGuard":"boolean canOr(RevFilter[] fs) { return fs != null && fs.length >= 2; }","tryCatchPattern":"try {\n    RevFilter f = OrRevFilter.create(list);\n} catch (IllegalArgumentException e) {\n    RevFilter f = list.length == 1 ? list[0] : RevFilter.NONE;\n}","preventionTips":["Normalize 0/1-element filter arrays before combining","Centralize OR-filter construction in a guarded helper","Test filter builders with empty and singleton collections"],"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-14T00:17:10.932Z"}