private void resolve() throws IOException, FileNotFoundException {

		if (projectData != null) {
			return;
		}

		projectData = (DefaultProjectData) c.getProjectData();

		String folderItemName = c.getFolderItemName();
		String folderPath = c.getFolderPath();

		// Obtain referenced folder
		DomainFolder folder = projectData.getFolder(folderPath);
		if (folder == null && folderItemName == null && !c.isReadOnly()) {

			// if an explicit folder path was specified
			try {
				folder = getExplicitFolder(folderPath);
			}
			catch (InvalidNameException e) {
				// TODO: URL folder path is invalid
				closeProjectData();
				throw new IOException("URL specifies invalid path: " + folderPath);
			}
		}
		if (folder == null) {
			closeProjectData();
			throw new FileNotFoundException("URL specifies unknown folder path: " + folderPath);
		}

		if (folderItemName == null) {
			refObject = folder;
			return;
		}

		DomainFile df = folder.getFile(folderItemName);
		if (df != null) {
			refObject = df;
			return;
		}

		DomainFolder subfolder = folder.getFolder(folderItemName);
		if (subfolder != null) {
			refObject = subfolder;
			return;
		}

		closeProjectData();
		String path = folderPath;
		if (!path.endsWith(FileSystem.SEPARATOR)) {
			path += FileSystem.SEPARATOR;
		}
		path += folderItemName;
		throw new FileNotFoundException("URL specifies unknown path: " + path);
	}
Close associated {@link ProjectData} when all consumers have released wrapped object.
Underlying project data instance may remain active until all open project files have been
released/closed.
Ghidra/Framework/Project/src/main/java/ghidra/framework/protocol/ghidra/GhidraURLWrappedContent.java