diff --git a/src/plugins/clangtools/clangtool.cpp b/src/plugins/clangtools/clangtool.cpp index 2825c643e4d..c8de027bce6 100644 --- a/src/plugins/clangtools/clangtool.cpp +++ b/src/plugins/clangtools/clangtool.cpp @@ -340,9 +340,12 @@ static FileInfos sortedFileInfos(const QVector if (file.path == CppEditor::CppModelManager::configurationFileName()) continue; - if (file.active && CppEditor::ProjectFile::isSource(file.kind)) { + if (file.active + && (CppEditor::ProjectFile::isSource(file.kind) + || CppEditor::ProjectFile::isHeader(file.kind))) { + ProjectFile::Kind sourceKind = CppEditor::ProjectFile::sourceKind(file.kind); fileInfos.emplace_back(Utils::FilePath::fromString(file.path), - file.kind, + sourceKind, projectPart); } } diff --git a/src/plugins/clangtools/documentclangtoolrunner.cpp b/src/plugins/clangtools/documentclangtoolrunner.cpp index 5ec59339201..d62b882d4a2 100644 --- a/src/plugins/clangtools/documentclangtoolrunner.cpp +++ b/src/plugins/clangtools/documentclangtoolrunner.cpp @@ -160,11 +160,12 @@ static FileInfo getFileInfo(const FilePath &file, Project *project) if (!projectFile.active) continue; // found the best candidate, early return + ProjectFile::Kind sourceKind = ProjectFile::sourceKind(projectFile.kind); if (projectPart->buildTargetType != BuildTargetType::Unknown) - return FileInfo(projectFilePath, projectFile.kind, projectPart); + return FileInfo(projectFilePath, sourceKind, projectPart); // found something but keep looking for better candidates if (candidate.projectPart.isNull()) - candidate = FileInfo(projectFilePath, projectFile.kind, projectPart); + candidate = FileInfo(projectFilePath, sourceKind, projectPart); } } diff --git a/src/plugins/cppeditor/cppprojectfile.cpp b/src/plugins/cppeditor/cppprojectfile.cpp index 382a0b7c056..fa3bf8c0238 100644 --- a/src/plugins/cppeditor/cppprojectfile.cpp +++ b/src/plugins/cppeditor/cppprojectfile.cpp @@ -87,6 +87,37 @@ bool ProjectFile::isAmbiguousHeader(const QString &filePath) return filePath.endsWith(".h"); } +ProjectFile::Kind ProjectFile::sourceForHeaderKind(ProjectFile::Kind kind) +{ + ProjectFile::Kind sourceKind; + switch (kind) { + case ProjectFile::CHeader: + sourceKind = ProjectFile::CSource; + break; + case ProjectFile::ObjCHeader: + sourceKind = ProjectFile::ObjCSource; + break; + case ProjectFile::ObjCXXHeader: + sourceKind = ProjectFile::ObjCXXSource; + break; + case ProjectFile::Unsupported: // no file extension, e.g. stl headers + case ProjectFile::AmbiguousHeader: + case ProjectFile::CXXHeader: + default: + sourceKind = ProjectFile::CXXSource; + } + + return sourceKind; +} + +ProjectFile::Kind ProjectFile::sourceKind(Kind kind) +{ + ProjectFile::Kind sourceKind = kind; + if (ProjectFile::isHeader(kind)) + sourceKind = ProjectFile::sourceForHeaderKind(kind); + return sourceKind; +} + bool ProjectFile::isHeader(ProjectFile::Kind kind) { switch (kind) { diff --git a/src/plugins/cppeditor/cppprojectfile.h b/src/plugins/cppeditor/cppprojectfile.h index f86c668d5ff..078b93cce9e 100644 --- a/src/plugins/cppeditor/cppprojectfile.h +++ b/src/plugins/cppeditor/cppprojectfile.h @@ -53,6 +53,9 @@ public: static Kind classifyByMimeType(const QString &mt); static Kind classify(const QString &filePath); + static Kind sourceForHeaderKind(Kind kind); + static Kind sourceKind(Kind kind); + static bool isSource(Kind kind); static bool isHeader(Kind kind); static bool isC(Kind kind);