void folderChanged(String folderName) throws IOException {
		synchronized (fileSystem) {
			GhidraFolderData folderData = folderDataCache.get(folderName);
			if (folderData != null) {
				try {
					folderData.updateExistenceState();
				}
				catch (IOException e) {
					// ignore
				}
				if (folderData.versionedFolderExists || folderData.folderExists) {
					// preserve subfolder data
					if (folderData.visited) {
						folderData.refresh(true, true, projectData.getProjectDisposalMonitor());
					}
					return;
				}
				folderDataCache.remove(folderName);
				folderData.dispose();
				folderData = null;
			}
			if (visited) {
				folderData = addFolderData(folderName);
				if (folderData == null) {
					if (folderList.remove(folderName)) {
						listener.domainFolderRemoved(getDomainFolder(), folderName);
					}
				}
				else if (folderList.add(folderName)) {
					listener.domainFolderAdded(folderData.getDomainFolder());
				}
			}
		}
	}
Notification that the specified subfolder has changed due to and add or remove of the
underlying local or version folder.  If the subfolder previously existed, still exists,
and had been visited a refresh on the subfolder will be forced, otherwise, if this folder has been 
visited an appropriate add/remove/change notification will be provided to the listener.  
NOTE: Care should be taken using this method as all sub-folder cache data may be disposed!
NOTE: Move and Rename situations are not handled
@param folderName name of folder which has changed
@throws IOException if an IO error occurs during associated refresh
Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFolderData.java