@Nonnull
	@Override
	public ContextMenuProvider getDirectoryContextMenuProvider(@Nonnull ContextSource source,
															   @Nonnull Workspace workspace,
															   @Nonnull WorkspaceResource resource,
															   @Nonnull FileBundle bundle,
															   @Nonnull String directoryName) {
		return () -> {
			TextProvider nameProvider = textService.getDirectoryTextProvider(workspace, resource, bundle, directoryName);
			IconProvider iconProvider = iconService.getDirectoryIconProvider(workspace, resource, bundle, directoryName);
			ContextMenu menu = new ContextMenu();
			addHeader(menu, nameProvider.makeText(), iconProvider.makeIcon());
			var builder = new ContextMenuBuilder(menu, source).forDirectory(workspace, resource, bundle, directoryName);

			if (source.isDeclaration()) {
				builder.directoryItem("menu.edit.copy", COPY_FILE, actions::copyDirectory);
				builder.directoryItem("menu.edit.delete", TRASH_CAN, actions::deleteDirectory);

				var refactor = builder.submenu("menu.refactor", PAINT_BRUSH);
				refactor.directoryItem("menu.refactor.move", STACKED_MOVE, actions::moveDirectory);
				refactor.directoryItem("menu.refactor.rename", TAG_EDIT, actions::renameDirectory);

				builder.directoryItem("menu.export.directory", EXPORT, actions::exportDirectory);

				// TODO: implement operations
				//  - Search references
			}

			// Copy path
			builder.item("menu.tab.copypath", COPY_LINK, () -> ClipboardUtil.copyString(directoryName));

			return menu;
		};
	}
Basic implementation for {@link DirectoryContextMenuProviderFactory}.

@author Matt Coley
recaf-ui/src/main/java/software/coley/recaf/services/cell/context/BasicDirectoryContextMenuProviderFactory.java