{"record":{"id":"3932f00997a180e4","repo":"hackware1993/MagicIndicator","slug":"y-badge-rule-is-wrong","errorCode":null,"errorMessage":"y badge rule is wrong.","messagePattern":"y badge rule is wrong\\.","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"magicindicator/src/main/java/net/lucode/hackware/magicindicator/buildins/commonnavigator/titles/badge/BadgePagerTitleView.java","lineNumber":208,"sourceCode":"        }\n        mXBadgeRule = badgeRule;\n    }\n\n    public BadgeRule getYBadgeRule() {\n        return mYBadgeRule;\n    }\n\n    public void setYBadgeRule(BadgeRule badgeRule) {\n        if (badgeRule != null) {\n            BadgeAnchor anchor = badgeRule.getAnchor();\n            if (anchor != BadgeAnchor.TOP\n                    && anchor != BadgeAnchor.BOTTOM\n                    && anchor != BadgeAnchor.CONTENT_TOP\n                    && anchor != BadgeAnchor.CONTENT_BOTTOM\n                    && anchor != BadgeAnchor.CENTER_Y\n                    && anchor != BadgeAnchor.TOP_EDGE_CENTER_Y\n                    && anchor != BadgeAnchor.BOTTOM_EDGE_CENTER_Y) {\n                throw new IllegalArgumentException(\"y badge rule is wrong.\");\n            }\n        }\n        mYBadgeRule = badgeRule;\n    }\n\n    public boolean isAutoCancelBadge() {\n        return mAutoCancelBadge;\n    }\n\n    public void setAutoCancelBadge(boolean autoCancelBadge) {\n        mAutoCancelBadge = autoCancelBadge;\n    }\n}\n","sourceCodeStart":190,"sourceCodeEnd":222,"githubUrl":"https://github.com/hackware1993/MagicIndicator/blob/fe22c7dc45444312bf1e8c71d1ced8e7c1aa3c9c/magicindicator/src/main/java/net/lucode/hackware/magicindicator/buildins/commonnavigator/titles/badge/BadgePagerTitleView.java#L190-L222","documentation":"BadgePagerTitleView.setYBadgeRule() validates that the BadgeRule's anchor is one of the Y-axis anchors (TOP, BOTTOM, CONTENT_TOP, CONTENT_BOTTOM, CENTER_Y, TOP_EDGE_CENTER_Y, BOTTOM_EDGE_CENTER_Y). Passing a rule anchored on an X-axis anchor throws IllegalArgumentException. This mirrors the X-axis check and keeps badge positioning well-defined.","triggerScenarios":"Calling setYBadgeRule(new BadgeRule(BadgeAnchor.LEFT, offset)) or any BadgeRule whose anchor is BadgeAnchor.LEFT, RIGHT, CONTENT_LEFT, CONTENT_RIGHT, CENTER_X, LEFT_EDGE_CENTER_X, or RIGHT_EDGE_CENTER_X.","commonSituations":"Copy-pasting an x badge rule into the y setter, misremembering which anchors belong to which axis, or generating anchors programmatically where the axis distinction is lost.","solutions":["Use a Y-axis anchor in the BadgeRule passed to setYBadgeRule: TOP, BOTTOM, CONTENT_TOP, CONTENT_BOTTOM, CENTER_Y, TOP_EDGE_CENTER_Y, or BOTTOM_EDGE_CENTER_Y","Move X-axis anchors (LEFT, RIGHT, CONTENT_LEFT, CONTENT_RIGHT, CENTER_X, LEFT_EDGE_CENTER_X, RIGHT_EDGE_CENTER_X) to setXBadgeRule instead","If the rule is built dynamically, validate badgeRule.getAnchor() against the Y anchors before calling setYBadgeRule"],"exampleFix":"// before\nbadgePagerTitleView.setYBadgeRule(new BadgeRule(BadgeAnchor.RIGHT, 0));\n\n// after\nbadgePagerTitleView.setYBadgeRule(new BadgeRule(BadgeAnchor.BOTTOM, 0));","handlingStrategy":"validation","validationCode":"static boolean isValidYAnchor(@BadgeAnchor int anchor) {\n    return anchor == BadgeAnchor.TOP\n        || anchor == BadgeAnchor.BOTTOM\n        || anchor == BadgeAnchor.CONTENT_TOP\n        || anchor == BadgeAnchor.CONTENT_BOTTOM\n        || anchor == BadgeAnchor.CENTER_Y\n        || anchor == BadgeAnchor.TOP_EDGE_CENTER_Y\n        || anchor == BadgeAnchor.BOTTOM_EDGE_CENTER_Y;\n}\n\n// before calling:\nif (isValidYAnchor(rule.getAnchor())) view.setYBadgeRule(rule);","typeGuard":"static boolean isYBadgeRule(BadgeRule rule) {\n    return rule != null && isValidYAnchor(rule.getAnchor());\n}","tryCatchPattern":"try {\n    badgePagerTitleView.setYBadgeRule(rule);\n} catch (IllegalArgumentException e) {\n    Log.w(\"MagicIndicator\", \"Bad y badge rule anchor: \" + rule.getAnchor(), e);\n}","preventionTips":["Keep x and y BadgeRule construction in separate clearly-named helper methods","Use the BadgeAnchor constants, never raw ints, so the IDE flags wrong-axis usage","If building rules dynamically, check the anchor axis at build time"],"tags":["android","illegal-argument","badge-anchor"],"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"}