From 7adee4da24757b65622260487885d3cd76a04151 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Thu, 21 Sep 2023 08:59:15 +0200 Subject: [PATCH] Utils: allow specifying the requested extension for searchInPath Reducing the expected executable extensions can improve the performance for search in path on Window. Especially if PATHEXT and PATH has a lot of entries, since we collect file attributes for PATHEXT entry count times PATH entry count file paths. Use this optimization in the android toolchain to search for java.exe on windows. Change-Id: I2c2865d685c2de0c03a0fa1fbe7e8afd283174da Reviewed-by: Alessandro Portale Reviewed-by: --- src/libs/utils/environment.cpp | 5 +++-- src/libs/utils/environment.h | 3 ++- src/plugins/android/androidtoolchain.cpp | 3 ++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/libs/utils/environment.cpp b/src/libs/utils/environment.cpp index 4af5399a7af..d71d76c8b8a 100644 --- a/src/libs/utils/environment.cpp +++ b/src/libs/utils/environment.cpp @@ -225,11 +225,12 @@ QString Environment::expandedValueForKey(const QString &key) const FilePath Environment::searchInPath(const QString &executable, const FilePaths &additionalDirs, - const FilePathPredicate &filter) const + const FilePathPredicate &filter, + FilePath::MatchScope scope) const { const FilePath exec = FilePath::fromUserInput(expandVariables(executable)); const FilePaths dirs = path() + additionalDirs; - return exec.searchInDirectories(dirs, filter, FilePath::WithAnySuffix); + return exec.searchInDirectories(dirs, filter, scope); } FilePaths Environment::path() const diff --git a/src/libs/utils/environment.h b/src/libs/utils/environment.h index 06ac5d20a5c..679b28f0e08 100644 --- a/src/libs/utils/environment.h +++ b/src/libs/utils/environment.h @@ -61,7 +61,8 @@ public: FilePath searchInPath(const QString &executable, const FilePaths &additionalDirs = FilePaths(), - const FilePathPredicate &func = {}) const; + const FilePathPredicate &func = {}, + FilePath::MatchScope = FilePath::WithAnySuffix) const; FilePaths path() const; FilePaths pathListValue(const QString &varName) const; diff --git a/src/plugins/android/androidtoolchain.cpp b/src/plugins/android/androidtoolchain.cpp index 26ca46be2a5..5d96d8c4bdc 100644 --- a/src/plugins/android/androidtoolchain.cpp +++ b/src/plugins/android/androidtoolchain.cpp @@ -94,7 +94,8 @@ void AndroidToolChain::addToEnvironment(Environment &env) const if (javaHome.exists()) { env.set(Constants::JAVA_HOME_ENV_VAR, javaHome.toUserOutput()); const FilePath javaBin = javaHome.pathAppended("bin"); - const FilePath currentJavaFilePath = env.searchInPath("java"); + const FilePath currentJavaFilePath + = env.searchInPath("java", {}, {}, FilePath::WithExeSuffix); if (!currentJavaFilePath.isChildOf(javaBin)) env.prependOrSetPath(javaBin); }