{"record":{"id":"7c77dcd8529c5e08","repo":"skylot/jadx","slug":"unknown-arg-type","errorCode":null,"errorMessage":"Unknown arg type ","messagePattern":"Unknown arg type ","errorType":"exception","errorClass":"CodegenException","httpStatus":null,"severity":"error","filePath":"jadx-core/src/main/java/jadx/core/codegen/InsnGen.java","lineNumber":125,"sourceCode":"\tpublic void addArg(ICodeWriter code, InsnArg arg, boolean wrap) throws CodegenException {\n\t\taddArg(code, arg, wrap ? BODY_ONLY_FLAG : BODY_ONLY_NOWRAP_FLAGS);\n\t}\n\n\tpublic void addArg(ICodeWriter code, InsnArg arg, Set<Flags> flags) throws CodegenException {\n\t\tif (arg.isRegister()) {\n\t\t\tRegisterArg reg = (RegisterArg) arg;\n\t\t\tif (code.isMetadataSupported()) {\n\t\t\t\tcode.attachAnnotation(VarNode.getRef(mth, reg));\n\t\t\t}\n\t\t\tcode.add(mgen.getNameGen().useArg(reg));\n\t\t} else if (arg.isLiteral()) {\n\t\t\taddLiteralArg(code, (LiteralArg) arg, flags);\n\t\t} else if (arg.isInsnWrap()) {\n\t\t\taddWrappedArg(code, (InsnWrapArg) arg, flags);\n\t\t} else if (arg.isNamed()) {\n\t\t\tcode.add(((Named) arg).getName());\n\t\t} else {\n\t\t\tthrow new CodegenException(\"Unknown arg type \" + arg);\n\t\t}\n\t}\n\n\tprivate void addLiteralArg(ICodeWriter code, LiteralArg litArg, Set<Flags> flags) {\n\t\tString literalStr = lit(litArg);\n\t\tif (!flags.contains(Flags.BODY_ONLY_NOWRAP) && literalStr.startsWith(\"-\")) {\n\t\t\tcode.add('(').add(literalStr).add(')');\n\t\t} else {\n\t\t\tcode.add(literalStr);\n\t\t}\n\t}\n\n\tprivate void addWrappedArg(ICodeWriter code, InsnWrapArg arg, Set<Flags> flags) throws CodegenException {\n\t\tInsnNode wrapInsn = arg.getWrapInsn();\n\t\tif (wrapInsn.contains(AFlag.FORCE_ASSIGN_INLINE)) {\n\t\t\tcode.add('(');\n\t\t\tmakeInsn(wrapInsn, code, Flags.INLINE);\n\t\t\tcode.add(')');","sourceCodeStart":107,"sourceCodeEnd":143,"githubUrl":"https://github.com/skylot/jadx/blob/e738a26571d02919f01df40de93bc9a44dee4e18/jadx-core/src/main/java/jadx/core/codegen/InsnGen.java#L107-L143","documentation":"Thrown by InsnGen.addArg() when an InsnArg instance is not a register, not a literal, not an instruction wrapper, and not named. These four categories cover all expected arg subtypes; any other type means an unrecognized InsnArg subclass reached the code generator. This is an internal invariant violation.","triggerScenarios":"An InsnArg subclass that does not implement/override isRegister(), isLiteral(), isInsnWrap(), or isNamed() to return true. A new arg type added to jadx without updating addArg(). Internal state corruption where an arg loses its classification.","commonSituations":"Modifying jadx's instruction argument system and introducing a new arg type without updating InsnGen.addArg(). Rare in user-facing decompilation — typically a development-time issue.","solutions":["If you added a new InsnArg subtype, add a branch in addArg() or make it match one of the existing isXxx() checks.","Report as an internal jadx bug with the full class and stack trace."],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":null,"typeGuard":"// Type guard for InsnArg subtypes before code generation\nprivate static boolean isKnownArgType(InsnArg arg) {\n    return arg.isRegister() || arg.isLiteral()\n        || arg.isInsnWrap() || arg.isNamed();\n}\n// Usage:\nif (!isKnownArgType(arg)) {\n    logger.warn(\"Unknown arg type, skipping: {}\", arg.getClass());\n    return;\n}","tryCatchPattern":"try {\n    insnGen.addArg(code, arg, flags);\n} catch (CodegenException e) {\n    if (e.getMessage().startsWith(\"Unknown arg type\")) {\n        code.add(\"/* unknown arg: \" + arg + \" */\");\n        logger.warn(\"Unknown instruction arg type\", e);\n    } else {\n        throw e;\n    }\n}","preventionTips":["If you add a new InsnArg subtype, add a branch in InsnGen.addArg().","Report as an internal jadx bug with the full stack trace."],"tags":["codegen","instruction","arg","exhaustive-switch","internal-bug"],"backgroundTag":null,"analyzedSha":"e738a26571d02919f01df40de93bc9a44dee4e18","analyzedAt":"2026-08-14T00:10:24.238Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}