public void showHelpAndExit() {
		List<String> names = new ArrayList<>(mOptions.keySet());
		int cmdWidth = 0;

		Collections.sort(names);

		System.out.println();
		System.out.println(BundleInfo.getDefault().getAppBanner());
		System.out.println();
		if (mHelpHeader != null) {
			System.out.println(mHelpHeader);
			System.out.println();
		}
		System.out.println(AVAILABLE_OPTIONS);
		System.out.println();

		for (String name : names) {
			CmdLineOption option = mOptions.get(name);
			int width = 5 + name.length();

			if (option.takesArgument()) {
				width += 1 + option.getArgumentLabel().length();
			}
			if (width > cmdWidth) {
				cmdWidth = width;
			}
		}

		for (String name : names) {
			CmdLineOption option = mOptions.get(name);

			StringBuilder builder = new StringBuilder();
			String[] allNames = option.getNames();
			String prefix = Platform.isWindows() ? "/" : "-"; //$NON-NLS-1$ //$NON-NLS-2$
			String description;

			if (allNames[allNames.length - 1].equals(name)) {
				description = option.getDescription();
			} else {
				description = MessageFormat.format(REFERENCE_DESCRIPTION, prefix, allNames[allNames.length - 1]);
			}
			builder.append("  "); //$NON-NLS-1$
			builder.append(prefix);
			builder.append(name);
			if (option.takesArgument()) {
				builder.append('=');
				builder.append(option.getArgumentLabel());
			}
			builder.append(TextUtility.makeFiller(cmdWidth - builder.length(), ' '));
			System.out.print(TextUtility.makeNote(builder.toString(), TextUtility.wrapToCharacterCount(description, 75 - cmdWidth)));
		}

		if (mHelpFooter != null) {
			System.out.println();
			System.out.println(mHelpFooter);
		}
		System.out.println();
		System.exit(0);
	}