@Nonnull
	public ClassNavigable gotoDeclaration(@Nonnull Workspace workspace,
	                                      @Nonnull WorkspaceResource resource,
	                                      @Nonnull AndroidClassBundle bundle,
	                                      @Nonnull AndroidClassInfo info) {
		ClassPathNode path = PathNodes.classPath(workspace, resource, bundle, info);
		return (ClassNavigable) getOrCreatePathContent(path, () -> {
			// Create text/graphic for the tab to create.
			String title = textService.getAndroidClassInfoTextProvider(workspace, resource, bundle, info).makeText();
			IconProvider iconProvider = iconService.getAndroidClassInfoIconProvider(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.
			AndroidClassPane content = androidPaneProvider.get();
			content.onUpdatePath(path);

			// Build the tab.
			Dockable dockable = createDockable(dockingManager.getPrimaryTabbedSpace(), title, graphicFactory, content);
			content.addPathUpdateListener(updatedPath -> {
				// Update tab graphic in case backing class details change.
				AndroidClassInfo updatedInfo = updatedPath.getValue().asAndroidClass();
				String updatedTitle = textService.getAndroidClassInfoTextProvider(workspace, resource, bundle, updatedInfo).makeText();
				IconProvider updatedIconProvider = iconService.getAndroidClassInfoIconProvider(workspace, resource, bundle, updatedInfo);
				DockableIconFactory updatedGraphicFactory = d -> Objects.requireNonNull(updatedIconProvider.makeIcon(), "Missing graphic");
				FxThreadUtil.run(() -> {
					dockable.withTitle(updatedTitle);
					dockable.withIconFactory(updatedGraphicFactory);
				});
			});
			setupInfoContextMenu(info, content, dockable);
			return dockable;
		});
	}
Brings a {@link ClassNavigable} component representing the given class into focus.
If no such component exists, one is created.

@param workspace
		Containing workspace.
@param resource
		Containing resource.
@param bundle
		Containing bundle.
@param info
		Class to go to.

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