From 3cc83140d5d44e5d8cb2d2378bad6570ffbafbfd Mon Sep 17 00:00:00 2001 From: Sergey Simonchik Date: Mon, 18 Feb 2013 18:53:35 +0400 Subject: [PATCH] findInPath utility method --- .../PathEnvironmentVariableUtil.java | 44 ++++++++++++++++++- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/platform/platform-api/src/com/intellij/execution/configurations/PathEnvironmentVariableUtil.java b/platform/platform-api/src/com/intellij/execution/configurations/PathEnvironmentVariableUtil.java index 45adbaa61dfe..f1e7bce7b87c 100644 --- a/platform/platform-api/src/com/intellij/execution/configurations/PathEnvironmentVariableUtil.java +++ b/platform/platform-api/src/com/intellij/execution/configurations/PathEnvironmentVariableUtil.java @@ -40,8 +40,7 @@ public class PathEnvironmentVariableUtil { private static String calcFixedMacPathEnvVarValue() { if (SystemInfo.isMac) { - Map originalEnvVars = EnvironmentUtil.getEnvironmentProperties(); - final String originalPath = originalEnvVars.get(PATH_ENV_VAR_NAME); + final String originalPath = getOriginalPathEnvVarValue(); Map envVars = UnixProcessManager.getOrLoadConsoleEnvironment(); String consolePath = envVars.get(PATH_ENV_VAR_NAME); return mergePaths(ContainerUtil.newArrayList(originalPath, consolePath)); @@ -66,4 +65,45 @@ public class PathEnvironmentVariableUtil { return StringUtil.join(paths, File.pathSeparator); } + @Nullable + private static String getOriginalPathEnvVarValue() { + Map originalEnvVars = EnvironmentUtil.getEnvironmentProperties(); + return originalEnvVars.get(PATH_ENV_VAR_NAME); + } + + @NotNull + private static String getReliablePath() { + final String value; + if (SystemInfo.isMac) { + value = getFixedPathEnvVarValueOnMac(); + } + else { + value = getOriginalPathEnvVarValue(); + } + return StringUtil.notNullize(value); + } + + /** + * Finds an executable file with the specified base name, that is located in a directory + * listed in PATH environment variable. + * + * @param fileBaseName file base name + * @return {@code File} instance or null if not found + */ + @Nullable + public static File findInPath(@NotNull String fileBaseName) { + String pathEnvVarValue = getReliablePath(); + List paths = StringUtil.split(pathEnvVarValue, File.pathSeparator, true, true); + for (String path : paths) { + File dir = new File(path); + if (dir.isAbsolute() && dir.isDirectory()) { + File file = new File(dir, fileBaseName); + if (file.isFile() && file.canExecute()) { + return file; + } + } + } + return null; + } + }