//# 5 errors, 515 messages
//#
/*
    //#LinuxInstaller.java:1:1: class: com.dmdirc.installer.LinuxInstaller$1
    //#LinuxInstaller.java:1:1: class: com.dmdirc.installer.LinuxInstaller
    //#LinuxInstaller.java:1:1: method: com.dmdirc.installer.LinuxInstaller.com.dmdirc.installer.LinuxInstaller__static_init
 * Copyright (c) 2006-2009 Chris Smith, Shane Mc Cormack, Gregory Holmes
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

package com.dmdirc.installer;

import com.dmdirc.installer.cliparser.CLIParser;

import java.io.File;
import java.io.PrintWriter;
import java.io.IOException;

/**
 * Installs DMDirc on linux
 *
 * @author Shane Mc Cormack
 */
public class LinuxInstaller extends Installer {
    //#LinuxInstaller.java:36: method: void com.dmdirc.installer.LinuxInstaller.com.dmdirc.installer.LinuxInstaller()
    //#LinuxInstaller.java:36: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.installer.Installer()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.installer.LinuxInstaller
    //#    method: void com.dmdirc.installer.LinuxInstaller()
    //#    unanalyzed callee: void com.dmdirc.installer.Installer()
    //#input(void com.dmdirc.installer.LinuxInstaller()): this
	/**
	 * Are we running as root?
	 */
	private boolean isRoot() {
		return (CLIParser.getCLIParser().getParamNumber("-isroot") > 0);
    //#LinuxInstaller.java:41: method: bool com.dmdirc.installer.LinuxInstaller.isRoot()
    //#input(bool isRoot()): com/dmdirc/installer/cliparser/CLIParam.__Descendant_Table[com/dmdirc/installer/cliparser/BooleanParam]
    //#input(bool isRoot()): com/dmdirc/installer/cliparser/CLIParam.__Descendant_Table[com/dmdirc/installer/cliparser/CLIParam]
    //#input(bool isRoot()): com/dmdirc/installer/cliparser/CLIParam.__Descendant_Table[com/dmdirc/installer/cliparser/IntegerParam]
    //#input(bool isRoot()): com/dmdirc/installer/cliparser/CLIParam.__Descendant_Table[com/dmdirc/installer/cliparser/StringParam]
    //#input(bool isRoot()): com/dmdirc/installer/cliparser/CLIParam.__Descendant_Table[others]
    //#input(bool isRoot()): com/dmdirc/installer/cliparser/CLIParser.__Class_Obj.__Lock
    //#input(bool isRoot()): com/dmdirc/installer/cliparser/CLIParser.__Descendant_Table[com/dmdirc/installer/cliparser/CLIParser]
    //#input(bool isRoot()): com/dmdirc/installer/cliparser/CLIParser.__Descendant_Table[others]
    //#input(bool isRoot()): com/dmdirc/installer/cliparser/CLIParser.__Dispatch_Table.getParamNumber(Ljava/lang/String;)I
    //#input(bool isRoot()): com/dmdirc/installer/cliparser/CLIParser.me
    //#input(bool isRoot()): com/dmdirc/installer/cliparser/CLIParser.me.__Tag
    //#input(bool isRoot()): com/dmdirc/installer/cliparser/CLIParser.me.params
    //#output(bool isRoot()): com/dmdirc/installer/cliparser/CLIParser.me
    //#output(bool isRoot()): new ArrayList(CLIParser#2) num objects
    //#output(bool isRoot()): new ArrayList(CLIParser#3) num objects
    //#output(bool isRoot()): new CLIParser(getCLIParser#1) num objects
    //#output(bool isRoot()): new CLIParser(getCLIParser#1).__Tag
    //#output(bool isRoot()): new CLIParser(getCLIParser#1).helpParam
    //#output(bool isRoot()): new CLIParser(getCLIParser#1).paramList
    //#output(bool isRoot()): new CLIParser(getCLIParser#1).params
    //#output(bool isRoot()): new CLIParser(getCLIParser#1).redundant
    //#output(bool isRoot()): new Hashtable(CLIParser#1) num objects
    //#output(bool isRoot()): return_value
    //#new obj(bool isRoot()): new ArrayList(CLIParser#2)
    //#new obj(bool isRoot()): new ArrayList(CLIParser#3)
    //#new obj(bool isRoot()): new CLIParser(getCLIParser#1)
    //#new obj(bool isRoot()): new Hashtable(CLIParser#1)
    //#pre[1] (bool isRoot()): init'ed(com/dmdirc/installer/cliparser/CLIParser.me)
    //#presumption(bool isRoot()): getCLIParser(...).__Tag == com/dmdirc/installer/cliparser/CLIParser
    //#presumption(bool isRoot()): getCLIParser(...).params != null
    //#post(bool isRoot()): com/dmdirc/installer/cliparser/CLIParser.me == One-of{old com/dmdirc/installer/cliparser/CLIParser.me, &new CLIParser(getCLIParser#1)}
    //#post(bool isRoot()): com/dmdirc/installer/cliparser/CLIParser.me != null
    //#post(bool isRoot()): init'ed(return_value)
    //#post(bool isRoot()): new ArrayList(CLIParser#2) num objects <= 1
    //#post(bool isRoot()): new ArrayList(CLIParser#3) num objects == new ArrayList(CLIParser#2) num objects
    //#post(bool isRoot()): new CLIParser(getCLIParser#1) num objects == new ArrayList(CLIParser#2) num objects
    //#post(bool isRoot()): new Hashtable(CLIParser#1) num objects == new ArrayList(CLIParser#2) num objects
    //#post(bool isRoot()): new CLIParser(getCLIParser#1).__Tag == com/dmdirc/installer/cliparser/CLIParser
    //#post(bool isRoot()): new CLIParser(getCLIParser#1).helpParam == null
    //#post(bool isRoot()): new CLIParser(getCLIParser#1).paramList == &new ArrayList(CLIParser#2)
    //#post(bool isRoot()): new CLIParser(getCLIParser#1).params == &new Hashtable(CLIParser#1)
    //#post(bool isRoot()): new CLIParser(getCLIParser#1).redundant == &new ArrayList(CLIParser#3)
    //#unanalyzed(bool isRoot()): Effects-of-calling:java.util.Hashtable
    //#unanalyzed(bool isRoot()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(bool isRoot()): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(bool isRoot()): Effects-of-calling:java.util.Map:get
    //#LinuxInstaller.java:41: end of method: bool com.dmdirc.installer.LinuxInstaller.isRoot()
	}
	
	/** {@inheritDoc} */
	@Override
	public boolean validFile(final String filename) {
		return (!filename.equalsIgnoreCase("setup.sh") &&
    //#LinuxInstaller.java:47: method: bool com.dmdirc.installer.LinuxInstaller.validFile(String)
    //#input(bool validFile(String)): filename
    //#output(bool validFile(String)): return_value
    //#pre[1] (bool validFile(String)): filename != null
    //#post(bool validFile(String)): init'ed(return_value)
    //#LinuxInstaller.java:47: end of method: bool com.dmdirc.installer.LinuxInstaller.validFile(String)
		        !filename.equalsIgnoreCase("getjre.sh") &&
		        !filename.equalsIgnoreCase("jre.bin") &&
		        !filename.equalsIgnoreCase("java-bin") &&
		        !filename.equalsIgnoreCase("progressbar.sh") &&
		        !filename.equalsIgnoreCase("installjre.sh"));
	}

	/** {@inheritDoc} */
	@Override
	public String defaultInstallLocation() {
		String result = "";
    //#LinuxInstaller.java:58: method: String com.dmdirc.installer.LinuxInstaller.defaultInstallLocation()
    //#input(String defaultInstallLocation()): ""._tainted
    //#input(String defaultInstallLocation()): ".DMDirc"._tainted
    //#input(String defaultInstallLocation()): com/dmdirc/installer/cliparser/BooleanParam.__Descendant_Table[com/dmdirc/installer/cliparser/BooleanParam]
    //#input(String defaultInstallLocation()): com/dmdirc/installer/cliparser/BooleanParam.__Descendant_Table[others]
    //#input(String defaultInstallLocation()): com/dmdirc/installer/cliparser/BooleanParam.__Dispatch_Table.getStringValue()Ljava/lang/String;
    //#input(String defaultInstallLocation()): com/dmdirc/installer/cliparser/BooleanParam.__Dispatch_Table.getValue()Z
    //#input(String defaultInstallLocation()): com/dmdirc/installer/cliparser/CLIParam.__Descendant_Table[com/dmdirc/installer/cliparser/BooleanParam]
    //#input(String defaultInstallLocation()): com/dmdirc/installer/cliparser/CLIParam.__Descendant_Table[com/dmdirc/installer/cliparser/CLIParam]
    //#input(String defaultInstallLocation()): com/dmdirc/installer/cliparser/CLIParam.__Descendant_Table[com/dmdirc/installer/cliparser/IntegerParam]
    //#input(String defaultInstallLocation()): com/dmdirc/installer/cliparser/CLIParam.__Descendant_Table[com/dmdirc/installer/cliparser/StringParam]
    //#input(String defaultInstallLocation()): com/dmdirc/installer/cliparser/CLIParam.__Descendant_Table[others]
    //#input(String defaultInstallLocation()): com/dmdirc/installer/cliparser/CLIParam.__Dispatch_Table.getStringValue()Ljava/lang/String;
    //#input(String defaultInstallLocation()): com/dmdirc/installer/cliparser/CLIParser.__Class_Obj.__Lock
    //#input(String defaultInstallLocation()): com/dmdirc/installer/cliparser/CLIParser.__Descendant_Table[com/dmdirc/installer/cliparser/CLIParser]
    //#input(String defaultInstallLocation()): com/dmdirc/installer/cliparser/CLIParser.__Descendant_Table[others]
    //#input(String defaultInstallLocation()): com/dmdirc/installer/cliparser/CLIParser.__Dispatch_Table.getParam(Ljava/lang/String;)Lcom/dmdirc/installer/cliparser/CLIParam;
    //#input(String defaultInstallLocation()): com/dmdirc/installer/cliparser/CLIParser.__Dispatch_Table.getParamNumber(Ljava/lang/String;)I
    //#input(String defaultInstallLocation()): com/dmdirc/installer/cliparser/CLIParser.me
    //#input(String defaultInstallLocation()): com/dmdirc/installer/cliparser/CLIParser.me.__Tag
    //#input(String defaultInstallLocation()): com/dmdirc/installer/cliparser/CLIParser.me.params
    //#input(String defaultInstallLocation()): com/dmdirc/installer/cliparser/IntegerParam.__Descendant_Table[com/dmdirc/installer/cliparser/IntegerParam]
    //#input(String defaultInstallLocation()): com/dmdirc/installer/cliparser/IntegerParam.__Descendant_Table[others]
    //#input(String defaultInstallLocation()): com/dmdirc/installer/cliparser/IntegerParam.__Dispatch_Table.getStringValue()Ljava/lang/String;
    //#input(String defaultInstallLocation()): com/dmdirc/installer/cliparser/IntegerParam.__Dispatch_Table.getValue()I
    //#input(String defaultInstallLocation()): com/dmdirc/installer/cliparser/StringParam.__Descendant_Table[com/dmdirc/installer/cliparser/StringParam]
    //#input(String defaultInstallLocation()): com/dmdirc/installer/cliparser/StringParam.__Descendant_Table[others]
    //#input(String defaultInstallLocation()): com/dmdirc/installer/cliparser/StringParam.__Dispatch_Table.getStringValue()Ljava/lang/String;
    //#input(String defaultInstallLocation()): com/dmdirc/installer/cliparser/StringParam.__Dispatch_Table.getValue()Ljava/lang/String;
    //#input(String defaultInstallLocation()): this
    //#output(String defaultInstallLocation()): com/dmdirc/installer/cliparser/CLIParser.me
    //#output(String defaultInstallLocation()): java.lang.String:valueOf(...)._tainted
    //#output(String defaultInstallLocation()): java.lang.StringBuilder:toString(...)._tainted
    //#output(String defaultInstallLocation()): new ArrayList(CLIParser#2) num objects
    //#output(String defaultInstallLocation()): new ArrayList(CLIParser#3) num objects
    //#output(String defaultInstallLocation()): new CLIParser(getCLIParser#1) num objects
    //#output(String defaultInstallLocation()): new CLIParser(getCLIParser#1).__Tag
    //#output(String defaultInstallLocation()): new CLIParser(getCLIParser#1).helpParam
    //#output(String defaultInstallLocation()): new CLIParser(getCLIParser#1).paramList
    //#output(String defaultInstallLocation()): new CLIParser(getCLIParser#1).params
    //#output(String defaultInstallLocation()): new CLIParser(getCLIParser#1).redundant
    //#output(String defaultInstallLocation()): new Hashtable(CLIParser#1) num objects
    //#output(String defaultInstallLocation()): return_value
    //#new obj(String defaultInstallLocation()): java.lang.String:valueOf(...)
    //#new obj(String defaultInstallLocation()): java.lang.StringBuilder:toString(...)
    //#new obj(String defaultInstallLocation()): new ArrayList(CLIParser#2)
    //#new obj(String defaultInstallLocation()): new ArrayList(CLIParser#3)
    //#new obj(String defaultInstallLocation()): new CLIParser(getCLIParser#1)
    //#new obj(String defaultInstallLocation()): new Hashtable(CLIParser#1)
    //#pre[3] (String defaultInstallLocation()): init'ed(com/dmdirc/installer/cliparser/CLIParser.me)
    //#presumption(String defaultInstallLocation()): getCLIParser(...).__Tag == com/dmdirc/installer/cliparser/CLIParser
    //#presumption(String defaultInstallLocation()): getCLIParser(...).__Tag == com/dmdirc/installer/cliparser/CLIParser
    //#presumption(String defaultInstallLocation()): getCLIParser(...).params != null
    //#presumption(String defaultInstallLocation()): getCLIParser(...).params != null
    //#post(String defaultInstallLocation()): com/dmdirc/installer/cliparser/CLIParser.me != null
    //#post(String defaultInstallLocation()): init'ed(java.lang.String:valueOf(...)._tainted)
    //#post(String defaultInstallLocation()): init'ed(java.lang.StringBuilder:toString(...)._tainted)
    //#post(String defaultInstallLocation()): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(String defaultInstallLocation()): init'ed(return_value)
    //#post(String defaultInstallLocation()): new ArrayList(CLIParser#2) num objects <= 1
    //#post(String defaultInstallLocation()): new ArrayList(CLIParser#3) num objects == new ArrayList(CLIParser#2) num objects
    //#post(String defaultInstallLocation()): new CLIParser(getCLIParser#1) num objects == new ArrayList(CLIParser#2) num objects
    //#post(String defaultInstallLocation()): new Hashtable(CLIParser#1) num objects == new ArrayList(CLIParser#2) num objects
    //#post(String defaultInstallLocation()): new ArrayList(CLIParser#2) num objects == 0
    //#post(String defaultInstallLocation()): new ArrayList(CLIParser#3) num objects == 0
    //#post(String defaultInstallLocation()): new CLIParser(getCLIParser#1) num objects == 0
    //#post(String defaultInstallLocation()): new CLIParser(getCLIParser#1).__Tag == com/dmdirc/installer/cliparser/CLIParser
    //#post(String defaultInstallLocation()): init'ed(new CLIParser(getCLIParser#1).__Tag)
    //#post(String defaultInstallLocation()): new CLIParser(getCLIParser#1).helpParam == null
    //#post(String defaultInstallLocation()): init'ed(new CLIParser(getCLIParser#1).helpParam)
    //#post(String defaultInstallLocation()): new CLIParser(getCLIParser#1).paramList == &new ArrayList(CLIParser#2)
    //#post(String defaultInstallLocation()): init'ed(new CLIParser(getCLIParser#1).paramList)
    //#post(String defaultInstallLocation()): new CLIParser(getCLIParser#1).params == &new Hashtable(CLIParser#1)
    //#post(String defaultInstallLocation()): init'ed(new CLIParser(getCLIParser#1).params)
    //#post(String defaultInstallLocation()): new CLIParser(getCLIParser#1).redundant == &new ArrayList(CLIParser#3)
    //#post(String defaultInstallLocation()): init'ed(new CLIParser(getCLIParser#1).redundant)
    //#post(String defaultInstallLocation()): new Hashtable(CLIParser#1) num objects == 0
    //#unanalyzed(String defaultInstallLocation()): Effects-of-calling:java.util.Hashtable
    //#unanalyzed(String defaultInstallLocation()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(String defaultInstallLocation()): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(String defaultInstallLocation()): Effects-of-calling:java.util.Map:get
    //#unanalyzed(String defaultInstallLocation()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(String defaultInstallLocation()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(String defaultInstallLocation()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(String defaultInstallLocation()): Effects-of-calling:java.lang.String:valueOf
    //#test_vector(String defaultInstallLocation()): java.lang.String:isEmpty(...)@62: {0}, {1}
		if (CLIParser.getCLIParser().getParamNumber("-directory") > 0) {
			return CLIParser.getCLIParser().getParam("-directory").getStringValue();
    //#LinuxInstaller.java:60: ?use of default init
    //#    init'ed(Obj_Id#2434:getParam(...))
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.installer.LinuxInstaller
    //#    method: String defaultInstallLocation()
    //#    basic block: bb_2
    //#    assertion: init'ed(Obj_Id#2434:getParam(...))
    //#    VN: getParam(...)
    //#    Expected: Univ-VN-Set
    //#    Bad: {Invalid}
    //#    Attribs:  Ptr  Bad only invalid
    //#LinuxInstaller.java:60: ?null dereference
    //#    getParam(...) != null
    //#    severity: MEDIUM
    //#    class: com.dmdirc.installer.LinuxInstaller
    //#    method: String defaultInstallLocation()
    //#    basic block: bb_2
    //#    assertion: getParam(...) != null
    //#    VN: getParam(...)
    //#    Expected: Inverse{null}
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad
    //#LinuxInstaller.java:60: ?use of default init
    //#    init'ed(getParam(...).__Tag)
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.installer.LinuxInstaller
    //#    method: String defaultInstallLocation()
    //#    basic block: bb_2
    //#    assertion: init'ed(getParam(...).__Tag)
    //#    VN: getParam(...).__Tag
    //#    Expected: {-Inf..+Inf}
    //#    Bad: {Invalid}
    //#    Attribs:  Int  Bad only invalid
    //#LinuxInstaller.java:60: ?null dereference
    //#    com/dmdirc/installer/cliparser/CLIParam.__Descendant_Table[getParam(...).__Tag] != null
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.installer.LinuxInstaller
    //#    method: String defaultInstallLocation()
    //#    basic block: bb_2
    //#    assertion: com/dmdirc/installer/cliparser/CLIParam.__Descendant_Table[getParam(...).__Tag] != null
    //#    VN: com/dmdirc/installer/cliparser/CLIParam.__Descendant_Table[getParam(...).__Tag]
    //#    Expected: Inverse{null}
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad
    //#LinuxInstaller.java:60: ?precondition failure
    //#    com/dmdirc/installer/cliparser/IntegerParam.getStringValue: this.__Tag == com/dmdirc/installer/cliparser/IntegerParam
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.installer.LinuxInstaller
    //#    method: String defaultInstallLocation()
    //#    basic block: bb_2
    //#    assertion: getParam(...).__Tag in {com/dmdirc/installer/cliparser/BooleanParam, com/dmdirc/installer/cliparser/IntegerParam, com/dmdirc/installer/cliparser/StringParam}
    //#    callee: String com/dmdirc/installer/cliparser/IntegerParam.getStringValue()
    //#    callee assertion: this.__Tag == com/dmdirc/installer/cliparser/IntegerParam
    //#    callee file: IntegerParam.java
    //#    callee precondition index: [2]
    //#    callee srcpos: 73
    //#    VN: getParam(...).__Tag
    //#    Expected: {409_600, 411_392, 411_904}
    //#    Bad: {0..409_599, 409_601..411_391, 411_393..411_903, 411_905..+Inf, Invalid}
    //#    Attribs:  Int  Bad overlaps +/-1000  Bad < Exp  Bad > Exp
		}
		if (result.isEmpty()) {
			if (isRoot()) {
				result = "/opt/dmdirc";
			} else {
				result = System.getProperty("user.home") + "/DMDirc";
			}
		}
		return result;
    //#LinuxInstaller.java:69: end of method: String com.dmdirc.installer.LinuxInstaller.defaultInstallLocation()
	}

	/** {@inheritDoc} */
	@Override
	public boolean supportsShortcut(final ShortcutType shortcutType) {
		switch (shortcutType) {
    //#LinuxInstaller.java:75: method: com.dmdirc.installer.LinuxInstaller$1.com.dmdirc.installer.LinuxInstaller$1__static_init
    //#LinuxInstaller.java:75: Warning: method not available - call not analyzed
    //#    call on Installer$ShortcutType[] com.dmdirc.installer.Installer$ShortcutType:values()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.installer.LinuxInstaller$1
    //#    method: com.dmdirc.installer.LinuxInstaller$1__static_init
    //#    unanalyzed callee: Installer$ShortcutType[] com.dmdirc.installer.Installer$ShortcutType:values()
    //#LinuxInstaller.java:75: Warning: method not available - call not analyzed
    //#    call on int com.dmdirc.installer.Installer$ShortcutType:ordinal()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.installer.LinuxInstaller$1
    //#    method: com.dmdirc.installer.LinuxInstaller$1__static_init
    //#    unanalyzed callee: int com.dmdirc.installer.Installer$ShortcutType:ordinal()
    //#input(com.dmdirc.installer.LinuxInstaller$1__static_init): com.dmdirc.installer.Installer$ShortcutType.DESKTOP
    //#input(com.dmdirc.installer.LinuxInstaller$1__static_init): com.dmdirc.installer.Installer$ShortcutType.MENU
    //#input(com.dmdirc.installer.LinuxInstaller$1__static_init): com.dmdirc.installer.Installer$ShortcutType.PROTOCOL
    //#input(com.dmdirc.installer.LinuxInstaller$1__static_init): com.dmdirc.installer.Installer$ShortcutType.QUICKLAUNCH
    //#input(com.dmdirc.installer.LinuxInstaller$1__static_init): com.dmdirc.installer.Installer$ShortcutType.UNINSTALLER
    //#output(com.dmdirc.installer.LinuxInstaller$1__static_init): $SwitchMap$com$dmdirc$installer$Installer$ShortcutType
    //#output(com.dmdirc.installer.LinuxInstaller$1__static_init): __Descendant_Table[com/dmdirc/installer/LinuxInstaller$1]
    //#output(com.dmdirc.installer.LinuxInstaller$1__static_init): new int[](LinuxInstaller$1__static_init#1) num objects
    //#output(com.dmdirc.installer.LinuxInstaller$1__static_init): $SwitchMap$com$dmdirc$installer$Installer$ShortcutType.length
    //#output(com.dmdirc.installer.LinuxInstaller$1__static_init): $SwitchMap$com$dmdirc$installer$Installer$ShortcutType[0..4_294_967_295]
    //#new obj(com.dmdirc.installer.LinuxInstaller$1__static_init): new int[](LinuxInstaller$1__static_init#1)
    //#presumption(com.dmdirc.installer.LinuxInstaller$1__static_init): com.dmdirc.installer.Installer$ShortcutType.DESKTOP != null
    //#presumption(com.dmdirc.installer.LinuxInstaller$1__static_init): com.dmdirc.installer.Installer$ShortcutType.MENU != null
    //#presumption(com.dmdirc.installer.LinuxInstaller$1__static_init): com.dmdirc.installer.Installer$ShortcutType.PROTOCOL != null
    //#presumption(com.dmdirc.installer.LinuxInstaller$1__static_init): com.dmdirc.installer.Installer$ShortcutType.QUICKLAUNCH != null
    //#presumption(com.dmdirc.installer.LinuxInstaller$1__static_init): com.dmdirc.installer.Installer$ShortcutType.UNINSTALLER != null
    //#presumption(com.dmdirc.installer.LinuxInstaller$1__static_init): com.dmdirc.installer.Installer$ShortcutType:values(...).length@75 >= 1
    //#presumption(com.dmdirc.installer.LinuxInstaller$1__static_init): com.dmdirc.installer.Installer_ShortcutType:ordinal(...)@75 >= 0
    //#presumption(com.dmdirc.installer.LinuxInstaller$1__static_init): com.dmdirc.installer.Installer_ShortcutType:ordinal(...)@75 >= 0
    //#presumption(com.dmdirc.installer.LinuxInstaller$1__static_init): com.dmdirc.installer.Installer_ShortcutType:ordinal(...)@75 >= 0
    //#presumption(com.dmdirc.installer.LinuxInstaller$1__static_init): com.dmdirc.installer.Installer_ShortcutType:ordinal(...)@75 >= 0
    //#presumption(com.dmdirc.installer.LinuxInstaller$1__static_init): com.dmdirc.installer.Installer_ShortcutType:ordinal(...)@75 >= 0
    //#presumption(com.dmdirc.installer.LinuxInstaller$1__static_init): com.dmdirc.installer.Installer_ShortcutType:ordinal(...)@75 < com.dmdirc.installer.Installer$ShortcutType:values(...).length@75
    //#presumption(com.dmdirc.installer.LinuxInstaller$1__static_init): com.dmdirc.installer.Installer_ShortcutType:ordinal(...)@75 < com.dmdirc.installer.Installer$ShortcutType:values(...).length@75
    //#presumption(com.dmdirc.installer.LinuxInstaller$1__static_init): com.dmdirc.installer.Installer_ShortcutType:ordinal(...)@75 < com.dmdirc.installer.Installer$ShortcutType:values(...).length@75
    //#presumption(com.dmdirc.installer.LinuxInstaller$1__static_init): com.dmdirc.installer.Installer_ShortcutType:ordinal(...)@75 < com.dmdirc.installer.Installer$ShortcutType:values(...).length@75
    //#presumption(com.dmdirc.installer.LinuxInstaller$1__static_init): com.dmdirc.installer.Installer_ShortcutType:ordinal(...)@75 < com.dmdirc.installer.Installer$ShortcutType:values(...).length@75
    //#presumption(com.dmdirc.installer.LinuxInstaller$1__static_init): com.dmdirc.installer.Installer_ShortcutType:values(...)@75 != null
    //#post(com.dmdirc.installer.LinuxInstaller$1__static_init): $SwitchMap$com$dmdirc$installer$Installer$ShortcutType == &new int[](LinuxInstaller$1__static_init#1)
    //#post(com.dmdirc.installer.LinuxInstaller$1__static_init): __Descendant_Table[com/dmdirc/installer/LinuxInstaller$1] == &__Dispatch_Table
    //#post(com.dmdirc.installer.LinuxInstaller$1__static_init): new int[](LinuxInstaller$1__static_init#1) num objects == 1
    //#post(com.dmdirc.installer.LinuxInstaller$1__static_init): $SwitchMap$com$dmdirc$installer$Installer$ShortcutType.length >= 1
    //#post(com.dmdirc.installer.LinuxInstaller$1__static_init): $SwitchMap$com$dmdirc$installer$Installer$ShortcutType[0..4_294_967_295] in {0..5}, if init'ed
    //#LinuxInstaller.java:75: end of method: com.dmdirc.installer.LinuxInstaller$1.com.dmdirc.installer.LinuxInstaller$1__static_init
    //#LinuxInstaller.java:75: method: bool com.dmdirc.installer.LinuxInstaller.supportsShortcut(Installer$ShortcutType)
    //#LinuxInstaller.java:75: Warning: method not available - call not analyzed
    //#    call on int com.dmdirc.installer.Installer$ShortcutType:ordinal()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.installer.LinuxInstaller
    //#    method: bool supportsShortcut(Installer$ShortcutType)
    //#    unanalyzed callee: int com.dmdirc.installer.Installer$ShortcutType:ordinal()
    //#input(bool supportsShortcut(Installer$ShortcutType)): com.dmdirc.installer.LinuxInstaller$1__static_init.new int[](LinuxInstaller$1__static_init#1).length
    //#input(bool supportsShortcut(Installer$ShortcutType)): com.dmdirc.installer.LinuxInstaller$1__static_init.new int[](LinuxInstaller$1__static_init#1)[0..4_294_967_295]
    //#input(bool supportsShortcut(Installer$ShortcutType)): com/dmdirc/installer/LinuxInstaller$1.$SwitchMap$com$dmdirc$installer$Installer$ShortcutType
    //#input(bool supportsShortcut(Installer$ShortcutType)): com/dmdirc/installer/cliparser/CLIParam.__Descendant_Table[com/dmdirc/installer/cliparser/BooleanParam]
    //#input(bool supportsShortcut(Installer$ShortcutType)): com/dmdirc/installer/cliparser/CLIParam.__Descendant_Table[com/dmdirc/installer/cliparser/CLIParam]
    //#input(bool supportsShortcut(Installer$ShortcutType)): com/dmdirc/installer/cliparser/CLIParam.__Descendant_Table[com/dmdirc/installer/cliparser/IntegerParam]
    //#input(bool supportsShortcut(Installer$ShortcutType)): com/dmdirc/installer/cliparser/CLIParam.__Descendant_Table[com/dmdirc/installer/cliparser/StringParam]
    //#input(bool supportsShortcut(Installer$ShortcutType)): com/dmdirc/installer/cliparser/CLIParam.__Descendant_Table[others]
    //#input(bool supportsShortcut(Installer$ShortcutType)): com/dmdirc/installer/cliparser/CLIParser.__Class_Obj.__Lock
    //#input(bool supportsShortcut(Installer$ShortcutType)): com/dmdirc/installer/cliparser/CLIParser.__Descendant_Table[com/dmdirc/installer/cliparser/CLIParser]
    //#input(bool supportsShortcut(Installer$ShortcutType)): com/dmdirc/installer/cliparser/CLIParser.__Descendant_Table[others]
    //#input(bool supportsShortcut(Installer$ShortcutType)): com/dmdirc/installer/cliparser/CLIParser.__Dispatch_Table.getParamNumber(Ljava/lang/String;)I
    //#input(bool supportsShortcut(Installer$ShortcutType)): com/dmdirc/installer/cliparser/CLIParser.me
    //#input(bool supportsShortcut(Installer$ShortcutType)): com/dmdirc/installer/cliparser/CLIParser.me.__Tag
    //#input(bool supportsShortcut(Installer$ShortcutType)): com/dmdirc/installer/cliparser/CLIParser.me.params
    //#input(bool supportsShortcut(Installer$ShortcutType)): shortcutType
    //#input(bool supportsShortcut(Installer$ShortcutType)): this
    //#output(bool supportsShortcut(Installer$ShortcutType)): com/dmdirc/installer/cliparser/CLIParser.me
    //#output(bool supportsShortcut(Installer$ShortcutType)): new ArrayList(CLIParser#2) num objects
    //#output(bool supportsShortcut(Installer$ShortcutType)): new ArrayList(CLIParser#3) num objects
    //#output(bool supportsShortcut(Installer$ShortcutType)): new CLIParser(getCLIParser#1) num objects
    //#output(bool supportsShortcut(Installer$ShortcutType)): new CLIParser(getCLIParser#1).__Tag
    //#output(bool supportsShortcut(Installer$ShortcutType)): new CLIParser(getCLIParser#1).helpParam
    //#output(bool supportsShortcut(Installer$ShortcutType)): new CLIParser(getCLIParser#1).paramList
    //#output(bool supportsShortcut(Installer$ShortcutType)): new CLIParser(getCLIParser#1).params
    //#output(bool supportsShortcut(Installer$ShortcutType)): new CLIParser(getCLIParser#1).redundant
    //#output(bool supportsShortcut(Installer$ShortcutType)): new Hashtable(CLIParser#1) num objects
    //#output(bool supportsShortcut(Installer$ShortcutType)): return_value
    //#new obj(bool supportsShortcut(Installer$ShortcutType)): new ArrayList(CLIParser#2)
    //#new obj(bool supportsShortcut(Installer$ShortcutType)): new ArrayList(CLIParser#3)
    //#new obj(bool supportsShortcut(Installer$ShortcutType)): new CLIParser(getCLIParser#1)
    //#new obj(bool supportsShortcut(Installer$ShortcutType)): new Hashtable(CLIParser#1)
    //#pre[5] (bool supportsShortcut(Installer$ShortcutType)): shortcutType != null
    //#pre[1] (bool supportsShortcut(Installer$ShortcutType)): (soft) init'ed(com.dmdirc.installer.LinuxInstaller$1__static_init.new int[](LinuxInstaller$1__static_init#1)[0..4_294_967_295])
    //#pre[4] (bool supportsShortcut(Installer$ShortcutType)): (soft) init'ed(com/dmdirc/installer/cliparser/CLIParser.me)
    //#presumption(bool supportsShortcut(Installer$ShortcutType)): com.dmdirc.installer.Installer$ShortcutType:values(...).length >= 1
    //#presumption(bool supportsShortcut(Installer$ShortcutType)): com.dmdirc.installer.Installer$ShortcutType:values(...).length - com.dmdirc.installer.Installer_ShortcutType:ordinal(...)@75 in range
    //#presumption(bool supportsShortcut(Installer$ShortcutType)): com.dmdirc.installer.Installer_ShortcutType:ordinal(...)@75 < com.dmdirc.installer.Installer$ShortcutType:values(...).length
    //#presumption(bool supportsShortcut(Installer$ShortcutType)): com.dmdirc.installer.Installer_ShortcutType:ordinal(...)@75 >= 0
    //#post(bool supportsShortcut(Installer$ShortcutType)): com/dmdirc/installer/cliparser/CLIParser.me == One-of{old com/dmdirc/installer/cliparser/CLIParser.me, &new CLIParser(getCLIParser#1)}
    //#post(bool supportsShortcut(Installer$ShortcutType)): init'ed(com/dmdirc/installer/cliparser/CLIParser.me)
    //#post(bool supportsShortcut(Installer$ShortcutType)): init'ed(return_value)
    //#post(bool supportsShortcut(Installer$ShortcutType)): new ArrayList(CLIParser#2) num objects <= 1
    //#post(bool supportsShortcut(Installer$ShortcutType)): new ArrayList(CLIParser#3) num objects <= 1
    //#post(bool supportsShortcut(Installer$ShortcutType)): new CLIParser(getCLIParser#1) num objects <= 1
    //#post(bool supportsShortcut(Installer$ShortcutType)): init'ed(new CLIParser(getCLIParser#1).__Tag)
    //#post(bool supportsShortcut(Installer$ShortcutType)): init'ed(new CLIParser(getCLIParser#1).helpParam)
    //#post(bool supportsShortcut(Installer$ShortcutType)): init'ed(new CLIParser(getCLIParser#1).paramList)
    //#post(bool supportsShortcut(Installer$ShortcutType)): init'ed(new CLIParser(getCLIParser#1).params)
    //#post(bool supportsShortcut(Installer$ShortcutType)): init'ed(new CLIParser(getCLIParser#1).redundant)
    //#post(bool supportsShortcut(Installer$ShortcutType)): new Hashtable(CLIParser#1) num objects <= 1
    //#unanalyzed(bool supportsShortcut(Installer$ShortcutType)): Effects-of-calling:java.util.Hashtable
    //#unanalyzed(bool supportsShortcut(Installer$ShortcutType)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(bool supportsShortcut(Installer$ShortcutType)): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(bool supportsShortcut(Installer$ShortcutType)): Effects-of-calling:java.util.Map:get
    //#test_vector(bool supportsShortcut(Installer$ShortcutType)): com.dmdirc.installer.LinuxInstaller$1__static_init.new int[](LinuxInstaller$1__static_init#1)[0..4_294_967_295]: {1}, {2}, {3..5}, {-2_147_483_648..0, 6..4_294_967_295}
			case QUICKLAUNCH:
				return false;
			case DESKTOP:
				// No desktop for root
				return !isRoot();
			case PROTOCOL:
			case UNINSTALLER:
			case MENU:
				// Both root and non-root have a menu, uninstaller, and protocol
				return true;
			default:
				// Anything else that gets added should be false until the relevent
				// code is added
				return false;
    //#LinuxInstaller.java:89: end of method: void com.dmdirc.installer.LinuxInstaller.com.dmdirc.installer.LinuxInstaller()
    //#LinuxInstaller.java:89: end of method: bool com.dmdirc.installer.LinuxInstaller.supportsShortcut(Installer$ShortcutType)
		}
	}

	/** {@inheritDoc} */
	@Override
	public void setupShortcut(final String location, final ShortcutType shortcutType) {
		if (!supportsShortcut(shortcutType)) {
    //#LinuxInstaller.java:96: method: void com.dmdirc.installer.LinuxInstaller.setupShortcut(String, Installer$ShortcutType)
    //#LinuxInstaller.java:96: Warning: suspicious precondition
    //#    The precondition for this.step.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.installer.LinuxInstaller
    //#    method: void setupShortcut(String, Installer$ShortcutType)
    //#    suspicious precondition index: [12]
    //#    Attribs:  Soft
    //#input(void setupShortcut(String, Installer$ShortcutType)): " - Error adding Protocol Handler: "._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): " - Error creating shortcut: "._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): " --set --type=bool .desktop.gnome.url-handlers.irc.enabled true"._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): " --set --type=bool .desktop.gnome.url-handlers.irc.need-terminal false"._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): " --set --type=string .desktop.gnome.url-handlers.irc.command "\""._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): "" ]; then"._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): ""._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): "${HOME}..kde.share.services."._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): "${TOOL} --config-source=`${TOOL} --get-default-source`"._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): "${TOOL}"._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): "&#09;"._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): "&#09;echo "[Protocol]" > "._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): "&#09;echo "deleting=false" >> "._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): "&#09;echo "exec=""._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): "&#09;echo "helper=true" >> "._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): "&#09;echo "input=none" >> "._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): "&#09;echo "listing=false" >> "._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): "&#09;echo "makedir=false" >> "._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): "&#09;echo "output=none" >> "._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): "&#09;echo "protocol=irc" >> "._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): "&#09;echo "reading=false" >> "._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): "&#09;echo "writing=false" >> "._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): "..local.share.applications.DMDirc.desktop"._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): "..uninstall.conf"._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): ".DMDirc.sh" -e -c %u" >> "._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): ".DMDirc.sh"._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): ".DMDirc.sh\" -e -c %s""._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): ".Desktop.DMDirc.desktop"._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): ".icon.svg"._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): ".protocolHandlers.sh"._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): ".uninstall.sh"._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): ".usr.share.applications.DMDirc.desktop"._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): ".usr.share.services."._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): "0"._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): "1"._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): "Exec="._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): "INSTALLED_AS_ROOT="._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): "INSTALL_LOCATION="._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): "Icon="._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): "if [ -e ""._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): "irc.protocol"._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): __Descendant_Table[com/dmdirc/installer/LinuxInstaller]
    //#input(void setupShortcut(String, Installer$ShortcutType)): __Descendant_Table[others]
    //#input(void setupShortcut(String, Installer$ShortcutType)): __Dispatch_Table.supportsShortcut(Lcom/dmdirc/installer/Installer$ShortcutType;)Z
    //#input(void setupShortcut(String, Installer$ShortcutType)): com.dmdirc.installer.LinuxInstaller$1__static_init.new int[](LinuxInstaller$1__static_init#1).length
    //#input(void setupShortcut(String, Installer$ShortcutType)): com.dmdirc.installer.LinuxInstaller$1__static_init.new int[](LinuxInstaller$1__static_init#1)[0..4_294_967_295]
    //#input(void setupShortcut(String, Installer$ShortcutType)): com/dmdirc/installer/LinuxInstaller$1.$SwitchMap$com$dmdirc$installer$Installer$ShortcutType
    //#input(void setupShortcut(String, Installer$ShortcutType)): com/dmdirc/installer/TextStep.__Descendant_Table[com/dmdirc/installer/TextStep]
    //#input(void setupShortcut(String, Installer$ShortcutType)): com/dmdirc/installer/TextStep.__Descendant_Table[com/dmdirc/installer/ui/StepConfirm]
    //#input(void setupShortcut(String, Installer$ShortcutType)): com/dmdirc/installer/TextStep.__Descendant_Table[com/dmdirc/installer/ui/StepInstall]
    //#input(void setupShortcut(String, Installer$ShortcutType)): com/dmdirc/installer/TextStep.__Descendant_Table[others]
    //#input(void setupShortcut(String, Installer$ShortcutType)): com/dmdirc/installer/TextStep.__Dispatch_Table.addText(Ljava/lang/String;)V
    //#input(void setupShortcut(String, Installer$ShortcutType)): com/dmdirc/installer/cliparser/CLIParam.__Descendant_Table[com/dmdirc/installer/cliparser/BooleanParam]
    //#input(void setupShortcut(String, Installer$ShortcutType)): com/dmdirc/installer/cliparser/CLIParam.__Descendant_Table[com/dmdirc/installer/cliparser/CLIParam]
    //#input(void setupShortcut(String, Installer$ShortcutType)): com/dmdirc/installer/cliparser/CLIParam.__Descendant_Table[com/dmdirc/installer/cliparser/IntegerParam]
    //#input(void setupShortcut(String, Installer$ShortcutType)): com/dmdirc/installer/cliparser/CLIParam.__Descendant_Table[com/dmdirc/installer/cliparser/StringParam]
    //#input(void setupShortcut(String, Installer$ShortcutType)): com/dmdirc/installer/cliparser/CLIParam.__Descendant_Table[others]
    //#input(void setupShortcut(String, Installer$ShortcutType)): com/dmdirc/installer/cliparser/CLIParser.__Class_Obj.__Lock
    //#input(void setupShortcut(String, Installer$ShortcutType)): com/dmdirc/installer/cliparser/CLIParser.__Descendant_Table[com/dmdirc/installer/cliparser/CLIParser]
    //#input(void setupShortcut(String, Installer$ShortcutType)): com/dmdirc/installer/cliparser/CLIParser.__Descendant_Table[others]
    //#input(void setupShortcut(String, Installer$ShortcutType)): com/dmdirc/installer/cliparser/CLIParser.__Dispatch_Table.getParamNumber(Ljava/lang/String;)I
    //#input(void setupShortcut(String, Installer$ShortcutType)): com/dmdirc/installer/cliparser/CLIParser.me
    //#input(void setupShortcut(String, Installer$ShortcutType)): com/dmdirc/installer/cliparser/CLIParser.me.__Tag
    //#input(void setupShortcut(String, Installer$ShortcutType)): com/dmdirc/installer/cliparser/CLIParser.me.params
    //#input(void setupShortcut(String, Installer$ShortcutType)): com/dmdirc/installer/ui/StepConfirm.__Dispatch_Table.addText(Ljava/lang/String;)V
    //#input(void setupShortcut(String, Installer$ShortcutType)): com/dmdirc/installer/ui/StepInstall.__Dispatch_Table.addText(Ljava/lang/String;)V
    //#input(void setupShortcut(String, Installer$ShortcutType)): location
    //#input(void setupShortcut(String, Installer$ShortcutType)): location._tainted
    //#input(void setupShortcut(String, Installer$ShortcutType)): shortcutType
    //#input(void setupShortcut(String, Installer$ShortcutType)): this
    //#input(void setupShortcut(String, Installer$ShortcutType)): this.__Tag
    //#input(void setupShortcut(String, Installer$ShortcutType)): this.step
    //#input(void setupShortcut(String, Installer$ShortcutType)): this.step.__Tag
    //#output(void setupShortcut(String, Installer$ShortcutType)): com/dmdirc/installer/cliparser/CLIParser.me
    //#output(void setupShortcut(String, Installer$ShortcutType)): new ArrayList(CLIParser#2) num objects
    //#output(void setupShortcut(String, Installer$ShortcutType)): new ArrayList(CLIParser#3) num objects
    //#output(void setupShortcut(String, Installer$ShortcutType)): new CLIParser(getCLIParser#1) num objects
    //#output(void setupShortcut(String, Installer$ShortcutType)): new CLIParser(getCLIParser#1).__Tag
    //#output(void setupShortcut(String, Installer$ShortcutType)): new CLIParser(getCLIParser#1).helpParam
    //#output(void setupShortcut(String, Installer$ShortcutType)): new CLIParser(getCLIParser#1).paramList
    //#output(void setupShortcut(String, Installer$ShortcutType)): new CLIParser(getCLIParser#1).params
    //#output(void setupShortcut(String, Installer$ShortcutType)): new CLIParser(getCLIParser#1).redundant
    //#output(void setupShortcut(String, Installer$ShortcutType)): new Hashtable(CLIParser#1) num objects
    //#new obj(void setupShortcut(String, Installer$ShortcutType)): new ArrayList(CLIParser#2)
    //#new obj(void setupShortcut(String, Installer$ShortcutType)): new ArrayList(CLIParser#3)
    //#new obj(void setupShortcut(String, Installer$ShortcutType)): new CLIParser(getCLIParser#1)
    //#new obj(void setupShortcut(String, Installer$ShortcutType)): new Hashtable(CLIParser#1)
    //#pre[9] (void setupShortcut(String, Installer$ShortcutType)): this.__Tag == com/dmdirc/installer/LinuxInstaller
    //#pre[1] (void setupShortcut(String, Installer$ShortcutType)): (soft) init'ed(com.dmdirc.installer.LinuxInstaller$1__static_init.new int[](LinuxInstaller$1__static_init#1)[0..4_294_967_295])
    //#pre[6] (void setupShortcut(String, Installer$ShortcutType)): (soft) init'ed(com/dmdirc/installer/cliparser/CLIParser.me)
    //#pre[7] (void setupShortcut(String, Installer$ShortcutType)): (soft) shortcutType != null
    //#pre[10] (void setupShortcut(String, Installer$ShortcutType)): (soft) this.step != null
    //#pre[12] (void setupShortcut(String, Installer$ShortcutType)): (soft) this.step.__Tag in {com/dmdirc/installer/TextStep, com/dmdirc/installer/ui/StepConfirm, com/dmdirc/installer/ui/StepInstall}
    //#presumption(void setupShortcut(String, Installer$ShortcutType)): com.dmdirc.installer.Installer$ShortcutType:values(...).length >= 1
    //#presumption(void setupShortcut(String, Installer$ShortcutType)): com.dmdirc.installer.Installer$ShortcutType:values(...).length - com.dmdirc.installer.Installer_ShortcutType:ordinal(...)@106 in range
    //#presumption(void setupShortcut(String, Installer$ShortcutType)): com.dmdirc.installer.Installer$ShortcutType:values(...).length - com.dmdirc.installer.Installer_ShortcutType:ordinal(...)@106 in range
    //#presumption(void setupShortcut(String, Installer$ShortcutType)): com.dmdirc.installer.Installer_ShortcutType:ordinal(...)@106 < com.dmdirc.installer.Installer$ShortcutType:values(...).length
    //#presumption(void setupShortcut(String, Installer$ShortcutType)): com.dmdirc.installer.Installer_ShortcutType:ordinal(...)@106 >= 0
    //#presumption(void setupShortcut(String, Installer$ShortcutType)): java.io.File:getParentFile(...)@187 != null
    //#presumption(void setupShortcut(String, Installer$ShortcutType)): java.io.File:getParentFile(...)@188 != null
    //#presumption(void setupShortcut(String, Installer$ShortcutType)): java.lang.Runtime:exec(...)@168 != null
    //#presumption(void setupShortcut(String, Installer$ShortcutType)): java.lang.Runtime:getRuntime(...)@168 != null
    //#post(void setupShortcut(String, Installer$ShortcutType)): com/dmdirc/installer/cliparser/CLIParser.me == One-of{old com/dmdirc/installer/cliparser/CLIParser.me, &new CLIParser(getCLIParser#1)}
    //#post(void setupShortcut(String, Installer$ShortcutType)): possibly_updated(new ArrayList(CLIParser#2) num objects)
    //#post(void setupShortcut(String, Installer$ShortcutType)): new ArrayList(CLIParser#2) num objects <= 1
    //#post(void setupShortcut(String, Installer$ShortcutType)): new ArrayList(CLIParser#3) num objects == new ArrayList(CLIParser#2) num objects
    //#post(void setupShortcut(String, Installer$ShortcutType)): new CLIParser(getCLIParser#1) num objects == new ArrayList(CLIParser#2) num objects
    //#post(void setupShortcut(String, Installer$ShortcutType)): new Hashtable(CLIParser#1) num objects == new ArrayList(CLIParser#2) num objects
    //#post(void setupShortcut(String, Installer$ShortcutType)): possibly_updated(new ArrayList(CLIParser#3) num objects)
    //#post(void setupShortcut(String, Installer$ShortcutType)): new ArrayList(CLIParser#3) num objects <= 1
    //#post(void setupShortcut(String, Installer$ShortcutType)): possibly_updated(new CLIParser(getCLIParser#1) num objects)
    //#post(void setupShortcut(String, Installer$ShortcutType)): new CLIParser(getCLIParser#1) num objects <= 1
    //#post(void setupShortcut(String, Installer$ShortcutType)): possibly_updated(new CLIParser(getCLIParser#1).__Tag)
    //#post(void setupShortcut(String, Installer$ShortcutType)): init'ed(new CLIParser(getCLIParser#1).__Tag)
    //#post(void setupShortcut(String, Installer$ShortcutType)): possibly_updated(new CLIParser(getCLIParser#1).helpParam)
    //#post(void setupShortcut(String, Installer$ShortcutType)): init'ed(new CLIParser(getCLIParser#1).helpParam)
    //#post(void setupShortcut(String, Installer$ShortcutType)): possibly_updated(new CLIParser(getCLIParser#1).paramList)
    //#post(void setupShortcut(String, Installer$ShortcutType)): init'ed(new CLIParser(getCLIParser#1).paramList)
    //#post(void setupShortcut(String, Installer$ShortcutType)): possibly_updated(new CLIParser(getCLIParser#1).params)
    //#post(void setupShortcut(String, Installer$ShortcutType)): init'ed(new CLIParser(getCLIParser#1).params)
    //#post(void setupShortcut(String, Installer$ShortcutType)): possibly_updated(new CLIParser(getCLIParser#1).redundant)
    //#post(void setupShortcut(String, Installer$ShortcutType)): init'ed(new CLIParser(getCLIParser#1).redundant)
    //#post(void setupShortcut(String, Installer$ShortcutType)): possibly_updated(new Hashtable(CLIParser#1) num objects)
    //#post(void setupShortcut(String, Installer$ShortcutType)): new Hashtable(CLIParser#1) num objects <= 1
    //#unanalyzed(void setupShortcut(String, Installer$ShortcutType)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void setupShortcut(String, Installer$ShortcutType)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void setupShortcut(String, Installer$ShortcutType)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void setupShortcut(String, Installer$ShortcutType)): Effects-of-calling:isRoot
    //#unanalyzed(void setupShortcut(String, Installer$ShortcutType)): Effects-of-calling:javax.swing.SwingUtilities:invokeLater
    //#unanalyzed(void setupShortcut(String, Installer$ShortcutType)): Effects-of-calling:com.dmdirc.installer.Installer$ShortcutType:ordinal
    //#unanalyzed(void setupShortcut(String, Installer$ShortcutType)): Effects-of-calling:java.io.PrintWriter:println
    //#unanalyzed(void setupShortcut(String, Installer$ShortcutType)): Effects-of-calling:java.lang.Thread
    //#unanalyzed(void setupShortcut(String, Installer$ShortcutType)): Effects-of-calling:java.util.Hashtable
    //#unanalyzed(void setupShortcut(String, Installer$ShortcutType)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void setupShortcut(String, Installer$ShortcutType)): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void setupShortcut(String, Installer$ShortcutType)): Effects-of-calling:java.util.Map:get
    //#test_vector(void setupShortcut(String, Installer$ShortcutType)): com.dmdirc.installer.LinuxInstaller$1__static_init.new int[](LinuxInstaller$1__static_init#1)[0..4_294_967_295]: {2}, {3}, {4}, {5}, {-2_147_483_648..1, 6..4_294_967_295}
    //#test_vector(void setupShortcut(String, Installer$ShortcutType)): java.io.File:exists(...)@187: {1}, {0}
			step.addText(" - Error creating shortcut. Not applicable to this Operating System");
			return;
		}

		PrintWriter writer = null;
		try {
			String filename = "";
    //#LinuxInstaller.java:103: Warning: unused assignment
    //#    Unused assignment into filename
    //#    severity: LOW
    //#    class: com.dmdirc.installer.LinuxInstaller
    //#    method: void setupShortcut(String, Installer$ShortcutType)
			String command = "";
    //#LinuxInstaller.java:104: Warning: unused assignment
    //#    Unused assignment into command
    //#    severity: LOW
    //#    class: com.dmdirc.installer.LinuxInstaller
    //#    method: void setupShortcut(String, Installer$ShortcutType)

			switch (shortcutType) {
    //#LinuxInstaller.java:106: Warning: method not available - call not analyzed
    //#    call on int com.dmdirc.installer.Installer$ShortcutType:ordinal()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.installer.LinuxInstaller
    //#    method: void setupShortcut(String, Installer$ShortcutType)
    //#    unanalyzed callee: int com.dmdirc.installer.Installer$ShortcutType:ordinal()
				case DESKTOP:
					filename = System.getProperty("user.home")+"/Desktop/DMDirc.desktop";
					break;

				case MENU:
					if (isRoot()) {
						filename = "/usr/share/applications/DMDirc.desktop";
					} else {
						filename = System.getProperty("user.home")+"/.local/share/applications/DMDirc.desktop";
					}
					break;

				case UNINSTALLER:
					// Write config for uninstaller
					writer = new PrintWriter(location+"/.uninstall.conf");
					writer.println("#!/bin/sh");
					writer.println("# DMDirc Uninstaller Settings");
					writer.println("INSTALLED_AS_ROOT="+(isRoot() ? "1" : "0"));
					writer.println("INSTALL_LOCATION="+location);
					
					// Make sure uninstaller is executeable
					new File(location+"/uninstall.sh").setExecutable(true);
					return;

				case PROTOCOL:
					if (isRoot()) {
						command = "${TOOL} --config-source=`${TOOL} --get-default-source`";
						filename = "/usr/share/services/";
					} else {
						command = "${TOOL}";
						filename = "${HOME}/.kde/share/services/";
					}

					writer = new PrintWriter(location+"/protocolHandlers.sh");
					writer.println("#!/bin/sh");
					writer.println("TOOL=`which gconftool-2`");
					writer.println("if [ \"${TOOL}\" != \"\" ]; then");
					writer.println("\t"+command+" --set --type=bool /desktop/gnome/url-handlers/irc/enabled true");
					writer.println("\t"+command+" --set --type=string /desktop/gnome/url-handlers/irc/command \"\\\""+location+"/DMDirc.sh\\\" -e -c %s\"");
					writer.println("\t"+command+" --set --type=bool /desktop/gnome/url-handlers/irc/need-terminal false");
					writer.println("fi");
					writer.println("if [ -e \""+filename+"\" ]; then");
					writer.println("\techo \"[Protocol]\" > "+filename+"irc.protocol");
					writer.println("\techo \"exec=\""+location+"/DMDirc.sh\" -e -c %u\" >> "+filename+"irc.protocol");
					writer.println("\techo \"protocol=irc\" >> "+filename+"irc.protocol");
					writer.println("\techo \"input=none\" >> "+filename+"irc.protocol");
					writer.println("\techo \"output=none\" >> "+filename+"irc.protocol");
					writer.println("\techo \"helper=true\" >> "+filename+"irc.protocol");
					writer.println("\techo \"listing=false\" >> "+filename+"irc.protocol");
					writer.println("\techo \"reading=false\" >> "+filename+"irc.protocol");
					writer.println("\techo \"writing=false\" >> "+filename+"irc.protocol");
					writer.println("\techo \"makedir=false\" >> "+filename+"irc.protocol");
					writer.println("\techo \"deleting=false\" >> "+filename+"irc.protocol");
					writer.println("fi");
					writer.println("exit 0;");
					writer.close();

					final File protocolFile = new File(location+"/protocolHandlers.sh");
					protocolFile.setExecutable(true);

					try {
						final Process gconfProcess = Runtime.getRuntime().exec(new String[]{"/bin/sh", location+"/protocolHandlers.sh"});
						new StreamReader(gconfProcess.getInputStream()).start();
    //#LinuxInstaller.java:169: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.installer.StreamReader:start()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.installer.LinuxInstaller
    //#    method: void setupShortcut(String, Installer$ShortcutType)
    //#    unanalyzed callee: void com.dmdirc.installer.StreamReader:start()
						new StreamReader(gconfProcess.getErrorStream()).start();
    //#LinuxInstaller.java:170: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.installer.StreamReader:start()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.installer.LinuxInstaller
    //#    method: void setupShortcut(String, Installer$ShortcutType)
    //#    unanalyzed callee: void com.dmdirc.installer.StreamReader:start()
						try {
							gconfProcess.waitFor();
						} catch (InterruptedException e) { }
						protocolFile.delete();
					} catch (SecurityException e) {
						step.addText(" - Error adding Protocol Handler: "+e.getMessage());
					} catch (IOException e) {
						step.addText(" - Error adding Protocol Handler: "+e.getMessage());
					}
					return;

				default:
					step.addText(" - Error creating shortcut. Not applicable to this Operating System");
					return;
			}
			File temp = new File(filename);
			if (!temp.getParentFile().exists()) {
				temp.getParentFile().mkdir();
			}
			writer = new PrintWriter(filename);
			writeFile(writer, location);
		} catch (IOException e) {
			step.addText(" - Error creating shortcut: "+e.toString());
		} catch (SecurityException e) {
			step.addText(" - Error creating shortcut: "+e.toString());
		} finally {
			if (writer != null) {
				writer.close();
			}
		}
	}
    //#LinuxInstaller.java:201: end of method: void com.dmdirc.installer.LinuxInstaller.setupShortcut(String, Installer$ShortcutType)

	/**
	 * Write the .desktop file
	 *
	 * @param writer PrintWriter to write to
	 * @param location Location of installed files
	 * @throws IOException if an error occurs when writing
	 */
	private void writeFile(final PrintWriter writer, final String location) throws IOException {
		writer.println("[Desktop Entry]");
    //#LinuxInstaller.java:211: method: void com.dmdirc.installer.LinuxInstaller.writeFile(PrintWriter, String)
    //#input(void writeFile(PrintWriter, String)): ".DMDirc.sh"._tainted
    //#input(void writeFile(PrintWriter, String)): ".icon.svg"._tainted
    //#input(void writeFile(PrintWriter, String)): "Exec="._tainted
    //#input(void writeFile(PrintWriter, String)): "Icon="._tainted
    //#input(void writeFile(PrintWriter, String)): com/dmdirc/installer/cliparser/CLIParam.__Descendant_Table[com/dmdirc/installer/cliparser/BooleanParam]
    //#input(void writeFile(PrintWriter, String)): com/dmdirc/installer/cliparser/CLIParam.__Descendant_Table[com/dmdirc/installer/cliparser/CLIParam]
    //#input(void writeFile(PrintWriter, String)): com/dmdirc/installer/cliparser/CLIParam.__Descendant_Table[com/dmdirc/installer/cliparser/IntegerParam]
    //#input(void writeFile(PrintWriter, String)): com/dmdirc/installer/cliparser/CLIParam.__Descendant_Table[com/dmdirc/installer/cliparser/StringParam]
    //#input(void writeFile(PrintWriter, String)): com/dmdirc/installer/cliparser/CLIParam.__Descendant_Table[others]
    //#input(void writeFile(PrintWriter, String)): com/dmdirc/installer/cliparser/CLIParser.__Class_Obj.__Lock
    //#input(void writeFile(PrintWriter, String)): com/dmdirc/installer/cliparser/CLIParser.__Descendant_Table[com/dmdirc/installer/cliparser/CLIParser]
    //#input(void writeFile(PrintWriter, String)): com/dmdirc/installer/cliparser/CLIParser.__Descendant_Table[others]
    //#input(void writeFile(PrintWriter, String)): com/dmdirc/installer/cliparser/CLIParser.__Dispatch_Table.getParamNumber(Ljava/lang/String;)I
    //#input(void writeFile(PrintWriter, String)): com/dmdirc/installer/cliparser/CLIParser.me
    //#input(void writeFile(PrintWriter, String)): com/dmdirc/installer/cliparser/CLIParser.me.__Tag
    //#input(void writeFile(PrintWriter, String)): com/dmdirc/installer/cliparser/CLIParser.me.params
    //#input(void writeFile(PrintWriter, String)): location
    //#input(void writeFile(PrintWriter, String)): location._tainted
    //#input(void writeFile(PrintWriter, String)): this
    //#input(void writeFile(PrintWriter, String)): writer
    //#output(void writeFile(PrintWriter, String)): com/dmdirc/installer/cliparser/CLIParser.me
    //#output(void writeFile(PrintWriter, String)): new ArrayList(CLIParser#2) num objects
    //#output(void writeFile(PrintWriter, String)): new ArrayList(CLIParser#3) num objects
    //#output(void writeFile(PrintWriter, String)): new CLIParser(getCLIParser#1) num objects
    //#output(void writeFile(PrintWriter, String)): new CLIParser(getCLIParser#1).__Tag
    //#output(void writeFile(PrintWriter, String)): new CLIParser(getCLIParser#1).helpParam
    //#output(void writeFile(PrintWriter, String)): new CLIParser(getCLIParser#1).paramList
    //#output(void writeFile(PrintWriter, String)): new CLIParser(getCLIParser#1).params
    //#output(void writeFile(PrintWriter, String)): new CLIParser(getCLIParser#1).redundant
    //#output(void writeFile(PrintWriter, String)): new Hashtable(CLIParser#1) num objects
    //#new obj(void writeFile(PrintWriter, String)): new ArrayList(CLIParser#2)
    //#new obj(void writeFile(PrintWriter, String)): new ArrayList(CLIParser#3)
    //#new obj(void writeFile(PrintWriter, String)): new CLIParser(getCLIParser#1)
    //#new obj(void writeFile(PrintWriter, String)): new Hashtable(CLIParser#1)
    //#pre[5] (void writeFile(PrintWriter, String)): init'ed(com/dmdirc/installer/cliparser/CLIParser.me)
    //#pre[7] (void writeFile(PrintWriter, String)): writer != null
    //#post(void writeFile(PrintWriter, String)): com/dmdirc/installer/cliparser/CLIParser.me == One-of{old com/dmdirc/installer/cliparser/CLIParser.me, &new CLIParser(getCLIParser#1)}
    //#post(void writeFile(PrintWriter, String)): com/dmdirc/installer/cliparser/CLIParser.me != null
    //#post(void writeFile(PrintWriter, String)): new ArrayList(CLIParser#2) num objects <= 1
    //#post(void writeFile(PrintWriter, String)): new ArrayList(CLIParser#3) num objects == new ArrayList(CLIParser#2) num objects
    //#post(void writeFile(PrintWriter, String)): new CLIParser(getCLIParser#1) num objects == new ArrayList(CLIParser#2) num objects
    //#post(void writeFile(PrintWriter, String)): new Hashtable(CLIParser#1) num objects == new ArrayList(CLIParser#2) num objects
    //#post(void writeFile(PrintWriter, String)): new CLIParser(getCLIParser#1).__Tag == com/dmdirc/installer/cliparser/CLIParser
    //#post(void writeFile(PrintWriter, String)): new CLIParser(getCLIParser#1).helpParam == null
    //#post(void writeFile(PrintWriter, String)): new CLIParser(getCLIParser#1).paramList == &new ArrayList(CLIParser#2)
    //#post(void writeFile(PrintWriter, String)): new CLIParser(getCLIParser#1).params == &new Hashtable(CLIParser#1)
    //#post(void writeFile(PrintWriter, String)): new CLIParser(getCLIParser#1).redundant == &new ArrayList(CLIParser#3)
    //#unanalyzed(void writeFile(PrintWriter, String)): Effects-of-calling:java.util.Hashtable
    //#unanalyzed(void writeFile(PrintWriter, String)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void writeFile(PrintWriter, String)): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void writeFile(PrintWriter, String)): Effects-of-calling:java.util.Map:get
		writer.println("Categories=Network;IRCClient;");
		writer.println("Comment=DMDirc IRC Client");
		writer.println("Encoding=UTF-8");
//		writer.println("Exec=java -jar "+location+"/DMDirc.jar");
		writer.println("Exec="+location+"/DMDirc.sh");
		writer.println("GenericName=IRC Client");
		writer.println("Icon="+location+"/icon.svg");
		if (isRoot()) {
			writer.println("Name=DMDirc (Global)");
		} else {
			writer.println("Name=DMDirc");
		}
		writer.println("StartupNotify=true");
		writer.println("Terminal=false");
		writer.println("TerminalOptions=");
		writer.println("Type=Application");
	}
    //#LinuxInstaller.java:228: end of method: void com.dmdirc.installer.LinuxInstaller.writeFile(PrintWriter, String)

	/** {@inheritDoc} */
	@Override
	public void postInstall(final String location) {
		new File(location+"/DMDirc.sh").setExecutable(true, !isRoot());
    //#LinuxInstaller.java:233: method: void com.dmdirc.installer.LinuxInstaller.postInstall(String)
    //#input(void postInstall(String)): ".DMDirc.sh"._tainted
    //#input(void postInstall(String)): com/dmdirc/installer/cliparser/CLIParam.__Descendant_Table[com/dmdirc/installer/cliparser/BooleanParam]
    //#input(void postInstall(String)): com/dmdirc/installer/cliparser/CLIParam.__Descendant_Table[com/dmdirc/installer/cliparser/CLIParam]
    //#input(void postInstall(String)): com/dmdirc/installer/cliparser/CLIParam.__Descendant_Table[com/dmdirc/installer/cliparser/IntegerParam]
    //#input(void postInstall(String)): com/dmdirc/installer/cliparser/CLIParam.__Descendant_Table[com/dmdirc/installer/cliparser/StringParam]
    //#input(void postInstall(String)): com/dmdirc/installer/cliparser/CLIParam.__Descendant_Table[others]
    //#input(void postInstall(String)): com/dmdirc/installer/cliparser/CLIParser.__Class_Obj.__Lock
    //#input(void postInstall(String)): com/dmdirc/installer/cliparser/CLIParser.__Descendant_Table[com/dmdirc/installer/cliparser/CLIParser]
    //#input(void postInstall(String)): com/dmdirc/installer/cliparser/CLIParser.__Descendant_Table[others]
    //#input(void postInstall(String)): com/dmdirc/installer/cliparser/CLIParser.__Dispatch_Table.getParamNumber(Ljava/lang/String;)I
    //#input(void postInstall(String)): com/dmdirc/installer/cliparser/CLIParser.me
    //#input(void postInstall(String)): com/dmdirc/installer/cliparser/CLIParser.me.__Tag
    //#input(void postInstall(String)): com/dmdirc/installer/cliparser/CLIParser.me.params
    //#input(void postInstall(String)): location
    //#input(void postInstall(String)): location._tainted
    //#input(void postInstall(String)): this
    //#output(void postInstall(String)): com/dmdirc/installer/cliparser/CLIParser.me
    //#output(void postInstall(String)): new ArrayList(CLIParser#2) num objects
    //#output(void postInstall(String)): new ArrayList(CLIParser#3) num objects
    //#output(void postInstall(String)): new CLIParser(getCLIParser#1) num objects
    //#output(void postInstall(String)): new CLIParser(getCLIParser#1).__Tag
    //#output(void postInstall(String)): new CLIParser(getCLIParser#1).helpParam
    //#output(void postInstall(String)): new CLIParser(getCLIParser#1).paramList
    //#output(void postInstall(String)): new CLIParser(getCLIParser#1).params
    //#output(void postInstall(String)): new CLIParser(getCLIParser#1).redundant
    //#output(void postInstall(String)): new Hashtable(CLIParser#1) num objects
    //#new obj(void postInstall(String)): new ArrayList(CLIParser#2)
    //#new obj(void postInstall(String)): new ArrayList(CLIParser#3)
    //#new obj(void postInstall(String)): new CLIParser(getCLIParser#1)
    //#new obj(void postInstall(String)): new Hashtable(CLIParser#1)
    //#pre[5] (void postInstall(String)): init'ed(com/dmdirc/installer/cliparser/CLIParser.me)
    //#post(void postInstall(String)): com/dmdirc/installer/cliparser/CLIParser.me == One-of{old com/dmdirc/installer/cliparser/CLIParser.me, &new CLIParser(getCLIParser#1)}
    //#post(void postInstall(String)): com/dmdirc/installer/cliparser/CLIParser.me != null
    //#post(void postInstall(String)): new ArrayList(CLIParser#2) num objects <= 1
    //#post(void postInstall(String)): new ArrayList(CLIParser#3) num objects == new ArrayList(CLIParser#2) num objects
    //#post(void postInstall(String)): new CLIParser(getCLIParser#1) num objects == new ArrayList(CLIParser#2) num objects
    //#post(void postInstall(String)): new Hashtable(CLIParser#1) num objects == new ArrayList(CLIParser#2) num objects
    //#post(void postInstall(String)): new CLIParser(getCLIParser#1).__Tag == com/dmdirc/installer/cliparser/CLIParser
    //#post(void postInstall(String)): new CLIParser(getCLIParser#1).helpParam == null
    //#post(void postInstall(String)): new CLIParser(getCLIParser#1).paramList == &new ArrayList(CLIParser#2)
    //#post(void postInstall(String)): new CLIParser(getCLIParser#1).params == &new Hashtable(CLIParser#1)
    //#post(void postInstall(String)): new CLIParser(getCLIParser#1).redundant == &new ArrayList(CLIParser#3)
    //#unanalyzed(void postInstall(String)): Effects-of-calling:java.util.Hashtable
    //#unanalyzed(void postInstall(String)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void postInstall(String)): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void postInstall(String)): Effects-of-calling:java.util.Map:get
	}
    //#LinuxInstaller.java:234: end of method: void com.dmdirc.installer.LinuxInstaller.postInstall(String)
}    //#LinuxInstaller.java:: end of class: com.dmdirc.installer.LinuxInstaller$1
    //#output(com.dmdirc.installer.LinuxInstaller__static_init): __Descendant_Table[com/dmdirc/installer/LinuxInstaller]
    //#output(com.dmdirc.installer.LinuxInstaller__static_init): __Dispatch_Table.defaultInstallLocation()Ljava/lang/String;
    //#output(com.dmdirc.installer.LinuxInstaller__static_init): __Dispatch_Table.isRoot()Z
    //#output(com.dmdirc.installer.LinuxInstaller__static_init): __Dispatch_Table.postInstall(Ljava/lang/String;)V
    //#output(com.dmdirc.installer.LinuxInstaller__static_init): __Dispatch_Table.setupShortcut(Ljava/lang/String;Lcom/dmdirc/installer/Installer$ShortcutType;)V
    //#output(com.dmdirc.installer.LinuxInstaller__static_init): __Dispatch_Table.supportsShortcut(Lcom/dmdirc/installer/Installer$ShortcutType;)Z
    //#output(com.dmdirc.installer.LinuxInstaller__static_init): __Dispatch_Table.validFile(Ljava/lang/String;)Z
    //#output(com.dmdirc.installer.LinuxInstaller__static_init): __Dispatch_Table.writeFile(Ljava/io/PrintWriter;Ljava/lang/String;)V
    //#post(com.dmdirc.installer.LinuxInstaller__static_init): __Descendant_Table[com/dmdirc/installer/LinuxInstaller] == &__Dispatch_Table
    //#post(com.dmdirc.installer.LinuxInstaller__static_init): __Dispatch_Table.defaultInstallLocation()Ljava/lang/String; == &defaultInstallLocation
    //#post(com.dmdirc.installer.LinuxInstaller__static_init): __Dispatch_Table.isRoot()Z == &isRoot
    //#post(com.dmdirc.installer.LinuxInstaller__static_init): __Dispatch_Table.postInstall(Ljava/lang/String;)V == &postInstall
    //#post(com.dmdirc.installer.LinuxInstaller__static_init): __Dispatch_Table.setupShortcut(Ljava/lang/String;Lcom/dmdirc/installer/Installer$ShortcutType;)V == &setupShortcut
    //#post(com.dmdirc.installer.LinuxInstaller__static_init): __Dispatch_Table.supportsShortcut(Lcom/dmdirc/installer/Installer$ShortcutType;)Z == &supportsShortcut
    //#post(com.dmdirc.installer.LinuxInstaller__static_init): __Dispatch_Table.validFile(Ljava/lang/String;)Z == &validFile
    //#post(com.dmdirc.installer.LinuxInstaller__static_init): __Dispatch_Table.writeFile(Ljava/io/PrintWriter;Ljava/lang/String;)V == &writeFile
    //#LinuxInstaller.java:: end of method: com.dmdirc.installer.LinuxInstaller.com.dmdirc.installer.LinuxInstaller__static_init
    //#LinuxInstaller.java:: end of class: com.dmdirc.installer.LinuxInstaller
