private boolean installExtensions(List<File> files) {
		boolean didInstall = false;
		for (File file : files) {

			// A sanity check for users that try to install an extension from a source folder
			// instead of a fully built extension.
			if (new File(file, "build.gradle").isFile()) {
				Msg.showWarn(this, null, "Invalid Extension",
					"The selected extension " +
						"contains a 'build.gradle' file.\nGhidra does not support installing " +
						"extensions in source form.\nPlease build the extension and try again.");
				continue;
			}

			boolean success = ExtensionInstaller.install(file);
			didInstall |= success;
		}
		return didInstall;
	}
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