diff --git a/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp b/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp index 95e438de6bf..13c99c5bfb4 100644 --- a/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp +++ b/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp @@ -28,6 +28,8 @@ #include "fileapiparser.h" #include "projecttreehelper.h" +#include + #include #include #include @@ -329,6 +331,11 @@ RawProjectParts generateRawProjectParts(const PreprocessedData &input, for (const TargetDetails &t : input.targetDetails) { QDir sourceDir(sourceDirectory.toString()); + CppEditor::ProjectFileCategorizer + categorizer({}, transform(t.sources, [&sourceDir](const SourceInfo &si) { + return sourceDir.absoluteFilePath(si.path); + })); + bool needPostfix = t.compileGroups.size() > 1; int count = 1; for (const CompileInfo &ci : t.compileGroups) { @@ -375,8 +382,14 @@ RawProjectParts generateRawProjectParts(const PreprocessedData &input, return si.path.endsWith(ending); }).path); - rpp.setFiles(transform(ci.sources, [&t, &sourceDir](const int si) { - return sourceDir.absoluteFilePath(t.sources[static_cast(si)].path); + CppEditor::ProjectFiles sources; + if (ci.language == "C") + sources = categorizer.cSources(); + else if (ci.language == "CXX") + sources = categorizer.cxxSources(); + + rpp.setFiles(transform(sources, [](const CppEditor::ProjectFile &pf) { + return pf.path; })); if (!precompiled_header.isEmpty()) { if (precompiled_header.toFileInfo().isRelative()) { diff --git a/src/plugins/cppeditor/cppprojectfilecategorizer.h b/src/plugins/cppeditor/cppprojectfilecategorizer.h index 23650cb9342..03ab3177803 100644 --- a/src/plugins/cppeditor/cppprojectfilecategorizer.h +++ b/src/plugins/cppeditor/cppprojectfilecategorizer.h @@ -34,7 +34,7 @@ namespace CppEditor { -class ProjectFileCategorizer +class CPPEDITOR_EXPORT ProjectFileCategorizer { public: using FileIsActive = ProjectExplorer::RawProjectPart::FileIsActive;