forked from qt-creator/qt-creator
QbsProjectManager: Make generated sources known to code model
The code model should know about e.g. ui headers belonging to the project. Change-Id: I89acb679f22fc050b3ac3b3e77fc64154ad05c20 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -860,13 +860,15 @@ static RawProjectPart generateProjectPart(
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
const QString productName = product.value("full-display-name").toString();
|
const QString productName = product.value("full-display-name").toString();
|
||||||
const QString groupName = group.value("name").toString();
|
const QString groupName = group.isEmpty() ? productName + "_generated_qtc_internal"
|
||||||
|
: group.value("name").toString();
|
||||||
|
const QJsonObject &groupOrProduct = group.isEmpty() ? product : group;
|
||||||
RawProjectPart rpp;
|
RawProjectPart rpp;
|
||||||
rpp.setQtVersion(qtVersion);
|
rpp.setQtVersion(qtVersion);
|
||||||
QJsonObject props = group.value("module-properties").toObject();
|
QJsonObject props = group.value("module-properties").toObject();
|
||||||
if (props.isEmpty())
|
if (props.isEmpty())
|
||||||
props = product.value("module-properties").toObject();
|
props = product.value("module-properties").toObject();
|
||||||
rpp.setCallGroupId(groupLocationToCallGroupId(group.value("location").toObject()));
|
rpp.setCallGroupId(groupLocationToCallGroupId(groupOrProduct.value("location").toObject()));
|
||||||
|
|
||||||
QStringList cFlags;
|
QStringList cFlags;
|
||||||
QStringList cxxFlags;
|
QStringList cxxFlags;
|
||||||
@@ -879,24 +881,24 @@ static RawProjectPart generateProjectPart(
|
|||||||
rpp.setMacros(transform<QVector>(defines,
|
rpp.setMacros(transform<QVector>(defines,
|
||||||
[](const QString &s) { return Macro::fromKeyValue(s); }));
|
[](const QString &s) { return Macro::fromKeyValue(s); }));
|
||||||
|
|
||||||
ProjectExplorer::HeaderPaths grpHeaderPaths;
|
ProjectExplorer::HeaderPaths headerPaths;
|
||||||
QStringList list = arrayToStringList(props.value("cpp.includePaths"));
|
QStringList list = arrayToStringList(props.value("cpp.includePaths"));
|
||||||
list.removeDuplicates();
|
list.removeDuplicates();
|
||||||
for (const QString &p : std::as_const(list))
|
for (const QString &p : std::as_const(list))
|
||||||
grpHeaderPaths += HeaderPath::makeUser(FilePath::fromUserInput(p));
|
headerPaths += HeaderPath::makeUser(FilePath::fromUserInput(p));
|
||||||
list = arrayToStringList(props.value("cpp.distributionIncludePaths"))
|
list = arrayToStringList(props.value("cpp.distributionIncludePaths"))
|
||||||
+ arrayToStringList(props.value("cpp.systemIncludePaths"));
|
+ arrayToStringList(props.value("cpp.systemIncludePaths"));
|
||||||
list.removeDuplicates();
|
list.removeDuplicates();
|
||||||
for (const QString &p : std::as_const(list))
|
for (const QString &p : std::as_const(list))
|
||||||
grpHeaderPaths += HeaderPath::makeSystem(FilePath::fromUserInput(p));
|
headerPaths += HeaderPath::makeSystem(FilePath::fromUserInput(p));
|
||||||
list = arrayToStringList(props.value("cpp.frameworkPaths"));
|
list = arrayToStringList(props.value("cpp.frameworkPaths"));
|
||||||
list.append(arrayToStringList(props.value("cpp.systemFrameworkPaths")));
|
list.append(arrayToStringList(props.value("cpp.systemFrameworkPaths")));
|
||||||
list.removeDuplicates();
|
list.removeDuplicates();
|
||||||
for (const QString &p : std::as_const(list))
|
for (const QString &p : std::as_const(list))
|
||||||
grpHeaderPaths += HeaderPath::makeFramework(FilePath::fromUserInput(p));
|
headerPaths += HeaderPath::makeFramework(FilePath::fromUserInput(p));
|
||||||
rpp.setHeaderPaths(grpHeaderPaths);
|
rpp.setHeaderPaths(headerPaths);
|
||||||
rpp.setDisplayName(groupName);
|
rpp.setDisplayName(groupName);
|
||||||
const QJsonObject location = group.value("location").toObject();
|
const QJsonObject location = groupOrProduct.value("location").toObject();
|
||||||
rpp.setProjectFileLocation(location.value("file-path").toString(),
|
rpp.setProjectFileLocation(location.value("file-path").toString(),
|
||||||
location.value("line").toInt(),
|
location.value("line").toInt(),
|
||||||
location.value("column").toInt());
|
location.value("column").toInt());
|
||||||
@@ -912,7 +914,7 @@ static RawProjectPart generateProjectPart(
|
|||||||
rpp.setBuildTargetType(BuildTargetType::Unknown);
|
rpp.setBuildTargetType(BuildTargetType::Unknown);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rpp.setSelectedForBuilding(group.value("is-enabled").toBool());
|
rpp.setSelectedForBuilding(groupOrProduct.value("is-enabled").toBool());
|
||||||
|
|
||||||
QHash<QString, QJsonObject> filePathToSourceArtifact;
|
QHash<QString, QJsonObject> filePathToSourceArtifact;
|
||||||
bool hasCFiles = false;
|
bool hasCFiles = false;
|
||||||
@@ -933,7 +935,10 @@ static RawProjectPart generateProjectPart(
|
|||||||
hasObjcxxFiles = true;
|
hasObjcxxFiles = true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
forAllArtifacts(group, artifactWorker);
|
if (!group.isEmpty())
|
||||||
|
forAllArtifacts(group, artifactWorker);
|
||||||
|
else
|
||||||
|
forAllArtifacts(product, ArtifactType::Generated, artifactWorker);
|
||||||
|
|
||||||
QSet<QString> pchFiles;
|
QSet<QString> pchFiles;
|
||||||
if (hasCFiles && props.value("cpp.useCPrecompiledHeader").toBool()
|
if (hasCFiles && props.value("cpp.useCPrecompiledHeader").toBool()
|
||||||
@@ -998,10 +1003,18 @@ static RawProjectParts generateProjectParts(
|
|||||||
? Utils::QtMajorVersion::None
|
? Utils::QtMajorVersion::None
|
||||||
: qtVersion;
|
: qtVersion;
|
||||||
const QJsonArray groups = prd.value("groups").toArray();
|
const QJsonArray groups = prd.value("groups").toArray();
|
||||||
|
const auto appendIfNotEmpty = [&rpps](const RawProjectPart &rpp) {
|
||||||
|
if (!rpp.files.isEmpty())
|
||||||
|
rpps << rpp;
|
||||||
|
};
|
||||||
for (const QJsonValue &g : groups) {
|
for (const QJsonValue &g : groups) {
|
||||||
rpps.append(generateProjectPart(prd, g.toObject(), cToolChain, cxxToolChain,
|
appendIfNotEmpty(generateProjectPart(
|
||||||
qtVersionForPart, cPch, cxxPch, objcPch, objcxxPch));
|
prd, g.toObject(), cToolChain, cxxToolChain, qtVersionForPart,
|
||||||
|
cPch, cxxPch, objcPch, objcxxPch));
|
||||||
}
|
}
|
||||||
|
appendIfNotEmpty(generateProjectPart(
|
||||||
|
prd, {}, cToolChain, cxxToolChain, qtVersionForPart,
|
||||||
|
cPch, cxxPch, objcPch, objcxxPch));
|
||||||
});
|
});
|
||||||
return rpps;
|
return rpps;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user