@Override
	public void onUpdatePath(@Nonnull PathNode<?> path) {
		// Pass to children
		for (Navigable navigableChild : getNavigableChildren())
			if (navigableChild instanceof UpdatableNavigable updatableNavigable)
				updatableNavigable.onUpdatePath(path);

		// Handle updates to the decompiled code.
		if (!updateLock.get() && path instanceof ClassPathNode classPathNode) {
			this.path = classPathNode;
			ClassInfo classInfo = classPathNode.getValue();

			// Check if the class is an Android class and can be mapped.
			if (!classInfo.isJvmClass() && classInfo.isAndroidClass()) {
				AndroidClassInfo androidInfo = classInfo.asAndroidClass();
				if (androidInfo.canMapToJvmClass())
					classInfo = androidInfo.asJvmClass();
				else
					throw new IllegalStateException("Decompiler component received non-convertible Android class");
			}

			// Check if we can update the text efficiently with a remapper.
			// If not, then schedule a decompilation instead.
			if (!config.getUseMappingAcceleration().getValue() || !handleRemapUpdate(classInfo))
				decompile();
		}
	}
Common outline for decompiler panes utilizing {@link JvmDecompiler}.
<br>
For Android content it is assumed {@link AndroidClassInfo#asJvmClass()} is implemented as a conversion process.

@author Matt Coley
@see JvmDecompilerPane
@see AndroidDecompilerPane
recaf-ui/src/main/java/software/coley/recaf/ui/pane/editing/AbstractDecompilePane.java