aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2017-12-01 11:05:28 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2017-12-01 13:54:29 +0000
commit4462db523fd8afc4177ad58caf1d5a955373bad5 (patch)
tree6ab2dae1247041d1dbcb1e05ac5de5eed3270082
parentd9aefad1942239e587698d1fa9213a881f6d19be (diff)
shiboken/Clang parser: Add information about override/final
Change-Id: I0f1bad0567ae928d4117e7785e7788d9efd551c2 Reviewed-by: Christian Tismer <tismer@stackless.com>
-rw-r--r--sources/shiboken2/ApiExtractor/clangparser/clangbuilder.cpp10
-rw-r--r--sources/shiboken2/ApiExtractor/parser/codemodel.cpp29
-rw-r--r--sources/shiboken2/ApiExtractor/parser/codemodel.h12
3 files changed, 51 insertions, 0 deletions
diff --git a/sources/shiboken2/ApiExtractor/clangparser/clangbuilder.cpp b/sources/shiboken2/ApiExtractor/clangparser/clangbuilder.cpp
index 73b1638ef..171adc2d6 100644
--- a/sources/shiboken2/ApiExtractor/clangparser/clangbuilder.cpp
+++ b/sources/shiboken2/ApiExtractor/clangparser/clangbuilder.cpp
@@ -773,6 +773,16 @@ BaseVisitor::StartTokenResult Builder::startToken(const CXCursor &cursor)
d->qualifyTypeDef(cursor, d->m_currentField);
}
break;
+ case CXCursor_CXXFinalAttr:
+ if (!d->m_currentFunction.isNull())
+ d->m_currentFunction->setFinal(true);
+ else if (!d->m_currentClass.isNull())
+ d->m_currentClass->setFinal(true);
+ break;
+ case CXCursor_CXXOverrideAttr:
+ if (!d->m_currentFunction.isNull())
+ d->m_currentFunction->setOverride(true);
+ break;
default:
break;
}
diff --git a/sources/shiboken2/ApiExtractor/parser/codemodel.cpp b/sources/shiboken2/ApiExtractor/parser/codemodel.cpp
index 7c3bbbede..a35ca314b 100644
--- a/sources/shiboken2/ApiExtractor/parser/codemodel.cpp
+++ b/sources/shiboken2/ApiExtractor/parser/codemodel.cpp
@@ -576,6 +576,9 @@ void _ClassModelItem::formatDebug(QDebug &d) const
{
_CodeModelItem::formatDebug(d);
if (!m_baseClasses.isEmpty()) {
+ if (m_final)
+ d << " [final]";
+ d << ", inherits=";
d << ", inherits=";
for (int i = 0, size = m_baseClasses.size(); i < size; ++i) {
if (i)
@@ -886,6 +889,26 @@ bool _FunctionModelItem::isInline() const
return m_isInline;
}
+bool _FunctionModelItem::isOverride() const
+{
+ return m_isOverride;
+}
+
+void _FunctionModelItem::setOverride(bool o)
+{
+ m_isOverride = o;
+}
+
+bool _FunctionModelItem::isFinal() const
+{
+ return m_isFinal;
+}
+
+void _FunctionModelItem::setFinal(bool f)
+{
+ m_isFinal = f;
+}
+
void _FunctionModelItem::setInline(bool isInline)
{
m_isInline = isInline;
@@ -929,6 +952,12 @@ void _FunctionModelItem::formatDebug(QDebug &d) const
d << ", type=" << m_functionType;
if (m_isInline)
d << " [inline]";
+ if (m_isVirtual)
+ d << " [virtual]";
+ if (m_isOverride)
+ d << " [override]";
+ if (m_isFinal)
+ d << " [final]";
if (m_isAbstract)
d << " [abstract]";
if (m_isExplicit)
diff --git a/sources/shiboken2/ApiExtractor/parser/codemodel.h b/sources/shiboken2/ApiExtractor/parser/codemodel.h
index fd17b442c..2aaea1f78 100644
--- a/sources/shiboken2/ApiExtractor/parser/codemodel.h
+++ b/sources/shiboken2/ApiExtractor/parser/codemodel.h
@@ -376,6 +376,9 @@ public:
void addPropertyDeclaration(const QString &propertyDeclaration);
QStringList propertyDeclarations() const { return m_propertyDeclarations; }
+ bool isFinal() const { return m_final; }
+ void setFinal(bool f) { m_final = f; }
+
#ifndef QT_NO_DEBUG_STREAM
void formatDebug(QDebug &d) const override;
#endif
@@ -386,6 +389,7 @@ private:
CodeModel::ClassType m_classType;
QStringList m_propertyDeclarations;
+ bool m_final = false;
};
class _NamespaceModelItem: public _ScopeModelItem
@@ -545,6 +549,12 @@ public:
bool isVirtual() const;
void setVirtual(bool isVirtual);
+ bool isOverride() const;
+ void setOverride(bool o);
+
+ bool isFinal() const;
+ void setFinal(bool f);
+
bool isInline() const;
void setInline(bool isInline);
@@ -572,6 +582,8 @@ private:
union {
struct {
uint m_isVirtual: 1;
+ uint m_isOverride: 1;
+ uint m_isFinal: 1;
uint m_isInline: 1;
uint m_isAbstract: 1;
uint m_isExplicit: 1;