@Nonnull
	@Override
	public ContextMenuProvider getBundleContextMenuProvider(@Nonnull ContextSource source,
	                                                        @Nonnull Workspace workspace,
	                                                        @Nonnull WorkspaceResource resource,
	                                                        @Nonnull Bundle<? extends Info> bundle) {
		return () -> {
			TextProvider nameProvider = textService.getBundleTextProvider(workspace, resource, bundle);
			IconProvider iconProvider = iconService.getBundleIconProvider(workspace, resource, bundle);
			ContextMenu menu = new ContextMenu();
			addHeader(menu, nameProvider.makeText(), iconProvider.makeIcon());
			var builder = new ContextMenuBuilder(menu, source).forBundle(workspace, resource, bundle);
			var edit = builder.submenu("menu.edit", EDIT);
			edit.item("misc.clear", TRASH_CAN, bundle::clear);

			if (bundle instanceof JvmClassBundle jvmBundle) {
				builder.item("menu.export.classes", DOCUMENT_EXPORT, () -> actions.exportClasses(workspace, resource, jvmBundle));
				builder.item("menu.file.decompileall", DOCUMENT_EXPORT, () -> {
					DecompileAllPopup popup = decompileAllPaneProvider.get();
					popup.setTargetBundle(jvmBundle);
					popup.show();
				});
				builder.item("menu.edit.changeversion", ARROWS_VERTICAL, () -> {
					ChangeClassVersionForAllPopup popup = changeClassVersionProvider.get();
					popup.setTargetBundle(jvmBundle);
					popup.show();
				});
			} else if (bundle instanceof FileBundle fileBundle) {
				builder.item("menu.export.files", DOCUMENT_EXPORT, () -> actions.exportFiles(workspace, resource, fileBundle));
			}
			return menu;
		};
	}
Basic implementation for {@link BundleContextMenuProviderFactory}.

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