forked from qt-creator/qt-creator
SdkManagerOutputParser: Limit code repetition
Introduce function template helper. Change-Id: If29452ce3dc09ee1e63ac3b889341f573ae5af63 Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
@@ -11,9 +11,13 @@
|
|||||||
|
|
||||||
namespace Android {
|
namespace Android {
|
||||||
|
|
||||||
|
class AndroidSdkPackage;
|
||||||
|
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
class SdkManagerOutputParser;
|
class SdkManagerOutputParser;
|
||||||
class AndroidToolOutputParser;
|
class AndroidToolOutputParser;
|
||||||
|
template <typename T>
|
||||||
|
AndroidSdkPackage *parsePackage(const QStringList &, int, const QString &);
|
||||||
}
|
}
|
||||||
class SdkPlatform;
|
class SdkPlatform;
|
||||||
class SystemImage;
|
class SystemImage;
|
||||||
@@ -80,6 +84,8 @@ private:
|
|||||||
QString m_extension;
|
QString m_extension;
|
||||||
Utils::FilePath m_installedLocation;
|
Utils::FilePath m_installedLocation;
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
friend AndroidSdkPackage *Internal::parsePackage(const QStringList &, int, const QString &);
|
||||||
friend class Internal::SdkManagerOutputParser;
|
friend class Internal::SdkManagerOutputParser;
|
||||||
friend class Internal::AndroidToolOutputParser;
|
friend class Internal::AndroidToolOutputParser;
|
||||||
};
|
};
|
||||||
|
@@ -284,6 +284,23 @@ static bool parseAbstractData(GenericPackageData &output, const QStringList &inp
|
|||||||
return output.isValid();
|
return output.isValid();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
AndroidSdkPackage *parsePackage(const QStringList &data, int minParts, const QString &logStrTag)
|
||||||
|
{
|
||||||
|
AndroidSdkPackage *package = nullptr;
|
||||||
|
GenericPackageData packageData;
|
||||||
|
if (parseAbstractData(packageData, data, minParts, logStrTag)) {
|
||||||
|
package = new T(packageData.revision, data.at(0));
|
||||||
|
package->setDescriptionText(packageData.description);
|
||||||
|
package->setDisplayText(packageData.description);
|
||||||
|
package->setInstalledLocation(packageData.installedLocation);
|
||||||
|
} else {
|
||||||
|
qCDebug(sdkManagerLog) << logStrTag + ':'
|
||||||
|
<< "Parsing failed. Minimum required data unavailable:" << data;
|
||||||
|
}
|
||||||
|
return package;
|
||||||
|
}
|
||||||
|
|
||||||
AndroidSdkPackage *SdkManagerOutputParser::parsePlatform(const QStringList &data) const
|
AndroidSdkPackage *SdkManagerOutputParser::parsePlatform(const QStringList &data) const
|
||||||
{
|
{
|
||||||
SdkPlatform *platform = nullptr;
|
SdkPlatform *platform = nullptr;
|
||||||
@@ -330,114 +347,37 @@ QPair<SystemImage *, int> SdkManagerOutputParser::parseSystemImage(const QString
|
|||||||
|
|
||||||
AndroidSdkPackage *SdkManagerOutputParser::parseBuildToolsPackage(const QStringList &data) const
|
AndroidSdkPackage *SdkManagerOutputParser::parseBuildToolsPackage(const QStringList &data) const
|
||||||
{
|
{
|
||||||
BuildTools *buildTools = nullptr;
|
return parsePackage<BuildTools>(data, 2, "Build-tools");
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AndroidSdkPackage *SdkManagerOutputParser::parseSdkToolsPackage(const QStringList &data) const
|
AndroidSdkPackage *SdkManagerOutputParser::parseSdkToolsPackage(const QStringList &data) const
|
||||||
{
|
{
|
||||||
SdkTools *sdkTools = nullptr;
|
return parsePackage<SdkTools>(data, 1, "SDK-tools");
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AndroidSdkPackage *SdkManagerOutputParser::parsePlatformToolsPackage(const QStringList &data) const
|
AndroidSdkPackage *SdkManagerOutputParser::parsePlatformToolsPackage(const QStringList &data) const
|
||||||
{
|
{
|
||||||
PlatformTools *platformTools = nullptr;
|
return parsePackage<PlatformTools>(data, 1, "Platform-tools");
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AndroidSdkPackage *SdkManagerOutputParser::parseEmulatorToolsPackage(const QStringList &data) const
|
AndroidSdkPackage *SdkManagerOutputParser::parseEmulatorToolsPackage(const QStringList &data) const
|
||||||
{
|
{
|
||||||
EmulatorTools *emulatorTools = nullptr;
|
return parsePackage<EmulatorTools>(data, 1, "Emulator-tools");
|
||||||
GenericPackageData packageData;
|
|
||||||
if (parseAbstractData(packageData, data, 1, "Emulator-tools")) {
|
|
||||||
emulatorTools = new EmulatorTools(packageData.revision, data.at(0));
|
|
||||||
emulatorTools->setDescriptionText(packageData.description);
|
|
||||||
emulatorTools->setDisplayText(packageData.description);
|
|
||||||
emulatorTools->setInstalledLocation(packageData.installedLocation);
|
|
||||||
} else {
|
|
||||||
qCDebug(sdkManagerLog) << "Emulator-tools: Parsing failed. Minimum required data "
|
|
||||||
"unavailable:" << data;
|
|
||||||
}
|
|
||||||
return emulatorTools;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AndroidSdkPackage *SdkManagerOutputParser::parseNdkPackage(const QStringList &data) const
|
AndroidSdkPackage *SdkManagerOutputParser::parseNdkPackage(const QStringList &data) const
|
||||||
{
|
{
|
||||||
Ndk *ndk = nullptr;
|
return parsePackage<Ndk>(data, 1, "NDK");
|
||||||
GenericPackageData packageData;
|
|
||||||
if (parseAbstractData(packageData, data, 1, "NDK")) {
|
|
||||||
ndk = new Ndk(packageData.revision, data.at(0));
|
|
||||||
ndk->setDescriptionText(packageData.description);
|
|
||||||
ndk->setDisplayText(packageData.description);
|
|
||||||
ndk->setInstalledLocation(packageData.installedLocation);
|
|
||||||
} else {
|
|
||||||
qCDebug(sdkManagerLog) << "NDK: Parsing failed. Minimum required data unavailable:"
|
|
||||||
<< data;
|
|
||||||
}
|
|
||||||
return ndk;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AndroidSdkPackage *SdkManagerOutputParser::parseExtraToolsPackage(const QStringList &data) const
|
AndroidSdkPackage *SdkManagerOutputParser::parseExtraToolsPackage(const QStringList &data) const
|
||||||
{
|
{
|
||||||
ExtraTools *extraTools = nullptr;
|
return parsePackage<ExtraTools>(data, 1, "Extra-tools");
|
||||||
GenericPackageData packageData;
|
|
||||||
if (parseAbstractData(packageData, data, 1, "Extras")) {
|
|
||||||
extraTools = new ExtraTools(packageData.revision, data.at(0));
|
|
||||||
extraTools->setDescriptionText(packageData.description);
|
|
||||||
extraTools->setDisplayText(packageData.description);
|
|
||||||
extraTools->setInstalledLocation(packageData.installedLocation);
|
|
||||||
} else {
|
|
||||||
qCDebug(sdkManagerLog) << "Extra-tools: Parsing failed. Minimum required data "
|
|
||||||
"unavailable:" << data;
|
|
||||||
}
|
|
||||||
return extraTools;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AndroidSdkPackage *SdkManagerOutputParser::parseGenericTools(const QStringList &data) const
|
AndroidSdkPackage *SdkManagerOutputParser::parseGenericTools(const QStringList &data) const
|
||||||
{
|
{
|
||||||
GenericSdkPackage *sdkPackage = nullptr;
|
return parsePackage<GenericSdkPackage>(data, 1, "Generic");
|
||||||
GenericPackageData packageData;
|
|
||||||
if (parseAbstractData(packageData, data, 1, "Generic")) {
|
|
||||||
sdkPackage = new GenericSdkPackage(packageData.revision, data.at(0));
|
|
||||||
sdkPackage->setDescriptionText(packageData.description);
|
|
||||||
sdkPackage->setDisplayText(packageData.description);
|
|
||||||
sdkPackage->setInstalledLocation(packageData.installedLocation);
|
|
||||||
} else {
|
|
||||||
qCDebug(sdkManagerLog) << "Generic: Parsing failed. Minimum required data "
|
|
||||||
"unavailable:" << data;
|
|
||||||
}
|
|
||||||
return sdkPackage;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SdkManagerOutputParser::MarkerTag SdkManagerOutputParser::parseMarkers(const QString &line)
|
SdkManagerOutputParser::MarkerTag SdkManagerOutputParser::parseMarkers(const QString &line)
|
||||||
|
Reference in New Issue
Block a user