diff --git a/addons/cppcheckdata.py b/addons/cppcheckdata.py index 58f823b91..9843f20b6 100755 --- a/addons/cppcheckdata.py +++ b/addons/cppcheckdata.py @@ -316,11 +316,18 @@ class Function: tokenDef = None tokenDefId = None name = None + isVirtual = None + isImplicitlyVirtual = None def __init__(self, element): self.Id = element.get('id') self.tokenDefId = element.get('tokenDef') self.name = element.get('name') + isVirtual = element.get('isVirtual') + self.isVirtual = (isVirtual and isVirtual == 'true') + isImplicitlyVirtual = element.get('isImplicitlyVirtual') + self.isImplicitlyVirtual = (isImplicitlyVirtual and isImplicitlyVirtual == 'true') + self.argument = {} self.argumentId = {} for arg in element: diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index edcbc293a..a69f0e6c9 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -3005,6 +3005,12 @@ void SymbolDatabase::printXml(std::ostream &out) const out << " " << std::endl; for (std::list::const_iterator function = scope->functionList.begin(); function != scope->functionList.end(); ++function) { out << " tokenDef << "\" name=\"" << ErrorLogger::toxml(function->name()) << '\"'; + if (function->nestedIn->definedType) { + if (function->isVirtual()) + out << " isVirtual=\"true\""; + else if (function->isImplicitlyVirtual()) + out << " isImplicitlyVirtual=\"true\""; + } if (function->argCount() == 0U) out << "/>" << std::endl; else {