@Nonnull
	@Override
	public ContextMenuProvider getPackageContextMenuProvider(@Nonnull ContextSource source,
															 @Nonnull Workspace workspace,
															 @Nonnull WorkspaceResource resource,
															 @Nonnull ClassBundle<? extends ClassInfo> bundle,
															 @Nonnull String packageName) {
		return () -> {
			TextProvider nameProvider = textService.getPackageTextProvider(workspace, resource, bundle, packageName);
			IconProvider iconProvider = iconService.getPackageIconProvider(workspace, resource, bundle, packageName);
			ContextMenu menu = new ContextMenu();
			addHeader(menu, nameProvider.makeText(), iconProvider.makeIcon());
			var builder = new ContextMenuBuilder(menu, source).forDirectory(workspace, resource, bundle, packageName);

			if (source.isDeclaration()) {
				if (bundle instanceof JvmClassBundle) {
					var jvmBuilder = builder.cast(JvmClassBundle.class);
					jvmBuilder.directoryItem("menu.edit.copy", COPY_FILE, actions::copyPackage);
					jvmBuilder.directoryItem("menu.edit.delete", TRASH_CAN, actions::deletePackage);

					var refactor = jvmBuilder.submenu("menu.refactor", PAINT_BRUSH);
					refactor.directoryItem("menu.refactor.move", STACKED_MOVE, actions::movePackage);
					refactor.directoryItem("menu.refactor.rename", TAG_EDIT, actions::renamePackage);

					jvmBuilder.directoryItem("menu.export.package", EXPORT, actions::exportPackage);
				}
			}

			// Search actions
			var search = builder.submenu("menu.search", SEARCH);
			search.item("menu.search.class.member-references", CODE_REFERENCE, () -> {
				MemberReferenceSearchPane pane = actions.openNewMemberReferenceSearch();
				pane.ownerPredicateIdProperty().setValue(StringPredicateProvider.KEY_STARTS_WITH);
				pane.ownerValueProperty().setValue(packageName + "/");
			});
			search.item("menu.search.class.type-references", CODE_REFERENCE, () -> {
				ClassReferenceSearchPane pane = actions.openNewClassReferenceSearch();
				pane.typePredicateIdProperty().setValue(StringPredicateProvider.KEY_STARTS_WITH);
				pane.typeValueProperty().setValue(packageName + "/");
			});

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

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

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