MCPcopy Create free account
hub / github.com/KDE/kdevelop / parseCodeModel

Function parseCodeModel

plugins/cmake/cmakefileapi.cpp:234–270  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

232}
233
234static CMakeProjectData parseCodeModel(const QJsonObject& codeModel, const QDir& replyDir,
235 StringInterner&stringInterner, PathInterner& sourcePathInterner, PathInterner& buildPathInterner)
236{
237 CMakeProjectData ret;
238 // for now, we only use the first available configuration and don't support multi configurations
239 const auto configuration = codeModel.value(QLatin1String("configurations")).toArray().at(0).toObject();
240 const auto targets = configuration.value(QLatin1String("targets")).toArray();
241 const auto directories = configuration.value(QLatin1String("directories")).toArray();
242 for (const auto& directoryValue : directories) {
243 const auto directory = directoryValue.toObject();
244 if (!directory.contains(QLatin1String("targetIndexes"))) {
245 continue;
246 }
247 const auto dirSourcePath = sourcePathInterner.internPath(directory.value(QLatin1String("source")).toString());
248 auto& dirTargets = ret.targets[dirSourcePath];
249 for (const auto& targetIndex : directory.value(QLatin1String("targetIndexes")).toArray()) {
250 const auto jsonTarget = targets.at(targetIndex.toInt(-1)).toObject();
251 if (jsonTarget.isEmpty()) {
252 continue;
253 }
254 const auto targetFile = jsonTarget.value(QLatin1String("jsonFile")).toString();
255 const auto target = parseTarget(parseFile(replyDir.absoluteFilePath(targetFile)),
256 stringInterner, sourcePathInterner, buildPathInterner,
257 ret.compilationData);
258 if (target.name.isEmpty()) {
259 continue;
260 }
261 dirTargets.append(target);
262 }
263 }
264 ret.compilationData.isValid = !codeModel.isEmpty();
265 ret.compilationData.rebuildFileForFolderMapping();
266 if (!ret.compilationData.isValid) {
267 qCWarning(CMAKE) << "failed to parse code model" << codeModel;
268 }
269 return ret;
270}
271
272/// @return source CMake files (e.g. CMakeLists.txt, *.cmake), modifying which should trigger reloading the project.
273static QSet<Path> parseCMakeFiles(const QJsonObject& cmakeFiles, PathInterner& sourcePathInterner,

Callers 1

parseReplyIndexFileFunction · 0.85

Calls 11

parseTargetFunction · 0.85
parseFileFunction · 0.85
internPathMethod · 0.80
toIntMethod · 0.80
atMethod · 0.45
valueMethod · 0.45
containsMethod · 0.45
toStringMethod · 0.45
isEmptyMethod · 0.45
appendMethod · 0.45

Tested by

no test coverage detected