@Override
			public void actionPerformed(ActionContext context) {

				// Don't let the user attempt to install anything if they don't have write
				// permissions on the installation dir.
				ResourceFile installDir =
					Application.getApplicationLayout().getExtensionInstallationDirs().get(0);
				if (!installDir.exists() && !installDir.mkdir()) {
					Msg.showError(this, null, "Directory Error",
						"Cannot install/uninstall extensions: Failed to create extension " +
							"installation directory: " + installDir);
				}
				if (!installDir.canWrite()) {
					Msg.showError(this, null, "Permissions Error",
						"Cannot install/uninstall extensions: Invalid write permissions on " +
							"installation directory: " + installDir);
					return;
				}

				GhidraFileChooser chooser = new GhidraFileChooser(getComponent());
				chooser.setFileSelectionMode(GhidraFileChooserMode.FILES_AND_DIRECTORIES);
				chooser.setLastDirectoryPreference(LAST_IMPORT_DIRECTORY_KEY);
				chooser.setTitle("Select Extension");
				chooser.addFileFilter(new ExtensionFileFilter());

				List<File> files = chooser.getSelectedFiles();
				chooser.dispose();

				if (installExtensions(files)) {
					panel.refreshTable();
					requireRestart = true;
				}
			}
Creates an action to allow users to manually add new extensions.

@param panel The extensions table panel.
Ghidra/Framework/Project/src/main/java/ghidra/framework/project/extensions/ExtensionTableProvider.java