skylot/jadx · error · IllegalArgumentException

Plugin option values is null, option: {}, plugin: {}

Error message

Plugin option values is null, option: {}, plugin: {}

What it means

Thrown as IllegalArgumentException by JadxPluginManager.verifyOptions() when an OptionDescription.values() returns null. The values() method returns the list of accepted values for an option (used for validation and GUI dropdowns). A null return is a contract violation — even options with unrestricted values should return an empty list, not null.

Source

Thrown at jadx-core/src/main/java/jadx/core/plugins/JadxPluginManager.java:205

	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 plugins
		getAllPluginContexts().forEach(listener);
	}
}

View on GitHub (pinned to e738a26571)

Solutions

  1. Return Collections.emptyList() (or a list of accepted values) from values() instead of null.
  2. If you are not the plugin author, report the bug or disable the plugin via the disabled-plugins list.

Example fix

// before
new OptionDescription() {
    public List<String> values() { return null; }
    ...
}

// after
new OptionDescription() {
    public List<String> values() { return Collections.emptyList(); }
    ...
}
Defensive patterns

Strategy: validation

Validate before calling

// In your OptionDescription implementation
@Override
public List<String> values() {
    // Return empty list for unrestricted options, never null
    return acceptedValues != null ? acceptedValues : Collections.emptyList();
}

Prevention

When it happens

Trigger: A plugin's OptionDescription.values() returns null. The manager checks this for every option description after plugin initialization. Options that accept any value should return Collections.emptyList() rather than null.

Common situations: Custom jadx plugin development where the author returns null from values() for free-form string options, not realizing the manager requires a non-null list.

Related errors


AI-assisted analysis of skylot/jadx@e738a26571 (2026-08-14). Data as JSON: /api/errors/f2208268517a331d. Report an issue: GitHub.