public static URL find(Bundle b, IPath path, Map override) { if (path == null) return null;  URL result = null;   if (path.isEmpty() || path.isRoot()) {    result = findInPlugin(b, Path.EMPTY); if (result == null) result = findInFragments(b, Path.EMPTY); return result; }   String first = path.segment(0); if (first.charAt(0) != '$') { result = findInPlugin(b, path); if (result == null) result = findInFragments(b, path); return result; }   IPath rest = path.removeFirstSegments(1); if (first.equalsIgnoreCase("$nl$")) return findNL(b, rest, override); if (first.equalsIgnoreCase("$os$")) return findOS(b, rest, override); if (first.equalsIgnoreCase("$ws$")) return findWS(b, rest, override); if (first.equalsIgnoreCase("$files$")) return null;  return null;
public static URL find(Bundle bundle, IPath path) { return find(bundle, path, null);
	public static URL find(Bundle b, IPath path, Map override) {		if (path == null)			return null;		URL result = null;		// Check for the empty or root case first		if (path.isEmpty() || path.isRoot()) {			// Watch for the root case.  It will produce a new			// URL which is only the root directory (and not the			// root of this plugin).				result = findInPlugin(b, Path.EMPTY);			if (result == null)				result = findInFragments(b, Path.EMPTY);			return result;		}		// Now check for paths without variable substitution		String first = path.segment(0);		if (first.charAt(0) != '$') {			result = findInPlugin(b, path);			if (result == null)				result = findInFragments(b, path);			return result;		}		// Worry about variable substitution		IPath rest = path.removeFirstSegments(1);		if (first.equalsIgnoreCase("$nl$")) //$NON-NLS-1$			return findNL(b, rest, override);		if (first.equalsIgnoreCase("$os$")) //$NON-NLS-1$			return findOS(b, rest, override);		if (first.equalsIgnoreCase("$ws$")) //$NON-NLS-1$			return findWS(b, rest, override);		if (first.equalsIgnoreCase("$files$")) //$NON-NLS-1$			return null;		return null;	}