@Nonnull
	@SuppressWarnings("unchecked")
	private CompletableFuture<Void> assembleAndUpdateWorkspace() {
		return assemble().whenComplete((unused, error) -> {
			if (lastAssembledClass != null && problemTracking.getProblemsByLevel(ProblemLevel.ERROR).isEmpty()) {
				updateLock.set(true);
				try {
					Bundle<ClassInfo> bundle = path.getValueOfType(Bundle.class);
					if (bundle == null)
						throw new IllegalStateException("Bundle not included in assembler pane's path");
					bundle.put(lastAssembledClass);
					FxThreadUtil.run(() -> Animations.animateSuccess(editor, 1000));
				} catch (Throwable t) {
					logger.error("Uncaught exception when updating class of {}", lastAssembledClass.getName(), t);
					FxThreadUtil.run(() -> Animations.animateWarn(editor, 1000));
				} finally {
					updateLock.set(false);
				}
			} else {
				FxThreadUtil.run(() -> Animations.animateFailure(editor, 1000));
			}
		});
	}
Build the contents of the editor's text and update the workspace when successful.

@return Future of parse completion.
recaf-ui/src/main/java/software/coley/recaf/ui/pane/editing/assembler/AssemblerPane.java