Android: Enable Android build, platform and SDK tools parsing

Task-number: QTCREATORBUG-18978
Change-Id: I84d4ead3180ab818493aff9975a7a9b813fba8d0
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
This commit is contained in:
Vikas Pachdha
2017-08-31 10:34:46 +02:00
parent 0ca97ab2bd
commit daee6f6f33
3 changed files with 161 additions and 12 deletions

View File

@@ -145,13 +145,16 @@ class SdkManagerOutputParser
public: public:
enum MarkerTag enum MarkerTag
{ {
None = 0x01, None = 0x001,
InstalledPackagesMarker = 0x02, InstalledPackagesMarker = 0x002,
AvailablePackagesMarkers = 0x04, AvailablePackagesMarkers = 0x004,
AvailableUpdatesMarker = 0x08, AvailableUpdatesMarker = 0x008,
EmptyMarker = 0x10, EmptyMarker = 0x010,
PlatformMarker = 0x20, PlatformMarker = 0x020,
SystemImageMarker = 0x40, SystemImageMarker = 0x040,
BuildToolsMarker = 0x080,
SdkToolsMarker = 0x100,
PlatformToolsMarker = 0x200,
SectionMarkers = InstalledPackagesMarker | AvailablePackagesMarkers | AvailableUpdatesMarker SectionMarkers = InstalledPackagesMarker | AvailablePackagesMarkers | AvailableUpdatesMarker
}; };
@@ -167,6 +170,9 @@ private:
const QString &logStrTag, QStringList extraKeys = QStringList()) const; const QString &logStrTag, QStringList extraKeys = QStringList()) const;
AndroidSdkPackage *parsePlatform(const QStringList &data) const; AndroidSdkPackage *parsePlatform(const QStringList &data) const;
QPair<SystemImage *, int> parseSystemImage(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;
MarkerTag parseMarkers(const QString &line); MarkerTag parseMarkers(const QString &line);
MarkerTag m_currentSection = MarkerTag::None; MarkerTag m_currentSection = MarkerTag::None;
@@ -178,7 +184,10 @@ const std::map<SdkManagerOutputParser::MarkerTag, const char *> markerTags {
{SdkManagerOutputParser::MarkerTag::AvailablePackagesMarkers, "Available Packages:"}, {SdkManagerOutputParser::MarkerTag::AvailablePackagesMarkers, "Available Packages:"},
{SdkManagerOutputParser::MarkerTag::AvailablePackagesMarkers, "Available Updates:"}, {SdkManagerOutputParser::MarkerTag::AvailablePackagesMarkers, "Available Updates:"},
{SdkManagerOutputParser::MarkerTag::PlatformMarker, "platforms"}, {SdkManagerOutputParser::MarkerTag::PlatformMarker, "platforms"},
{SdkManagerOutputParser::MarkerTag::SystemImageMarker, "system-images"} {SdkManagerOutputParser::MarkerTag::SystemImageMarker, "system-images"},
{SdkManagerOutputParser::MarkerTag::BuildToolsMarker, "build-tools"},
{SdkManagerOutputParser::MarkerTag::SdkToolsMarker, "tools"},
{SdkManagerOutputParser::MarkerTag::PlatformToolsMarker, "platform-tools"}
}; };
AndroidSdkManager::AndroidSdkManager(const AndroidConfig &config, QObject *parent): AndroidSdkManager::AndroidSdkManager(const AndroidConfig &config, QObject *parent):
@@ -358,6 +367,18 @@ void SdkManagerOutputParser::parsePackageData(MarkerTag packageMarker, const QSt
}; };
switch (packageMarker) { switch (packageMarker) {
case MarkerTag::BuildToolsMarker:
createPackage(&SdkManagerOutputParser::parseBuildToolsPackage);
break;
case MarkerTag::SdkToolsMarker:
createPackage(&SdkManagerOutputParser::parseSdkToolsPackage);
break;
case MarkerTag::PlatformToolsMarker:
createPackage(&SdkManagerOutputParser::parsePlatformToolsPackage);
break;
case MarkerTag::PlatformMarker: case MarkerTag::PlatformMarker:
createPackage(&SdkManagerOutputParser::parsePlatform); createPackage(&SdkManagerOutputParser::parsePlatform);
break; break;
@@ -472,6 +493,54 @@ QPair<SystemImage *, int> SdkManagerOutputParser::parseSystemImage(const QString
return result; return result;
} }
BuildTools *SdkManagerOutputParser::parseBuildToolsPackage(const QStringList &data) const
{
BuildTools *buildTools = nullptr;
GenericPackageData packageData;
if (parseAbstractData(packageData, data, 2, "Build-tools")) {
buildTools = new BuildTools(packageData.revision, data.at(0));
buildTools->setDescriptionText(packageData.description);
buildTools->setDisplayText(packageData.description);
buildTools->setInstalledLocation(packageData.installedLocation);
} else {
qCDebug(sdkManagerLog) << "Build-tools: Parsing failed. Minimum required data unavailable:"
<< data;
}
return buildTools;
}
SdkTools *SdkManagerOutputParser::parseSdkToolsPackage(const QStringList &data) const
{
SdkTools *sdkTools = nullptr;
GenericPackageData packageData;
if (parseAbstractData(packageData, data, 1, "SDK-tools")) {
sdkTools = new SdkTools(packageData.revision, data.at(0));
sdkTools->setDescriptionText(packageData.description);
sdkTools->setDisplayText(packageData.description);
sdkTools->setInstalledLocation(packageData.installedLocation);
} else {
qCDebug(sdkManagerLog) << "SDK-tools: Parsing failed. Minimum required data unavailable:"
<< data;
}
return sdkTools;
}
PlatformTools *SdkManagerOutputParser::parsePlatformToolsPackage(const QStringList &data) const
{
PlatformTools *platformTools = nullptr;
GenericPackageData packageData;
if (parseAbstractData(packageData, data, 1, "Platform-tools")) {
platformTools = new PlatformTools(packageData.revision, data.at(0));
platformTools->setDescriptionText(packageData.description);
platformTools->setDisplayText(packageData.description);
platformTools->setInstalledLocation(packageData.installedLocation);
} else {
qCDebug(sdkManagerLog) << "Platform-tools: Parsing failed. Minimum required data "
"unavailable:" << data;
}
return platformTools;
}
SdkManagerOutputParser::MarkerTag SdkManagerOutputParser::parseMarkers(const QString &line) SdkManagerOutputParser::MarkerTag SdkManagerOutputParser::parseMarkers(const QString &line)
{ {
if (line.isEmpty()) if (line.isEmpty())

View File

@@ -194,4 +194,51 @@ SystemImageList SdkPlatform::systemImages(PackageState state) const
}); });
} }
BuildTools::BuildTools(QVersionNumber revision, QString sdkStylePathStr, QObject *parent):
AndroidSdkPackage(revision, sdkStylePathStr, parent)
{
}
bool BuildTools::isValid() const
{
return true;
}
AndroidSdkPackage::PackageType BuildTools::type() const
{
return AndroidSdkPackage::BuildToolsPackage;
}
SdkTools::SdkTools(QVersionNumber revision, QString sdkStylePathStr, QObject *parent):
AndroidSdkPackage(revision, sdkStylePathStr, parent)
{
}
bool SdkTools::isValid() const
{
return true;
}
AndroidSdkPackage::PackageType SdkTools::type() const
{
return AndroidSdkPackage::SdkToolsPackage;
}
PlatformTools::PlatformTools(QVersionNumber revision, QString sdkStylePathStr, QObject *parent):
AndroidSdkPackage(revision, sdkStylePathStr, parent)
{
}
bool PlatformTools::isValid() const
{
return true;
}
AndroidSdkPackage::PackageType PlatformTools::type() const
{
return AndroidSdkPackage::PlatformToolsPackage;
}
} // namespace Android } // namespace Android

View File

@@ -146,6 +146,39 @@ private:
QVersionNumber m_version; QVersionNumber m_version;
}; };
using SdkPlatformList = QList<SdkPlatform*>; using SdkPlatformList = QList<SdkPlatform*>;
class BuildTools : public AndroidSdkPackage
{
public:
BuildTools(QVersionNumber revision, QString sdkStylePathStr, QObject *parent = nullptr);
// AndroidSdkPackage Overrides
public:
bool isValid() const override;
PackageType type() const override;
};
class PlatformTools : public AndroidSdkPackage
{
public:
PlatformTools(QVersionNumber revision, QString sdkStylePathStr, QObject *parent = nullptr);
// AndroidSdkPackage Overrides
public:
bool isValid() const override;
PackageType type() const override;
};
class SdkTools : public AndroidSdkPackage
{
public:
SdkTools(QVersionNumber revision, QString sdkStylePathStr, QObject *parent = nullptr);
// AndroidSdkPackage Overrides
public:
bool isValid() const override;
PackageType type() const override;
};
} // namespace Android } // namespace Android