private boolean handleRemapUpdate(@Nonnull ClassInfo classInfo) {
		// Attempt to handle change with an AST mapping visitor if the change is originating
		// from a mapping application job.
		String currentText = editor.getText();
		if (!currentText.isBlank()) {
			MappingResults mappingOrigin = classInfo.getPropertyValueOrNull(RemapOriginTaskProperty.KEY);
			if (mappingOrigin != null) {
				Mappings mappings = mappingOrigin.getMappings();

				// We can handle the update with AST mapping instead of decompiling the class again.
				CompilationUnitModel unit = contextActionSupport.getUnit();
				Workspace workspace = path.getValueOfType(Workspace.class);
				if (unit != null && workspace != null) {
					ResolverAdapter resolver = astService.newJavaResolver(workspace, unit);
					resolver.setClassContext(getPath().getValue());
					String modifiedSource = astService.applyMappings(unit, resolver, mappings);

					// If there were no changes made then the AST service failed to make dynamic changes.
					// This can happen when the classes being mapped are not in the workspace, but instead
					// belong to 3rd party libraries not present in the workspace.
					if (currentText.equals(modifiedSource))
						return false;

					// We want to get the difference between the current and modified text and update only
					// the areas of the text that are modified. In most situations this will be much faster
					// than re-assigning the whole text (which will require restyling the entire document)
					List<StringDiff.Diff> diffs = StringDiff.diff(currentText, modifiedSource);
					FxThreadUtil.run(() -> {
						// Track where caret was.
						CodeArea area = editor.getCodeArea();
						int currentParagraph = area.getCurrentParagraph();
						int currentColumn = area.getCaretColumn();

						// Apply diffs.
						for (int i = diffs.size() - 1; i >= 0; i--) {
							StringDiff.Diff diff = diffs.get(i);
							if (diff.type() == StringDiff.DiffType.CHANGE)
								area.replaceText(diff.startA(), diff.endA(), diff.textB());
							else if (diff.type() == StringDiff.DiffType.INSERT)
								area.insertText(diff.startA(), diff.textB());
							else if (diff.type() == StringDiff.DiffType.REMOVE)
								area.replaceText(diff.startA(), diff.endA(), "");
						}

						// Reset caret.
						area.moveTo(currentParagraph, currentColumn);
					});
					return true;
				}
			}
		}
		return false;
	}
Attempts to update the {@link #editor}'s text with intent-specific AST operations.
This includes:
<ul>
    <li>{@link AstMapper} when handling classes marked with {@link RemapOriginTaskProperty}</li>
</ul>

@param classInfo
		Modified class.

@return {@code true} when we were able to handle it with an AST visitors.
recaf-ui/src/main/java/software/coley/recaf/ui/pane/editing/AbstractDecompilePane.java