@@ -106,6 +106,28 @@ static QString loadUndefine(const QXmlStreamReader &xmlReader)
106106 return xmlReader.attributes ().value (" name" ).toString ();
107107}
108108
109+ static QString loadSmartPointer (const QXmlStreamReader &xmlReader)
110+ {
111+ return xmlReader.attributes ().value (" class-name" ).toString ();
112+ }
113+
114+ static CppcheckLibraryData::TypeChecks loadTypeChecks (QXmlStreamReader &xmlReader)
115+ {
116+ CppcheckLibraryData::TypeChecks typeChecks;
117+ QXmlStreamReader::TokenType type;
118+ while ((type = xmlReader.readNext ()) != QXmlStreamReader::EndElement ||
119+ xmlReader.name ().toString () != " type-checks" ) {
120+ if (type != QXmlStreamReader::StartElement)
121+ continue ;
122+ const QString elementName = xmlReader.name ().toString ();
123+ if (elementName == " suppress" || elementName == " check" ) {
124+ QPair<QString, QString> entry (elementName, xmlReader.readElementText ());
125+ typeChecks.append (entry);
126+ }
127+ }
128+ return typeChecks;
129+ }
130+
109131static CppcheckLibraryData::Function::Arg loadFunctionArg (QXmlStreamReader &xmlReader)
110132{
111133 CppcheckLibraryData::Function::Arg arg;
@@ -279,6 +301,10 @@ QString CppcheckLibraryData::open(QIODevice &file)
279301 memoryresource.append (loadMemoryResource (xmlReader));
280302 else if (elementName == " podtype" )
281303 podtypes.append (loadPodType (xmlReader));
304+ else if (elementName == " smart-pointer" )
305+ smartPointers.append (loadSmartPointer (xmlReader));
306+ else if (elementName == " type-checks" )
307+ typeChecks.append (loadTypeChecks (xmlReader));
282308 else
283309 unhandledElement (xmlReader);
284310 } catch (std::runtime_error &e) {
@@ -501,6 +527,24 @@ static void writeMemoryResource(QXmlStreamWriter &xmlWriter, const CppcheckLibra
501527 xmlWriter.writeEndElement ();
502528}
503529
530+ static void writeTypeChecks (QXmlStreamWriter &xmlWriter, const CppcheckLibraryData::TypeChecks &typeChecks)
531+ {
532+ QPair<QString, QString> check;
533+ xmlWriter.writeStartElement (" type-checks" );
534+ if (!typeChecks.isEmpty ()) {
535+ xmlWriter.writeStartElement (" unusedvar" );
536+ }
537+ foreach (check, typeChecks) {
538+ xmlWriter.writeStartElement (check.first );
539+ xmlWriter.writeCharacters (check.second );
540+ xmlWriter.writeEndElement ();
541+ }
542+ if (!typeChecks.isEmpty ()) {
543+ xmlWriter.writeEndElement ();
544+ }
545+ xmlWriter.writeEndElement ();
546+ }
547+
504548QString CppcheckLibraryData::toString () const
505549{
506550 QString outputString;
@@ -548,6 +592,16 @@ QString CppcheckLibraryData::toString() const
548592 xmlWriter.writeEndElement ();
549593 }
550594
595+ foreach (const TypeChecks check, typeChecks) {
596+ writeTypeChecks (xmlWriter, check);
597+ }
598+
599+ foreach (const QString &smartPtr, smartPointers) {
600+ xmlWriter.writeStartElement (" smart-pointer" );
601+ xmlWriter.writeAttribute (" class-name" , smartPtr);
602+ xmlWriter.writeEndElement ();
603+ }
604+
551605 xmlWriter.writeEndElement ();
552606
553607 return outputString;
0 commit comments