{"record":{"id":"4d16003317fa75ef","repo":"redis/jedis","slug":"count-must-be-set-before-any-to-be-set-4d1600","errorCode":null,"errorMessage":"COUNT must be set before ANY to be set","messagePattern":"COUNT must be set before ANY to be set","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"src/main/java/redis/clients/jedis/params/GeoSearchParam.java","lineNumber":110,"sourceCode":"  public GeoSearchParam sortingOrder(SortingOrder order) {\n    sortingOrder = order;\n    return this;\n  }\n\n  public GeoSearchParam count(int count) {\n    this.count = count;\n    return this;\n  }\n\n  public GeoSearchParam count(int count, boolean any) {\n    this.count = count;\n    this.any = true;\n    return this;\n  }\n\n  public GeoSearchParam any() {\n    if (this.count == null) {\n      throw new IllegalArgumentException(\"COUNT must be set before ANY to be set\");\n    }\n    this.any = true;\n    return this;\n  }\n\n  @Override\n  public void addParams(CommandArguments args) {\n    if (fromMember && fromLonLat) {\n      throw new IllegalArgumentException(\"Both FROMMEMBER and FROMLONLAT cannot be used.\");\n    } else if (fromMember) {\n      args.add(Keyword.FROMMEMBER).add(member);\n    } else if (fromLonLat) {\n      args.add(Keyword.FROMLONLAT).add(coord.getLongitude()).add(coord.getLatitude());\n    } else {\n      throw new IllegalArgumentException(\"Either FROMMEMBER or FROMLONLAT must be used.\");\n    }\n\n    if (byRadius && byBox) {","sourceCodeStart":92,"sourceCodeEnd":128,"githubUrl":"https://github.com/redis/jedis/blob/6dac31d4c224fb3257c216f3985340c6f500cdcb/src/main/java/redis/clients/jedis/params/GeoSearchParam.java#L92-L128","documentation":"GeoSearchParam.any() adds the ANY modifier to the COUNT option of GEOSEARCH, but Redis semantics require ANY to immediately follow COUNT. The library enforces call order: any() throws if count(x) has not been called yet, preventing an invalid argument ordering from ever reaching the server.","triggerScenarios":"Calling new GeoSearchParam().any() (or chaining .any() before .count(n)) on GEOSEARCH/GEOSEARCHSTORE params.","commonSituations":"Builder-call ordering mistakes in fluent chains; devs assuming order-independent setters; upgrading code where count was removed or moved after any().","solutions":["Call .count(n) before .any() in the chain, e.g. new GeoSearchParam().count(10).any()","If you do not need the ANY optimization, drop the .any() call entirely"],"exampleFix":"// before\nGeoSearchParam p = new GeoSearchParam().any().count(10);\n// after\nGeoSearchParam p = new GeoSearchParam().count(10).any();","handlingStrategy":"validation","validationCode":"if (wantAny && count <= 0) throw new IllegalArgumentException(\"ANY requires COUNT set first\");","typeGuard":null,"tryCatchPattern":"try {\n  GeoSearchParam p = new GeoSearchParam().count(n).any();\n} catch (IllegalArgumentException e) {\n  GeoSearchParam p = new GeoSearchParam().count(n); // retry without ANY\n}","preventionTips":["Build GeoSearchParam chains in Redis argument order: origin, shape, COUNT, then ANY","Never start a chain with .any()","Add a comment noting COUNT-before-ANY ordering"],"tags":["jedis","geosearch","argument-order","illegal-argument"],"backgroundTag":"invalid-argument","analyzedSha":"6dac31d4c224fb3257c216f3985340c6f500cdcb","analyzedAt":"2026-09-08T04:55:01.204Z","contentChangedAt":"2026-09-08T04:55:01.204Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}