{"record":{"id":"676f73aaa1fdd561","repo":"hackware1993/MagicIndicator","slug":"mode-mode-not-supported","errorCode":null,"errorMessage":"mode \" + mode + \" not supported.","messagePattern":"mode \" \\+ mode \\+ \" not supported\\.","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"magicindicator/src/main/java/net/lucode/hackware/magicindicator/buildins/commonnavigator/indicators/LinePagerIndicator.java","lineNumber":173,"sourceCode":"    }\r\n\r\n    public float getRoundRadius() {\r\n        return mRoundRadius;\r\n    }\r\n\r\n    public void setRoundRadius(float roundRadius) {\r\n        mRoundRadius = roundRadius;\r\n    }\r\n\r\n    public int getMode() {\r\n        return mMode;\r\n    }\r\n\r\n    public void setMode(int mode) {\r\n        if (mode == MODE_EXACTLY || mode == MODE_MATCH_EDGE || mode == MODE_WRAP_CONTENT) {\r\n            mMode = mode;\r\n        } else {\r\n            throw new IllegalArgumentException(\"mode \" + mode + \" not supported.\");\r\n        }\r\n    }\r\n\r\n    public Paint getPaint() {\r\n        return mPaint;\r\n    }\r\n\r\n    public List<Integer> getColors() {\r\n        return mColors;\r\n    }\r\n\r\n    public void setColors(Integer... colors) {\r\n        mColors = Arrays.asList(colors);\r\n    }\r\n\r\n    public Interpolator getStartInterpolator() {\r\n        return mStartInterpolator;\r\n    }\r","sourceCodeStart":155,"sourceCodeEnd":191,"githubUrl":"https://github.com/hackware1993/MagicIndicator/blob/fe22c7dc45444312bf1e8c71d1ced8e7c1aa3c9c/magicindicator/src/main/java/net/lucode/hackware/magicindicator/buildins/commonnavigator/indicators/LinePagerIndicator.java#L155-L191","documentation":"LinePagerIndicator.setMode() only accepts MODE_EXACTLY, MODE_MATCH_EDGE, or MODE_WRAP_CONTENT. Any other int (including values from another indicator's constants or a raw integer) throws IllegalArgumentException. It fails fast because an unsupported mode would produce undefined indicator sizing.","triggerScenarios":"Calling setMode() with an int that is not one of LinePagerIndicator.MODE_EXACTLY, MODE_MATCH_EDGE, or MODE_WRAP_CONTENT — e.g. passing LinePagerIndicator.MODE_FIXED (which does not exist), a ViewPager.LayoutParams constant, or a literal like 3.","commonSituations":"Copy-pasting mode constants from a different indicator class (e.g. CommonPagerTitleView or CirclePagerIndicator), mistyping a constant name and resolving to a wrong int, or persisting/restoring mode as an int from preferences where the stored value is out of range.","solutions":["Use one of the three constants defined on LinePagerIndicator: MODE_EXACTLY, MODE_MATCH_EDGE, or MODE_WRAP_CONTENT","Check that you are importing net.lucode.hackware.magicindicator.buildins.commonnavigator.indicators.LinePagerIndicator and referencing its constants, not another class's","If the mode comes from stored config/attributes, validate it against the three allowed values before calling setMode"],"exampleFix":"// before\nindicator.setMode(3);\n\n// after\nindicator.setMode(LinePagerIndicator.MODE_MATCH_EDGE);","handlingStrategy":"validation","validationCode":"private static final int[] ALLOWED_MODES = {\n    LinePagerIndicator.MODE_EXACTLY,\n    LinePagerIndicator.MODE_MATCH_EDGE,\n    LinePagerIndicator.MODE_WRAP_CONTENT\n};\n\nstatic boolean isValidMode(int mode) {\n    for (int m : ALLOWED_MODES) {\n        if (m == mode) return true;\n    }\n    return false;\n}\n\n// before calling:\nif (isValidMode(mode)) indicator.setMode(mode);","typeGuard":"static boolean isLinePagerIndicatorMode(int mode) {\n    return mode == LinePagerIndicator.MODE_EXACTLY\n        || mode == LinePagerIndicator.MODE_MATCH_EDGE\n        || mode == LinePagerIndicator.MODE_WRAP_CONTENT;\n}","tryCatchPattern":"try {\n    indicator.setMode(mode);\n} catch (IllegalArgumentException e) {\n    Log.w(\"MagicIndicator\", \"Unsupported mode \" + mode + \", falling back\", e);\n    indicator.setMode(LinePagerIndicator.MODE_EXACTLY);\n}","preventionTips":["Always reference the constants via LinePagerIndicator.MODE_* instead of raw ints","Never share mode constants across different indicator classes","Validate persisted/attr-sourced mode values before applying them"],"tags":["android","illegal-argument","indicator-mode"],"backgroundTag":"invalid-enum-value","analyzedSha":"fe22c7dc45444312bf1e8c71d1ced8e7c1aa3c9c","analyzedAt":"2026-09-10T10:42:42.784Z","contentChangedAt":"2026-09-10T10:42:42.784Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}