String[] candidates = new File(start).list();
String[] candidates = (String[]) searchCandidates.get(start); if (candidates == null) { candidates = new File(start).list(); if (candidates != null) searchCandidates.put(start, candidates); }
	private static String searchFor(final String target, String start) {		String[] candidates = new File(start).list();		if (candidates == null)			return null;		String result = null;		Object maxVersion = null;		for (int i = 0; i < candidates.length; i++) {			File candidate = new File(start, candidates[i]);			if (!candidate.getName().equals(target) && !candidate.getName().startsWith(target + "_")) //$NON-NLS-1$				continue;			String name = candidate.getName();			String version = ""; //$NON-NLS-1$ // Note: directory with version suffix is always > than directory without version suffix			int index = name.indexOf('_');			if (index != -1)				version = name.substring(index + 1);			Object currentVersion = getVersionElements(version);			if (maxVersion == null) {				result = candidate.getAbsolutePath();				maxVersion = currentVersion;			} else {				if (compareVersion((Object[]) maxVersion, (Object[]) currentVersion) < 0) {					result = candidate.getAbsolutePath();					maxVersion = currentVersion;				}			}		}		if (result == null)			return null;		return result.replace(File.separatorChar, '/') + "/"; //$NON-NLS-1$	}