diff options
author | hjk <hjk@qt.io> | 2025-03-11 09:52:13 +0100 |
---|---|---|
committer | hjk <hjk@qt.io> | 2025-03-11 13:56:21 +0000 |
commit | 12ff6cc929266030a7b7608f2612af3e638f5145 (patch) | |
tree | 1e99eb8a0b2b2892f46067a254d20094a31e5935 | |
parent | 2384da479caa9fe36e64d0f0f3f8f69fff06d6be (diff) |
Utils: Dissolve ProcessArgs::ConstIterator
Only used in one place, encapsulate its use into a simpler API.
Change-Id: If5542863f77c93979c0a3f7d27fe94d8a07127b6
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
-rw-r--r-- | src/libs/utils/commandline.cpp | 12 | ||||
-rw-r--r-- | src/libs/utils/commandline.h | 17 | ||||
-rw-r--r-- | src/plugins/qmakeprojectmanager/qmakestep.cpp | 10 |
3 files changed, 18 insertions, 21 deletions
diff --git a/src/libs/utils/commandline.cpp b/src/libs/utils/commandline.cpp index 4eeb203cddf..913d318466c 100644 --- a/src/libs/utils/commandline.cpp +++ b/src/libs/utils/commandline.cpp @@ -1588,6 +1588,18 @@ CommandLine CommandLine::toLocal() const return cmd; } +QStringList ProcessArgs::filterSimpleArgs(const QString &args, OsType osType) +{ + QStringList result; + QString args_ = args; + for (ArgIterator ait(&args_, osType); ait.next(); ) { + // This filters out items containing e.g. shell variables like '$FOO' + if (ait.isSimple()) + result << ait.value(); + } + return result; +} + QTCREATOR_UTILS_EXPORT bool operator==(const CommandLine &first, const CommandLine &second) { return first.m_executable == second.m_executable && first.m_arguments == second.m_arguments; diff --git a/src/libs/utils/commandline.h b/src/libs/utils/commandline.h index 82ab2a60b05..0fc6862c78d 100644 --- a/src/libs/utils/commandline.h +++ b/src/libs/utils/commandline.h @@ -53,6 +53,9 @@ public: static QStringList splitArgs(const QString &cmd, OsType osType, bool abortOnMeta = false, SplitError *err = nullptr, const Environment *env = nullptr, const QString &pwd = {}); + //! Split a shell command into separate arguments and drop complex ones + //! as input for the internal .pro parser. + static QStringList filterSimpleArgs(const QString &cmd, OsType osType); using FindMacro = std::function<int(const QString &str, int *pos, QString *ret)>; @@ -89,20 +92,6 @@ public: OsType m_osType; }; - class QTCREATOR_UTILS_EXPORT ConstArgIterator - { - public: - ConstArgIterator(const QString &str, OsType osType = HostOsInfo::hostOs()) - : m_str(str), m_ait(&m_str, osType) - {} - bool next() { return m_ait.next(); } - bool isSimple() const { return m_ait.isSimple(); } - QString value() const { return m_ait.value(); } - - private: - QString m_str; - ArgIterator m_ait; - }; }; class QTCREATOR_UTILS_EXPORT RunResult diff --git a/src/plugins/qmakeprojectmanager/qmakestep.cpp b/src/plugins/qmakeprojectmanager/qmakestep.cpp index a8b5074f8de..42c41500cdf 100644 --- a/src/plugins/qmakeprojectmanager/qmakestep.cpp +++ b/src/plugins/qmakeprojectmanager/qmakestep.cpp @@ -375,15 +375,11 @@ QString QMakeStep::effectiveQMakeCall() const QStringList QMakeStep::parserArguments() { - // NOTE: extra parser args placed before the other args intentionally - QStringList result = m_extraParserArgs; QtVersion *qt = QtKitAspect::qtVersion(kit()); QTC_ASSERT(qt, return {}); - for (ProcessArgs::ConstArgIterator ait(allArguments(qt, ArgumentFlag::Expand)); ait.next(); ) { - if (ait.isSimple()) - result << ait.value(); - } - return result; + const QString allArgs = allArguments(qt, ArgumentFlag::Expand); + // NOTE: extra parser args placed before the other args intentionally + return m_extraParserArgs + ProcessArgs::filterSimpleArgs(allArgs, qt->qmakeFilePath().osType()); } QString QMakeStep::mkspec() const |