@Nonnull
	public FileNavigable gotoDeclaration(@Nonnull Workspace workspace,
	                                     @Nonnull WorkspaceResource resource,
	                                     @Nonnull FileBundle bundle,
	                                     @Nonnull TextFileInfo info) {
		FilePathNode path = PathNodes.filePath(workspace, resource, bundle, info);
		return (FileNavigable) getOrCreatePathContent(path, () -> {
			// Create text/graphic for the tab to create.
			String title = textService.getFileInfoTextProvider(workspace, resource, bundle, info).makeText();
			IconProvider iconProvider = iconService.getFileInfoIconProvider(workspace, resource, bundle, info);
			DockableIconFactory graphicFactory = d -> Objects.requireNonNull(iconProvider.makeIcon(), "Missing graphic");
			if (title == null) throw new IllegalStateException("Missing title");

			// Create content for the tab.
			TextFilePane content = textPaneProvider.get();
			content.onUpdatePath(path);

			// Build the tab.
			Dockable dockable = createDockable(dockingManager.getPrimaryTabbedSpace(), title, graphicFactory, content);
			dockable.withCachedContextMenu(true).withContextMenuFactory(d -> {
				ContextMenu menu = new ContextMenu();
				ObservableList<MenuItem> items = menu.getItems();
				Menu mode = menu("menu.mode", CarbonIcons.VIEW);
				mode.getItems().addAll(
						action("menu.mode.file.text", CarbonIcons.CODE,
								() -> content.setEditorType(TextEditorType.TEXT)),
						action("menu.mode.file.hex", CarbonIcons.NUMBER_0,
								() -> content.setEditorType(TextEditorType.HEX))
				);
				items.add(mode);
				addCopyPathAction(menu, info);
				addCloseActions(menu, dockable);
				return menu;
			});
			return dockable;
		});
	}
Brings a {@link FileNavigable} component representing the given text file into focus.
If no such component exists, one is created.

@param workspace
		Containing workspace.
@param resource
		Containing resource.
@param bundle
		Containing bundle.
@param info
		Text file to go to.

@return Navigable content representing text file content of the path.
recaf-ui/src/main/java/software/coley/recaf/services/navigation/Actions.java