@Override
	protected void decompilerActionPerformed(DecompilerActionContext context) {
		Program program = context.getProgram();
		PluginTool tool = context.getTool();

		// Objectives:
		// Pop a file dialog to select the SARIF file.

		// need to pop-up a file chooser dialog.
		TaintState state = plugin.getTaintState();
		GhidraFileChooser file_chooser = new GhidraFileChooser(tool.getToolFrame());
		file_chooser.setCurrentDirectory(new File(state.getOptions().getTaintEnginePath()));
		file_chooser.setFileSelectionMode(GhidraFileChooserMode.FILES_ONLY);
		file_chooser.setTitle("Select a Source-Sink Query Results SARIF File");

		File sarifFile = file_chooser.getSelectedFile(true);

		if (sarifFile != null && sarifFile.canRead()) {
			plugin.consoleMessage(
				String.format("Setting feature file: %s\n", sarifFile.getAbsolutePath()));
			state.loadTaintData(program, sarifFile);
			plugin.consoleMessage("external query results loaded.");
		}
		else {
			plugin.consoleMessage("No sarif file specified, or file does not exist.");

		}
	}
Normal workflow is for a QUERY to be executed which is immediately followed by ingesting the results for use.

<p>
This action will allow PREVIOUSLY generated query output (possibly generated externally) to be read
in for the program binary.

<p>
Action triggered from a specific token in the decompiler window to mark a variable as a source or
sink and generate the requisite query. This can be an input parameter, a stack variable, a
variable associated with a register, or a "dynamic" variable.
Ghidra/Features/DecompilerDependent/src/main/java/ghidra/app/plugin/core/decompiler/taint/actions/TaintLoadAction.java