X-Git-Url: http://git.phpeclipse.com

diff --git a/net.sourceforge.phpeclipse.externaltools/src/net/sourceforge/phpdt/externaltools/model/ToolUtil.java b/net.sourceforge.phpeclipse.externaltools/src/net/sourceforge/phpdt/externaltools/model/ToolUtil.java
index 13d90a6..88002f5 100644
--- a/net.sourceforge.phpeclipse.externaltools/src/net/sourceforge/phpdt/externaltools/model/ToolUtil.java
+++ b/net.sourceforge.phpeclipse.externaltools/src/net/sourceforge/phpdt/externaltools/model/ToolUtil.java
@@ -1,13 +1,13 @@
 package net.sourceforge.phpdt.externaltools.model;
 
 /**********************************************************************
-Copyright (c) 2002 IBM Corp. and others. All rights reserved.
-This file is made available under the terms of the Common Public License v1.0
-which accompanies this distribution, and is available at
-http://www.eclipse.org/legal/cpl-v10.html
-�
-Contributors:
-**********************************************************************/
+ Copyright (c) 2002 IBM Corp. and others. All rights reserved.
+ This file is made available under the terms of the Common Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/cpl-v10.html
+ �
+ Contributors:
+ **********************************************************************/
 
 import java.util.ArrayList;
 
@@ -30,16 +30,22 @@ public final class ToolUtil {
 	 * Argument parsing constants
 	 */
 	private static final char ARG_DELIMITER = ' '; //$NON-NLS-1$
+
 	private static final char ARG_DBL_QUOTE = '"'; //$NON-NLS-1$
-	
+
 	/**
 	 * Variable tag indentifiers
 	 */
 	private static final char VAR_TAG_START_CHAR1 = '$'; //$NON-NLS-1$
+
 	private static final char VAR_TAG_START_CHAR2 = '{'; //$NON-NLS-1$
+
 	private static final char VAR_TAG_END_CHAR1 = '}'; //$NON-NLS-1$
+
 	private static final String VAR_TAG_START = "${"; //$NON-NLS-1$
+
 	private static final String VAR_TAG_END = "}"; //$NON-NLS-1$
+
 	private static final String VAR_TAG_SEP = ":"; //$NON-NLS-1$
 
 	/**
@@ -50,27 +56,35 @@ public final class ToolUtil {
 	}
 
 	/**
-	 * Builds a variable tag that will be auto-expanded before
-	 * the tool is run.
+	 * Builds a variable tag that will be auto-expanded before the tool is run.
 	 * 
-	 * @param varName the name of a known variable (one of the VAR_* constants for instance)
-	 * @param varArgument an optional argument for the variable, <code>null</code> if none
+	 * @param varName
+	 *            the name of a known variable (one of the VAR_* constants for
+	 *            instance)
+	 * @param varArgument
+	 *            an optional argument for the variable, <code>null</code> if
+	 *            none
 	 */
 	public static String buildVariableTag(String varName, String varArgument) {
 		StringBuffer buf = new StringBuffer();
-		buildVariableTag(varName,varArgument, buf);
+		buildVariableTag(varName, varArgument, buf);
 		return buf.toString();
 	}
-	
+
 	/**
-	 * Builds a variable tag that will be auto-expanded before
-	 * the tool is run.
+	 * Builds a variable tag that will be auto-expanded before the tool is run.
 	 * 
-	 * @param varName the name of a known variable (one of the VAR_* constants for instance)
-	 * @param varArgument an optional argument for the variable, <code>null</code> if none
-	 * @param buffer the buffer to write the constructed variable tag
+	 * @param varName
+	 *            the name of a known variable (one of the VAR_* constants for
+	 *            instance)
+	 * @param varArgument
+	 *            an optional argument for the variable, <code>null</code> if
+	 *            none
+	 * @param buffer
+	 *            the buffer to write the constructed variable tag
 	 */
-	public static void buildVariableTag(String varName, String varArgument, StringBuffer buffer) {
+	public static void buildVariableTag(String varName, String varArgument,
+			StringBuffer buffer) {
 		buffer.append(VAR_TAG_START);
 		buffer.append(varName);
 		if (varArgument != null && varArgument.length() > 0) {
@@ -79,23 +93,27 @@ public final class ToolUtil {
 		}
 		buffer.append(VAR_TAG_END);
 	}
-	
+
 	/**
-	 * Expands all the variables found in an individual
-	 * argument text.
+	 * Expands all the variables found in an individual argument text.
 	 * 
-	 * @param argument one of the argument text in the list of arguments
-	 * @param context the context to use for expanding variables
-	 * @param status multi status to report any problems expanding variables
-	 * @return the argument text with all variables expanded, or <code>null</code> if not possible
+	 * @param argument
+	 *            one of the argument text in the list of arguments
+	 * @param context
+	 *            the context to use for expanding variables
+	 * @param status
+	 *            multi status to report any problems expanding variables
+	 * @return the argument text with all variables expanded, or
+	 *         <code>null</code> if not possible
 	 */
-	public static String expandArgument(String argument, ExpandVariableContext context, MultiStatus status) {
+	public static String expandArgument(String argument,
+			ExpandVariableContext context, MultiStatus status) {
 		StringBuffer buffer = new StringBuffer();
-		
+
 		int start = 0;
 		while (true) {
 			VariableDefinition varDef = extractVariableTag(argument, start);
-			
+
 			// No more variables found...
 			if (varDef.start == -1) {
 				if (start == 0)
@@ -106,74 +124,92 @@ public final class ToolUtil {
 			}
 
 			// Invalid variable format
-			if (varDef.end == -1 || varDef.name == null || varDef.name.length() == 0) {
-				String msg = ExternalToolsModelMessages.getString("ToolUtil.argumentVarFormatWrong"); //$NON-NLS-1$
+			if (varDef.end == -1 || varDef.name == null
+					|| varDef.name.length() == 0) {
+				String msg = ExternalToolsModelMessages
+						.getString("ToolUtil.argumentVarFormatWrong"); //$NON-NLS-1$
 				status.merge(ExternalToolsPlugin.newErrorStatus(msg, null));
 				return null;
 			}
 
-			// Copy text between start and variable.			
+			// Copy text between start and variable.
 			if (varDef.start > start)
 				buffer.append(argument.substring(start, varDef.start));
 			start = varDef.end;
-			
+
 			// Lookup the variable if it exist
 			ArgumentVariableRegistry registry;
-			registry = ExternalToolsPlugin.getDefault().getArgumentVariableRegistry();
-			ArgumentVariable variable = registry.getArgumentVariable(varDef.name);
+			registry = ExternalToolsPlugin.getDefault()
+					.getArgumentVariableRegistry();
+			ArgumentVariable variable = registry
+					.getArgumentVariable(varDef.name);
 			if (variable == null) {
-				String msg = ExternalToolsModelMessages.format("ToolUtil.argumentVarMissing", new Object[] {varDef.name}); //$NON-NLS-1$
+				String msg = ExternalToolsModelMessages
+						.format(
+								"ToolUtil.argumentVarMissing", new Object[] { varDef.name }); //$NON-NLS-1$
 				status.merge(ExternalToolsPlugin.newErrorStatus(msg, null));
 				return null;
 			}
-			
+
 			// Expand the variable as text if possible
-			String text = variable.getExpander().getText(varDef.name, varDef.argument, context);
+			String text = variable.getExpander().getText(varDef.name,
+					varDef.argument, context);
 			if (text == null) {
-				String msg = ExternalToolsModelMessages.format("ToolUtil.argumentVarExpandFailed", new Object[] {varDef.name}); //$NON-NLS-1$
+				String msg = ExternalToolsModelMessages
+						.format(
+								"ToolUtil.argumentVarExpandFailed", new Object[] { varDef.name }); //$NON-NLS-1$
 				status.merge(ExternalToolsPlugin.newErrorStatus(msg, null));
 				return null;
 			}
 			buffer.append(text);
 		}
-		
+
 		return buffer.toString();
 	}
-	
+
 	/**
-	 * Returns a list of individual arguments where all
-	 * variables have been expanded.
+	 * Returns a list of individual arguments where all variables have been
+	 * expanded.
 	 * 
-	 * @param arguments the arguments with leading and trailing
-	 * 		spaces already removed.
-	 * @param context the context used to expand the variable(s)
-	 * @param status multi status to report any problems expanding variables
-	 * @return the list of individual arguments where some elements in the
-	 * 		list maybe <code>null</code> if problems expanding variable(s).
+	 * @param arguments
+	 *            the arguments with leading and trailing spaces already
+	 *            removed.
+	 * @param context
+	 *            the context used to expand the variable(s)
+	 * @param status
+	 *            multi status to report any problems expanding variables
+	 * @return the list of individual arguments where some elements in the list
+	 *         maybe <code>null</code> if problems expanding variable(s).
 	 */
-	public static String[] expandArguments(String arguments, ExpandVariableContext context, MultiStatus status) {
+	public static String[] expandArguments(String arguments,
+			ExpandVariableContext context, MultiStatus status) {
 		if (arguments == null || arguments.length() == 0)
 			return new String[0];
 
 		String[] argList = parseArgumentsIntoList(arguments);
 		for (int i = 0; i < argList.length; i++)
 			argList[i] = expandArgument(argList[i], context, status);
-		
+
 		return argList;
 	}
-	
+
 	/**
-	 * Returns the expanded directory location if represented by a
-	 * directory variable. Otherwise, the directory location given is
-	 * return unless an unknown variable was detected.
+	 * Returns the expanded directory location if represented by a directory
+	 * variable. Otherwise, the directory location given is return unless an
+	 * unknown variable was detected.
 	 * 
-	 * @param dirLocation a directory location either as a path or a variable
-	 * 		with leading and trailing spaces already removed.
-	 * @param context the context used to expand the variable
-	 * @param status multi status to report any problems expanding variables
-	 * @return the directory location as a string or <code>null</code> if not possible
+	 * @param dirLocation
+	 *            a directory location either as a path or a variable with
+	 *            leading and trailing spaces already removed.
+	 * @param context
+	 *            the context used to expand the variable
+	 * @param status
+	 *            multi status to report any problems expanding variables
+	 * @return the directory location as a string or <code>null</code> if not
+	 *         possible
 	 */
-	public static String expandDirectoryLocation(String dirLocation, ExpandVariableContext context, MultiStatus status) {
+	public static String expandDirectoryLocation(String dirLocation,
+			ExpandVariableContext context, MultiStatus status) {
 		if (dirLocation == null || dirLocation.length() == 0)
 			return ""; //$NON-NLS-1$
 
@@ -181,54 +217,69 @@ public final class ToolUtil {
 		// Return if no variable found
 		if (varDef.start < 0)
 			return dirLocation;
-		
+
 		// Disallow text before/after variable
-		if (varDef.start != 0 || (varDef.end < dirLocation.length() && varDef.end != -1)) {
-			String msg = ExternalToolsModelMessages.getString("ToolUtil.dirLocVarBetweenText"); //$NON-NLS-1$
+		if (varDef.start != 0
+				|| (varDef.end < dirLocation.length() && varDef.end != -1)) {
+			String msg = ExternalToolsModelMessages
+					.getString("ToolUtil.dirLocVarBetweenText"); //$NON-NLS-1$
 			status.merge(ExternalToolsPlugin.newErrorStatus(msg, null));
 			return null;
 		}
-		
+
 		// Invalid variable format
-		if (varDef.name == null || varDef.name.length() == 0 || varDef.end == -1) {
-			String msg = ExternalToolsModelMessages.getString("ToolUtil.dirLocVarFormatWrong"); //$NON-NLS-1$
+		if (varDef.name == null || varDef.name.length() == 0
+				|| varDef.end == -1) {
+			String msg = ExternalToolsModelMessages
+					.getString("ToolUtil.dirLocVarFormatWrong"); //$NON-NLS-1$
 			status.merge(ExternalToolsPlugin.newErrorStatus(msg, null));
 			return null;
 		}
-		
+
 		// Lookup the variable if it exist
 		PathLocationVariableRegistry registry;
-		registry = ExternalToolsPlugin.getDefault().getDirectoryLocationVariableRegistry();
-		PathLocationVariable variable = registry.getPathLocationVariable(varDef.name);
+		registry = ExternalToolsPlugin.getDefault()
+				.getDirectoryLocationVariableRegistry();
+		PathLocationVariable variable = registry
+				.getPathLocationVariable(varDef.name);
 		if (variable == null) {
-			String msg = ExternalToolsModelMessages.format("ToolUtil.dirLocVarMissing", new Object[] {varDef.name}); //$NON-NLS-1$
+			String msg = ExternalToolsModelMessages.format(
+					"ToolUtil.dirLocVarMissing", new Object[] { varDef.name }); //$NON-NLS-1$
 			status.merge(ExternalToolsPlugin.newErrorStatus(msg, null));
 			return null;
 		}
-		
+
 		// Expand the variable into a IPath if possible
-		IPath path = variable.getExpander().getPath(varDef.name, varDef.argument, context);
+		IPath path = variable.getExpander().getPath(varDef.name,
+				varDef.argument, context);
 		if (path == null) {
-			String msg = ExternalToolsModelMessages.format("ToolUtil.dirLocVarExpandFailed", new Object[] {varDef.name}); //$NON-NLS-1$
+			String msg = ExternalToolsModelMessages
+					.format(
+							"ToolUtil.dirLocVarExpandFailed", new Object[] { varDef.name }); //$NON-NLS-1$
 			status.merge(ExternalToolsPlugin.newErrorStatus(msg, null));
 			return null;
 		}
-		
+
 		return path.toOSString();
 	}
-	
+
 	/**
-	 * Returns the expanded file location if represented by a
-	 * file variable. Otherwise, the file location given is
-	 * return unless an unknown variable was detected.
+	 * Returns the expanded file location if represented by a file variable.
+	 * Otherwise, the file location given is return unless an unknown variable
+	 * was detected.
 	 * 
-	 * @param fileLocation a file location either as a path or a variable
-	 * 		with leading and trailing spaces already removed.
-	 * @param context the context used to expand the variable
-	 * @param status multi status to report any problems expanding variables
-	 * @return the file location as a string or <code>null</code> if not possible
+	 * @param fileLocation
+	 *            a file location either as a path or a variable with leading
+	 *            and trailing spaces already removed.
+	 * @param context
+	 *            the context used to expand the variable
+	 * @param status
+	 *            multi status to report any problems expanding variables
+	 * @return the file location as a string or <code>null</code> if not
+	 *         possible
 	 */
-	public static String expandFileLocation(String fileLocation, ExpandVariableContext context, MultiStatus status) {
+	public static String expandFileLocation(String fileLocation,
+			ExpandVariableContext context, MultiStatus status) {
 		if (fileLocation == null || fileLocation.length() == 0)
 			return ""; //$NON-NLS-1$
 
@@ -236,65 +287,77 @@ public final class ToolUtil {
 		// Return if no variable found
 		if (varDef.start < 0)
 			return fileLocation;
-		
+
 		// Disallow text before/after variable
-		if (varDef.start != 0 || (varDef.end < fileLocation.length() && varDef.end != -1)) {
-			String msg = ExternalToolsModelMessages.getString("ToolUtil.fileLocVarBetweenText"); //$NON-NLS-1$
+		if (varDef.start != 0
+				|| (varDef.end < fileLocation.length() && varDef.end != -1)) {
+			String msg = ExternalToolsModelMessages
+					.getString("ToolUtil.fileLocVarBetweenText"); //$NON-NLS-1$
 			status.merge(ExternalToolsPlugin.newErrorStatus(msg, null));
 			return null;
 		}
-		
+
 		// Invalid variable format
-		if (varDef.name == null || varDef.name.length() == 0 || varDef.end == -1) {
-			String msg = ExternalToolsModelMessages.getString("ToolUtil.fileLocVarFormatWrong"); //$NON-NLS-1$
+		if (varDef.name == null || varDef.name.length() == 0
+				|| varDef.end == -1) {
+			String msg = ExternalToolsModelMessages
+					.getString("ToolUtil.fileLocVarFormatWrong"); //$NON-NLS-1$
 			status.merge(ExternalToolsPlugin.newErrorStatus(msg, null));
 			return null;
 		}
-		
+
 		// Lookup the variable if it exist
 		PathLocationVariableRegistry registry;
-		registry = ExternalToolsPlugin.getDefault().getFileLocationVariableRegistry();
-		PathLocationVariable variable = registry.getPathLocationVariable(varDef.name);
+		registry = ExternalToolsPlugin.getDefault()
+				.getFileLocationVariableRegistry();
+		PathLocationVariable variable = registry
+				.getPathLocationVariable(varDef.name);
 		if (variable == null) {
-			String msg = ExternalToolsModelMessages.format("ToolUtil.fileLocVarMissing", new Object[] {varDef.name}); //$NON-NLS-1$
+			String msg = ExternalToolsModelMessages.format(
+					"ToolUtil.fileLocVarMissing", new Object[] { varDef.name }); //$NON-NLS-1$
 			status.merge(ExternalToolsPlugin.newErrorStatus(msg, null));
 			return null;
 		}
-		
+
 		// Expand the variable into a IPath if possible
-		IPath path = variable.getExpander().getPath(varDef.name, varDef.argument, context);
+		IPath path = variable.getExpander().getPath(varDef.name,
+				varDef.argument, context);
 		if (path == null) {
-			String msg = ExternalToolsModelMessages.format("The variable {0} with argument {1} could not be expanded to a valid path.", new Object[] {varDef.name, varDef.argument});
+			String msg = ExternalToolsModelMessages
+					.format(
+							"The variable {0} with argument {1} could not be expanded to a valid path.",
+							new Object[] { varDef.name, varDef.argument });
 			status.merge(ExternalToolsPlugin.newErrorStatus(msg, null));
 			return null;
 		}
-		
+
 		return path.toString();
 	}
-	
+
 	/**
-	 * Extracts from the source text the variable tag's name
-	 * and argument.
+	 * Extracts from the source text the variable tag's name and argument.
 	 * 
-	 * @param text the source text to parse for a variable tag
-	 * @param start the index in the string to start the search
+	 * @param text
+	 *            the source text to parse for a variable tag
+	 * @param start
+	 *            the index in the string to start the search
 	 * @return the variable definition
 	 */
 	public static VariableDefinition extractVariableTag(String text, int start) {
 		VariableDefinition varDef = new VariableDefinition();
-		
+
 		varDef.start = text.indexOf(VAR_TAG_START, start);
 		if (varDef.start < 0)
 			return varDef;
 		start = varDef.start + VAR_TAG_START.length();
-		
+
 		int end = text.indexOf(VAR_TAG_END, start);
 		if (end < 0)
 			return varDef;
 		varDef.end = end + VAR_TAG_END.length();
 		if (end == start)
 			return varDef;
-	
+
 		int mid = text.indexOf(VAR_TAG_SEP, start);
 		if (mid < 0 || mid > end) {
 			varDef.name = text.substring(start, end);
@@ -305,140 +368,135 @@ public final class ToolUtil {
 			if (mid < end)
 				varDef.argument = text.substring(mid, end);
 		}
-		
+
 		return varDef;
 	}
-	
+
 	/**
-	 * Parses the argument text into an array of individual
-	 * arguments using the space character as the delimiter.
-	 * An individual argument containing spaces must have a
-	 * double quote (") at the start and end. Two double 
-	 * quotes together is taken to mean an embedded double
-	 * quote in the argument text. Variables are treated as
-	 * a single unit and therefore spaces and double quotes
-	 * inside a variable are copied as is and not parsed.
+	 * Parses the argument text into an array of individual arguments using the
+	 * space character as the delimiter. An individual argument containing
+	 * spaces must have a double quote (") at the start and end. Two double
+	 * quotes together is taken to mean an embedded double quote in the argument
+	 * text. Variables are treated as a single unit and therefore spaces and
+	 * double quotes inside a variable are copied as is and not parsed.
 	 * 
-	 * @param arguments the arguments as one string
+	 * @param arguments
+	 *            the arguments as one string
 	 * @return the array of arguments
 	 */
 	public static String[] parseArgumentsIntoList(String arguments) {
 		if (arguments == null || arguments.length() == 0)
 			return new String[0];
-		
+
 		ArrayList list = new ArrayList(10);
 		boolean inQuotes = false;
 		boolean inVar = false;
 		int start = 0;
 		int end = arguments.length();
 		StringBuffer buffer = new StringBuffer(end);
-		
+
 		while (start < end) {
 			char ch = arguments.charAt(start);
 			start++;
-			
+
 			switch (ch) {
-				case ARG_DELIMITER :
-					if (inQuotes || inVar) {
-						buffer.append(ch);
-					} else {
-						if (buffer.length() > 0) {
-							list.add(buffer.toString());
-							buffer.setLength(0);
-						}
+			case ARG_DELIMITER:
+				if (inQuotes || inVar) {
+					buffer.append(ch);
+				} else {
+					if (buffer.length() > 0) {
+						list.add(buffer.toString());
+						buffer.setLength(0);
 					}
-					break;
+				}
+				break;
 
-				case ARG_DBL_QUOTE :
-					if (inVar) {
-						buffer.append(ch);
-					} else {
-						if (start < end) {
-							if (arguments.charAt(start) == ARG_DBL_QUOTE) {
-								// Two quotes together represents one quote
-								buffer.append(ch);
-								start++;
-							} else {
-								inQuotes = !inQuotes;
-							}
-						} else {
-							// A lone quote at the end, just drop it.
-							inQuotes = false;
-						}
-					}
-					break;
-					
-				case VAR_TAG_START_CHAR1 :
+			case ARG_DBL_QUOTE:
+				if (inVar) {
 					buffer.append(ch);
-					if (!inVar && start < end) {
-						if (arguments.charAt(start) == VAR_TAG_START_CHAR2) {
-							buffer.append(VAR_TAG_START_CHAR2);
-							inVar = true;
+				} else {
+					if (start < end) {
+						if (arguments.charAt(start) == ARG_DBL_QUOTE) {
+							// Two quotes together represents one quote
+							buffer.append(ch);
 							start++;
+						} else {
+							inQuotes = !inQuotes;
 						}
+					} else {
+						// A lone quote at the end, just drop it.
+						inQuotes = false;
+					}
+				}
+				break;
+
+			case VAR_TAG_START_CHAR1:
+				buffer.append(ch);
+				if (!inVar && start < end) {
+					if (arguments.charAt(start) == VAR_TAG_START_CHAR2) {
+						buffer.append(VAR_TAG_START_CHAR2);
+						inVar = true;
+						start++;
 					}
-					break;
+				}
+				break;
 
-				case VAR_TAG_END_CHAR1 :
-					buffer.append(ch);
-					inVar = false;
-					break;
+			case VAR_TAG_END_CHAR1:
+				buffer.append(ch);
+				inVar = false;
+				break;
 
-				default :
-					buffer.append(ch);
-					break;
+			default:
+				buffer.append(ch);
+				break;
 			}
-			
+
 		}
-		
+
 		if (buffer.length() > 0)
 			list.add(buffer.toString());
-			
+
 		String[] results = new String[list.size()];
 		list.toArray(results);
 		return results;
 	}
 
-
 	/**
-	 * Structure to represent a variable definition within a
-	 * source string.
+	 * Structure to represent a variable definition within a source string.
 	 */
 	public static final class VariableDefinition {
 		/**
-		 * Index in the source text where the variable started
-		 * or <code>-1</code> if no valid variable start tag 
-		 * identifier found.
+		 * Index in the source text where the variable started or
+		 * <code>-1</code> if no valid variable start tag identifier found.
 		 */
 		public int start = -1;
-		
+
 		/**
-		 * Index in the source text of the character following
-		 * the end of the variable or <code>-1</code> if no 
-		 * valid variable end tag found.
+		 * Index in the source text of the character following the end of the
+		 * variable or <code>-1</code> if no valid variable end tag found.
 		 */
 		public int end = -1;
-		
+
 		/**
-		 * The variable's name found in the source text, or
-		 * <code>null</code> if no valid variable found.
+		 * The variable's name found in the source text, or <code>null</code>
+		 * if no valid variable found.
 		 */
 		public String name = null;
-		
+
 		/**
 		 * The variable's argument found in the source text, or
-		 * <code>null</code> if no valid variable found or if
-		 * the variable did not specify an argument
+		 * <code>null</code> if no valid variable found or if the variable did
+		 * not specify an argument
 		 */
 		public String argument = null;
-		
+
 		/**
 		 * Create an initialized variable definition.
 		 */
 		private VariableDefinition() {
 			super();
 		}
-		
+
 		/**
 		 * Create an initialized variable definition.
 		 */