private void decompile() {
			if (classInfo == null) {
				editor.setText(Lang.get("deobf.preview.noselection"));
				return;
			}

			JvmClassInfo jvmClass = classInfo.asJvmClass();

			if (andApply) {
				List<Class<? extends JvmClassTransformer>> transformers = Unchecked.cast(transformerOrder.stream()
						.map(ct -> ct.transformer().type())
						.filter(JvmClassTransformer.class::isAssignableFrom)
						.toList());

				try {
					TransformationApplier applier = transformationApplierService.newApplierForCurrentWorkspace();
					if (applier == null)
						throw new TransformationException("No workspace is open");
					JvmTransformResult result = applier
							.transformJvm(transformers, (_, _, _, targetClass) -> targetClass.getName().equals(classInfo.getName()));
					if (!result.getTransformedClasses().isEmpty())
						jvmClass = result.getTransformedClasses().values().iterator().next();
				} catch (TransformationException e) {
					editor.setText("// Failed to transform: " + e.getMessage() + "\n"
							+ "// " + StringUtil.traceToString(e).replace("\n", "\n// "));
					return;
				}
			}

			// TODO: Pull out common decompile code with "AbstractDecompilePane" to do this more aesthetically
			//  - And by that I mean include the animation
			//  - And the error handling
			//  - But not the rest of the unrelated "editing" capabilities of the "AbstractDecompilePane"
			decompilerManager.decompile(workspaceManager.getCurrent(), jvmClass).whenCompleteAsync((result, error) -> {
				if (result != null) {
					editor.setText(result.getText());
				}
			}, FxThreadUtil.executor());
		}
Pane for previewing deobfuscation transformers.

@author Matt Coley
recaf-ui/src/main/java/software/coley/recaf/ui/window/DeobfuscationWindow.java