Android: allow sdkmanager to parse all generic packages

Task-number: QTCREATORBUG-23829
Change-Id: I29bd70a6703b9537e4a884e5acc53e2e2dd020cb
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
Assam Boudjelthia
2020-05-02 14:40:05 +03:00
parent 0bf7bacb4f
commit d38a6fe1df
3 changed files with 55 additions and 1 deletions

View File

@@ -278,6 +278,7 @@ public:
NdkMarker = 0x800, NdkMarker = 0x800,
ExtrasMarker = 0x1000, ExtrasMarker = 0x1000,
CmdlineSdkToolsMarker = 0x2000, CmdlineSdkToolsMarker = 0x2000,
GenericToolMarker = 0x4000,
SectionMarkers = InstalledPackagesMarker | AvailablePackagesMarkers | AvailableUpdatesMarker SectionMarkers = InstalledPackagesMarker | AvailablePackagesMarkers | AvailableUpdatesMarker
}; };
@@ -300,6 +301,7 @@ private:
EmulatorTools *parseEmulatorToolsPackage(const QStringList &data) const; EmulatorTools *parseEmulatorToolsPackage(const QStringList &data) const;
Ndk *parseNdkPackage(const QStringList &data) const; Ndk *parseNdkPackage(const QStringList &data) const;
ExtraTools *parseExtraToolsPackage(const QStringList &data) const; ExtraTools *parseExtraToolsPackage(const QStringList &data) const;
GenericSdkPackage *parseGenericTools(const QStringList &data) const;
MarkerTag parseMarkers(const QString &line); MarkerTag parseMarkers(const QString &line);
MarkerTag m_currentSection = MarkerTag::None; MarkerTag m_currentSection = MarkerTag::None;
@@ -632,6 +634,10 @@ void SdkManagerOutputParser::parsePackageData(MarkerTag packageMarker, const QSt
createPackage(&SdkManagerOutputParser::parseExtraToolsPackage); createPackage(&SdkManagerOutputParser::parseExtraToolsPackage);
break; break;
case MarkerTag::GenericToolMarker:
createPackage(&SdkManagerOutputParser::parseGenericTools);
break;
default: default:
qCDebug(sdkManagerLog) << "Unhandled package: " << markerTags.at(packageMarker); qCDebug(sdkManagerLog) << "Unhandled package: " << markerTags.at(packageMarker);
break; break;
@@ -832,6 +838,22 @@ ExtraTools *SdkManagerOutputParser::parseExtraToolsPackage(const QStringList &da
return extraTools; return extraTools;
} }
GenericSdkPackage *SdkManagerOutputParser::parseGenericTools(const QStringList &data) const
{
GenericSdkPackage *sdkPackage = nullptr;
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)
{ {
if (line.isEmpty()) if (line.isEmpty())
@@ -842,6 +864,10 @@ SdkManagerOutputParser::MarkerTag SdkManagerOutputParser::parseMarkers(const QSt
return pair.first; return pair.first;
} }
QRegularExpressionMatch match = QRegularExpression("^[a-zA-Z]+[A-Za-z0-9;._-]+").match(line);
if (match.hasMatch() && match.captured(0) == line)
return GenericToolMarker;
return None; return None;
} }

View File

@@ -319,4 +319,19 @@ void Ndk::setAsNdkBundle(const bool isBundle)
m_isBundle = isBundle; m_isBundle = isBundle;
} }
GenericSdkPackage::GenericSdkPackage(QVersionNumber revision, QString sdkStylePathStr, QObject *parent) :
AndroidSdkPackage(revision, sdkStylePathStr, parent)
{
}
bool GenericSdkPackage::isValid() const
{
return installedLocation().exists();
}
AndroidSdkPackage::PackageType GenericSdkPackage::type() const
{
return AndroidSdkPackage::GenericSdkPackage;
}
} // namespace Android } // namespace Android

View File

@@ -55,9 +55,10 @@ public:
EmulatorToolsPackage = 1 << 6, EmulatorToolsPackage = 1 << 6,
NDKPackage = 1 << 7, NDKPackage = 1 << 7,
ExtraToolsPackage = 1 << 8, ExtraToolsPackage = 1 << 8,
GenericSdkPackage = 1 << 9,
AnyValidType = SdkToolsPackage | BuildToolsPackage | PlatformToolsPackage | AnyValidType = SdkToolsPackage | BuildToolsPackage | PlatformToolsPackage |
SdkPlatformPackage | SystemImagePackage | EmulatorToolsPackage | NDKPackage | SdkPlatformPackage | SystemImagePackage | EmulatorToolsPackage | NDKPackage |
ExtraToolsPackage ExtraToolsPackage | GenericSdkPackage
}; };
enum PackageState { enum PackageState {
@@ -221,6 +222,18 @@ public:
ExtraTools(QVersionNumber revision, QString sdkStylePathStr, QObject *parent = nullptr); ExtraTools(QVersionNumber revision, QString sdkStylePathStr, QObject *parent = nullptr);
// AndroidSdkPackage Overrides // AndroidSdkPackage Overrides
public:
bool isValid() const override;
PackageType type() const override;
};
class GenericSdkPackage : public AndroidSdkPackage
{
public:
GenericSdkPackage(QVersionNumber revision, QString sdkStylePathStr, QObject *parent = nullptr);
// AndroidSdkPackage Overrides
public:
bool isValid() const override; bool isValid() const override;
PackageType type() const override; PackageType type() const override;
}; };