public static URL makeURL(String projectLocation, String projectName, String projectFilePath,
			String ref) {
		if (StringUtils.isBlank(projectLocation) || StringUtils.isBlank(projectName)) {
			throw new IllegalArgumentException("Invalid project location and/or name");
		}
		String path = checkAbsolutePath(projectLocation);
		if (!path.endsWith("/")) {
			path += "/";
		}
		StringBuilder buf = new StringBuilder(PROTOCOL);
		buf.append(":");
		buf.append(path);
		buf.append(projectName);

		if (!StringUtils.isBlank(projectFilePath)) {
			if (!projectFilePath.startsWith("/") || projectFilePath.contains("\\")) {
				throw new IllegalArgumentException("Invalid project file path");
			}
			buf.append("?");
			buf.append(projectFilePath);
		}
		if (!StringUtils.isBlank(ref)) {
			buf.append("#");
			buf.append(ref);
		}
		try {
			return new URL(buf.toString());
		}
		catch (MalformedURLException e) {
			throw new IllegalArgumentException(e);
		}
	}
Create a URL which refers to a local Ghidra project with optional project file and ref
@param projectLocation absolute path of project location directory 
@param projectName name of project
@param projectFilePath file path (e.g., /a/b/c, may be null)
@param ref location reference (may be null)
@return local Ghidra project URL
@throws IllegalArgumentException if an absolute projectLocation path is not specified
Ghidra/Framework/Project/src/main/java/ghidra/framework/protocol/ghidra/GhidraURL.java