{"record":{"id":"3001fca51d6075aa","repo":"theonedev/onedev","slug":"unexpected-operator-ctx-operator-gettext-3001fc","errorCode":null,"errorMessage":"\"Unexpected operator: \" + ctx.operator.getText()","messagePattern":"\"Unexpected operator: \" \\+ ctx\\.operator\\.getText\\(\\)","errorType":"exception","errorClass":"ExplicitException","httpStatus":null,"severity":"error","filePath":"server-core/src/main/java/io/onedev/server/search/entity/workspace/WorkspaceQuery.java","lineNumber":131,"sourceCode":"\t\t\tCriteria<Workspace> workspaceCriteria;\n\t\t\tif (criteriaContext != null) {\n\t\t\t\tworkspaceCriteria = new WorkspaceQueryBaseVisitor<Criteria<Workspace>>() {\n\n\t\t\t\t\t@Override\n\t\t\t\t\tpublic Criteria<Workspace> visitOperatorCriteria(OperatorCriteriaContext ctx) {\n\t\t\t\t\t\tswitch (ctx.operator.getType()) {\n\t\t\t\t\t\tcase Pending:\n\t\t\t\t\t\t\treturn new PendingCriteria();\n\t\t\t\t\t\tcase Active:\n\t\t\t\t\t\t\treturn new ActiveCriteria();\n\t\t\t\t\t\tcase Inactive:\n\t\t\t\t\t\t\treturn new InactiveCriteria();\n\t\t\t\t\t\tcase WorkspaceQueryLexer.CreatedByMe:\n\t\t\t\t\t\t\tif (!withCurrentUserCriteria)\n\t\t\t\t\t\t\t\tthrow new ExplicitException(\"Criteria '\" + ctx.operator.getText() + \"' is not supported here\");\n\t\t\t\t\t\t\treturn new CreatedByMeCriteria();\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tthrow new ExplicitException(\"Unexpected operator: \" + ctx.operator.getText());\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t@Override\n\t\t\t\t\tpublic Criteria<Workspace> visitOperatorValueCriteria(OperatorValueCriteriaContext ctx) {\n\t\t\t\t\t\tvar criterias = new ArrayList<Criteria<Workspace>>();\n\t\t\t\t\t\tfor (var quoted : ctx.criteriaValue.Quoted()) {\n\t\t\t\t\t\t\tString value = getValue(quoted.getText());\n\t\t\t\t\t\t\tif (ctx.CreatedBy() != null)\n\t\t\t\t\t\t\t\tcriterias.add(new CreatedByUserCriteria(getUser(value)));\n\t\t\t\t\t\t\telse if (ctx.RanOn() != null)\n\t\t\t\t\t\t\t\tcriterias.add(new RanOnCriteria(value));\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tthrow new ExplicitException(\"Unexpected operator: \" + ctx.operator.getText());\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn Criteria.orCriterias(criterias);\n\t\t\t\t\t}\n","sourceCodeStart":113,"sourceCodeEnd":149,"githubUrl":"https://github.com/theonedev/onedev/blob/d44925c47c37992c828ea673a5f9620539bc3ff2/server-core/src/main/java/io/onedev/server/search/entity/workspace/WorkspaceQuery.java#L113-L149","documentation":"In visitOperatorCriteria, any bare operator token that is not Active, Inactive, or (conditionally) CreatedByMe falls into the default branch and throws an ExplicitException 'Unexpected operator'. It means a value-less operator appeared where only those are grammatically/semantically valid.","triggerScenarios":"A query using a bare (valueless) operator that requires a value, e.g. `name` or `ran on` without a quoted value in the operator-criteria position.","commonSituations":"Hand-edited queries dropping the quoted value; grammar ambiguities letting a value-operator parse as an operator criteria.","solutions":["Supply the required quoted value for the operator, e.g. `ran on \"agent-1\"`.","Only use Active, Inactive, or CreatedByMe as bare operators.","Re-check the query against the workspace query grammar."],"exampleFix":"// before\nran on\n// after\nran on \"build-agent-1\"","handlingStrategy":"try-catch","validationCode":"Set<String> bareOperators = Set.of(\"active\", \"inactive\", \"created by me\");\nboolean hasUnknownBareOperator = /* tokenize query and check */ false;","typeGuard":null,"tryCatchPattern":"try {\n    var query = WorkspaceQuery.parse(queryText);\n} catch (ExplicitException e) {\n    // surface e.getMessage() (Unexpected operator) to the user\n}","preventionTips":["Only use bare operators Active/Inactive/CreatedByMe","Always quote values for operators like 'ran on' and 'created by'"],"tags":["search","query","criteria"],"backgroundTag":"unsupported-operation","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"}