skylot/jadx · error · IllegalArgumentException
Plugin option description not set, plugin: {}
Error message
Plugin option description not set, plugin: {} What it means
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.
Source
Thrown at jadx-core/src/main/java/jadx/core/plugins/JadxPluginManager.java:201
appContext.setFilesGetter(decompiler.getArgs().getFilesGetter());
return appContext;
}
private void verifyOptions(PluginContext pluginContext, JadxPluginOptions options) {
String pluginId = pluginContext.getPluginId();
List<OptionDescription> descriptions = options.getOptionsDescriptions();
if (descriptions == null) {
throw new IllegalArgumentException("Null option descriptions in plugin id: " + pluginId);
}
String prefix = pluginId + '.';
descriptions.forEach(descObj -> {
String optName = descObj.name();
if (optName == null || !optName.startsWith(prefix)) {
throw new IllegalArgumentException("Plugin option name should start with plugin id: '" + prefix + "', option: " + optName);
}
String desc = descObj.description();
if (desc == null || desc.isEmpty()) {
throw new IllegalArgumentException("Plugin option description not set, plugin: " + pluginId);
}
List<String> values = descObj.values();
if (values == null) {
throw new IllegalArgumentException("Plugin option values is null, option: " + optName + ", plugin: " + pluginId);
}
});
}
public List<JadxCodeInput> getCodeInputs() {
return getResolvedPluginContexts()
.stream()
.flatMap(p -> p.getCodeInputs().stream())
.collect(Collectors.toList());
}
public void registerAddPluginListener(Consumer<PluginContext> listener) {
this.addPluginListeners.add(listener);
// run for already added pluginsView on GitHub (pinned to e738a26571)
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.
Example fix
// before
new OptionDescription() {
public String description() { return null; }
...
}
// after
new OptionDescription() {
public String description() { return "Output directory for exported files"; }
...
} Defensive patterns
Strategy: validation
Validate before calling
// In your OptionDescription implementation
@Override
public String description() {
String desc = buildDescription(); // your logic
if (desc == null || desc.isEmpty()) {
throw new IllegalStateException("Description must not be null/empty for option: " + name());
}
return desc;
} Prevention
- 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.
When it happens
Trigger: A plugin's OptionDescription.description() returns null or "". The manager checks each option description during initialization, after all plugins have been init'd.
Common situations: 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.
Related errors
- Null option descriptions in plugin id: {}
- Plugin option values is null, option: {}, plugin: {}
- Plugin option name should start with plugin id: '{}', option
- Duplicate plugin id: {}, class {}
- Null arg type in {} at: {} in: {}
AI-assisted analysis of skylot/jadx@e738a26571 (2026-08-14).
Data as JSON: /api/errors/61e64cf8634c8c15.
Report an issue: GitHub.