{"record":{"id":"08888086feecb38f","repo":"JetBrains/intellij-community","slug":"slice-filter-parse-error-incorrect-constant-expect","errorCode":"slice.filter.parse.error.incorrect.constant.expected.number","errorMessage":"Incorrect constant (expected number): {0}","messagePattern":"Incorrect constant \\(expected number\\): (.+?)","errorType":"validation","errorClass":"SliceFilterParseException","httpStatus":null,"severity":"error","filePath":"java/java-impl/src/com/intellij/slicer/JavaSliceProvider.java","lineNumber":174,"sourceCode":"    }\n    PsiExpression constant;\n    try {\n      constant = JavaPsiFacade.getElementFactory(expression.getProject()).createExpressionFromText(filter, expression);\n    }\n    catch (IncorrectOperationException ignore) {\n      throw new SliceFilterParseException(JavaBundle.message(\"slice.filter.parse.error.incorrect.expression\", filter));\n    }\n    PsiType constantType = constant.getType();\n    if (constantType == null || !type.isAssignableFrom(constantType)) {\n      throw new SliceFilterParseException(JavaBundle.message(\"slice.filter.parse.error.incorrect.constant.type\", type.getPresentableText()));\n    }\n    Object o = ExpressionUtils.computeConstantExpression(constant);\n    if (o == null) {\n      throw new SliceFilterParseException(JavaBundle.message(\"slice.filter.parse.error.expression.must.evaluate.to.constant\", filter));\n    }\n    if (relationType != RelationType.EQ) {\n      if (!(o instanceof Number)) {\n        throw new SliceFilterParseException(JavaBundle.message(\"slice.filter.parse.error.incorrect.constant.expected.number\", filter));\n      }\n      if (PsiTypes.longType().equals(type)) {\n        LongRangeSet rangeSet = LongRangeSet.point(((Number)o).longValue()).fromRelation(relationType);\n        return new JavaValueFilter(DfTypes.longRange(rangeSet));\n      }\n      LongRangeSet rangeSet = LongRangeSet.point(((Number)o).intValue()).fromRelation(relationType);\n      return new JavaValueFilter(DfTypes.intRangeClamped(rangeSet));\n    }\n    return new JavaValueFilter(DfTypes.constant(o, type));\n  }\n\n  private static @Nullable PsiType getType(@NotNull PsiElement expression) {\n    if (expression instanceof PsiExpression) {\n      return ((PsiExpression)expression).getType();\n    }\n    else if (expression instanceof PsiVariable) {\n      return ((PsiVariable)expression).getType();\n    }","sourceCodeStart":156,"sourceCodeEnd":192,"githubUrl":"https://github.com/JetBrains/intellij-community/blob/be881553f2a76ac8b4ea53950d93f0de78295c19/java/java-impl/src/com/intellij/slicer/JavaSliceProvider.java#L156-L192","documentation":"Thrown by JavaSliceProvider.parseFilter when the filter starts with a relational operator (relationType != EQ, i.e. '>', '<', '>=', '<=', '==', '!=' prefixes supported for byte/char/short/int/long types) but the remaining expression evaluates to a non-Number constant. The relational branch builds LongRangeSet constraints and requires the constant to be numeric.","triggerScenarios":"Slicing an int variable and entering '>= \"abc\"' or '>= true' — the type check passes for some inputs but computeConstantExpression yields a String/Boolean/Character that is not a java.lang.Number.","commonSituations":"Users adding comparison operators to non-numeric-looking filters; filtering char values where the evaluated constant resolves to something non-numeric; typos like '>=\"5\"' (a quoted string) instead of '>=5'.","solutions":["Use an unquoted numeric literal with relational filters, e.g. '>=5' not '>=\"5\"'.","Remove the relational prefix if you intend an equality/enum/null filter.","Verify the sliced variable is one of byte/char/short/int/long — relational prefixes are only honored for those types anyway."],"exampleFix":"// before:\nfilter = \">= \\\"10\\\"\"\n\n// after:\nfilter = \">=10\"","handlingStrategy":"validation","validationCode":"if (relationType != RelationType.EQ && !(computed instanceof Number)) {\n  // relational filter requires a numeric constant — reject\n}","typeGuard":null,"tryCatchPattern":"try { provider.parseFilter(expression, filter); } catch (SliceFilterParseException e) { /* relational filters need numbers: re-prompt */ }","preventionTips":["With relational filters (>=, <, ...) always use bare numeric literals, not strings or booleans.","Offer numeric-only input assistance when a relational prefix is detected."],"tags":["java","intellij","dataflow","slice","numeric","user-input"],"backgroundTag":null,"analyzedSha":"be881553f2a76ac8b4ea53950d93f0de78295c19","analyzedAt":"2026-08-14T14:13:06.425Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}