aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/android/sdkmanageroutputparser.h
diff options
context:
space:
mode:
authorArtem Sokolovskii <[email protected]>2023-01-23 16:34:24 +0100
committerArtem Sokolovskii <[email protected]>2023-02-14 14:11:30 +0000
commitb7fde29cdfbdf46d8d3f89d0c4dfc6328b43782d (patch)
tree837f532ec90684dc5f5b15397f99cf56cf365169 /src/plugins/android/sdkmanageroutputparser.h
parentb4f665f8acc73c11063cc2cb6c829428fc1d1748 (diff)
Android: Extract sdkmanageroutputparser to separate file
- Needed for testing and for improving readability Change-Id: Ie7a716b204ae0a216d72fa0191d4d05b7708c16c Reviewed-by: <[email protected]> Reviewed-by: Alessandro Portale <[email protected]>
Diffstat (limited to 'src/plugins/android/sdkmanageroutputparser.h')
-rw-r--r--src/plugins/android/sdkmanageroutputparser.h79
1 files changed, 79 insertions, 0 deletions
diff --git a/src/plugins/android/sdkmanageroutputparser.h b/src/plugins/android/sdkmanageroutputparser.h
new file mode 100644
index 00000000000..5f0534dfbde
--- /dev/null
+++ b/src/plugins/android/sdkmanageroutputparser.h
@@ -0,0 +1,79 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+#pragma once
+
+#include "androidconstants.h"
+#include "androidsdkpackage.h"
+
+#include <utils/filepath.h>
+
+#include <QVersionNumber>
+
+namespace Android {
+namespace Internal {
+/*!
+ \class SdkManagerOutputParser
+ \brief The SdkManagerOutputParser class is a helper class to parse the output of the \c sdkmanager
+ commands.
+ */
+class SdkManagerOutputParser
+{
+ class GenericPackageData
+ {
+ public:
+ bool isValid() const { return !revision.isNull() && !description.isNull(); }
+ QStringList headerParts;
+ QVersionNumber revision;
+ QString description;
+ Utils::FilePath installedLocation;
+ QMap<QString, QString> extraData;
+ };
+
+public:
+ enum MarkerTag
+ {
+ None = 0x001,
+ InstalledPackagesMarker = 0x002,
+ AvailablePackagesMarkers = 0x004,
+ AvailableUpdatesMarker = 0x008,
+ EmptyMarker = 0x010,
+ PlatformMarker = 0x020,
+ SystemImageMarker = 0x040,
+ BuildToolsMarker = 0x080,
+ SdkToolsMarker = 0x100,
+ PlatformToolsMarker = 0x200,
+ EmulatorToolsMarker = 0x400,
+ NdkMarker = 0x800,
+ ExtrasMarker = 0x1000,
+ CmdlineSdkToolsMarker = 0x2000,
+ GenericToolMarker = 0x4000,
+ SectionMarkers = InstalledPackagesMarker | AvailablePackagesMarkers | AvailableUpdatesMarker
+ };
+
+ SdkManagerOutputParser(AndroidSdkPackageList &container) : m_packages(container) {}
+ void parsePackageListing(const QString &output);
+
+ AndroidSdkPackageList &m_packages;
+
+private:
+ void compilePackageAssociations();
+ void parsePackageData(MarkerTag packageMarker, const QStringList &data);
+ bool parseAbstractData(GenericPackageData &output, const QStringList &input, int minParts,
+ const QString &logStrTag,
+ const QStringList &extraKeys = QStringList()) const;
+ AndroidSdkPackage *parsePlatform(const QStringList &data) const;
+ QPair<SystemImage *, int> parseSystemImage(const QStringList &data) const;
+ BuildTools *parseBuildToolsPackage(const QStringList &data) const;
+ SdkTools *parseSdkToolsPackage(const QStringList &data) const;
+ PlatformTools *parsePlatformToolsPackage(const QStringList &data) const;
+ EmulatorTools *parseEmulatorToolsPackage(const QStringList &data) const;
+ Ndk *parseNdkPackage(const QStringList &data) const;
+ ExtraTools *parseExtraToolsPackage(const QStringList &data) const;
+ GenericSdkPackage *parseGenericTools(const QStringList &data) const;
+ MarkerTag parseMarkers(const QString &line);
+
+ MarkerTag m_currentSection = MarkerTag::None;
+ QHash<AndroidSdkPackage *, int> m_systemImages;
+};
+} // namespace Internal
+} // namespace Android