private void setSymbolStorageLocation(File symbolStorageDir, boolean allowGUIPrompt) {
		if (symbolStorageDir == null) {
			return;
		}
		if (!symbolStorageDir.exists()) {
			if (!allowGUIPrompt) {
				return;
			}

			int opt =
				OptionDialog.showOptionDialog(rootPanel, "Create Local Symbol Storage Directory?",
					"<html>Symbol storage directory<br>" +
						HTMLUtilities.escapeHTML(symbolStorageDir.getPath()) +
						"<br>does not exist.  Create?",
					"Yes", OptionDialog.QUESTION_MESSAGE);
			if (opt == OptionDialog.CANCEL_OPTION) {
				return;
			}
			try {
				FileUtilities.checkedMkdirs(symbolStorageDir);
			}
			catch (IOException e) {
				Msg.showError(this, rootPanel, "Failure",
					"Failed to create symbol storage directory %s: %s".formatted(symbolStorageDir,
						e.getMessage()));
				return;
			}
		}

		if (allowGUIPrompt && isEmptyDirectory(symbolStorageDir)) {
			if (OptionDialog.showYesNoDialog(rootPanel, "Initialize Symbol Storage Directory?",
				"<html>Initialize new directory as Microsoft symbol storage directory?<br>" +
					"(Answer <b>No</b> to leave as unorganized storage directory)") == OptionDialog.YES_OPTION) {
				try {
					LocalSymbolStore.create(symbolStorageDir,
						1 /* level1 MS symbol storage directory */);
				}
				catch (IOException e) {
					Msg.showError(this, rootPanel, "Initialize Failure",
						"Failed to initialize symbol storage directory " + symbolStorageDir, e);
				}
			}
		}

		localSymbolStore =
			symbolServerInstanceCreatorContext.getSymbolServerInstanceCreatorRegistry()
					.newSymbolServer(symbolStorageDir.getPath(), symbolServerInstanceCreatorContext,
						SymbolStore.class);
		setSymbolStorageLocationPath(symbolStorageDir.getPath());
		updateButtonEnablement();
	}
Returns a new {@link SymbolServerService} instance representing the currently
displayed configuration, or null if the displayed configuration is not valid.

@return new {@link SymbolServerService} or null
Ghidra/Features/PDB/src/main/java/pdb/symbolserver/ui/ConfigPdbDialog.java