skylot/jadx · error · JadxRuntimeException

Failed to get inputs hash for plugin: {}

Error message

Failed to get inputs hash for plugin: {}

What it means

Thrown by PluginContext.getInputsHash when the plugin-supplied inputsHashSupplier (registered via registerInputsHashSupplier) raises any exception. The hash is used to decide whether cached decompilation output can be reused for the current plugin inputs; failure means the cache key cannot be computed for that plugin.

Source

Thrown at jadx-core/src/main/java/jadx/core/plugins/PluginContext.java:137

		} catch (Exception e) {
			throw new JadxRuntimeException("Failed to apply options for plugin: " + getPluginId(), e);
		}
	}

	@Override
	public void registerInputsHashSupplier(Supplier<String> supplier) {
		this.inputsHashSupplier = supplier;
	}

	@Override
	public String getInputsHash() {
		if (inputsHashSupplier == null) {
			return defaultOptionsHash();
		}
		try {
			return inputsHashSupplier.get();
		} catch (Exception e) {
			throw new JadxRuntimeException("Failed to get inputs hash for plugin: " + getPluginId(), e);
		}
	}

	private String defaultOptionsHash() {
		if (options == null) {
			return "";
		}
		Map<String, String> allOptions = getArgs().getPluginOptions();
		StringBuilder sb = new StringBuilder();
		for (OptionDescription optDesc : options.getOptionsDescriptions()) {
			if (!optDesc.getFlags().contains(OptionFlag.NOT_CHANGING_CODE)) {
				sb.append(':').append(allOptions.get(optDesc.name()));
			}
		}
		return FileUtils.md5Sum(sb.toString());
	}

	@Override

View on GitHub (pinned to e738a26571)

Solutions

  1. Inspect the wrapped cause to find what the supplier was trying to read and why it failed.
  2. Ensure plugin inputs (files/resources referenced by the supplier) are present and accessible.
  3. Update or contact the plugin author if the supplier itself is buggy.
  4. Catch JadxRuntimeException around plugin initialisation/getInputsHash when orchestrating multiple plugins.
Defensive patterns

Strategy: try-catch

Try / catch

try {
    String hash = pluginCtx.getInputsHash();
} catch (JadxRuntimeException e) {
    LOG.warn("plugin {} hash failed, skipping cache: {}", pluginCtx.getPluginId(), e.getCause());
}

Prevention

When it happens

Trigger: A plugin registers a Supplier<String> that hashes its inputs, and that supplier throws (e.g. it tries to read an input file that no longer exists, computes over a null, or hits an IOException). PluginContext wraps the exception and names the plugin id.

Common situations: Plugin inputs moved/removed between runs, a buggy hash supplier in a third-party plugin, or a plugin whose supplier assumes state that was not initialised. The error is scoped to one plugin's cache key, not to decompilation itself.

Related errors


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