{"record":{"id":"61e64cf8634c8c15","repo":"skylot/jadx","slug":"plugin-option-description-not-set-plugin","errorCode":null,"errorMessage":"Plugin option description not set, plugin: {}","messagePattern":"Plugin option description not set, plugin: (.+?)","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"jadx-core/src/main/java/jadx/core/plugins/JadxPluginManager.java","lineNumber":201,"sourceCode":"\t\tappContext.setFilesGetter(decompiler.getArgs().getFilesGetter());\n\t\treturn appContext;\n\t}\n\n\tprivate void verifyOptions(PluginContext pluginContext, JadxPluginOptions options) {\n\t\tString pluginId = pluginContext.getPluginId();\n\t\tList<OptionDescription> descriptions = options.getOptionsDescriptions();\n\t\tif (descriptions == null) {\n\t\t\tthrow new IllegalArgumentException(\"Null option descriptions in plugin id: \" + pluginId);\n\t\t}\n\t\tString prefix = pluginId + '.';\n\t\tdescriptions.forEach(descObj -> {\n\t\t\tString optName = descObj.name();\n\t\t\tif (optName == null || !optName.startsWith(prefix)) {\n\t\t\t\tthrow new IllegalArgumentException(\"Plugin option name should start with plugin id: '\" + prefix + \"', option: \" + optName);\n\t\t\t}\n\t\t\tString desc = descObj.description();\n\t\t\tif (desc == null || desc.isEmpty()) {\n\t\t\t\tthrow new IllegalArgumentException(\"Plugin option description not set, plugin: \" + pluginId);\n\t\t\t}\n\t\t\tList<String> values = descObj.values();\n\t\t\tif (values == null) {\n\t\t\t\tthrow new IllegalArgumentException(\"Plugin option values is null, option: \" + optName + \", plugin: \" + pluginId);\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic List<JadxCodeInput> getCodeInputs() {\n\t\treturn getResolvedPluginContexts()\n\t\t\t\t.stream()\n\t\t\t\t.flatMap(p -> p.getCodeInputs().stream())\n\t\t\t\t.collect(Collectors.toList());\n\t}\n\n\tpublic void registerAddPluginListener(Consumer<PluginContext> listener) {\n\t\tthis.addPluginListeners.add(listener);\n\t\t// run for already added plugins","sourceCodeStart":183,"sourceCodeEnd":219,"githubUrl":"https://github.com/skylot/jadx/blob/e738a26571d02919f01df40de93bc9a44dee4e18/jadx-core/src/main/java/jadx/core/plugins/JadxPluginManager.java#L183-L219","documentation":"Thrown as IllegalArgumentException by JadxPluginManager.verifyOptions() when an OptionDescription.description() returns null or an empty string. Every plugin option must have a human-readable description for CLI help output and GUI tooltips. A missing description is a plugin contract violation.","triggerScenarios":"A plugin's OptionDescription.description() returns null or \"\". The manager checks each option description during initialization, after all plugins have been init'd.","commonSituations":"Custom jadx plugin where the author forgot to populate the description field, or a dynamically-constructed OptionDescription where the description was left null by a builder.","solutions":["Provide a non-empty, meaningful description string for every option in your OptionDescription implementation.","If using a builder pattern for options, add a null/empty check in the builder's build() method.","If you are not the plugin author, report the issue or disable the plugin."],"exampleFix":"// before\nnew OptionDescription() {\n    public String description() { return null; }\n    ...\n}\n\n// after\nnew OptionDescription() {\n    public String description() { return \"Output directory for exported files\"; }\n    ...\n}","handlingStrategy":"validation","validationCode":"// In your OptionDescription implementation\n@Override\npublic String description() {\n    String desc = buildDescription(); // your logic\n    if (desc == null || desc.isEmpty()) {\n        throw new IllegalStateException(\"Description must not be null/empty for option: \" + name());\n    }\n    return desc;\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Plugin authors: populate description() for every option with a meaningful string.","Use a builder that validates non-empty description before building OptionDescription.","Add a unit test iterating all option descriptions and asserting non-null/non-empty."],"tags":["jadx","plugins","options","null-check","plugin-contract","illegal-argument"],"backgroundTag":null,"analyzedSha":"e738a26571d02919f01df40de93bc9a44dee4e18","analyzedAt":"2026-08-14T00:10:24.238Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}