{"record":{"id":"898f279a774aeb8f","repo":"MuntashirAkon/AppManager","slug":"invalid-type","errorCode":null,"errorMessage":"Invalid type=","messagePattern":"Invalid type=","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"app/src/main/java/io/github/muntashirakon/AppManager/rules/struct/RuleEntry.java","lineNumber":121,"sourceCode":"                return new PermissionRule(packageName, name, tokenizer);\n            case MAGISK_HIDE:\n                return new MagiskHideRule(packageName, name, tokenizer);\n            case MAGISK_DENY_LIST:\n                return new MagiskDenyListRule(packageName, name, tokenizer);\n            case BATTERY_OPT:\n                return new BatteryOptimizationRule(packageName, tokenizer);\n            case NET_POLICY:\n                return new NetPolicyRule(packageName, tokenizer);\n            case NOTIFICATION:\n                return new NotificationListenerRule(packageName, name, tokenizer);\n            case URI_GRANT:\n                return new UriGrantRule(packageName, tokenizer);\n            case SSAID:\n                return new SsaidRule(packageName, tokenizer);\n            case FREEZE:\n                return new FreezeRule(packageName, tokenizer);\n            default:\n                throw new IllegalArgumentException(\"Invalid type=\" + type.name());\n        }\n    }\n\n    @Override\n    public boolean equals(Object o) {\n        if (this == o) return true;\n        if (!(o instanceof RuleEntry)) return false;\n        RuleEntry ruleEntry = (RuleEntry) o;\n        return name.equals(ruleEntry.name) && packageName.equals(ruleEntry.packageName) && type == ruleEntry.type;\n    }\n\n    @Override\n    public int hashCode() {\n        return Objects.hash(name, packageName, type);\n    }\n}\n","sourceCodeStart":103,"sourceCodeEnd":138,"githubUrl":"https://github.com/MuntashirAkon/AppManager/blob/0152f468fc9463ee02dc2ca83f6fe4989a2c4ca5/app/src/main/java/io/github/muntashirakon/AppManager/rules/struct/RuleEntry.java#L103-L138","documentation":"getRuleEntry dispatches on the parsed RuleType to construct the concrete RuleEntry subclass. If the switch sees a RuleType with no corresponding case (default branch), it throws IllegalArgumentException(\"Invalid type=\" + type.name()). With exhaustive enums this normally means a new RuleType was added without updating the factory.","triggerScenarios":"Parsing a rule whose type maps to a RuleType constant that getRuleEntry does not handle (e.g. a newly added enum constant on a newer data file parsed by an older build).","commonSituations":"Downgrade: rules exported by a newer App Manager imported into an older version; a fork with an extended RuleType; database contents edited to hold an unhandled type.","solutions":["Upgrade App Manager so the factory handles the RuleType named in the message.","Remove or migrate rules using the unsupported type before importing.","If you maintain a fork, add a case for the missing RuleType in getRuleEntry."],"exampleFix":"// before (older factory)\ncase FREEZE: return new FreezeRule(packageName, tokenizer);\n// after\ncase FREEZE: return new FreezeRule(packageName, tokenizer);\ncase NEW_TYPE: return new NewTypeRule(packageName, tokenizer);","handlingStrategy":"try-catch","validationCode":"// Ensure the RuleType is one handled by the installed build:\nSet<RuleType> supported = Set.of(RuleType.ACTIVITY, RuleType.PROVIDER, RuleType.RECEIVER,\n    RuleType.SERVICE, RuleType.APP_OP, RuleType.PERMISSION, RuleType.MAGISK_HIDE,\n    RuleType.MAGISK_DENY_LIST, RuleType.BATTERY_OPT, RuleType.NET_POLICY,\n    RuleType.NOTIFICATION, RuleType.URI_GRANT, RuleType.SSAID, RuleType.FREEZE);","typeGuard":null,"tryCatchPattern":"try {\n    RuleEntry e = RuleEntry.unflattenFromString(pkg, line, true);\n} catch (IllegalArgumentException e) {\n    if (e.getMessage().startsWith(\"Invalid type=\")) {\n        upgradeAppOrSkipRule(line);\n    }\n}","preventionTips":["Keep App Manager updated to at least the version that exported the rules.","Enumerate supported RuleType values and filter out unsupported rules before import."],"tags":["enum","dispatch","rules"],"backgroundTag":"unsupported-enum-value","analyzedSha":"0152f468fc9463ee02dc2ca83f6fe4989a2c4ca5","analyzedAt":"2026-09-12T14:03:37.243Z","contentChangedAt":"2026-09-12T14:03:37.243Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}