public void copyClass(@Nonnull Workspace workspace,
	                      @Nonnull WorkspaceResource resource,
	                      @Nonnull JvmClassBundle bundle,
	                      @Nonnull JvmClassInfo info) {
		String originalName = info.getName();
		Consumer<String> copyTask = newName -> {
			// Create mappings.
			IntermediateMappings mappings = new IntermediateMappings();
			mappings.addClass(originalName, newName);

			// Collect inner classes, we need to copy these as well.
			List<JvmClassInfo> classesToCopy = new ArrayList<>();
			classesToCopy.add(info);
			for (InnerClassInfo inner : info.getInnerClasses()) {
				if (inner.isExternalReference()) continue;
				String innerClassName = inner.getInnerClassName();
				mappings.addClass(innerClassName, newName + innerClassName.substring(originalName.length()));
				JvmClassInfo innerClassInfo = bundle.get(innerClassName);
				if (innerClassInfo != null)
					classesToCopy.add(innerClassInfo);
				else
					logger.warn("Could not find inner class for copy-operation: {}", EscapeUtil.escapeStandard(innerClassName));
			}

			// Apply mappings to create copies of the affected classes, using the provided name.
			// Then dump the mapped classes into bundle.
			MappingApplier applier = mappingApplierService.inWorkspace(workspace);
			MappingResults results = applier.applyToClasses(mappings, resource, bundle, classesToCopy);
			for (ClassPathNode mappedClassPath : results.getPostMappingPaths().values()) {
				JvmClassInfo mappedClass = mappedClassPath.getValue().asJvmClass();
				bundle.put(mappedClass);
			}
		};
		new NamePopup(copyTask)
				.withInitialPathName(originalName)
				.forClassCopy(bundle)
				.show();
	}
Prompts the user to give a new name for the copied class.
Inner classes also get copied.

@param workspace
		Containing workspace.
@param resource
		Containing resource.
@param bundle
		Containing bundle.
@param info
		Class to copy.
recaf-ui/src/main/java/software/coley/recaf/services/navigation/Actions.java