{"record":{"id":"fb7b6757aa4ff2bb","repo":"MuntashirAkon/AppManager","slug":"invalid-filter-filtername","errorCode":null,"errorMessage":"Invalid filter: ${filterName}","messagePattern":"Invalid filter: (.+?)","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"app/src/main/java/io/github/muntashirakon/AppManager/filters/options/FilterOptions.java","lineNumber":38,"sourceCode":"            case \"data_usage\": return new DataUsageOption();\n            case \"freeze_unfreeze\": return new FreezeOption();\n            case \"installed\": return new InstalledOption();\n            case \"installer\": return new InstallerOption();\n            case \"last_update\": return new LastUpdateOption();\n            case \"min_sdk\": return new MinSdkOption();\n            case \"permissions\": return new PermissionsOption();\n            case \"pkg_name\": return new PackageNameOption();\n            case \"running_apps\": return new RunningAppsOption();\n            case \"screen_time\": return new ScreenTimeOption();\n            case \"signature\": return new SignatureOption();\n            case \"target_sdk\": return new TargetSdkOption();\n            case \"times_opened\": return new TimesOpenedOption();\n            case \"total_size\": return new TotalSizeOption();\n            case \"trackers\": return new TrackersOption();\n            case \"uid\": return new UidOption();\n            case \"version_name\": return new VersionNameOption();\n        }\n        throw new IllegalArgumentException(\"Invalid filter: \" + filterName);\n    }\n}\n","sourceCodeStart":20,"sourceCodeEnd":41,"githubUrl":"https://github.com/MuntashirAkon/AppManager/blob/0152f468fc9463ee02dc2ca83f6fe4989a2c4ca5/app/src/main/java/io/github/muntashirakon/AppManager/filters/options/FilterOptions.java#L20-L41","documentation":"FilterOptions.create(filterName) is a factory that maps a filter type name string to a concrete FilterOption subclass via a switch. If the name matches no known case, it throws IllegalArgumentException, rejecting unknown filter identifiers.","triggerScenarios":"Calling FilterOptions.create() with a name string not in its switch (e.g. misspelled name like \"targt_sdk\", a name from a newer/older app version, or an arbitrary string from deserialized JSON/Parcel).","commonSituations":"Restoring saved filters (JSON via fromJson / Parcel via createFromParcel) written by a different app version whose filter names changed; hand-writing filter rules with a wrong type name; locale/case mistakes in the filter name.","solutions":["Use one of the exact registered names (e.g. \"times_opened\", \"total_size\", \"trackers\", \"uid\", \"version_name\", ...) as matched in the switch.","Check the spelling/case of filterName against FilterOptions.create()'s cases.","When loading persisted filters from another version, validate/normalize names and drop unknown ones before calling create()."],"exampleFix":"// before\nFilterOption o = FilterOptions.create(\"lastmodified\");\n// after\nFilterOption o = FilterOptions.create(\"last_update\");","handlingStrategy":"try-catch","validationCode":"Set<String> known = Set.of(\"times_opened\", \"total_size\", \"trackers\", \"uid\", \"version_name\" /* ...all cases */);\nif (!known.contains(filterName)) throw new IllegalArgumentException(\"Unknown filter: \" + filterName);","typeGuard":null,"tryCatchPattern":"try {\n    option = FilterOptions.create(name);\n} catch (IllegalArgumentException e) {\n    Log.w(TAG, \"Unknown filter type, skipping\", e);\n    option = null;\n}","preventionTips":["Copy filter names exactly from FilterOptions.create()'s switch cases.","Use string constants rather than inline literals for filter names.","When importing filters from files/other versions, validate names first and skip unknown ones."],"tags":["java","android","factory","invalid-identifier"],"backgroundTag":"invalid-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"}