From 34fec1cad23e2c6fe8ecf907419b231817e27564 Mon Sep 17 00:00:00 2001 From: Ivan Donchevskii Date: Wed, 21 Feb 2018 09:02:15 +0100 Subject: [PATCH] Clang: Make Q_PROPERTY replacement simpler The infrastructure around Q_PROPERTY extraction allows to make it static assert and still find it's parent. This way makes it easier for Clang to parse and does not provide unexisting functions for class. Change-Id: I1c40550c72d214c2448169094a46c6f793132f23 Reviewed-by: Marco Bubke --- .../cplusplus/wrappedQtHeaders/QtCore/qobjectdefs.h | 10 ++-------- src/tools/clangbackend/source/fulltokeninfo.cpp | 4 ++-- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/share/qtcreator/cplusplus/wrappedQtHeaders/QtCore/qobjectdefs.h b/share/qtcreator/cplusplus/wrappedQtHeaders/QtCore/qobjectdefs.h index 001eea3cb43..aad3de8f27d 100644 --- a/share/qtcreator/cplusplus/wrappedQtHeaders/QtCore/qobjectdefs.h +++ b/share/qtcreator/cplusplus/wrappedQtHeaders/QtCore/qobjectdefs.h @@ -60,14 +60,8 @@ # define Q_SLOT __attribute__((annotate("qt_slot"))) #endif -template -using QPropertyMagicString = std::integer_sequence; - -template -constexpr QPropertyMagicString operator""_qpropstr() { return { }; } - -// Create unique AST node for the property. -#define Q_PROPERTY(arg) void QPropertyMagicFunction(decltype(#arg ## _qpropstr)); +// static_assert can be found as a class child but does not add extra AST nodes for copmpletion +#define Q_PROPERTY(arg) static_assert("Q_PROPERTY", #arg); #pragma clang diagnostic pop diff --git a/src/tools/clangbackend/source/fulltokeninfo.cpp b/src/tools/clangbackend/source/fulltokeninfo.cpp index f5e9fa78512..a8e4a41fc8e 100644 --- a/src/tools/clangbackend/source/fulltokeninfo.cpp +++ b/src/tools/clangbackend/source/fulltokeninfo.cpp @@ -86,7 +86,7 @@ static Utf8String propertyParentSpelling(CXTranslationUnit cxTranslationUnit, tuCursor.visit([&filePath, line, column, &parentSpelling](CXCursor cxCursor, CXCursor parent) { const CXCursorKind kind = clang_getCursorKind(cxCursor); if (kind == CXCursor_Namespace || kind == CXCursor_StructDecl - || kind == CXCursor_ClassDecl || kind == CXCursor_CXXMethod) { + || kind == CXCursor_ClassDecl || kind == CXCursor_StaticAssert) { Cursor cursor(cxCursor); const SourceRange range = cursor.sourceRange(); if (range.start().filePath() != filePath) @@ -96,7 +96,7 @@ static Utf8String propertyParentSpelling(CXTranslationUnit cxTranslationUnit, || kind == CXCursor_ClassDecl) { return CXChildVisit_Recurse; } - // CXCursor_CXXMethod case. This is Q_PROPERTY_MAGIC_FUNCTION + // CXCursor_StaticAssert case. This is Q_PROPERTY static_assert parentSpelling = Cursor(parent).type().spelling(); return CXChildVisit_Break; }