GhidraFolder moveTo(GhidraFolderData newParent) throws IOException {
		synchronized (fileSystem) {
			if (newParent.getLocalFileSystem() != fileSystem || fileSystem.isReadOnly()) {
				throw new AssertException("moveTo permitted within writeable project only");
			}
			if (getPathname().equals(newParent.getPathname())) {
				throw new IllegalArgumentException("newParent must differ from current parent");
			}
			checkInUse();

			updateExistenceState();
			try {
				if (newParent.containsFolder(name)) {
					throw new DuplicateFileException(
						"Folder named " + getName() + " already exists in " + newParent);
				}

				if (folderExists) {
					fileSystem.moveFolder(parent.getPathname(), name, newParent.getPathname());
				}
				if (versionedFolderExists) {
					try {
						versionedFileSystem.moveFolder(parent.getPathname(), name,
							newParent.getPathname());
					}
					catch (IOException e) {
						if (folderExists) {
							// revert local folder move
							fileSystem.moveFolder(newParent.getPathname(), name,
								parent.getPathname());
						}
						throw e;
					}
				}

				DomainFolder oldParent = parent.getDomainFolder();

				if (parent.visited) {
					parent.folderList.remove(name);
				}
				parent.folderDataCache.remove(name);

				if (newParent.visited) {
					newParent.folderList.add(name);
				}
				newParent.folderDataCache.put(name, this);

				parent = newParent;
				GhidraFolder newFolder = getDomainFolder();

				if (parent.visited || newParent.visited) {
					listener.domainFolderMoved(newFolder, oldParent);
				}

				return newFolder;
			}
			catch (InvalidNameException e) {
				throw new AssertException("Unexpected error", e);
			}
		}
	}
Move this folder into the newParent folder.  If connected to a repository
this moves both private and repository folders/files.  If not
connected, only private folders/files are moved.
@param newParent new parent folder within the same project
@return the newly relocated folder (the original DomainFolder object becomes invalid since 
it is immutable)
@throws DuplicateFileException if a folder with the same name 
already exists in newParent folder.
@throws FileInUseException if this folder or one of its descendants 
contains a file which is in-use / checked-out.
@throws IOException thrown if an IO or access error occurs.
Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFolderData.java