Clang: Filter out "#pragma once in main file" warning for headers

This is a libclang bug and unfortunately there is no option to disable
this warning.

Change-Id: I12cdaa0155e7d94a70b8fccd8c9290835704e06b
Task-number: QTCREATORBUG-12067
Reviewed-by: Marco Bubke <marco.bubke@theqtcompany.com>
This commit is contained in:
Nikolai Kosjar
2015-07-29 15:06:24 +02:00
parent 9f2b5eac2d
commit 8ac76922d2

View File

@@ -33,6 +33,7 @@
#include "utils_p.h"
#include "cxraii.h"
#include <utils/mimetypes/mimedatabase.h>
#include <utils/qtcassert.h>
using namespace ClangCodeModel;
@@ -131,12 +132,23 @@ static void appendDiagnostic(const CXDiagnostic &diag,
}
}
static bool isBlackListedDiagnostic(const Utils::MimeType &mimeType, const QString &diagnostic)
{
static QString pragmaOnceInMainFile = QLatin1String("#pragma once in main file");
return diagnostic == pragmaOnceInMainFile
&& mimeType.inherits(QLatin1String("text/x-chdr"));
}
QList<Diagnostic> SemanticMarker::diagnostics() const
{
QList<Diagnostic> diagnostics;
if (!m_unit || !m_unit->isLoaded())
return diagnostics;
Utils::MimeDatabase mimeDatabase;
const Utils::MimeType mimeType = mimeDatabase.mimeTypeForFile(fileName());
const unsigned diagCount = m_unit->getNumDiagnostics();
for (unsigned i = 0; i < diagCount; ++i) {
ScopedCXDiagnostic diag(m_unit->getDiagnostic(i));
@@ -148,6 +160,9 @@ QList<Diagnostic> SemanticMarker::diagnostics() const
CXSourceLocation cxLocation = clang_getDiagnosticLocation(diag);
QString spelling = Internal::getQString(clang_getDiagnosticSpelling(diag));
if (isBlackListedDiagnostic(mimeType, spelling))
continue;
// Attach messages with Diagnostic::Note severity
ScopedCXDiagnosticSet cxChildren(clang_getChildDiagnostics(diag));
const unsigned numChildren = clang_getNumDiagnosticsInSet(cxChildren);